@etherisc/gif-next 0.0.2-b244df3-779 → 0.0.2-b38343e-249

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 (309) hide show
  1. package/README.md +73 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +853 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +887 -242
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +160 -100
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +791 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +655 -43
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +654 -5
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +600 -217
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +543 -152
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  33. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  39. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  40. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
  41. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +881 -121
  44. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  45. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +168 -166
  46. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  47. package/artifacts/contracts/instance/Instance.sol/Instance.json +791 -438
  48. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +118 -173
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +61 -97
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +390 -362
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +299 -130
  56. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  57. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
  58. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +188 -168
  60. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +2 -2
  64. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
  66. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +24 -13
  68. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  74. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +858 -0
  76. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +657 -0
  78. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +408 -246
  80. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +302 -81
  82. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +743 -0
  84. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  86. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +443 -192
  88. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +322 -73
  90. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +200 -204
  92. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +170 -217
  94. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  95. package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → instance/service/IClaimService.sol/IClaimService.json} +154 -124
  96. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +197 -163
  98. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +138 -230
  100. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +23 -186
  102. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +29 -192
  104. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +392 -267
  106. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +339 -86
  108. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +216 -218
  110. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  111. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +299 -78
  112. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  113. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +217 -219
  114. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +305 -76
  116. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  118. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +225 -133
  120. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  121. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +149 -217
  122. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  123. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  124. package/artifacts/contracts/registry/Registry.sol/Registry.json +238 -235
  125. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  126. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  127. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  128. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +195 -322
  129. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  130. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
  131. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  132. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  133. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  134. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  135. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  136. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  137. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  138. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  140. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  141. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  142. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  144. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  145. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +48 -0
  146. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  147. package/artifacts/contracts/shared/IService.sol/IService.json +23 -186
  148. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  149. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  150. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  151. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  152. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  153. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  154. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  155. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  156. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  157. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  158. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  159. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  160. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  161. package/artifacts/contracts/shared/Service.sol/Service.json +119 -173
  162. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  163. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  164. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  165. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  166. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  167. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  168. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  170. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  172. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  173. package/artifacts/contracts/test/TestService.sol/TestService.json +140 -230
  174. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  175. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  176. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  177. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  178. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  179. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  180. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  186. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  189. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  191. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  192. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  193. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  196. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  198. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  200. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  202. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  204. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  208. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  210. package/contracts/components/Component.sol +242 -0
  211. package/contracts/components/Distribution.sol +209 -64
  212. package/contracts/components/IComponent.sol +55 -0
  213. package/contracts/components/IDistributionComponent.sol +59 -3
  214. package/contracts/components/IPoolComponent.sol +50 -29
  215. package/contracts/components/IProductComponent.sol +7 -3
  216. package/contracts/components/Pool.sol +135 -152
  217. package/contracts/components/Product.sol +114 -121
  218. package/contracts/instance/BundleManager.sol +7 -11
  219. package/contracts/instance/IInstance.sol +42 -10
  220. package/contracts/instance/IInstanceService.sol +27 -2
  221. package/contracts/instance/Instance.sol +84 -69
  222. package/contracts/instance/InstanceAccessManager.sol +36 -41
  223. package/contracts/instance/InstanceReader.sol +3 -25
  224. package/contracts/instance/InstanceService.sol +271 -79
  225. package/contracts/instance/InstanceServiceManager.sol +6 -9
  226. package/contracts/instance/ObjectManager.sol +7 -24
  227. package/contracts/instance/base/ComponentService.sol +134 -0
  228. package/contracts/instance/module/IAccess.sol +4 -5
  229. package/contracts/instance/module/IPolicy.sol +4 -2
  230. package/contracts/instance/module/ISetup.sol +5 -4
  231. package/contracts/instance/service/ApplicationService.sol +268 -0
  232. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  233. package/contracts/instance/service/BundleService.sol +52 -14
  234. package/contracts/instance/service/BundleServiceManager.sol +6 -9
  235. package/contracts/instance/service/ClaimService.sol +151 -0
  236. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  237. package/contracts/instance/service/DistributionService.sol +208 -49
  238. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  239. package/contracts/instance/service/IApplicationService.sol +82 -0
  240. package/contracts/instance/service/IBundleService.sol +12 -3
  241. package/contracts/instance/service/IClaimService.sol +61 -0
  242. package/contracts/instance/service/IDistributionService.sol +53 -0
  243. package/contracts/instance/service/IPolicyService.sol +48 -46
  244. package/contracts/instance/service/PolicyService.sol +156 -190
  245. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  246. package/contracts/instance/service/PoolService.sol +27 -42
  247. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  248. package/contracts/instance/service/ProductService.sol +100 -40
  249. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  250. package/contracts/registry/ChainNft.sol +1 -1
  251. package/contracts/registry/IRegistry.sol +37 -19
  252. package/contracts/registry/IRegistryService.sol +30 -13
  253. package/contracts/registry/Registry.sol +233 -217
  254. package/contracts/registry/RegistryAccessManager.sol +216 -0
  255. package/contracts/registry/RegistryService.sol +96 -171
  256. package/contracts/registry/RegistryServiceManager.sol +21 -39
  257. package/contracts/registry/ReleaseManager.sol +322 -0
  258. package/contracts/registry/TokenRegistry.sol +22 -17
  259. package/contracts/shared/ERC165.sol +14 -12
  260. package/contracts/shared/INftOwnable.sol +11 -10
  261. package/contracts/shared/IPolicyHolder.sol +26 -0
  262. package/contracts/shared/IRegisterable.sol +4 -6
  263. package/contracts/shared/IRegistryLinked.sol +12 -0
  264. package/contracts/shared/IService.sol +2 -1
  265. package/contracts/shared/IVersionable.sol +4 -47
  266. package/contracts/shared/NftOwnable.sol +66 -80
  267. package/contracts/shared/PolicyHolder.sol +81 -0
  268. package/contracts/shared/ProxyManager.sol +100 -25
  269. package/contracts/shared/Registerable.sol +14 -30
  270. package/contracts/shared/RegistryLinked.sol +48 -0
  271. package/contracts/shared/Service.sol +25 -22
  272. package/contracts/shared/Versionable.sol +4 -92
  273. package/contracts/test/TestRegisterable.sol +1 -1
  274. package/contracts/test/TestService.sol +4 -3
  275. package/contracts/types/ClaimId.sol +52 -0
  276. package/contracts/types/DistributorType.sol +2 -2
  277. package/contracts/types/ObjectType.sol +9 -5
  278. package/contracts/types/PayoutId.sol +54 -0
  279. package/contracts/types/RoleId.sol +6 -8
  280. package/package.json +3 -3
  281. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  282. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  283. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  284. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  285. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  286. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  287. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  288. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  289. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  290. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  291. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  292. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  293. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  294. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  295. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  296. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  297. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  298. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  299. package/contracts/components/BaseComponent.sol +0 -132
  300. package/contracts/components/IBaseComponent.sol +0 -31
  301. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  302. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  303. package/contracts/instance/IInstanceBase.sol +0 -26
  304. package/contracts/instance/InstanceBase.sol +0 -41
  305. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  306. package/contracts/instance/base/IInstanceBase.sol +0 -23
  307. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  308. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  309. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -6,7 +6,7 @@ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
6
  import {PoolService} from "./PoolService.sol";
7
7
  import {Registry} from "../../registry/Registry.sol";
8
8
  import {RegistryService} from "../../registry/RegistryService.sol";
9
- import {VersionLib} from "../../types/Version.sol";
9
+ import {REGISTRY} from "../../types/ObjectType.sol";
10
10
 
11
11
  contract PoolServiceManager is ProxyManager {
12
12
 
@@ -16,7 +16,7 @@ contract PoolServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  PoolService poolSrv = new PoolService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -26,10 +26,10 @@ contract PoolServiceManager is ProxyManager {
26
26
 
27
27
  _poolService = PoolService(address(versionable));
28
28
 
29
- Registry registry = Registry(registryAddress);
30
- address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
31
- RegistryService registryService = RegistryService(registryServiceAddress);
32
- // TODO this must have a role or own nft to register service
29
+ // TODO `this` must have a role or own nft to register service
30
+ //Registry registry = Registry(registryAddress);
31
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _poolService.getMajorVersion());
32
+ //RegistryService registryService = RegistryService(registryServiceAddress);
33
33
  //registryService.registerService(_poolService);
34
34
 
35
35
  // TODO no nft to link yet
@@ -37,9 +37,6 @@ contract PoolServiceManager is ProxyManager {
37
37
  //_linkToNftOwnable(
38
38
  // address(registryAddress),
39
39
  // address(_poolService));
40
-
41
- // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
43
40
  }
44
41
 
45
42
  //--- view functions ----------------------------------------------------//
@@ -4,7 +4,7 @@ pragma solidity ^0.8.19;
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
5
  import {IProductComponent} from "../../components/IProductComponent.sol";
6
6
  import {Product} from "../../components/Product.sol";
7
- import {IBaseComponent} from "../../components/IBaseComponent.sol";
7
+ import {IComponent} from "../../components/IComponent.sol";
8
8
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
9
9
  import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
10
10
  import {IInstance} from "../IInstance.sol";
@@ -23,7 +23,7 @@ import {Versionable} from "../../shared/Versionable.sol";
23
23
  import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
24
24
  import {UFixed, UFixedLib} from "../../types/UFixed.sol";
25
25
  import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
26
- import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
26
+ import {ObjectType, PRODUCT, POOL, POLICY} from "../../types/ObjectType.sol";
27
27
  import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
28
28
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
29
29
  import {Fee, FeeLib} from "../../types/Fee.sol";
@@ -35,20 +35,15 @@ import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
35
35
 
36
36
  import {IService} from "../../shared/IService.sol";
37
37
  import {Service} from "../../shared/Service.sol";
38
- import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
38
+ import {ComponentService} from "../base/ComponentService.sol";
39
39
  import {IProductService} from "./IProductService.sol";
40
40
  import {InstanceReader} from "../InstanceReader.sol";
41
41
  import {IPoolService} from "./PoolService.sol";
42
- import {POOL_SERVICE_NAME} from "./PoolService.sol";
43
-
44
- string constant PRODUCT_SERVICE_NAME = "ProductService";
45
42
 
46
43
  // TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
47
- contract ProductService is ComponentServiceBase, IProductService {
44
+ contract ProductService is ComponentService, IProductService {
48
45
  using NftIdLib for NftId;
49
46
 
50
- string public constant NAME = "ProductService";
51
-
52
47
  IPoolService internal _poolService;
53
48
 
54
49
  event LogProductServiceSender(address sender);
@@ -65,52 +60,117 @@ contract ProductService is ComponentServiceBase, IProductService {
65
60
  address initialOwner;
66
61
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
67
62
 
68
- _initializeService(registryAddress, owner);
63
+ initializeService(registryAddress, owner);
69
64
 
70
- _poolService = IPoolService(_registry.getServiceAddress(POOL_SERVICE_NAME, getMajorVersion()));
65
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getMajorVersion()));
71
66
 
72
- _registerInterface(type(IProductService).interfaceId);
67
+ registerInterface(type(IProductService).interfaceId);
73
68
  }
74
69
 
75
70
 
76
- function getName() public pure override(IService, Service) returns(string memory name) {
77
- return NAME;
78
- }
79
-
80
71
  function register(address productAddress)
81
72
  external
82
73
  returns(NftId productNftId)
83
74
  {
84
- address productOwner = msg.sender;
85
- IBaseComponent product = IBaseComponent(productAddress);
86
-
87
- IRegistry.ObjectInfo memory info;
88
- bytes memory data;
89
- (info, data) = getRegistryService().registerProduct(product, productOwner);
90
-
91
- IInstance instance = _getInstance(info);
92
- bool hasRole = getInstanceService().hasRole(
93
- productOwner,
94
- PRODUCT_OWNER_ROLE(),
95
- address(instance));
96
-
97
- if(!hasRole) {
98
- revert ExpectedRoleMissing(PRODUCT_OWNER_ROLE(), productOwner);
99
- }
100
-
101
- productNftId = info.nftId;
102
- ISetup.ProductSetupInfo memory initialSetup = _decodeAndVerifyProductSetup(data);
103
- instance.createProductSetup(productNftId, initialSetup);
75
+ (
76
+ IComponent component,
77
+ address owner,
78
+ IInstance instance,
79
+ NftId instanceNftId
80
+ ) = _checkComponentForRegistration(
81
+ productAddress,
82
+ PRODUCT(),
83
+ PRODUCT_OWNER_ROLE());
84
+
85
+ IProductComponent product = IProductComponent(productAddress);
86
+ IRegistry.ObjectInfo memory productInfo = getRegistryService().registerProduct(product, owner);
87
+ productNftId = productInfo.nftId;
88
+ _createProductSetup(
89
+ instance,
90
+ product,
91
+ productNftId);
92
+ }
93
+
94
+
95
+ function _createProductSetup(
96
+ IInstance instance,
97
+ IProductComponent product,
98
+ NftId productNftId
99
+ )
100
+ internal
101
+ returns (string memory name)
102
+ {
103
+ // wire distribution and pool components to product component
104
+ ISetup.ProductSetupInfo memory setup = product.getSetupInfo();
105
+ IComponent distribution = IComponent(getRegistry().getObjectInfo(setup.distributionNftId).objectAddress);
106
+ IComponent pool = IComponent(getRegistry().getObjectInfo(setup.poolNftId).objectAddress);
107
+
108
+ distribution.setProductNftId(productNftId);
109
+ pool.setProductNftId(productNftId);
110
+ product.setProductNftId(productNftId);
111
+ product.linkToRegisteredNftId();
112
+
113
+ // create product setup in instance
114
+ instance.createProductSetup(productNftId, product.getSetupInfo());
115
+
116
+ // create target for instane access manager
117
+ getInstanceService().createGifTarget(
118
+ getRegistry().getNftId(address(instance)),
119
+ address(product),
120
+ product.getName());
121
+ getInstanceService().grantProductDefaultPermissions(instance.getNftId(), address(product), product.getName());
104
122
  }
105
123
 
106
- function _decodeAndVerifyProductSetup(bytes memory data) internal returns(ISetup.ProductSetupInfo memory setup)
124
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
125
+ return PRODUCT();
126
+ }
127
+
128
+
129
+ function _decodeAndVerifyProductData(bytes memory data)
130
+ internal
131
+ returns(string memory name, ISetup.ProductSetupInfo memory setup)
107
132
  {
108
- setup = abi.decode(
133
+ (name, setup) = abi.decode(
109
134
  data,
110
- (ISetup.ProductSetupInfo)
135
+ (string, ISetup.ProductSetupInfo)
111
136
  );
112
137
 
113
- // TODO add checks if applicable
138
+ // TODO add checks
139
+ // if(wallet == address(0)) {
140
+ // revert WalletIsZero();
141
+ // }
142
+
143
+ // IRegistry.ObjectInfo memory tokenInfo = getRegistry().getObjectInfo(address(info.token));
144
+
145
+ // if(tokenInfo.objectType != TOKEN()) {
146
+ // revert InvalidToken();
147
+ // }
148
+
149
+ // IRegistry.ObjectInfo memory poolInfo = getRegistry().getObjectInfo(info.poolNftId);
150
+
151
+ // if(poolInfo.objectType != POOL()) {
152
+ // revert InvalidPool();
153
+ // }
154
+
155
+ // if(poolInfo.parentNftId != instanceNftId) {
156
+ // revert InvalidPoolsInstance();
157
+ // }
158
+ // // TODO pool have the same token
159
+ // //ITreasury.PoolSetup memory poolSetup = instance.getPoolSetup(info.poolNftId);
160
+ // //require(tokenInfo.objectAddress == address(poolSetup.token), "ERROR:COS-018:PRODUCT_POOL_TOKEN_MISMATCH");
161
+ // // TODO pool is not linked
162
+
163
+ // IRegistry.ObjectInfo memory distributionInfo = getRegistry().getObjectInfo(info.distributionNftId);
164
+
165
+ // if(distributionInfo.objectType != DISTRIBUTION()) {
166
+ // revert InvalidDistribution();
167
+ // }
168
+
169
+ // if(distributionInfo.parentNftId != instanceNftId) {
170
+ // revert InvalidDistributionsInstance();
171
+ // }
172
+ // // TODO distribution have the same token
173
+ // // TODO distribution is not linked
114
174
  }
115
175
 
116
176
  function setFees(
@@ -16,7 +16,7 @@ contract ProductServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  ProductService svc = new ProductService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -39,7 +39,7 @@ contract ProductServiceManager is ProxyManager {
39
39
  // address(_productService));
40
40
 
41
41
  // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
42
+ // _isDeployed = true;
43
43
  }
44
44
 
45
45
  //--- view functions ----------------------------------------------------//
@@ -59,7 +59,7 @@ contract ChainNft is ERC721Enumerable {
59
59
  }
60
60
 
61
61
  _chainIdMultiplier = 10 ** _chainIdDigits;
62
- _idNext = 4;
62
+ _idNext = 3;
63
63
  }
64
64
 
65
65
  /**
@@ -3,29 +3,31 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
5
5
 
6
- import {ChainNft} from "./ChainNft.sol";
7
6
  import {NftId} from "../types/NftId.sol";
8
7
  import {ObjectType} from "../types/ObjectType.sol";
9
8
  import {VersionPart} from "../types/Version.sol";
9
+ import {Timestamp} from "../types/Timestamp.sol";
10
10
 
11
11
  interface IRegistry is IERC165 {
12
12
 
13
- event LogInitialMajorVersionSet(VersionPart majorVersion);
14
- event LogMajorVersionSet(VersionPart majorVersionMax);
15
- event LogRegistration(ObjectInfo info);
16
- event LogServiceNameRegistration(string serviceName, VersionPart majorVersion);
13
+ event LogRegistration(NftId nftId, NftId parentNftId, ObjectType objectType, bool isInterceptor, address objectAddress, address initialOwner);
14
+ event LogServiceRegistration(VersionPart majorVersion, ObjectType domain);
17
15
 
18
- // setMajorVersion()
19
- error NotOwner(address account);
20
- error MajorVersionMaxIncreaseInvalid(VersionPart newMajorVersionMax, VersionPart existingMaxMajorVersion);
16
+ // registerService()
17
+ error CallerNotReleaseManager();
18
+ error ServiceAlreadyRegistered(address service);
21
19
 
22
20
  // register()
23
- error NotRegistryService();
21
+ error CallerNotRegistryService();
22
+ error ServiceRegistration();
23
+
24
+ // registerWithCustomTypes()
25
+ error CoreTypeRegistration();
26
+
27
+ // _register()
24
28
  error ZeroParentAddress();
25
29
  error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
26
30
  error ContractAlreadyRegistered(address objectAddress);
27
- error InvalidServiceVersion(VersionPart majorVersion);
28
- error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
29
31
 
30
32
  struct ObjectInfo {
31
33
  NftId nftId;
@@ -38,15 +40,29 @@ interface IRegistry is IERC165 {
38
40
  }// TODO delete nftId and initialOwner(if not used) from struct
39
41
  // TODO strong disagree, keep nftId there (lets keep get object info return object consistent)
40
42
 
41
- function setMajorVersion(VersionPart newMajorVersionMax) external;
43
+ struct ReleaseInfo {
44
+ ObjectType[] domains;
45
+ Timestamp createdAt;
46
+ //Timestamp updatedAt;
47
+ }
48
+
49
+ function registerService(
50
+ ObjectInfo memory serviceInfo,
51
+ VersionPart serviceVersion,
52
+ ObjectType serviceDomain
53
+ ) external returns(NftId nftId);
42
54
 
43
55
  function register(ObjectInfo memory info) external returns (NftId nftId);
44
56
 
45
- function getMajorVersionMin() external view returns (VersionPart);
57
+ function registerWithCustomType(ObjectInfo memory info) external returns (NftId nftId);
46
58
 
47
- function getMajorVersionMax() external view returns (VersionPart);
59
+ function getInitialVersion() external view returns (VersionPart);
48
60
 
49
- function getMajorVersion() external view returns (VersionPart);
61
+ function getNextVersion() external view returns (VersionPart);
62
+
63
+ function getLatestVersion() external view returns (VersionPart);
64
+
65
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory);
50
66
 
51
67
  function getObjectCount() external view returns (uint256);
52
68
 
@@ -68,14 +84,16 @@ interface IRegistry is IERC165 {
68
84
 
69
85
  function isRegisteredService(address contractAddress) external view returns (bool);
70
86
 
71
- function getServiceName(NftId nftId) external view returns (string memory name);
87
+ function isValidRelease(VersionPart version) external view returns (bool);
72
88
 
73
89
  function getServiceAddress(
74
- string memory serviceName,
75
- VersionPart majorVersion
90
+ ObjectType serviceDomain,
91
+ VersionPart releaseVersion
76
92
  ) external view returns (address serviceAddress);
77
93
 
78
- function getChainNft() external view returns (ChainNft);
94
+ function getReleaseManagerAddress() external view returns (address);
95
+
96
+ function getChainNftAddress() external view returns (address);
79
97
 
80
98
  function getOwner() external view returns (address);
81
99
  }
@@ -1,6 +1,8 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
+
4
6
  import {NftId} from "../types/NftId.sol";
5
7
  import {ObjectType} from "../types/ObjectType.sol";
6
8
  import {RoleId} from "../types/RoleId.sol";
@@ -8,10 +10,12 @@ import {IService} from "../shared/IService.sol";
8
10
  import {IRegistry} from "./IRegistry.sol";
9
11
 
10
12
  import {IRegisterable} from "../shared/IRegisterable.sol";
11
- import {IBaseComponent} from "../components/IBaseComponent.sol";
12
-
13
- interface IRegistryService is IService {
13
+ import {IComponent} from "../components/IComponent.sol";
14
14
 
15
+ interface IRegistryService is
16
+ IService,
17
+ IAccessManaged
18
+ {
15
19
  error SelfRegistration();
16
20
  error NotRegistryOwner();
17
21
 
@@ -28,22 +32,35 @@ interface IRegistryService is IService {
28
32
  error InvalidInitialOwner(address initialOwner);
29
33
  error InvalidAddress(address registerableAddress);
30
34
 
35
+ struct FunctionConfig
36
+ {
37
+ ObjectType serviceDomain;
38
+ bytes4[] selectors;
39
+ }
40
+
41
+ function getFunctionConfigs()
42
+ external
43
+ pure
44
+ returns(
45
+ FunctionConfig[] memory config
46
+ );
31
47
 
32
- function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
48
+ // TODO used by service -> add owner arg
49
+ function registerInstance(IRegisterable instance, address owner)
50
+ external returns(IRegistry.ObjectInfo memory info);
33
51
 
34
- function registerInstance(IRegisterable instance)
35
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
52
+ function registerProduct(IComponent product, address owner)
53
+ external returns(IRegistry.ObjectInfo memory info);
36
54
 
37
- function registerProduct(IBaseComponent product, address owner)
38
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
55
+ function registerPool(IComponent pool, address owner)
56
+ external returns(IRegistry.ObjectInfo memory info);
39
57
 
40
- function registerPool(IBaseComponent pool, address owner)
41
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
58
+ function registerDistribution(IComponent distribution, address owner)
59
+ external returns(IRegistry.ObjectInfo memory info);
42
60
 
43
- function registerDistribution(IBaseComponent distribution, address owner)
44
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
61
+ function registerDistributor(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
45
62
 
46
- function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId); // -> easy to upgrade
63
+ function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
47
64
 
48
65
  function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
49
66
  }