@etherisc/gif-next 0.0.2-d02cb80-460 → 0.0.2-d086e6d-456

Sign up to get free protection for your applications and to get access to all the features.
Files changed (381) hide show
  1. package/README.md +78 -1
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  3. package/artifacts/contracts/components/Component.sol/Component.json +842 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +853 -296
  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} +225 -89
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +848 -31
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +846 -57
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +682 -9
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +725 -316
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +524 -240
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +15 -15
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -79
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1038 -395
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +290 -220
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +1038 -784
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +432 -186
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +137 -270
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +448 -418
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +303 -138
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -40
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +278 -157
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +61 -67
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1058 -0
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +625 -290
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +356 -79
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +844 -0
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1385 -247
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +450 -73
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +646 -0
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +278 -264
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IClaimService.sol/IClaimService.json} +227 -194
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +791 -134
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +216 -250
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +502 -133
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +95 -157
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +474 -347
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +321 -96
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +801 -255
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +307 -78
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +308 -209
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +305 -76
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +244 -133
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +158 -215
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +257 -235
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +202 -318
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +298 -145
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +141 -53
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  126. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  130. package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
  131. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IService.sol/IService.json +95 -157
  133. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
  135. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
  137. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  138. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  139. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  140. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
  141. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  142. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
  143. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  144. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  145. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Service.sol/Service.json +195 -148
  147. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  148. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  149. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
  153. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  155. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
  157. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  159. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestService.sol/TestService.json +213 -202
  161. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
  166. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  167. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  168. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  169. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  170. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  172. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  174. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  175. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  177. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  179. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  181. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  183. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  184. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  185. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  188. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  190. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  192. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  194. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  196. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  197. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  198. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  200. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  202. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  203. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  204. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  205. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  206. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  208. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  209. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  210. package/contracts/components/Component.sol +253 -0
  211. package/contracts/components/Distribution.sol +200 -83
  212. package/contracts/components/IComponent.sol +76 -0
  213. package/contracts/components/IDistributionComponent.sol +44 -17
  214. package/contracts/components/IPoolComponent.sol +88 -41
  215. package/contracts/components/IProductComponent.sol +10 -5
  216. package/contracts/components/Pool.sol +217 -185
  217. package/contracts/components/Product.sol +125 -124
  218. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
  219. package/contracts/instance/BundleManager.sol +14 -16
  220. package/contracts/instance/Cloneable.sol +7 -2
  221. package/contracts/instance/IInstance.sol +52 -14
  222. package/contracts/instance/IInstanceService.sol +39 -9
  223. package/contracts/instance/Instance.sol +126 -75
  224. package/contracts/instance/InstanceAccessManager.sol +383 -166
  225. package/contracts/instance/InstanceReader.sol +10 -34
  226. package/contracts/instance/InstanceService.sol +312 -128
  227. package/contracts/instance/InstanceServiceManager.sol +6 -9
  228. package/contracts/instance/ObjectManager.sol +10 -29
  229. package/contracts/instance/base/ComponentService.sol +136 -0
  230. package/contracts/instance/base/KeyValueStore.sol +13 -5
  231. package/contracts/instance/base/Lifecycle.sol +11 -2
  232. package/contracts/instance/module/IAccess.sol +23 -17
  233. package/contracts/instance/module/IBundle.sol +8 -5
  234. package/contracts/instance/module/IComponents.sol +41 -0
  235. package/contracts/instance/module/IDistribution.sol +2 -0
  236. package/contracts/instance/module/IPolicy.sol +30 -3
  237. package/contracts/instance/module/ISetup.sol +7 -20
  238. package/contracts/instance/service/ApplicationService.sol +350 -0
  239. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  240. package/contracts/instance/service/BundleService.sol +239 -68
  241. package/contracts/instance/service/BundleServiceManager.sol +6 -9
  242. package/contracts/instance/service/ClaimService.sol +151 -0
  243. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  244. package/contracts/instance/service/DistributionService.sol +367 -50
  245. package/contracts/instance/service/DistributionServiceManager.sol +7 -10
  246. package/contracts/instance/service/IApplicationService.sol +82 -0
  247. package/contracts/instance/service/IBundleService.sol +67 -19
  248. package/contracts/instance/service/IClaimService.sol +61 -0
  249. package/contracts/instance/service/IDistributionService.sol +86 -0
  250. package/contracts/instance/service/IPolicyService.sol +34 -49
  251. package/contracts/instance/service/IPoolService.sol +82 -3
  252. package/contracts/instance/service/PolicyService.sol +199 -347
  253. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  254. package/contracts/instance/service/PoolService.sol +264 -45
  255. package/contracts/instance/service/PoolServiceManager.sol +6 -9
  256. package/contracts/instance/service/ProductService.sol +93 -56
  257. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  258. package/contracts/registry/ChainNft.sol +9 -1
  259. package/contracts/registry/IRegistry.sol +39 -19
  260. package/contracts/registry/IRegistryService.sol +31 -13
  261. package/contracts/registry/ITransferInterceptor.sol +1 -0
  262. package/contracts/registry/Registry.sol +243 -224
  263. package/contracts/registry/RegistryAccessManager.sol +216 -0
  264. package/contracts/registry/RegistryService.sol +100 -173
  265. package/contracts/registry/RegistryServiceManager.sol +21 -39
  266. package/contracts/registry/ReleaseManager.sol +322 -0
  267. package/contracts/registry/TokenRegistry.sol +22 -17
  268. package/contracts/shared/ERC165.sol +14 -12
  269. package/contracts/shared/INftOwnable.sol +11 -10
  270. package/contracts/shared/IPolicyHolder.sol +26 -0
  271. package/contracts/shared/IRegisterable.sol +4 -6
  272. package/contracts/shared/IRegistryLinked.sol +12 -0
  273. package/contracts/shared/IService.sol +8 -2
  274. package/contracts/shared/IVersionable.sol +4 -47
  275. package/contracts/shared/NftOwnable.sol +66 -80
  276. package/contracts/shared/PolicyHolder.sol +81 -0
  277. package/contracts/shared/ProxyManager.sol +100 -25
  278. package/contracts/shared/Registerable.sol +16 -32
  279. package/contracts/shared/RegistryLinked.sol +48 -0
  280. package/contracts/shared/Service.sol +30 -22
  281. package/contracts/shared/TokenHandler.sol +11 -5
  282. package/contracts/shared/Versionable.sol +4 -92
  283. package/contracts/test/TestRegisterable.sol +1 -1
  284. package/contracts/test/TestService.sol +4 -3
  285. package/contracts/types/Amount.sol +60 -0
  286. package/contracts/types/Blocknumber.sol +1 -0
  287. package/contracts/types/ClaimId.sol +52 -0
  288. package/contracts/types/DistributorType.sol +2 -2
  289. package/contracts/types/Fee.sol +13 -5
  290. package/contracts/types/NftId.sol +8 -0
  291. package/contracts/types/ObjectType.sol +10 -5
  292. package/contracts/types/PayoutId.sol +54 -0
  293. package/contracts/types/Referral.sol +4 -0
  294. package/contracts/types/RoleId.sol +19 -15
  295. package/contracts/types/Seconds.sol +54 -0
  296. package/contracts/types/StateId.sol +1 -0
  297. package/contracts/types/Timestamp.sol +13 -13
  298. package/contracts/types/UFixed.sol +1 -0
  299. package/contracts/types/Version.sol +1 -0
  300. package/package.json +3 -3
  301. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  302. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  303. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -384
  304. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  306. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  308. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  310. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  312. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  314. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  316. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  318. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  319. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  320. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  321. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  322. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  323. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  324. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  325. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  326. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  327. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  329. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  331. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  333. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  335. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  337. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  339. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  341. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  343. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  344. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  345. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  346. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  347. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  348. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  349. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  350. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  351. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  352. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  353. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  354. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  355. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  356. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  357. package/contracts/components/BaseComponent.sol +0 -145
  358. package/contracts/components/IBaseComponent.sol +0 -32
  359. package/contracts/experiment/cloning/Cloner.sol +0 -47
  360. package/contracts/experiment/errors/Require.sol +0 -38
  361. package/contracts/experiment/errors/Revert.sol +0 -44
  362. package/contracts/experiment/inheritance/A.sol +0 -53
  363. package/contracts/experiment/inheritance/B.sol +0 -28
  364. package/contracts/experiment/inheritance/C.sol +0 -34
  365. package/contracts/experiment/inheritance/IA.sol +0 -13
  366. package/contracts/experiment/inheritance/IB.sol +0 -10
  367. package/contracts/experiment/inheritance/IC.sol +0 -12
  368. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  369. package/contracts/experiment/statemachine/ISM.sol +0 -25
  370. package/contracts/experiment/statemachine/SM.sol +0 -57
  371. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  372. package/contracts/experiment/types/TypeA.sol +0 -47
  373. package/contracts/experiment/types/TypeB.sol +0 -29
  374. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  375. package/contracts/instance/IInstanceBase.sol +0 -26
  376. package/contracts/instance/InstanceBase.sol +0 -41
  377. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  378. package/contracts/instance/base/IInstanceBase.sol +0 -23
  379. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  380. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  381. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -6,274 +6,909 @@
6
6
  {
7
7
  "inputs": [
8
8
  {
9
- "internalType": "ObjectType",
10
- "name": "componentType",
11
- "type": "uint8"
9
+ "internalType": "address",
10
+ "name": "authority",
11
+ "type": "address"
12
12
  }
13
13
  ],
14
- "name": "ComponentTypeInvalid",
14
+ "name": "AccessManagedInvalidAuthority",
15
15
  "type": "error"
16
16
  },
17
17
  {
18
18
  "inputs": [
19
19
  {
20
20
  "internalType": "address",
21
- "name": "registry",
21
+ "name": "caller",
22
22
  "type": "address"
23
23
  },
24
24
  {
25
- "internalType": "NftId",
26
- "name": "nftId",
27
- "type": "uint96"
25
+ "internalType": "uint32",
26
+ "name": "delay",
27
+ "type": "uint32"
28
28
  }
29
29
  ],
30
- "name": "ErrorAlreadyLinked",
30
+ "name": "AccessManagedRequiredDelay",
31
31
  "type": "error"
32
32
  },
33
33
  {
34
34
  "inputs": [
35
35
  {
36
36
  "internalType": "address",
37
- "name": "contractAddress",
37
+ "name": "caller",
38
38
  "type": "address"
39
39
  }
40
40
  ],
41
- "name": "ErrorContractNotRegistered",
41
+ "name": "AccessManagedUnauthorized",
42
42
  "type": "error"
43
43
  },
44
44
  {
45
45
  "inputs": [
46
46
  {
47
47
  "internalType": "address",
48
- "name": "account",
48
+ "name": "component",
49
49
  "type": "address"
50
+ },
51
+ {
52
+ "internalType": "NftId",
53
+ "name": "nftId",
54
+ "type": "uint96"
50
55
  }
51
56
  ],
52
- "name": "ErrorNotOwner",
57
+ "name": "ErrorComponentServiceAlreadyRegistered",
53
58
  "type": "error"
54
59
  },
55
60
  {
56
61
  "inputs": [
57
62
  {
58
63
  "internalType": "address",
59
- "name": "registryAddress",
64
+ "name": "component",
60
65
  "type": "address"
61
66
  }
62
67
  ],
63
- "name": "ErrorNotRegistry",
68
+ "name": "ErrorComponentServiceComponentLocked",
64
69
  "type": "error"
65
70
  },
66
71
  {
67
72
  "inputs": [
73
+ {
74
+ "internalType": "NftId",
75
+ "name": "instanceNftId",
76
+ "type": "uint96"
77
+ },
78
+ {
79
+ "internalType": "RoleId",
80
+ "name": "requiredRole",
81
+ "type": "uint64"
82
+ },
68
83
  {
69
84
  "internalType": "address",
70
- "name": "registryAddress",
85
+ "name": "sender",
71
86
  "type": "address"
72
87
  }
73
88
  ],
74
- "name": "ErrorRegisterableNotRegistry",
75
- "type": "error"
76
- },
77
- {
78
- "inputs": [],
79
- "name": "ErrorRegistryAddressZero",
89
+ "name": "ErrorComponentServiceExpectedRoleMissing",
80
90
  "type": "error"
81
91
  },
82
92
  {
83
93
  "inputs": [
84
94
  {
85
95
  "internalType": "address",
86
- "name": "registry",
96
+ "name": "component",
87
97
  "type": "address"
98
+ },
99
+ {
100
+ "internalType": "ObjectType",
101
+ "name": "requiredType",
102
+ "type": "uint8"
103
+ },
104
+ {
105
+ "internalType": "ObjectType",
106
+ "name": "componentType",
107
+ "type": "uint8"
88
108
  }
89
109
  ],
90
- "name": "ErrorRegistryAlreadyInitialized",
110
+ "name": "ErrorComponentServiceInvalidType",
91
111
  "type": "error"
92
112
  },
93
113
  {
94
- "inputs": [],
95
- "name": "ErrorRegistryNotInitialized",
114
+ "inputs": [
115
+ {
116
+ "internalType": "address",
117
+ "name": "component",
118
+ "type": "address"
119
+ }
120
+ ],
121
+ "name": "ErrorComponentServiceNotComponent",
96
122
  "type": "error"
97
123
  },
98
124
  {
99
125
  "inputs": [
100
126
  {
101
- "internalType": "RoleId",
102
- "name": "expected",
103
- "type": "uint64"
127
+ "internalType": "address",
128
+ "name": "component",
129
+ "type": "address"
104
130
  },
105
131
  {
106
132
  "internalType": "address",
107
- "name": "caller",
133
+ "name": "initialOwner",
134
+ "type": "address"
135
+ },
136
+ {
137
+ "internalType": "address",
138
+ "name": "sender",
108
139
  "type": "address"
109
140
  }
110
141
  ],
111
- "name": "ExpectedRoleMissing",
142
+ "name": "ErrorComponentServiceSenderNotOwner",
112
143
  "type": "error"
113
144
  },
114
145
  {
115
- "inputs": [],
116
- "name": "InvalidInitialization",
146
+ "inputs": [
147
+ {
148
+ "internalType": "address",
149
+ "name": "target",
150
+ "type": "address"
151
+ }
152
+ ],
153
+ "name": "ErrorIAccessTargetLocked",
117
154
  "type": "error"
118
155
  },
119
156
  {
120
- "inputs": [],
121
- "name": "NotInitializing",
157
+ "inputs": [
158
+ {
159
+ "internalType": "address",
160
+ "name": "caller",
161
+ "type": "address"
162
+ }
163
+ ],
164
+ "name": "ErrorIDistributionServiceCallerNotDistributor",
122
165
  "type": "error"
123
166
  },
124
167
  {
125
- "anonymous": false,
126
168
  "inputs": [
127
169
  {
128
- "indexed": false,
129
- "internalType": "uint64",
130
- "name": "version",
131
- "type": "uint64"
170
+ "internalType": "uint256",
171
+ "name": "commissionPercentage",
172
+ "type": "uint256"
173
+ },
174
+ {
175
+ "internalType": "uint256",
176
+ "name": "maxCommissionPercentage",
177
+ "type": "uint256"
132
178
  }
133
179
  ],
134
- "name": "Initialized",
135
- "type": "event"
180
+ "name": "ErrorIDistributionServiceCommissionTooHigh",
181
+ "type": "error"
136
182
  },
137
183
  {
138
- "anonymous": false,
139
184
  "inputs": [
140
185
  {
141
- "indexed": false,
142
- "internalType": "Version",
143
- "name": "version",
144
- "type": "uint24"
186
+ "internalType": "uint256",
187
+ "name": "maxDiscountPercentage",
188
+ "type": "uint256"
145
189
  },
146
190
  {
147
- "indexed": false,
148
- "internalType": "address",
149
- "name": "implementation",
150
- "type": "address"
191
+ "internalType": "uint256",
192
+ "name": "discountPercentage",
193
+ "type": "uint256"
194
+ }
195
+ ],
196
+ "name": "ErrorIDistributionServiceDiscountTooHigh",
197
+ "type": "error"
198
+ },
199
+ {
200
+ "inputs": [
201
+ {
202
+ "internalType": "uint256",
203
+ "name": "minDiscountPercentage",
204
+ "type": "uint256"
151
205
  },
152
206
  {
153
- "indexed": false,
154
- "internalType": "address",
155
- "name": "activatedBy",
156
- "type": "address"
207
+ "internalType": "uint256",
208
+ "name": "discountPercentage",
209
+ "type": "uint256"
157
210
  }
158
211
  ],
159
- "name": "LogVersionableInitialized",
160
- "type": "event"
212
+ "name": "ErrorIDistributionServiceDiscountTooLow",
213
+ "type": "error"
161
214
  },
162
215
  {
163
- "inputs": [],
164
- "name": "NAME",
165
- "outputs": [
216
+ "inputs": [
166
217
  {
167
- "internalType": "string",
168
- "name": "",
169
- "type": "string"
218
+ "internalType": "Timestamp",
219
+ "name": "expiryAt",
220
+ "type": "uint40"
170
221
  }
171
222
  ],
172
- "stateMutability": "view",
173
- "type": "function"
223
+ "name": "ErrorIDistributionServiceExpirationInvalid",
224
+ "type": "error"
174
225
  },
175
226
  {
176
- "inputs": [],
177
- "name": "REGISTERABLE_LOCATION_V1",
178
- "outputs": [
227
+ "inputs": [
179
228
  {
180
- "internalType": "bytes32",
181
- "name": "",
182
- "type": "bytes32"
229
+ "internalType": "uint256",
230
+ "name": "maxReferralLifetime",
231
+ "type": "uint256"
232
+ },
233
+ {
234
+ "internalType": "uint256",
235
+ "name": "expiryAt",
236
+ "type": "uint256"
183
237
  }
184
238
  ],
185
- "stateMutability": "view",
186
- "type": "function"
239
+ "name": "ErrorIDistributionServiceExpiryTooLong",
240
+ "type": "error"
187
241
  },
188
242
  {
189
- "inputs": [],
190
- "name": "getInitialInfo",
191
- "outputs": [
243
+ "inputs": [
192
244
  {
193
- "components": [
194
- {
195
- "internalType": "NftId",
196
- "name": "nftId",
197
- "type": "uint96"
198
- },
199
- {
200
- "internalType": "NftId",
201
- "name": "parentNftId",
202
- "type": "uint96"
203
- },
204
- {
205
- "internalType": "ObjectType",
206
- "name": "objectType",
207
- "type": "uint8"
208
- },
209
- {
210
- "internalType": "bool",
211
- "name": "isInterceptor",
212
- "type": "bool"
213
- },
214
- {
215
- "internalType": "address",
216
- "name": "objectAddress",
217
- "type": "address"
218
- },
219
- {
220
- "internalType": "address",
221
- "name": "initialOwner",
222
- "type": "address"
223
- },
224
- {
225
- "internalType": "bytes",
226
- "name": "data",
227
- "type": "bytes"
228
- }
229
- ],
230
- "internalType": "struct IRegistry.ObjectInfo",
231
- "name": "",
232
- "type": "tuple"
245
+ "internalType": "uint256",
246
+ "name": "distributionFeeFixAmount",
247
+ "type": "uint256"
233
248
  },
234
249
  {
235
- "internalType": "bytes",
236
- "name": "data",
237
- "type": "bytes"
250
+ "internalType": "uint256",
251
+ "name": "distributionFeeVarAmount",
252
+ "type": "uint256"
253
+ },
254
+ {
255
+ "internalType": "uint256",
256
+ "name": "distributionOwnerFeeFixAmount",
257
+ "type": "uint256"
258
+ },
259
+ {
260
+ "internalType": "uint256",
261
+ "name": "distributionOwnerFeeVarAmount",
262
+ "type": "uint256"
263
+ },
264
+ {
265
+ "internalType": "uint256",
266
+ "name": "commissionAmount",
267
+ "type": "uint256"
268
+ },
269
+ {
270
+ "internalType": "uint256",
271
+ "name": "discountAmount",
272
+ "type": "uint256"
238
273
  }
239
274
  ],
240
- "stateMutability": "view",
241
- "type": "function"
275
+ "name": "ErrorIDistributionServiceFeeCalculationMismatch",
276
+ "type": "error"
242
277
  },
243
278
  {
244
- "inputs": [],
245
- "name": "getInitializedVersion",
246
- "outputs": [
279
+ "inputs": [
247
280
  {
248
- "internalType": "uint64",
249
- "name": "",
250
- "type": "uint64"
281
+ "internalType": "uint256",
282
+ "name": "transferredDistributionFeeAmount",
283
+ "type": "uint256"
284
+ },
285
+ {
286
+ "internalType": "uint256",
287
+ "name": "expectedDistributionFeeAmount",
288
+ "type": "uint256"
251
289
  }
252
290
  ],
253
- "stateMutability": "view",
254
- "type": "function"
291
+ "name": "ErrorIDistributionServiceInvalidFeeTransferred",
292
+ "type": "error"
255
293
  },
256
294
  {
257
- "inputs": [],
258
- "name": "getInstanceService",
259
- "outputs": [
295
+ "inputs": [
260
296
  {
261
- "internalType": "contract InstanceService",
262
- "name": "",
263
- "type": "address"
297
+ "internalType": "string",
298
+ "name": "code",
299
+ "type": "string"
264
300
  }
265
301
  ],
266
- "stateMutability": "view",
267
- "type": "function"
302
+ "name": "ErrorIDistributionServiceInvalidReferral",
303
+ "type": "error"
268
304
  },
269
305
  {
270
- "inputs": [],
271
- "name": "getMajorVersion",
272
- "outputs": [
306
+ "inputs": [
273
307
  {
274
- "internalType": "VersionPart",
275
- "name": "majorVersion",
276
- "type": "uint8"
308
+ "internalType": "ReferralId",
309
+ "name": "referralId",
310
+ "type": "bytes8"
311
+ }
312
+ ],
313
+ "name": "ErrorIDistributionServiceInvalidReferralId",
314
+ "type": "error"
315
+ },
316
+ {
317
+ "inputs": [
318
+ {
319
+ "internalType": "uint256",
320
+ "name": "maxDiscountPercentage",
321
+ "type": "uint256"
322
+ },
323
+ {
324
+ "internalType": "uint256",
325
+ "name": "limit",
326
+ "type": "uint256"
327
+ }
328
+ ],
329
+ "name": "ErrorIDistributionServiceMaxDiscountTooHigh",
330
+ "type": "error"
331
+ },
332
+ {
333
+ "inputs": [
334
+ {
335
+ "internalType": "uint256",
336
+ "name": "maxReferrals",
337
+ "type": "uint256"
338
+ }
339
+ ],
340
+ "name": "ErrorIDistributionServiceMaxReferralsExceeded",
341
+ "type": "error"
342
+ },
343
+ {
344
+ "inputs": [
345
+ {
346
+ "internalType": "uint256",
347
+ "name": "minFee",
348
+ "type": "uint256"
349
+ },
350
+ {
351
+ "internalType": "uint256",
352
+ "name": "limit",
353
+ "type": "uint256"
354
+ }
355
+ ],
356
+ "name": "ErrorIDistributionServiceMinFeeTooHigh",
357
+ "type": "error"
358
+ },
359
+ {
360
+ "inputs": [
361
+ {
362
+ "internalType": "NftId",
363
+ "name": "nftId",
364
+ "type": "uint96"
365
+ },
366
+ {
367
+ "internalType": "NftId",
368
+ "name": "parentNftId",
369
+ "type": "uint96"
370
+ }
371
+ ],
372
+ "name": "ErrorIDistributionServiceParentNftIdNotInstance",
373
+ "type": "error"
374
+ },
375
+ {
376
+ "inputs": [
377
+ {
378
+ "internalType": "NftId",
379
+ "name": "distributionNftId",
380
+ "type": "uint96"
381
+ },
382
+ {
383
+ "internalType": "ReferralId",
384
+ "name": "referralId",
385
+ "type": "bytes8"
386
+ }
387
+ ],
388
+ "name": "ErrorIDistributionServiceReferralInvalid",
389
+ "type": "error"
390
+ },
391
+ {
392
+ "inputs": [
393
+ {
394
+ "internalType": "address",
395
+ "name": "caller",
396
+ "type": "address"
397
+ }
398
+ ],
399
+ "name": "ErrorIServiceCallerUnknown",
400
+ "type": "error"
401
+ },
402
+ {
403
+ "inputs": [
404
+ {
405
+ "internalType": "NftId",
406
+ "name": "nftId",
407
+ "type": "uint96"
408
+ }
409
+ ],
410
+ "name": "ErrorNftOwnableAlreadyLinked",
411
+ "type": "error"
412
+ },
413
+ {
414
+ "inputs": [
415
+ {
416
+ "internalType": "address",
417
+ "name": "contractAddress",
418
+ "type": "address"
419
+ }
420
+ ],
421
+ "name": "ErrorNftOwnableContractNotRegistered",
422
+ "type": "error"
423
+ },
424
+ {
425
+ "inputs": [],
426
+ "name": "ErrorNftOwnableInitialOwnerZero",
427
+ "type": "error"
428
+ },
429
+ {
430
+ "inputs": [
431
+ {
432
+ "internalType": "address",
433
+ "name": "account",
434
+ "type": "address"
435
+ }
436
+ ],
437
+ "name": "ErrorNftOwnableNotOwner",
438
+ "type": "error"
439
+ },
440
+ {
441
+ "inputs": [
442
+ {
443
+ "internalType": "address",
444
+ "name": "registryAddress",
445
+ "type": "address"
446
+ }
447
+ ],
448
+ "name": "ErrorNotRegistry",
449
+ "type": "error"
450
+ },
451
+ {
452
+ "inputs": [],
453
+ "name": "InvalidInitialization",
454
+ "type": "error"
455
+ },
456
+ {
457
+ "inputs": [],
458
+ "name": "NotInitializing",
459
+ "type": "error"
460
+ },
461
+ {
462
+ "anonymous": false,
463
+ "inputs": [
464
+ {
465
+ "indexed": false,
466
+ "internalType": "address",
467
+ "name": "authority",
468
+ "type": "address"
469
+ }
470
+ ],
471
+ "name": "AuthorityUpdated",
472
+ "type": "event"
473
+ },
474
+ {
475
+ "anonymous": false,
476
+ "inputs": [
477
+ {
478
+ "indexed": false,
479
+ "internalType": "uint64",
480
+ "name": "version",
481
+ "type": "uint64"
482
+ }
483
+ ],
484
+ "name": "Initialized",
485
+ "type": "event"
486
+ },
487
+ {
488
+ "inputs": [],
489
+ "name": "NFT_OWNABLE_STORAGE_LOCATION_V1",
490
+ "outputs": [
491
+ {
492
+ "internalType": "bytes32",
493
+ "name": "",
494
+ "type": "bytes32"
495
+ }
496
+ ],
497
+ "stateMutability": "view",
498
+ "type": "function"
499
+ },
500
+ {
501
+ "inputs": [],
502
+ "name": "REGISTERABLE_LOCATION_V1",
503
+ "outputs": [
504
+ {
505
+ "internalType": "bytes32",
506
+ "name": "",
507
+ "type": "bytes32"
508
+ }
509
+ ],
510
+ "stateMutability": "view",
511
+ "type": "function"
512
+ },
513
+ {
514
+ "inputs": [],
515
+ "name": "authority",
516
+ "outputs": [
517
+ {
518
+ "internalType": "address",
519
+ "name": "",
520
+ "type": "address"
521
+ }
522
+ ],
523
+ "stateMutability": "view",
524
+ "type": "function"
525
+ },
526
+ {
527
+ "inputs": [
528
+ {
529
+ "internalType": "NftId",
530
+ "name": "distributionNftId",
531
+ "type": "uint96"
532
+ },
533
+ {
534
+ "internalType": "ReferralId",
535
+ "name": "referralId",
536
+ "type": "bytes8"
537
+ },
538
+ {
539
+ "components": [
540
+ {
541
+ "internalType": "uint256",
542
+ "name": "netPremiumAmount",
543
+ "type": "uint256"
544
+ },
545
+ {
546
+ "internalType": "uint256",
547
+ "name": "fullPremiumAmount",
548
+ "type": "uint256"
549
+ },
550
+ {
551
+ "internalType": "uint256",
552
+ "name": "premiumAmount",
553
+ "type": "uint256"
554
+ },
555
+ {
556
+ "internalType": "uint256",
557
+ "name": "productFeeFixAmount",
558
+ "type": "uint256"
559
+ },
560
+ {
561
+ "internalType": "uint256",
562
+ "name": "poolFeeFixAmount",
563
+ "type": "uint256"
564
+ },
565
+ {
566
+ "internalType": "uint256",
567
+ "name": "bundleFeeFixAmount",
568
+ "type": "uint256"
569
+ },
570
+ {
571
+ "internalType": "uint256",
572
+ "name": "distributionFeeFixAmount",
573
+ "type": "uint256"
574
+ },
575
+ {
576
+ "internalType": "uint256",
577
+ "name": "productFeeVarAmount",
578
+ "type": "uint256"
579
+ },
580
+ {
581
+ "internalType": "uint256",
582
+ "name": "poolFeeVarAmount",
583
+ "type": "uint256"
584
+ },
585
+ {
586
+ "internalType": "uint256",
587
+ "name": "bundleFeeVarAmount",
588
+ "type": "uint256"
589
+ },
590
+ {
591
+ "internalType": "uint256",
592
+ "name": "distributionFeeVarAmount",
593
+ "type": "uint256"
594
+ },
595
+ {
596
+ "internalType": "uint256",
597
+ "name": "distributionOwnerFeeFixAmount",
598
+ "type": "uint256"
599
+ },
600
+ {
601
+ "internalType": "uint256",
602
+ "name": "distributionOwnerFeeVarAmount",
603
+ "type": "uint256"
604
+ },
605
+ {
606
+ "internalType": "uint256",
607
+ "name": "commissionAmount",
608
+ "type": "uint256"
609
+ },
610
+ {
611
+ "internalType": "uint256",
612
+ "name": "discountAmount",
613
+ "type": "uint256"
614
+ }
615
+ ],
616
+ "internalType": "struct IPolicy.Premium",
617
+ "name": "premium",
618
+ "type": "tuple"
619
+ }
620
+ ],
621
+ "name": "calculateFeeAmount",
622
+ "outputs": [
623
+ {
624
+ "components": [
625
+ {
626
+ "internalType": "uint256",
627
+ "name": "netPremiumAmount",
628
+ "type": "uint256"
629
+ },
630
+ {
631
+ "internalType": "uint256",
632
+ "name": "fullPremiumAmount",
633
+ "type": "uint256"
634
+ },
635
+ {
636
+ "internalType": "uint256",
637
+ "name": "premiumAmount",
638
+ "type": "uint256"
639
+ },
640
+ {
641
+ "internalType": "uint256",
642
+ "name": "productFeeFixAmount",
643
+ "type": "uint256"
644
+ },
645
+ {
646
+ "internalType": "uint256",
647
+ "name": "poolFeeFixAmount",
648
+ "type": "uint256"
649
+ },
650
+ {
651
+ "internalType": "uint256",
652
+ "name": "bundleFeeFixAmount",
653
+ "type": "uint256"
654
+ },
655
+ {
656
+ "internalType": "uint256",
657
+ "name": "distributionFeeFixAmount",
658
+ "type": "uint256"
659
+ },
660
+ {
661
+ "internalType": "uint256",
662
+ "name": "productFeeVarAmount",
663
+ "type": "uint256"
664
+ },
665
+ {
666
+ "internalType": "uint256",
667
+ "name": "poolFeeVarAmount",
668
+ "type": "uint256"
669
+ },
670
+ {
671
+ "internalType": "uint256",
672
+ "name": "bundleFeeVarAmount",
673
+ "type": "uint256"
674
+ },
675
+ {
676
+ "internalType": "uint256",
677
+ "name": "distributionFeeVarAmount",
678
+ "type": "uint256"
679
+ },
680
+ {
681
+ "internalType": "uint256",
682
+ "name": "distributionOwnerFeeFixAmount",
683
+ "type": "uint256"
684
+ },
685
+ {
686
+ "internalType": "uint256",
687
+ "name": "distributionOwnerFeeVarAmount",
688
+ "type": "uint256"
689
+ },
690
+ {
691
+ "internalType": "uint256",
692
+ "name": "commissionAmount",
693
+ "type": "uint256"
694
+ },
695
+ {
696
+ "internalType": "uint256",
697
+ "name": "discountAmount",
698
+ "type": "uint256"
699
+ }
700
+ ],
701
+ "internalType": "struct IPolicy.Premium",
702
+ "name": "finalPremium",
703
+ "type": "tuple"
704
+ }
705
+ ],
706
+ "stateMutability": "view",
707
+ "type": "function"
708
+ },
709
+ {
710
+ "inputs": [
711
+ {
712
+ "internalType": "address",
713
+ "name": "distributor",
714
+ "type": "address"
715
+ },
716
+ {
717
+ "internalType": "DistributorType",
718
+ "name": "distributorType",
719
+ "type": "bytes8"
720
+ },
721
+ {
722
+ "internalType": "bytes",
723
+ "name": "data",
724
+ "type": "bytes"
725
+ }
726
+ ],
727
+ "name": "createDistributor",
728
+ "outputs": [
729
+ {
730
+ "internalType": "NftId",
731
+ "name": "distributorNftId",
732
+ "type": "uint96"
733
+ }
734
+ ],
735
+ "stateMutability": "nonpayable",
736
+ "type": "function"
737
+ },
738
+ {
739
+ "inputs": [
740
+ {
741
+ "internalType": "string",
742
+ "name": "name",
743
+ "type": "string"
744
+ },
745
+ {
746
+ "internalType": "UFixed",
747
+ "name": "minDiscountPercentage",
748
+ "type": "uint256"
749
+ },
750
+ {
751
+ "internalType": "UFixed",
752
+ "name": "maxDiscountPercentage",
753
+ "type": "uint256"
754
+ },
755
+ {
756
+ "internalType": "UFixed",
757
+ "name": "commissionPercentage",
758
+ "type": "uint256"
759
+ },
760
+ {
761
+ "internalType": "uint32",
762
+ "name": "maxReferralCount",
763
+ "type": "uint32"
764
+ },
765
+ {
766
+ "internalType": "uint32",
767
+ "name": "maxReferralLifetime",
768
+ "type": "uint32"
769
+ },
770
+ {
771
+ "internalType": "bool",
772
+ "name": "allowSelfReferrals",
773
+ "type": "bool"
774
+ },
775
+ {
776
+ "internalType": "bool",
777
+ "name": "allowRenewals",
778
+ "type": "bool"
779
+ },
780
+ {
781
+ "internalType": "bytes",
782
+ "name": "data",
783
+ "type": "bytes"
784
+ }
785
+ ],
786
+ "name": "createDistributorType",
787
+ "outputs": [
788
+ {
789
+ "internalType": "DistributorType",
790
+ "name": "distributorType",
791
+ "type": "bytes8"
792
+ }
793
+ ],
794
+ "stateMutability": "nonpayable",
795
+ "type": "function"
796
+ },
797
+ {
798
+ "inputs": [
799
+ {
800
+ "internalType": "NftId",
801
+ "name": "distributorNftId",
802
+ "type": "uint96"
803
+ },
804
+ {
805
+ "internalType": "string",
806
+ "name": "code",
807
+ "type": "string"
808
+ },
809
+ {
810
+ "internalType": "UFixed",
811
+ "name": "discountPercentage",
812
+ "type": "uint256"
813
+ },
814
+ {
815
+ "internalType": "uint32",
816
+ "name": "maxReferrals",
817
+ "type": "uint32"
818
+ },
819
+ {
820
+ "internalType": "Timestamp",
821
+ "name": "expiryAt",
822
+ "type": "uint40"
823
+ },
824
+ {
825
+ "internalType": "bytes",
826
+ "name": "data",
827
+ "type": "bytes"
828
+ }
829
+ ],
830
+ "name": "createReferral",
831
+ "outputs": [
832
+ {
833
+ "internalType": "ReferralId",
834
+ "name": "referralId",
835
+ "type": "bytes8"
836
+ }
837
+ ],
838
+ "stateMutability": "nonpayable",
839
+ "type": "function"
840
+ },
841
+ {
842
+ "inputs": [],
843
+ "name": "getDomain",
844
+ "outputs": [
845
+ {
846
+ "internalType": "ObjectType",
847
+ "name": "",
848
+ "type": "uint8"
849
+ }
850
+ ],
851
+ "stateMutability": "pure",
852
+ "type": "function"
853
+ },
854
+ {
855
+ "inputs": [],
856
+ "name": "getInitialInfo",
857
+ "outputs": [
858
+ {
859
+ "components": [
860
+ {
861
+ "internalType": "NftId",
862
+ "name": "nftId",
863
+ "type": "uint96"
864
+ },
865
+ {
866
+ "internalType": "NftId",
867
+ "name": "parentNftId",
868
+ "type": "uint96"
869
+ },
870
+ {
871
+ "internalType": "ObjectType",
872
+ "name": "objectType",
873
+ "type": "uint8"
874
+ },
875
+ {
876
+ "internalType": "bool",
877
+ "name": "isInterceptor",
878
+ "type": "bool"
879
+ },
880
+ {
881
+ "internalType": "address",
882
+ "name": "objectAddress",
883
+ "type": "address"
884
+ },
885
+ {
886
+ "internalType": "address",
887
+ "name": "initialOwner",
888
+ "type": "address"
889
+ },
890
+ {
891
+ "internalType": "bytes",
892
+ "name": "data",
893
+ "type": "bytes"
894
+ }
895
+ ],
896
+ "internalType": "struct IRegistry.ObjectInfo",
897
+ "name": "info",
898
+ "type": "tuple"
899
+ }
900
+ ],
901
+ "stateMutability": "view",
902
+ "type": "function"
903
+ },
904
+ {
905
+ "inputs": [],
906
+ "name": "getInstanceService",
907
+ "outputs": [
908
+ {
909
+ "internalType": "contract InstanceService",
910
+ "name": "",
911
+ "type": "address"
277
912
  }
278
913
  ],
279
914
  "stateMutability": "view",
@@ -281,15 +916,15 @@
281
916
  },
282
917
  {
283
918
  "inputs": [],
284
- "name": "getName",
919
+ "name": "getMajorVersion",
285
920
  "outputs": [
286
921
  {
287
- "internalType": "string",
288
- "name": "name",
289
- "type": "string"
922
+ "internalType": "VersionPart",
923
+ "name": "majorVersion",
924
+ "type": "uint8"
290
925
  }
291
926
  ],
292
- "stateMutability": "pure",
927
+ "stateMutability": "view",
293
928
  "type": "function"
294
929
  },
295
930
  {
@@ -333,10 +968,10 @@
333
968
  },
334
969
  {
335
970
  "inputs": [],
336
- "name": "getRegistryService",
971
+ "name": "getRegistryAddress",
337
972
  "outputs": [
338
973
  {
339
- "internalType": "contract IRegistryService",
974
+ "internalType": "address",
340
975
  "name": "",
341
976
  "type": "address"
342
977
  }
@@ -346,25 +981,19 @@
346
981
  },
347
982
  {
348
983
  "inputs": [],
349
- "name": "getVersion",
984
+ "name": "getRegistryService",
350
985
  "outputs": [
351
986
  {
352
- "internalType": "Version",
987
+ "internalType": "contract IRegistryService",
353
988
  "name": "",
354
- "type": "uint24"
989
+ "type": "address"
355
990
  }
356
991
  ],
357
- "stateMutability": "pure",
992
+ "stateMutability": "view",
358
993
  "type": "function"
359
994
  },
360
995
  {
361
- "inputs": [
362
- {
363
- "internalType": "uint256",
364
- "name": "idx",
365
- "type": "uint256"
366
- }
367
- ],
996
+ "inputs": [],
368
997
  "name": "getVersion",
369
998
  "outputs": [
370
999
  {
@@ -373,75 +1002,105 @@
373
1002
  "type": "uint24"
374
1003
  }
375
1004
  ],
376
- "stateMutability": "view",
1005
+ "stateMutability": "pure",
377
1006
  "type": "function"
378
1007
  },
379
1008
  {
380
1009
  "inputs": [],
381
- "name": "getVersionCount",
382
- "outputs": [
1010
+ "name": "initializeERC165",
1011
+ "outputs": [],
1012
+ "stateMutability": "nonpayable",
1013
+ "type": "function"
1014
+ },
1015
+ {
1016
+ "inputs": [
383
1017
  {
384
- "internalType": "uint256",
385
- "name": "",
386
- "type": "uint256"
1018
+ "internalType": "address",
1019
+ "name": "initialOwner",
1020
+ "type": "address"
1021
+ },
1022
+ {
1023
+ "internalType": "address",
1024
+ "name": "registryAddress",
1025
+ "type": "address"
387
1026
  }
388
1027
  ],
389
- "stateMutability": "view",
1028
+ "name": "initializeNftOwnable",
1029
+ "outputs": [],
1030
+ "stateMutability": "nonpayable",
390
1031
  "type": "function"
391
1032
  },
392
1033
  {
393
1034
  "inputs": [
394
1035
  {
395
- "internalType": "Version",
396
- "name": "_version",
397
- "type": "uint24"
1036
+ "internalType": "address",
1037
+ "name": "registryAddress",
1038
+ "type": "address"
1039
+ },
1040
+ {
1041
+ "internalType": "NftId",
1042
+ "name": "parentNftId",
1043
+ "type": "uint96"
1044
+ },
1045
+ {
1046
+ "internalType": "ObjectType",
1047
+ "name": "objectType",
1048
+ "type": "uint8"
1049
+ },
1050
+ {
1051
+ "internalType": "bool",
1052
+ "name": "isInterceptor",
1053
+ "type": "bool"
1054
+ },
1055
+ {
1056
+ "internalType": "address",
1057
+ "name": "initialOwner",
1058
+ "type": "address"
1059
+ },
1060
+ {
1061
+ "internalType": "bytes",
1062
+ "name": "registryData",
1063
+ "type": "bytes"
398
1064
  }
399
1065
  ],
400
- "name": "getVersionInfo",
401
- "outputs": [
1066
+ "name": "initializeRegisterable",
1067
+ "outputs": [],
1068
+ "stateMutability": "nonpayable",
1069
+ "type": "function"
1070
+ },
1071
+ {
1072
+ "inputs": [
402
1073
  {
403
- "components": [
404
- {
405
- "internalType": "Version",
406
- "name": "version",
407
- "type": "uint24"
408
- },
409
- {
410
- "internalType": "address",
411
- "name": "implementation",
412
- "type": "address"
413
- },
414
- {
415
- "internalType": "address",
416
- "name": "activatedBy",
417
- "type": "address"
418
- },
419
- {
420
- "internalType": "Timestamp",
421
- "name": "activatedAt",
422
- "type": "uint40"
423
- },
424
- {
425
- "internalType": "Blocknumber",
426
- "name": "activatedIn",
427
- "type": "uint32"
428
- }
429
- ],
430
- "internalType": "struct IVersionable.VersionInfo",
431
- "name": "",
432
- "type": "tuple"
1074
+ "internalType": "address",
1075
+ "name": "registryAddress",
1076
+ "type": "address"
433
1077
  }
434
1078
  ],
435
- "stateMutability": "view",
1079
+ "name": "initializeRegistryLinked",
1080
+ "outputs": [],
1081
+ "stateMutability": "nonpayable",
436
1082
  "type": "function"
437
1083
  },
438
1084
  {
439
1085
  "inputs": [
440
1086
  {
441
1087
  "internalType": "address",
442
- "name": "implementation",
1088
+ "name": "registry",
443
1089
  "type": "address"
444
1090
  },
1091
+ {
1092
+ "internalType": "address",
1093
+ "name": "initialOwner",
1094
+ "type": "address"
1095
+ }
1096
+ ],
1097
+ "name": "initializeService",
1098
+ "outputs": [],
1099
+ "stateMutability": "nonpayable",
1100
+ "type": "function"
1101
+ },
1102
+ {
1103
+ "inputs": [
445
1104
  {
446
1105
  "internalType": "address",
447
1106
  "name": "activatedBy",
@@ -453,25 +1112,19 @@
453
1112
  "type": "bytes"
454
1113
  }
455
1114
  ],
456
- "name": "initialize",
1115
+ "name": "initializeVersionable",
457
1116
  "outputs": [],
458
1117
  "stateMutability": "nonpayable",
459
1118
  "type": "function"
460
1119
  },
461
1120
  {
462
- "inputs": [
463
- {
464
- "internalType": "Version",
465
- "name": "_version",
466
- "type": "uint24"
467
- }
468
- ],
469
- "name": "isInitialized",
1121
+ "inputs": [],
1122
+ "name": "isConsumingScheduledOp",
470
1123
  "outputs": [
471
1124
  {
472
- "internalType": "bool",
1125
+ "internalType": "bytes4",
473
1126
  "name": "",
474
- "type": "bool"
1127
+ "type": "bytes4"
475
1128
  }
476
1129
  ],
477
1130
  "stateMutability": "view",
@@ -484,6 +1137,135 @@
484
1137
  "stateMutability": "nonpayable",
485
1138
  "type": "function"
486
1139
  },
1140
+ {
1141
+ "inputs": [
1142
+ {
1143
+ "internalType": "NftId",
1144
+ "name": "distributionNftId",
1145
+ "type": "uint96"
1146
+ },
1147
+ {
1148
+ "internalType": "ReferralId",
1149
+ "name": "referralId",
1150
+ "type": "bytes8"
1151
+ },
1152
+ {
1153
+ "components": [
1154
+ {
1155
+ "internalType": "uint256",
1156
+ "name": "netPremiumAmount",
1157
+ "type": "uint256"
1158
+ },
1159
+ {
1160
+ "internalType": "uint256",
1161
+ "name": "fullPremiumAmount",
1162
+ "type": "uint256"
1163
+ },
1164
+ {
1165
+ "internalType": "uint256",
1166
+ "name": "premiumAmount",
1167
+ "type": "uint256"
1168
+ },
1169
+ {
1170
+ "internalType": "uint256",
1171
+ "name": "productFeeFixAmount",
1172
+ "type": "uint256"
1173
+ },
1174
+ {
1175
+ "internalType": "uint256",
1176
+ "name": "poolFeeFixAmount",
1177
+ "type": "uint256"
1178
+ },
1179
+ {
1180
+ "internalType": "uint256",
1181
+ "name": "bundleFeeFixAmount",
1182
+ "type": "uint256"
1183
+ },
1184
+ {
1185
+ "internalType": "uint256",
1186
+ "name": "distributionFeeFixAmount",
1187
+ "type": "uint256"
1188
+ },
1189
+ {
1190
+ "internalType": "uint256",
1191
+ "name": "productFeeVarAmount",
1192
+ "type": "uint256"
1193
+ },
1194
+ {
1195
+ "internalType": "uint256",
1196
+ "name": "poolFeeVarAmount",
1197
+ "type": "uint256"
1198
+ },
1199
+ {
1200
+ "internalType": "uint256",
1201
+ "name": "bundleFeeVarAmount",
1202
+ "type": "uint256"
1203
+ },
1204
+ {
1205
+ "internalType": "uint256",
1206
+ "name": "distributionFeeVarAmount",
1207
+ "type": "uint256"
1208
+ },
1209
+ {
1210
+ "internalType": "uint256",
1211
+ "name": "distributionOwnerFeeFixAmount",
1212
+ "type": "uint256"
1213
+ },
1214
+ {
1215
+ "internalType": "uint256",
1216
+ "name": "distributionOwnerFeeVarAmount",
1217
+ "type": "uint256"
1218
+ },
1219
+ {
1220
+ "internalType": "uint256",
1221
+ "name": "commissionAmount",
1222
+ "type": "uint256"
1223
+ },
1224
+ {
1225
+ "internalType": "uint256",
1226
+ "name": "discountAmount",
1227
+ "type": "uint256"
1228
+ }
1229
+ ],
1230
+ "internalType": "struct IPolicy.Premium",
1231
+ "name": "premium",
1232
+ "type": "tuple"
1233
+ },
1234
+ {
1235
+ "internalType": "uint256",
1236
+ "name": "transferredDistributionFeeAmount",
1237
+ "type": "uint256"
1238
+ }
1239
+ ],
1240
+ "name": "processSale",
1241
+ "outputs": [],
1242
+ "stateMutability": "nonpayable",
1243
+ "type": "function"
1244
+ },
1245
+ {
1246
+ "inputs": [
1247
+ {
1248
+ "internalType": "NftId",
1249
+ "name": "distributionNftId",
1250
+ "type": "uint96"
1251
+ },
1252
+ {
1253
+ "internalType": "ReferralId",
1254
+ "name": "referralId",
1255
+ "type": "bytes8"
1256
+ }
1257
+ ],
1258
+ "name": "referralIsValid",
1259
+ "outputs": [
1260
+ {
1261
+ "internalType": "bool",
1262
+ "name": "isValid",
1263
+ "type": "bool"
1264
+ }
1265
+ ],
1266
+ "stateMutability": "view",
1267
+ "type": "function"
1268
+ },
487
1269
  {
488
1270
  "inputs": [
489
1271
  {
@@ -505,6 +1287,49 @@
505
1287
  },
506
1288
  {
507
1289
  "inputs": [
1290
+ {
1291
+ "internalType": "bytes4",
1292
+ "name": "interfaceId",
1293
+ "type": "bytes4"
1294
+ }
1295
+ ],
1296
+ "name": "registerInterface",
1297
+ "outputs": [],
1298
+ "stateMutability": "nonpayable",
1299
+ "type": "function"
1300
+ },
1301
+ {
1302
+ "inputs": [
1303
+ {
1304
+ "internalType": "address",
1305
+ "name": "newAuthority",
1306
+ "type": "address"
1307
+ }
1308
+ ],
1309
+ "name": "setAuthority",
1310
+ "outputs": [],
1311
+ "stateMutability": "nonpayable",
1312
+ "type": "function"
1313
+ },
1314
+ {
1315
+ "inputs": [
1316
+ {
1317
+ "components": [
1318
+ {
1319
+ "internalType": "UFixed",
1320
+ "name": "fractionalFee",
1321
+ "type": "uint256"
1322
+ },
1323
+ {
1324
+ "internalType": "uint256",
1325
+ "name": "fixedFee",
1326
+ "type": "uint256"
1327
+ }
1328
+ ],
1329
+ "internalType": "struct Fee",
1330
+ "name": "minDistributionOwnerFee",
1331
+ "type": "tuple"
1332
+ },
508
1333
  {
509
1334
  "components": [
510
1335
  {
@@ -550,14 +1375,14 @@
550
1375
  {
551
1376
  "inputs": [
552
1377
  {
553
- "internalType": "address",
554
- "name": "implementation",
555
- "type": "address"
1378
+ "internalType": "NftId",
1379
+ "name": "distributorNftId",
1380
+ "type": "uint96"
556
1381
  },
557
1382
  {
558
- "internalType": "address",
559
- "name": "activatedBy",
560
- "type": "address"
1383
+ "internalType": "DistributorType",
1384
+ "name": "distributorType",
1385
+ "type": "bytes8"
561
1386
  },
562
1387
  {
563
1388
  "internalType": "bytes",
@@ -565,20 +1390,37 @@
565
1390
  "type": "bytes"
566
1391
  }
567
1392
  ],
568
- "name": "upgrade",
1393
+ "name": "updateDistributorType",
1394
+ "outputs": [],
1395
+ "stateMutability": "nonpayable",
1396
+ "type": "function"
1397
+ },
1398
+ {
1399
+ "inputs": [
1400
+ {
1401
+ "internalType": "bytes",
1402
+ "name": "data",
1403
+ "type": "bytes"
1404
+ }
1405
+ ],
1406
+ "name": "upgradeVersionable",
569
1407
  "outputs": [],
570
1408
  "stateMutability": "nonpayable",
571
1409
  "type": "function"
572
1410
  }
573
1411
  ],
574
- "bytecode": "0x60806040523480156200001157600080fd5b50620000546301ffc9a760e01b60009081526020527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c5805460ff19166001179055565b600280546001600160a01b031916331790556200007062000076565b6200012a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000c75760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620001275780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61273f806200013a6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063644c45e0116100b8578063b3c650151161007c578063b3c650151461044d578063b88da7591461046d578063caf4e3d414610480578063cc9fc59a14610488578063cde749f414610490578063cf7a1d77146104aa57600080fd5b8063644c45e0146103c1578063893d20e8146103d9578063946dfcfe146103e1578063a3f4df7e14610408578063a745e3df1461043a57600080fd5b80631eff4b221161010a5780631eff4b22146101fd5780633f52c0f6146102325780634420e486146102455780634d459c90146102705780634f421333146103895780635ab1bd531461039c57600080fd5b806301ffc9a7146101475780630d8e6e2c146101895780630fec111c146101a5578063138461e0146101bb57806317d7de7c146101c5575b600080fd5b610174610155366004611d94565b6001600160e01b03191660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b6101916104bd565b60405162ffffff9091168152602001610180565b6101ad610547565b604051610180929190611e15565b6101c361069a565b005b604080518082019091526013815272446973747269627574696f6e5365727669636560681b60208201525b6040516101809190611ebc565b6102247f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa30081565b604051908152602001610180565b6101c3610240366004611f5f565b6108bc565b610258610253366004611fa6565b610a1f565b6040516001600160601b039091168152602001610180565b61032c61027e366004611fd4565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526000805160206126ea83398151915262ffffff92831660009081526020918252604090819020815160a0810183528154958616815263010000009095046001600160a01b03908116938601939093526001015491821690840152600160a01b810464ffffffffff166060840152600160c81b900463ffffffff1660808301525090565b60408051825162ffffff1681526020808401516001600160a01b039081169183019190915283830151169181019190915260608083015164ffffffffff169082015260809182015163ffffffff169181019190915260a001610180565b610174610397366004611fd4565b610c23565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610180565b600154600160a01b90046001600160601b0316610258565b6103a9610cd6565b7f4f61291a8ac3d020d0a7d919a76b8592aa88385744dee3f8b4f3873b969ed90154610224565b6101f060405180604001604052806013815260200172446973747269627574696f6e5365727669636560681b81525081565b6101c3610448366004612018565b610df0565b610455610f4a565b6040516001600160401b039091168152602001610180565b61019161047b3660046120bc565b610f6b565b6103a9610fbc565b6103a9611077565b6104986110ef565b60405160ff9091168152602001610180565b6101c36104b8366004612018565b611172565b604051632efe011360e01b815260036004820152600060248201819052604482018190529073__$c0fcb9c1c2e971ebe3d8745a7e2c5cc364$__90632efe011390606401602060405180830381865af415801561051e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054291906120d5565b905090565b61054f611cfa565b606060007f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa30090506040518060e0016040528061059b6001546001600160601b03600160a01b9091041690565b6001600160601b0390811682528354908116602083015260ff600160601b820481166040840152600160681b909104161515606082015230608082015260a0016105e3610cd6565b6001600160a01b03168152602001826001018054610600906120f2565b80601f016020809104026020016040519081016040528092919081815260200182805461062c906120f2565b80156106795780601f1061064e57610100808354040283529160200191610679565b820191906000526020600020905b81548152906001019060200180831161065c57829003601f168201915b50505050508152506040518060200160405280600081525092509250509091565b6001546040516330b8415f60e01b8152600160a01b9091046001600160601b0316600482015273__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906330b8415f90602401602060405180830381865af41580156106fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107209190612141565b15610767576001546040516316322c0f60e31b81526001600160a01b0382166004820152600160a01b9091046001600160601b031660248201526044015b60405180910390fd5b6001546001600160a01b03166107905760405163cf29926160e01b815260040160405180910390fd5b60015460405163c3c5a54760e01b81523060048201819052916001600160a01b03169063c3c5a54790602401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190612141565b610825576040516372657a5160e01b81526001600160a01b038216600482015260240161075e565b600154604051636939560f60e11b81526001600160a01b0383811660048301529091169063d272ac1e90602401602060405180830381865afa15801561086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108939190612173565b600160146101000a8154816001600160601b0302191690836001600160601b0316021790555050565b6000806108c9607861127b565b915091506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610931919061218e565b8351604051639ad69c6760e01b81526001600160601b0382166004820152919250906000906001600160a01b03841690639ad69c679060240160c060405180830381865afa158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab91906121b6565b60408181018890525163bd5947e360e01b81529091506001600160a01b0385169063bd5947e3906109e5908590859060ff906004016122c0565b600060405180830381600087803b1580156109ff57600080fd5b505af1158015610a13573d6000803e3d6000fd5b50505050505050505050565b60003382610a2b611cfa565b6060610a35610fbc565b604051638fbc2d8160e01b81526001600160a01b03858116600483015286811660248301529190911690638fbc2d81906044016000604051808303816000875af1158015610a87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aaf9190810190612403565b90925090506000610abf836113eb565b90506000610acb611077565b6001600160a01b031663103bd5da87610ae261148d565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201526001600160401b0390911660248201529085166044820152606401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b629190612141565b905080610ba557610b7161148d565b6040516351302f8160e01b81526001600160401b0390911660048201526001600160a01b038716602482015260440161075e565b835196506000610bb484611504565b604051630b24cf5f60e01b81529091506001600160a01b03841690630b24cf5f90610be5908b908590600401612466565b600060405180830381600087803b158015610bff57600080fd5b505af1158015610c13573d6000803e3d6000fd5b5050505050505050505050919050565b6000806000805160206126ea83398151915262ffffff84166000908152602091909152604090819020600101549051631bbffab160e21b8152600160c81b90910463ffffffff16600482015273__$5f476116ae21c5294e0c0761c07efa7e1c$__90636effeac490602401602060405180830381865af4158015610cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccf9190612483565b1192915050565b6001546040516330b8415f60e01b8152600160a01b9091046001600160601b0316600482015260009073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906330b8415f90602401602060405180830381865af4158015610d3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5f9190612141565b15610de057600154604051631c5da14d60e11b8152600160a01b82046001600160601b031660048201526001600160a01b03909116906338bb429a906024015b602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610542919061218e565b506002546001600160a01b031690565b73__$c0fcb9c1c2e971ebe3d8745a7e2c5cc364$__63a123b37c610e126104bd565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865af4158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7691906124b1565b6000805160206126ca8339815191528054600160401b900460ff1680610ea9575080546001600160401b03808416911610155b15610ec75760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ef28585611520565b610efb836117bf565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15050505050565b60006105426000805160206126ca833981519152546001600160401b031690565b60006000805160206126ea8339815191526001018281548110610f9057610f906124ce565b90600052602060002090600a91828204019190066003029054906101000a900462ffffff169050919050565b600080610fd16001546001600160a01b031690565b6001600160a01b031663a3bcd81d610fe76110ef565b604080516001600160e01b031960e085901b1681526004810191909152600f60448201526e52656769737472795365727669636560881b606482015260ff9091166024820152608401602060405180830381865afa15801561104d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611071919061218e565b92915050565b600061108b6001546001600160a01b031690565b6001600160a01b031663a3bcd81d6110a16110ef565b604080516001600160e01b031960e085901b1681526004810191909152600f60448201526e496e7374616e63655365727669636560881b606482015260ff9091166024820152608401610d9f565b60006110f96104bd565b60405163c9e66e2960e01b815262ffffff909116600482015273__$c0fcb9c1c2e971ebe3d8745a7e2c5cc364$__9063c9e66e2990602401602060405180830381865af415801561114e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054291906124e4565b6000805160206126ca8339815191528054600160401b810460ff1615906001600160401b03166000811580156111a55750825b90506000826001600160401b031660011480156111c15750303b155b9050811580156111cf575080155b156111ed5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561121757845460ff60401b1916600160401b1785555b6112218888611520565b61122b87876117c7565b831561127157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611283611cfa565b6000806112986001546001600160a01b031690565b6040516308b09a5f60e41b81523360048201529091506001600160a01b03821690638b09a5f090602401600060405180830381865afa1580156112df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113079190810190612501565b925061131d83604001518560ff90811691161490565b61135f5760405162461bcd60e51b815260206004820152601360248201527213d0929150d517d516541157d2539590531251606a1b604482015260640161075e565b60208301516040516305247a1760e51b81526001600160601b0390911660048201526000906001600160a01b0383169063a48f42e090602401600060405180830381865afa1580156113b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113dd9190810190612501565b608001519395939450505050565b6000806114006001546001600160a01b031690565b60208401516040516305247a1760e51b81526001600160601b0390911660048201529091506000906001600160a01b0383169063a48f42e090602401600060405180830381865afa158015611459573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114819190810190612501565b60800151949350505050565b6040516368aebf7b60e01b81526064600482015260009073__$cd131c2b3ba46b9dbe046aaf4458b9777d$__906368aebf7b90602401602060405180830381865af41580156114e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054291906124b1565b61150c611d38565b8180602001905181019061107191906121b6565b6115286118f2565b6000805160206126ea83398151915260006115586000805160206126ca833981519152546001600160401b031690565b905060006115646104bd565b9050816001600160401b03166001036115915760028301805462ffffff191662ffffff83161790556115df565b600283015462ffffff908116908216116115df5760405162461bcd60e51b815260206004820152600f60248201526e24a72b20a624a2102b22a929a4a7a760891b604482015260640161075e565b6001808401805491820181556000908152602090819020600a808404909101805462ffffff808716600394909606939093026101000a858102930219169190911790556040805160a0810182529283526001600160a01b038089168484015287168382015280516356db0c1960e11b81529051606084019273__$d53880c81dc91c20799140d711e5ab8718$__9263adb6183292600480830193928290030181865af4158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b79190612535565b64ffffffffff1681526020014363ffffffff90811690915262ffffff8084166000908152602087815260409182902085518154928701516001600160a01b039081166301000000026001600160b81b0319909416919095161791909117815584820151600190910180546060870151608090970151909516600160c81b0263ffffffff60c81b1964ffffffffff909716600160a01b026001600160c81b031990961692909416919091179390931793909316179055517fad0a0fc10465a8dd9da3ad5f43e1a7fff4b4578551c76f0ae8deb844f0d0bf6890610f3b9083908890889062ffffff9390931683526001600160a01b03918216602084015216604082015260600190565b6101426118f2565b6000805160206126ca8339815191528054600160401b810460ff1615906001600160401b03166000811580156117fa5750825b90506000826001600160401b031660011480156118165750303b155b905081158015611824575080155b156118425760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561186c57845460ff60401b1916600160401b1785555b60008087806020019051810190611883919061255c565b92509050611891818a61192b565b6118a1631fa9607b60e11b6119bc565b505083156118e957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6000805160206126ca83398151915254600160401b900460ff1661192957604051631afcd79f60e31b815260040160405180910390fd5b565b600061195d604080518082019091526013815272446973747269627574696f6e5365727669636560681b602082015290565b6119656110ef565b604051602001611976929190612596565b60405160208183030381529060405290506000611992846119e1565b905060006119a58583603c848888611a4c565b6119b5631b4612f160e31b6119bc565b5050505050565b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b604051636939560f60e11b81526001600160a01b0382166004820181905260009163d272ac1e90602401602060405180830381865afa158015611a28573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110719190612173565b611a8d6301ffc9a760e01b60009081526020527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c5805460ff19166001179055565b611a978287611b18565b60007f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa30080546001600160601b0388166cffffffffffffffffffffffffff1990911617600160601b60ff8816021760ff60681b1916600160681b86151502178155905060018101611b07838261260a565b506118e96303fb044760e21b6119bc565b6001600160a01b038216611b6e5760405162461bcd60e51b815260206004820152601e60248201527f4e66744f776e61626c653a20696e697469616c206f776e657220697320300000604482015260640161075e565b600280546001600160a01b0319166001600160a01b038416179055611b9281611b96565b5050565b6001546001600160a01b031615611bcf5760015460405163fcdbf2d960e01b81526001600160a01b03909116600482015260240161075e565b6001600160a01b038116611bf65760405163f5c4d07d60e01b815260040160405180910390fd5b806001600160a01b03163b600003611c2c5760405163fdeac91f60e01b81526001600160a01b038216600482015260240161075e565b600180546001600160a01b0319166001600160a01b0383169081179091556040516301ffc9a760e01b8152632eaf856d60e11b60048201526301ffc9a790602401602060405180830381865afa925050508015611ca6575060408051601f3d908101601f19168201909252611ca391810190612141565b60015b611cce5760405163fdeac91f60e01b81526001600160a01b038216600482015260240161075e565b80611b925760405163fdeac91f60e01b81526001600160a01b038316600482015260240161075e565b50565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820183905260a082019290925260c081019190915290565b6040518060a0016040528060006001600160601b0316815260200160006001600160a01b03168152602001611d80604051806040016040528060008152602001600081525090565b815260006020820181905260409091015290565b600060208284031215611da657600080fd5b81356001600160e01b031981168114611dbe57600080fd5b9392505050565b60005b83811015611de0578181015183820152602001611dc8565b50506000910152565b60008151808452611e01816020860160208601611dc5565b601f01601f19169290920160200192915050565b6040815260006001600160601b038085511660408401528060208601511660608401525060ff60408501511660808301526060840151611e5960a084018215159052565b5060808401516001600160a01b03811660c08401525060a08401516001600160a01b03811660e08401525060c084015160e0610100840152611e9f610120840182611de9565b90508281036020840152611eb38185611de9565b95945050505050565b602081526000611dbe6020830184611de9565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611f0757611f07611ecf565b60405290565b60405160e081016001600160401b0381118282101715611f0757611f07611ecf565b604051601f8201601f191681016001600160401b0381118282101715611f5757611f57611ecf565b604052919050565b600060408284031215611f7157600080fd5b611f79611ee5565b82358152602083013560208201528091505092915050565b6001600160a01b0381168114611cf757600080fd5b600060208284031215611fb857600080fd5b8135611dbe81611f91565b62ffffff81168114611cf757600080fd5b600060208284031215611fe657600080fd5b8135611dbe81611fc3565b60006001600160401b0382111561200a5761200a611ecf565b50601f01601f191660200190565b60008060006060848603121561202d57600080fd5b833561203881611f91565b9250602084013561204881611f91565b915060408401356001600160401b0381111561206357600080fd5b8401601f8101861361207457600080fd5b803561208761208282611ff1565b611f2f565b81815287602083850101111561209c57600080fd5b816020840160208301376000602083830101528093505050509250925092565b6000602082840312156120ce57600080fd5b5035919050565b6000602082840312156120e757600080fd5b8151611dbe81611fc3565b600181811c9082168061210657607f821691505b60208210810361212657634e487b7160e01b600052602260045260246000fd5b50919050565b8051801515811461213c57600080fd5b919050565b60006020828403121561215357600080fd5b611dbe8261212c565b80516001600160601b038116811461213c57600080fd5b60006020828403121561218557600080fd5b611dbe8261215c565b6000602082840312156121a057600080fd5b8151611dbe81611f91565b805161213c81611f91565b600081830360c08112156121c957600080fd5b60405160a081018181106001600160401b03821117156121eb576121eb611ecf565b6040526121f78461215c565b8152602084015161220781611f91565b60208201526040603f198301121561221e57600080fd5b612226611ee5565b9150604084015182526060840151602083015281604082015261224b6080850161212c565b606082015261225c60a085016121ab565b6080820152949350505050565b6001600160601b038151168252602081015160018060a01b0380821660208501526040830151915081516040850152602082015160608501526060830151151560808501528060808401511660a085015250505050565b6001600160601b038416815261010081016122de6020830185612269565b60ff831660e0830152949350505050565b60ff81168114611cf757600080fd5b805161213c816122ef565b600082601f83011261231a57600080fd5b815161232861208282611ff1565b81815284602083860101111561233d57600080fd5b61234e826020830160208701611dc5565b949350505050565b600060e0828403121561236857600080fd5b612370611f0d565b905061237b8261215c565b81526123896020830161215c565b602082015261239a604083016122fe565b60408201526123ab6060830161212c565b60608201526123bc608083016121ab565b60808201526123cd60a083016121ab565b60a082015260c08201516001600160401b038111156123eb57600080fd5b6123f784828501612309565b60c08301525092915050565b6000806040838503121561241657600080fd5b82516001600160401b038082111561242d57600080fd5b61243986838701612356565b9350602085015191508082111561244f57600080fd5b5061245c85828601612309565b9150509250929050565b6001600160601b038316815260e08101611dbe6020830184612269565b60006020828403121561249557600080fd5b5051919050565b6001600160401b0381168114611cf757600080fd5b6000602082840312156124c357600080fd5b8151611dbe8161249c565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156124f657600080fd5b8151611dbe816122ef565b60006020828403121561251357600080fd5b81516001600160401b0381111561252957600080fd5b61234e84828501612356565b60006020828403121561254757600080fd5b815164ffffffffff81168114611dbe57600080fd5b6000806040838503121561256f57600080fd5b825161257a81611f91565b602084015190925061258b81611f91565b809150509250929050565b6040815260006125a96040830185611de9565b905060ff831660208301529392505050565b601f82111561260557600081815260208120601f850160051c810160208610156125e25750805b601f850160051c820191505b81811015612601578281556001016125ee565b5050505b505050565b81516001600160401b0381111561262357612623611ecf565b6126378161263184546120f2565b846125bb565b602080601f83116001811461266c57600084156126545750858301515b600019600386901b1c1916600185901b178555612601565b600085815260208120601f198616915b8281101561269b5788860151825594840194600190910190840161267c565b50858210156126b95787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fef0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a004f61291a8ac3d020d0a7d919a76b8592aa88385744dee3f8b4f3873b969ed900a26469706673582212206b27e3fb22081ecae9c515fd63bb94a001c23626d4ce7ac95b87ae1b8a51cc0864736f6c63430008140033",
575
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101425760003560e01c8063644c45e0116100b8578063b3c650151161007c578063b3c650151461044d578063b88da7591461046d578063caf4e3d414610480578063cc9fc59a14610488578063cde749f414610490578063cf7a1d77146104aa57600080fd5b8063644c45e0146103c1578063893d20e8146103d9578063946dfcfe146103e1578063a3f4df7e14610408578063a745e3df1461043a57600080fd5b80631eff4b221161010a5780631eff4b22146101fd5780633f52c0f6146102325780634420e486146102455780634d459c90146102705780634f421333146103895780635ab1bd531461039c57600080fd5b806301ffc9a7146101475780630d8e6e2c146101895780630fec111c146101a5578063138461e0146101bb57806317d7de7c146101c5575b600080fd5b610174610155366004611d94565b6001600160e01b03191660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b6101916104bd565b60405162ffffff9091168152602001610180565b6101ad610547565b604051610180929190611e15565b6101c361069a565b005b604080518082019091526013815272446973747269627574696f6e5365727669636560681b60208201525b6040516101809190611ebc565b6102247f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa30081565b604051908152602001610180565b6101c3610240366004611f5f565b6108bc565b610258610253366004611fa6565b610a1f565b6040516001600160601b039091168152602001610180565b61032c61027e366004611fd4565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526000805160206126ea83398151915262ffffff92831660009081526020918252604090819020815160a0810183528154958616815263010000009095046001600160a01b03908116938601939093526001015491821690840152600160a01b810464ffffffffff166060840152600160c81b900463ffffffff1660808301525090565b60408051825162ffffff1681526020808401516001600160a01b039081169183019190915283830151169181019190915260608083015164ffffffffff169082015260809182015163ffffffff169181019190915260a001610180565b610174610397366004611fd4565b610c23565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610180565b600154600160a01b90046001600160601b0316610258565b6103a9610cd6565b7f4f61291a8ac3d020d0a7d919a76b8592aa88385744dee3f8b4f3873b969ed90154610224565b6101f060405180604001604052806013815260200172446973747269627574696f6e5365727669636560681b81525081565b6101c3610448366004612018565b610df0565b610455610f4a565b6040516001600160401b039091168152602001610180565b61019161047b3660046120bc565b610f6b565b6103a9610fbc565b6103a9611077565b6104986110ef565b60405160ff9091168152602001610180565b6101c36104b8366004612018565b611172565b604051632efe011360e01b815260036004820152600060248201819052604482018190529073__$c0fcb9c1c2e971ebe3d8745a7e2c5cc364$__90632efe011390606401602060405180830381865af415801561051e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054291906120d5565b905090565b61054f611cfa565b606060007f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa30090506040518060e0016040528061059b6001546001600160601b03600160a01b9091041690565b6001600160601b0390811682528354908116602083015260ff600160601b820481166040840152600160681b909104161515606082015230608082015260a0016105e3610cd6565b6001600160a01b03168152602001826001018054610600906120f2565b80601f016020809104026020016040519081016040528092919081815260200182805461062c906120f2565b80156106795780601f1061064e57610100808354040283529160200191610679565b820191906000526020600020905b81548152906001019060200180831161065c57829003601f168201915b50505050508152506040518060200160405280600081525092509250509091565b6001546040516330b8415f60e01b8152600160a01b9091046001600160601b0316600482015273__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906330b8415f90602401602060405180830381865af41580156106fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107209190612141565b15610767576001546040516316322c0f60e31b81526001600160a01b0382166004820152600160a01b9091046001600160601b031660248201526044015b60405180910390fd5b6001546001600160a01b03166107905760405163cf29926160e01b815260040160405180910390fd5b60015460405163c3c5a54760e01b81523060048201819052916001600160a01b03169063c3c5a54790602401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190612141565b610825576040516372657a5160e01b81526001600160a01b038216600482015260240161075e565b600154604051636939560f60e11b81526001600160a01b0383811660048301529091169063d272ac1e90602401602060405180830381865afa15801561086f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108939190612173565b600160146101000a8154816001600160601b0302191690836001600160601b0316021790555050565b6000806108c9607861127b565b915091506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610931919061218e565b8351604051639ad69c6760e01b81526001600160601b0382166004820152919250906000906001600160a01b03841690639ad69c679060240160c060405180830381865afa158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab91906121b6565b60408181018890525163bd5947e360e01b81529091506001600160a01b0385169063bd5947e3906109e5908590859060ff906004016122c0565b600060405180830381600087803b1580156109ff57600080fd5b505af1158015610a13573d6000803e3d6000fd5b50505050505050505050565b60003382610a2b611cfa565b6060610a35610fbc565b604051638fbc2d8160e01b81526001600160a01b03858116600483015286811660248301529190911690638fbc2d81906044016000604051808303816000875af1158015610a87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aaf9190810190612403565b90925090506000610abf836113eb565b90506000610acb611077565b6001600160a01b031663103bd5da87610ae261148d565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201526001600160401b0390911660248201529085166044820152606401602060405180830381865afa158015610b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b629190612141565b905080610ba557610b7161148d565b6040516351302f8160e01b81526001600160401b0390911660048201526001600160a01b038716602482015260440161075e565b835196506000610bb484611504565b604051630b24cf5f60e01b81529091506001600160a01b03841690630b24cf5f90610be5908b908590600401612466565b600060405180830381600087803b158015610bff57600080fd5b505af1158015610c13573d6000803e3d6000fd5b5050505050505050505050919050565b6000806000805160206126ea83398151915262ffffff84166000908152602091909152604090819020600101549051631bbffab160e21b8152600160c81b90910463ffffffff16600482015273__$5f476116ae21c5294e0c0761c07efa7e1c$__90636effeac490602401602060405180830381865af4158015610cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccf9190612483565b1192915050565b6001546040516330b8415f60e01b8152600160a01b9091046001600160601b0316600482015260009073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906330b8415f90602401602060405180830381865af4158015610d3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5f9190612141565b15610de057600154604051631c5da14d60e11b8152600160a01b82046001600160601b031660048201526001600160a01b03909116906338bb429a906024015b602060405180830381865afa158015610dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610542919061218e565b506002546001600160a01b031690565b73__$c0fcb9c1c2e971ebe3d8745a7e2c5cc364$__63a123b37c610e126104bd565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865af4158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7691906124b1565b6000805160206126ca8339815191528054600160401b900460ff1680610ea9575080546001600160401b03808416911610155b15610ec75760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610ef28585611520565b610efb836117bf565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15050505050565b60006105426000805160206126ca833981519152546001600160401b031690565b60006000805160206126ea8339815191526001018281548110610f9057610f906124ce565b90600052602060002090600a91828204019190066003029054906101000a900462ffffff169050919050565b600080610fd16001546001600160a01b031690565b6001600160a01b031663a3bcd81d610fe76110ef565b604080516001600160e01b031960e085901b1681526004810191909152600f60448201526e52656769737472795365727669636560881b606482015260ff9091166024820152608401602060405180830381865afa15801561104d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611071919061218e565b92915050565b600061108b6001546001600160a01b031690565b6001600160a01b031663a3bcd81d6110a16110ef565b604080516001600160e01b031960e085901b1681526004810191909152600f60448201526e496e7374616e63655365727669636560881b606482015260ff9091166024820152608401610d9f565b60006110f96104bd565b60405163c9e66e2960e01b815262ffffff909116600482015273__$c0fcb9c1c2e971ebe3d8745a7e2c5cc364$__9063c9e66e2990602401602060405180830381865af415801561114e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054291906124e4565b6000805160206126ca8339815191528054600160401b810460ff1615906001600160401b03166000811580156111a55750825b90506000826001600160401b031660011480156111c15750303b155b9050811580156111cf575080155b156111ed5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561121757845460ff60401b1916600160401b1785555b6112218888611520565b61122b87876117c7565b831561127157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b611283611cfa565b6000806112986001546001600160a01b031690565b6040516308b09a5f60e41b81523360048201529091506001600160a01b03821690638b09a5f090602401600060405180830381865afa1580156112df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113079190810190612501565b925061131d83604001518560ff90811691161490565b61135f5760405162461bcd60e51b815260206004820152601360248201527213d0929150d517d516541157d2539590531251606a1b604482015260640161075e565b60208301516040516305247a1760e51b81526001600160601b0390911660048201526000906001600160a01b0383169063a48f42e090602401600060405180830381865afa1580156113b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113dd9190810190612501565b608001519395939450505050565b6000806114006001546001600160a01b031690565b60208401516040516305247a1760e51b81526001600160601b0390911660048201529091506000906001600160a01b0383169063a48f42e090602401600060405180830381865afa158015611459573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114819190810190612501565b60800151949350505050565b6040516368aebf7b60e01b81526064600482015260009073__$cd131c2b3ba46b9dbe046aaf4458b9777d$__906368aebf7b90602401602060405180830381865af41580156114e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054291906124b1565b61150c611d38565b8180602001905181019061107191906121b6565b6115286118f2565b6000805160206126ea83398151915260006115586000805160206126ca833981519152546001600160401b031690565b905060006115646104bd565b9050816001600160401b03166001036115915760028301805462ffffff191662ffffff83161790556115df565b600283015462ffffff908116908216116115df5760405162461bcd60e51b815260206004820152600f60248201526e24a72b20a624a2102b22a929a4a7a760891b604482015260640161075e565b6001808401805491820181556000908152602090819020600a808404909101805462ffffff808716600394909606939093026101000a858102930219169190911790556040805160a0810182529283526001600160a01b038089168484015287168382015280516356db0c1960e11b81529051606084019273__$d53880c81dc91c20799140d711e5ab8718$__9263adb6183292600480830193928290030181865af4158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b79190612535565b64ffffffffff1681526020014363ffffffff90811690915262ffffff8084166000908152602087815260409182902085518154928701516001600160a01b039081166301000000026001600160b81b0319909416919095161791909117815584820151600190910180546060870151608090970151909516600160c81b0263ffffffff60c81b1964ffffffffff909716600160a01b026001600160c81b031990961692909416919091179390931793909316179055517fad0a0fc10465a8dd9da3ad5f43e1a7fff4b4578551c76f0ae8deb844f0d0bf6890610f3b9083908890889062ffffff9390931683526001600160a01b03918216602084015216604082015260600190565b6101426118f2565b6000805160206126ca8339815191528054600160401b810460ff1615906001600160401b03166000811580156117fa5750825b90506000826001600160401b031660011480156118165750303b155b905081158015611824575080155b156118425760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561186c57845460ff60401b1916600160401b1785555b60008087806020019051810190611883919061255c565b92509050611891818a61192b565b6118a1631fa9607b60e11b6119bc565b505083156118e957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6000805160206126ca83398151915254600160401b900460ff1661192957604051631afcd79f60e31b815260040160405180910390fd5b565b600061195d604080518082019091526013815272446973747269627574696f6e5365727669636560681b602082015290565b6119656110ef565b604051602001611976929190612596565b60405160208183030381529060405290506000611992846119e1565b905060006119a58583603c848888611a4c565b6119b5631b4612f160e31b6119bc565b5050505050565b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b604051636939560f60e11b81526001600160a01b0382166004820181905260009163d272ac1e90602401602060405180830381865afa158015611a28573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110719190612173565b611a8d6301ffc9a760e01b60009081526020527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c5805460ff19166001179055565b611a978287611b18565b60007f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa30080546001600160601b0388166cffffffffffffffffffffffffff1990911617600160601b60ff8816021760ff60681b1916600160681b86151502178155905060018101611b07838261260a565b506118e96303fb044760e21b6119bc565b6001600160a01b038216611b6e5760405162461bcd60e51b815260206004820152601e60248201527f4e66744f776e61626c653a20696e697469616c206f776e657220697320300000604482015260640161075e565b600280546001600160a01b0319166001600160a01b038416179055611b9281611b96565b5050565b6001546001600160a01b031615611bcf5760015460405163fcdbf2d960e01b81526001600160a01b03909116600482015260240161075e565b6001600160a01b038116611bf65760405163f5c4d07d60e01b815260040160405180910390fd5b806001600160a01b03163b600003611c2c5760405163fdeac91f60e01b81526001600160a01b038216600482015260240161075e565b600180546001600160a01b0319166001600160a01b0383169081179091556040516301ffc9a760e01b8152632eaf856d60e11b60048201526301ffc9a790602401602060405180830381865afa925050508015611ca6575060408051601f3d908101601f19168201909252611ca391810190612141565b60015b611cce5760405163fdeac91f60e01b81526001600160a01b038216600482015260240161075e565b80611b925760405163fdeac91f60e01b81526001600160a01b038316600482015260240161075e565b50565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820183905260a082019290925260c081019190915290565b6040518060a0016040528060006001600160601b0316815260200160006001600160a01b03168152602001611d80604051806040016040528060008152602001600081525090565b815260006020820181905260409091015290565b600060208284031215611da657600080fd5b81356001600160e01b031981168114611dbe57600080fd5b9392505050565b60005b83811015611de0578181015183820152602001611dc8565b50506000910152565b60008151808452611e01816020860160208601611dc5565b601f01601f19169290920160200192915050565b6040815260006001600160601b038085511660408401528060208601511660608401525060ff60408501511660808301526060840151611e5960a084018215159052565b5060808401516001600160a01b03811660c08401525060a08401516001600160a01b03811660e08401525060c084015160e0610100840152611e9f610120840182611de9565b90508281036020840152611eb38185611de9565b95945050505050565b602081526000611dbe6020830184611de9565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611f0757611f07611ecf565b60405290565b60405160e081016001600160401b0381118282101715611f0757611f07611ecf565b604051601f8201601f191681016001600160401b0381118282101715611f5757611f57611ecf565b604052919050565b600060408284031215611f7157600080fd5b611f79611ee5565b82358152602083013560208201528091505092915050565b6001600160a01b0381168114611cf757600080fd5b600060208284031215611fb857600080fd5b8135611dbe81611f91565b62ffffff81168114611cf757600080fd5b600060208284031215611fe657600080fd5b8135611dbe81611fc3565b60006001600160401b0382111561200a5761200a611ecf565b50601f01601f191660200190565b60008060006060848603121561202d57600080fd5b833561203881611f91565b9250602084013561204881611f91565b915060408401356001600160401b0381111561206357600080fd5b8401601f8101861361207457600080fd5b803561208761208282611ff1565b611f2f565b81815287602083850101111561209c57600080fd5b816020840160208301376000602083830101528093505050509250925092565b6000602082840312156120ce57600080fd5b5035919050565b6000602082840312156120e757600080fd5b8151611dbe81611fc3565b600181811c9082168061210657607f821691505b60208210810361212657634e487b7160e01b600052602260045260246000fd5b50919050565b8051801515811461213c57600080fd5b919050565b60006020828403121561215357600080fd5b611dbe8261212c565b80516001600160601b038116811461213c57600080fd5b60006020828403121561218557600080fd5b611dbe8261215c565b6000602082840312156121a057600080fd5b8151611dbe81611f91565b805161213c81611f91565b600081830360c08112156121c957600080fd5b60405160a081018181106001600160401b03821117156121eb576121eb611ecf565b6040526121f78461215c565b8152602084015161220781611f91565b60208201526040603f198301121561221e57600080fd5b612226611ee5565b9150604084015182526060840151602083015281604082015261224b6080850161212c565b606082015261225c60a085016121ab565b6080820152949350505050565b6001600160601b038151168252602081015160018060a01b0380821660208501526040830151915081516040850152602082015160608501526060830151151560808501528060808401511660a085015250505050565b6001600160601b038416815261010081016122de6020830185612269565b60ff831660e0830152949350505050565b60ff81168114611cf757600080fd5b805161213c816122ef565b600082601f83011261231a57600080fd5b815161232861208282611ff1565b81815284602083860101111561233d57600080fd5b61234e826020830160208701611dc5565b949350505050565b600060e0828403121561236857600080fd5b612370611f0d565b905061237b8261215c565b81526123896020830161215c565b602082015261239a604083016122fe565b60408201526123ab6060830161212c565b60608201526123bc608083016121ab565b60808201526123cd60a083016121ab565b60a082015260c08201516001600160401b038111156123eb57600080fd5b6123f784828501612309565b60c08301525092915050565b6000806040838503121561241657600080fd5b82516001600160401b038082111561242d57600080fd5b61243986838701612356565b9350602085015191508082111561244f57600080fd5b5061245c85828601612309565b9150509250929050565b6001600160601b038316815260e08101611dbe6020830184612269565b60006020828403121561249557600080fd5b5051919050565b6001600160401b0381168114611cf757600080fd5b6000602082840312156124c357600080fd5b8151611dbe8161249c565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156124f657600080fd5b8151611dbe816122ef565b60006020828403121561251357600080fd5b81516001600160401b0381111561252957600080fd5b61234e84828501612356565b60006020828403121561254757600080fd5b815164ffffffffff81168114611dbe57600080fd5b6000806040838503121561256f57600080fd5b825161257a81611f91565b602084015190925061258b81611f91565b809150509250929050565b6040815260006125a96040830185611de9565b905060ff831660208301529392505050565b601f82111561260557600081815260208120601f850160051c810160208610156125e25750805b601f850160051c820191505b81811015612601578281556001016125ee565b5050505b505050565b81516001600160401b0381111561262357612623611ecf565b6126378161263184546120f2565b846125bb565b602080601f83116001811461266c57600084156126545750858301515b600019600386901b1c1916600185901b178555612601565b600085815260208120601f198616915b8281101561269b5788860151825594840194600190910190840161267c565b50858210156126b95787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fef0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a004f61291a8ac3d020d0a7d919a76b8592aa88385744dee3f8b4f3873b969ed900a26469706673582212206b27e3fb22081ecae9c515fd63bb94a001c23626d4ce7ac95b87ae1b8a51cc0864736f6c63430008140033",
1412
+ "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615f9b80620000e66000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063644c45e01161011a578063b6b412ba116100ad578063cde749f41161007c578063cde749f414610561578063d25f509514610569578063ea8665721461057c578063f21de1e81461043e578063f7c34ee01461058f57600080fd5b8063b6b412ba14610520578063bf7e214f14610533578063caf4e3d414610551578063cc9fc59a1461055957600080fd5b80638dd2b781116100e95780638dd2b781146104c25780638fb36037146104d5578063ada9652e146104f6578063b68d18091461050b57600080fd5b8063644c45e014610476578063675393bf146104945780637a9e5e4b146104a7578063893d20e8146104ba57600080fd5b806327bb7a331161019d5780633d683fd91161016c5780633d683fd9146103ed5780634420e4861461040057806349bb9e4b1461042b5780635ab1bd531461043e5780635dcb3bae1461046357600080fd5b806327bb7a331461039f5780632b5198b1146103b2578063329d6e74146103d257806336fc697e146103e557600080fd5b80631eff4b22116101d95780631eff4b2214610288578063214cdb80146102bd578063219a3195146102d057806325d073841461038c57600080fd5b806301ffc9a71461020b5780630d8e6e2c1461024d5780630fec111c14610269578063138461e01461027e575b600080fd5b610238610219366004614aba565b6001600160e01b03191660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b6102556105a2565b60405162ffffff9091168152602001610244565b61027161062c565b6040516102449190614b34565b6102866107e0565b005b6102af7f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa30081565b604051908152602001610244565b6102866102cb366004614aba565b6109e7565b6102e36102de366004614da3565b610a14565b6040516102449190815181526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101408083015190820152610160808301519082015261018080830151908201526101a080830151908201526101c091820151918101919091526101e00190565b61023861039a366004614dec565b6112a1565b6102866103ad366004614ee4565b6115d4565b6103c56103c0366004614f8e565b611660565b604051610244919061505a565b6102866103e036600461506f565b611c1a565b610286611d67565b6102866103fb3660046150a3565b611dad565b61041361040e366004615104565b611f1a565b6040516001600160601b039091168152602001610244565b610286610439366004615121565b6123b6565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610244565b610413610471366004615170565b6124b5565b600080516020615f06833981519152546001600160601b0316610413565b6102866104a2366004615104565b612655565b6102866104b5366004615104565b612763565b61044b6127fd565b6103c56104d03660046151a3565b612934565b6104dd6131c3565b6040516001600160e01b03199091168152602001610244565b6102af600080516020615f0683398151915281565b60785b60405160ff9091168152602001610244565b61028661052e36600461526d565b6131fb565b600080516020615f26833981519152546001600160a01b031661044b565b61044b613481565b61044b613518565b61050e613542565b6102866105773660046152a2565b6135b9565b61028661058a3660046152f4565b613b0c565b61028661059d3660046152f4565b613bb4565b604051632efe011360e01b815260036004820152600060248201819052604482018190529073__$c0fcb9c1c2e971ebe3d8745a7e2c5cc364$__90632efe011390606401602060405180830381865af4158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190615322565b905090565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820183905260a082019290925260c081019190915260007f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa3006040805160808101825282546001600160601b038116825260ff600160601b820481166020840152600160681b909104161515918101919091526001820180549192916060840191906106dc90615347565b80601f016020809104026020016040519081016040528092919081815260200182805461070890615347565b80156107555780601f1061072a57610100808354040283529160200191610755565b820191906000526020600020905b81548152906001019060200180831161073857829003601f168201915b50505050508152505090506040518060e00160405280610773600090565b6001600160601b0316815260200182600001516001600160601b03168152602001826020015160ff168152602001826040015115158152602001306001600160a01b031681526020016107c46127fd565b6001600160a01b03168152602001826060015181525091505090565b6000600080516020615f0683398151915280546040516330b8415f60e01b81526001600160601b03909116600482015290915073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906330b8415f90602401602060405180830381865af415801561084f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610873919061538c565b156108a45780546040516301ab8b6760e21b81526001600160601b0390911660048201526024015b60405180910390fd5b306108b76001546001600160a01b031690565b60405163c3c5a54760e01b81526001600160a01b038381166004830152919091169063c3c5a54790602401602060405180830381865afa1580156108ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610923919061538c565b61094b5760405163b9304b0d60e01b81526001600160a01b038216600482015260240161089b565b6001546001600160a01b0316604051636939560f60e11b81526001600160a01b038381166004830152919091169063d272ac1e90602401602060405180830381865afa15801561099f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c391906153b4565b82546bffffffffffffffffffffffff19166001600160601b03919091161790915550565b6109ef613c2b565b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b610a8d604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000610a9885613c64565b90506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afe91906153d1565b604051639ad69c6760e01b81526001600160601b03881660048201529091506000906001600160a01b03831690639ad69c679060240161010060405180830381865afa158015610b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b769190615429565b6060810151604080830151885191516322f5db0f60e11b81529394509192600091610c109173__$5ac3274b8cf1e01ea223bf093142af05b0$__916345ebb61e91610bc8919060040190815260200190565b602060405180830381865af4158015610be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0991906154ca565b8451613d8d565b604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015610c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8591906154ca565b61014089018190526020890180519192508291610ca39083906154f9565b905250610cb08a8a6112a1565b610ce25750505060c085015161016086015250505061014082015161018083015250602081015160408201528061129a565b604051631d3be47760e01b81526000906001600160a01b03871690631d3be47790610d11908d9060040161505a565b600060405180830381865afa158015610d2e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d569190810190615567565b80516040516313d8ebc960e11b81526001600160601b0390911660048201529091506000906001600160a01b038816906327b1d79290602401600060405180830381865afa158015610dac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dd49190810190615645565b80516040516368322c6360e11b81529192506000916001600160a01b038a169163d06458c691610e07919060040161505a565b600060405180830381865afa158015610e24573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e4c91908101906156ee565b8b516040516322f5db0f60e11b8152600481019190915290915060009073__$5ac3274b8cf1e01ea223bf093142af05b0$__906345ebb61e90602401602060405180830381865af4158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec991906154ca565b60608301516040516332292b2760e21b815273__$5ac3274b8cf1e01ea223bf093142af05b0$__9263c8a4ac9c92610f0c92600401918252602082015260400190565b602060405180830381865af4158015610f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4d91906154ca565b604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc291906154ca565b6101a08d0181905260208d01516040516322f5db0f60e11b815291925073__$5ac3274b8cf1e01ea223bf093142af05b0$__916345ebb61e9161100b9160040190815260200190565b602060405180830381865af4158015611028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104c91906154ca565b60408086015190516332292b2760e21b815273__$5ac3274b8cf1e01ea223bf093142af05b0$__9263c8a4ac9c9261108f92600401918252602082015260400190565b602060405180830381865af41580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d091906154ca565b604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015611121573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114591906154ca565b6101c08d0181905260208701516101608e015261116282876157e5565b61116c91906157e5565b6101808d01526101c08c015160208d015161118791906157e5565b60408d015250505050602082015161016089015110156112005760c08801516101408901516101608a01516101808b01516101a08c01516101c08d015160405163a4d2313f60e01b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161089b565b876101a00151886101800151896101c0015161121c91906154f9565b61122691906154f9565b886101400151146112905760c08801516101408901516101608a01516101808b01516101a08c01516101c08d015160405163a4d2313f60e01b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161089b565b8796505050505050505b9392505050565b6000806112ad84613c64565b90506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131391906153d1565b6001600160a01b0316631d3be477856040518263ffffffff1660e01b815260040161133e919061505a565b600060405180830381865afa15801561135b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113839190810190615567565b8051604051630a4d29dd60e31b81526001600160601b03909116600482015290915073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906352694ee890602401602060405180830381865af41580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611405919061538c565b15611415576000925050506115ce565b60a081015160405163790a38ad60e01b815264ffffffffff909116600482015273__$d53880c81dc91c20799140d711e5ab8718$__9063790a38ad90602401602060405180830381865af4158015611471573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611495919061538c565b806115a7575060a0810151604051638d38cd4b60e01b815264ffffffffff909116600482015273__$d53880c81dc91c20799140d711e5ab8718$__90638d38cd4b90602401602060405180830381865af41580156114f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151b919061538c565b80156115a757506115a773__$d53880c81dc91c20799140d711e5ab8718$__63adb618326040518163ffffffff1660e01b8152600401602060405180830381865af415801561156e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159291906157f8565b8260a0015164ffffffffff9081169116111590565b92508280156115c95750806060015163ffffffff16816080015163ffffffff16105b925050505b92915050565b6115dc613c2b565b6115e68287613bb4565b60007f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa30080546001600160601b0388166cffffffffffffffffffffffffff1990911617600160601b60ff8816021760ff60681b1916600160681b861515021781559050600181016116568382615864565b5050505050505050565b600080600061166d613da2565b915091506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d591906153d1565b604051639ad69c6760e01b81526001600160601b03851660048201526001600160a01b039190911690639ad69c679060240161010060405180830381865afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117499190615429565b60408181015151905163771602f760e01b81526004810191909152602481018c905290915060009073__$5ac3274b8cf1e01ea223bf093142af05b0$__9063771602f790604401602060405180830381865af41580156117ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d191906154ca565b60608301515160405163b67d77c560e01b815260048101919091526024810182905290915060009073__$5ac3274b8cf1e01ea223bf093142af05b0$__9063b67d77c590604401602060405180830381865af4158015611835573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185991906154ca565b6040516321e5749b60e01b8152600481018f90526024810182905290915073__$5ac3274b8cf1e01ea223bf093142af05b0$__906321e5749b90604401602060405180830381865af41580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d7919061538c565b156119e657604051632255341b60e11b8152600481018e905273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af415801561192c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195091906154ca565b604051632255341b60e11b81526004810183905273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af41580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c491906154ca565b60405163e2ed03dd60e01b81526004810192909252602482015260440161089b565b50505073__$5906aa3f06c54ee09b434647963e1d1ed0$__63578c3039838e6040518363ffffffff1660e01b8152600401611a22929190615923565b602060405180830381865af4158015611a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a639190615945565b6040516355ee627560e01b815290935060009073__$5906aa3f06c54ee09b434647963e1d1ed0$__906355ee627590611aaa906001600160c01b031988169060040161505a565b602060405180830381865af4158015611ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aeb91906154ca565b604051630e29a66960e21b8152600481018290529091506001600160a01b038316906338a699a490602401602060405180830381865afa158015611b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b57919061538c565b611c0a5760408051610120810182528e8152602081018e90528082018d9052606081018c905263ffffffff808c1660808301528a1660a082015288151560c082015287151560e0820152610100810187905290516304f2a7e960e31b81526001600160a01b038416906327953f4890611bd69085908590600401615962565b600060405180830381600087803b158015611bf057600080fd5b505af1158015611c04573d6000803e3d6000fd5b50505050505b5050509998505050505050505050565b73__$c0fcb9c1c2e971ebe3d8745a7e2c5cc364$__63a123b37c611c3c6105a2565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865af4158015611c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca09190615a2e565b600080516020615f468339815191528054600160401b900460ff1680611cd3575080546001600160401b03808416911610155b15611cf15760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611d1b83614026565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b611d6f613c2b565b6301ffc9a760e01b60009081526020527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c5805460ff19166001179055565b6000611db7613da2565b9150506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1e91906153d1565b6040516313d8ebc960e11b81526001600160601b03871660048201529091506000906001600160a01b038316906327b1d79290602401600060405180830381865afa158015611e71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e999190810190615645565b6001600160c01b031986168152604080820186905251633ed2a38d60e21b81529091506001600160a01b0384169063fb4a8e3490611ee0908990859060ff90600401615aa2565b600060405180830381600087803b158015611efa57600080fd5b505af1158015611f0e573d6000803e3d6000fd5b50505050505050505050565b600080808080611f33866078611f2e61402e565b6140a6565b93509350935093506000611f45613481565b604051638fbc2d8160e01b81526001600160a01b03878116600483015286811660248301529190911690638fbc2d81906044016000604051808303816000875af1158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fbf9190810190615ae2565b90506000879050806001600160a01b031663138461e06040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561200157600080fd5b505af1158015612015573d6000803e3d6000fd5b5050505081600001519650836001600160a01b0316639e90178c88836001600160a01b031663c200b8096040518163ffffffff1660e01b815260040161010060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120939190615429565b6040518363ffffffff1660e01b81526004016120b0929190615bec565b600060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b5060009250600291506120ee9050565b60405190808252806020026020018201604052801561212157816020015b606081526020019060019003908161210c5790505b5060408051600180825281830190925291925060208083019080368337019050508160008151811061215557612155615c0a565b60209081029190910101526040805160028082526060820190925290816020016020820280368337019050508160018151811061219457612194615c0a565b602002602001018190525063b6b412ba60e01b816000815181106121ba576121ba615c0a565b60200260200101516000815181106121d4576121d4615c0a565b6001600160e01b0319909216602092830291909101909101528051637c07103960e11b908290600190811061220b5761220b615c0a565b602002602001015160008151811061222557612225615c0a565b6001600160e01b031992909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050905061226961402e565b8160008151811061227c5761227c615c0a565b60200260200101906001600160401b031690816001600160401b0316815250506122a46144d7565b816001815181106122b7576122b7615c0a565b60200260200101906001600160401b031690816001600160401b0316815250506122df613518565b6001600160a01b0316636c6fbb28868c866001600160a01b03166317d7de7c6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561232d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123559190810190615c20565b86866040518663ffffffff1660e01b8152600401612377959493929190615c98565b600060405180830381600087803b15801561239157600080fd5b505af11580156123a5573d6000803e3d6000fd5b505050505050505050505050919050565b600080516020615f468339815191528054600160401b810460ff1615906001600160401b03166000811580156123e95750825b90506000826001600160401b031660011480156124055750303b155b905081158015612413575080155b156124315760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561245b57845460ff60401b1916600160401b1785555b6124658787614513565b83156124ac57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b50505050505050565b60008060006124c2613da2565b915091506124ce613481565b6001600160a01b03166357a8fba76040518060e001604052806124ef600090565b6001600160601b03168152602001856001600160601b03168152602001612514607a90565b60ff16815260200160011515815260200160006001600160a01b03168152602001896001600160a01b03168152602001604051806020016040528060008152508152506040518263ffffffff1660e01b81526004016125739190614b34565b6020604051808303816000875af1158015612592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b691906153b4565b6040805160a0810182526001600160c01b0319881681526001602082015280820187905260006060820181905260808201529051635338a4af60e11b8152919450906001600160a01b0383169063a671495e906126199087908590600401615d6c565b600060405180830381600087803b15801561263357600080fd5b505af1158015612647573d6000803e3d6000fd5b505050505050509392505050565b61265d613c2b565b806001600160a01b03163b6000036126935760405163fdeac91f60e01b81526001600160a01b038216600482015260240161089b565b600180546001600160a01b0319166001600160a01b0383169081179091556040516301ffc9a760e01b8152630a3888e560e31b60048201526301ffc9a790602401602060405180830381865afa92505050801561270d575060408051601f3d908101601f1916820190925261270a9181019061538c565b60015b6127355760405163fdeac91f60e01b81526001600160a01b038216600482015260240161089b565b8061275e5760405163fdeac91f60e01b81526001600160a01b038316600482015260240161089b565b505b50565b33612783600080516020615f26833981519152546001600160a01b031690565b6001600160a01b0316816001600160a01b0316146127be5760405162d1953b60e31b81526001600160a01b038216600482015260240161089b565b816001600160a01b03163b6000036127f4576040516361798f2f60e11b81526001600160a01b038316600482015260240161089b565b61275e82614631565b600080600080516020615f0683398151915280546040516330b8415f60e01b81526001600160601b03909116600482015290915073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906330b8415f90602401602060405180830381865af415801561286d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612891919061538c565b1561291e576001546001600160a01b03168154604051631c5da14d60e11b81526001600160601b0390911660048201526001600160a01b0391909116906338bb429a90602401602060405180830381865afa1580156128f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291891906153d1565b91505090565b54600160601b90046001600160a01b0316919050565b6000806000612941613da2565b9150915087516000036129695787604051634fad6a5360e11b815260040161089b9190615d8e565b60405163790a38ad60e01b815264ffffffffff8616600482015273__$d53880c81dc91c20799140d711e5ab8718$__9063790a38ad90602401602060405180830381865af41580156129bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e3919061538c565b15612a0a5760405163df85467b60e01b815264ffffffffff8616600482015260240161089b565b6000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6e91906153d1565b6040516313d8ebc960e11b81526001600160601b038c1660048201529091506000906001600160a01b038316906327b1d79290602401600060405180830381865afa158015612ac1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612ae99190810190615645565b80516040516368322c6360e11b8152919250906000906001600160a01b0385169063d06458c690612b1e90859060040161505a565b600060405180830381865afa158015612b3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b6391908101906156ee565b90508963ffffffff16816080015163ffffffff161015612ba4576080810151604051636fcee12560e01b815263ffffffff909116600482015260240161089b565b60208101518b1015612cc0576020810151604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015612c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2a91906154ca565b604051632255341b60e11b8152600481018d905273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015612c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9e91906154ca565b6040516338a25a8b60e21b81526004810192909252602482015260440161089b565b60408101518b1115612ddc576040818101519051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015612d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4691906154ca565b604051632255341b60e11b8152600481018d905273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015612d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dba91906154ca565b604051631e1ea4f360e31b81526004810192909252602482015260440161089b565b8060a0015163ffffffff1673__$d53880c81dc91c20799140d711e5ab8718$__63adb618326040518163ffffffff1660e01b8152600401602060405180830381865af4158015612e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5491906157f8565b604051633682752160e21b815264ffffffffff909116600482015273__$d53880c81dc91c20799140d711e5ab8718$__9063da09d48490602401602060405180830381865af4158015612eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ecf91906154ca565b604051633682752160e21b815264ffffffffff8c16600482015273__$d53880c81dc91c20799140d711e5ab8718$__9063da09d48490602401602060405180830381865af4158015612f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4991906154ca565b612f5391906157e5565b1115612fff5760a0810151604051633682752160e21b815264ffffffffff8b16600482015273__$d53880c81dc91c20799140d711e5ab8718$__9063da09d48490602401602060405180830381865af4158015612fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd891906154ca565b6040516331fa6ab160e11b815263ffffffff9092166004830152602482015260440161089b565b73__$9f290d768183857d0249ab5bb54619c5ab$__633f093cd6878e6040518363ffffffff1660e01b8152600401613038929190615923565b602060405180830381865af4158015613055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130799190615945565b965060006040518060e001604052808f6001600160601b031681526020018e81526020018d81526020018c63ffffffff168152602001600063ffffffff1681526020018b64ffffffffff1681526020018a8152509050856001600160a01b03166354d747a8896001600160c01b03191673__$9f290d768183857d0249ab5bb54619c5ab$__6355ee627590916040518263ffffffff1660e01b8152600401613121919061505a565b602060405180830381865af415801561313e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316291906154ca565b836040518363ffffffff1660e01b8152600401613180929190615e1d565b600060405180830381600087803b15801561319a57600080fd5b505af11580156131ae573d6000803e3d6000fd5b50505050505050505050509695505050505050565b600080516020615f26833981519152805460009190600160a01b900460ff166131ed576000612918565b638fb3603760e01b91505090565b815181511015613315578151604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015613258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327c91906154ca565b8151604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af41580156132cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f391906154ca565b604051631a9c6b0960e01b81526004810192909252602482015260440161089b565b600080806133236078614692565b9250925092506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa158015613369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338d91906153d1565b604051639ad69c6760e01b81526001600160601b03861660048201529091506000906001600160a01b03831690639ad69c679060240161010060405180830381865afa1580156133e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134059190615429565b6040818101899052606082018890525163f7b442d160e01b81529091506001600160a01b0384169063f7b442d190613446908890859060ff90600401615e36565b600060405180830381600087803b15801561346057600080fd5b505af1158015613474573d6000803e3d6000fd5b5050505050505050505050565b6000806134966001546001600160a01b031690565b6001600160a01b031663d39e604360285b6134af613542565b6040516001600160e01b031960e085901b16815260ff928316600482015291166024820152604401602060405180830381865afa1580156134f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ce91906153d1565b60008061352d6001546001600160a01b031690565b6001600160a01b031663d39e604360466134a7565b604051632392b61b60e21b81526003600482015260009073__$9dab98ad7ae1a426029e5739f922230a41$__90638e4ad86c90602401602060405180830381865af4158015613595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190615e66565b604051637bc32ecf60e01b815260009073__$9f290d768183857d0249ab5bb54619c5ab$__90637bc32ecf906135fd906001600160c01b031988169060040161505a565b602060405180830381865af415801561361a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363e919061538c565b159050600061364d86866112a1565b905081801561365a575080155b1561369357604051631cf73cd360e21b81526001600160601b03871660048201526001600160c01b03198616602482015260440161089b565b600061369e87613c64565b90506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370491906153d1565b90506000816001600160a01b0316631d3be477896040518263ffffffff1660e01b8152600401613734919061505a565b600060405180830381865afa158015613751573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137799190810190615567565b80516040516313d8ebc960e11b81526001600160601b0390911660048201529091506000906001600160a01b038416906327b1d79290602401600060405180830381865afa1580156137cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137f79190810190615645565b604051639ad69c6760e01b81526001600160601b038c1660048201529091506000906001600160a01b03851690639ad69c679060240161010060405180830381865afa15801561384b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386f9190615429565b905060008961018001518a610160015161388991906154f9565b6101a08b015190915061389c81836154f9565b8a146138cf57896138ad82846154f9565b60405163b9d36bcd60e01b81526004810192909252602482015260440161089b565b811561394e57818360a0018181516138e791906154f9565b9052506001600160a01b03871663f7b442d18e8560ff6040518463ffffffff1660e01b815260040161391b93929190615e36565b600060405180830381600087803b15801561393557600080fd5b505af1158015613949573d6000803e3d6000fd5b505050505b8815613afd576001856080018181516139679190615e83565b91509063ffffffff16908163ffffffff1681525050866001600160a01b031663cf947d208d6001600160c01b03191673__$9f290d768183857d0249ab5bb54619c5ab$__6355ee627590916040518263ffffffff1660e01b81526004016139ce919061505a565b602060405180830381865af41580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f91906154ca565b8760ff6040518463ffffffff1660e01b8152600401613a3093929190615ea7565b600060405180830381600087803b158015613a4a57600080fd5b505af1158015613a5e573d6000803e3d6000fd5b505050506000811115613afd578084606001818151613a7d91906154f9565b90525060808401805160019190613a959083906154f9565b9052508451604051633ed2a38d60e21b81526001600160a01b0389169163fb4a8e3491613aca9190889060ff90600401615aa2565b600060405180830381600087803b158015613ae457600080fd5b505af1158015613af8573d6000803e3d6000fd5b505050505b50505050505050505050505050565b613b14613c2b565b613b9482836001600160a01b031663644c45e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7a91906153b4565b603c600085604051806020016040528060008152506115d4565b613ba4634a531f3360e01b6109e7565b61275e637b6a51fd60e01b6109e7565b613bbc613c2b565b613bc581612655565b613bcd611d67565b6001600160a01b038216613bf45760405163f17ef42d60e01b815260040160405180910390fd5b50600080516020615f0683398151915280546001600160601b0316600160601b6001600160a01b0390931692909202919091179055565b600080516020615f4683398151915254600160401b900460ff16613c6257604051631afcd79f60e31b815260040160405180910390fd5b565b600080613c796001546001600160a01b031690565b6040516305247a1760e51b81526001600160601b03851660048201526001600160a01b03919091169063a48f42e090602401600060405180830381865afa158015613cc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cf09190810190615ae2565b6020015190506000613d0a6001546001600160a01b031690565b6040516305247a1760e51b81526001600160601b03841660048201526001600160a01b03919091169063a48f42e090602401600060405180830381865afa158015613d59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d819190810190615ae2565b60800151949350505050565b600061129a8383670de0b6b3a7640000614939565b600080613db76001546001600160a01b031690565b604051636939560f60e11b81523360048201526001600160a01b03919091169063d272ac1e90602401602060405180830381865afa158015613dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2191906153b4565b604051630a4d29dd60e31b81526001600160601b038216600482015290925073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906352694ee890602401602060405180830381865af4158015613e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea0919061538c565b15613ec05760405163aec62dbb60e01b815233600482015260240161089b565b6000613ed46001546001600160a01b031690565b6040516305247a1760e51b81526001600160601b03851660048201526001600160a01b03919091169063a48f42e090602401600060405180830381865afa158015613f23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f4b9190810190615ae2565b9050613f698160400151613f5d607890565b60ff9081169116141590565b15613f8957604051637ab07d8760e01b815233600482015260240161089b565b6000613f9d6001546001600160a01b031690565b60208301516040516305247a1760e51b81526001600160601b0390911660048201526001600160a01b03919091169063a48f42e090602401600060405180830381865afa158015613ff2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261401a9190810190615ae2565b60800151939492505050565b610206613c2b565b6040516368aebf7b60e01b81526002600482015260009073__$cd131c2b3ba46b9dbe046aaf4458b9777d$__906368aebf7b906024015b602060405180830381865af4158015614082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190615a2e565b6000338180806140be6001546001600160a01b031690565b604051636939560f60e11b81526001600160a01b038a81166004830152919091169063d272ac1e90602401602060405180830381865afa158015614106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061412a91906153b4565b6040516330b8415f60e01b81526001600160601b038216600482015290915073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906330b8415f90602401602060405180830381865af4158015614185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a9919061538c565b156141e05760405162b8422b60e71b81526001600160a01b03891660048201526001600160601b038216602482015260440161089b565b6040516301ffc9a760e01b81526396c8ab0560e01b60048201528895506001600160a01b038616906301ffc9a790602401602060405180830381865afa15801561422e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614252919061538c565b61427a576040516359bff0e360e11b81526001600160a01b038916600482015260240161089b565b6000856001600160a01b0316630fec111c6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156142ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142e29190810190615ae2565b90506142f981604001518960ff9081169116141590565b15614339576040808201519051634a2e948760e11b81526001600160a01b038b16600482015260ff808b166024830152909116604482015260640161089b565b60a08101516001600160a01b038681169082161461438b5760a0820151604051632b50a20960e21b81526001600160a01b03808d1660048301529182166024820152908716604482015260640161089b565b8160200151935061439b84614a23565b94506000856001600160a01b031663e5f6cd276040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061440191906153d1565b6040516368fc2b7760e11b81526001600160401b038b1660048201526001600160a01b03898116602483015291925060009183169063d1f856ee90604401602060405180830381865afa15801561445c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614480919061538c565b9050806144c957604051636af540d960e01b81526001600160601b03871660048201526001600160401b038b1660248201526001600160a01b038916604482015260640161089b565b505050505093509350935093565b6040516368aebf7b60e01b81526108fc600482015260009073__$cd131c2b3ba46b9dbe046aaf4458b9777d$__906368aebf7b90602401614065565b600080516020615f468339815191528054600160401b810460ff1615906001600160401b03166000811580156145465750825b90506000826001600160401b031660011480156145625750303b155b905081158015614570575080155b1561458e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156145b857845460ff60401b1916600160401b1785555b600080878060200190518101906145cf9190615ec0565b925090506145dd818a613b0c565b6145ed63a6812b7960e01b6109e7565b505083156124ac57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016124a3565b600080516020615f2683398151915280546001600160a01b0383166001600160a01b03199091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c08201526000806146de6001546001600160a01b031690565b6040516308b09a5f60e41b81523360048201529091506001600160a01b03821690638b09a5f090602401600060405180830381865afa158015614725573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261474d9190810190615ae2565b8051604082015190955090935060ff8681169116146147a45760405162461bcd60e51b815260206004820152601360248201527213d0929150d517d516541157d2539590531251606a1b604482015260640161089b565b60208301516040516305247a1760e51b81526001600160601b0390911660048201526000906001600160a01b0383169063a48f42e090602401600060405180830381865afa1580156147fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148229190810190615ae2565b6080015190508092506000836001600160a01b031663e5f6cd276040518163ffffffff1660e01b8152600401602060405180830381865afa15801561486b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061488f91906153d1565b6080860151604051629b7b3560e61b81526001600160a01b0391821660048201529192508216906326decd4090602401602060405180830381865afa1580156148dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614900919061538c565b1561492f57608085015160405163d53987e560e01b81526001600160a01b03909116600482015260240161089b565b5050509193909250565b60008080600019858709858702925082811083820303915050806000036149735783828161496957614969615eef565b049250505061129a565b8084116149ba5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161089b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600080614a386001546001600160a01b031690565b6040516305247a1760e51b81526001600160601b03851660048201526001600160a01b03919091169063a48f42e090602401600060405180830381865afa158015614a87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614aaf9190810190615ae2565b608001519392505050565b600060208284031215614acc57600080fd5b81356001600160e01b03198116811461129a57600080fd5b60005b83811015614aff578181015183820152602001614ae7565b50506000910152565b60008151808452614b20816020860160208601614ae4565b601f01601f19169290920160200192915050565b6020815260006001600160601b038084511660208401528060208501511660408401525060ff604084015116606083015260608301511515608083015260018060a01b0360808401511660a083015260a0830151614b9d60c08401826001600160a01b03169052565b5060c083015160e080840152614bb7610100840182614b08565b949350505050565b6001600160601b038116811461276057600080fd5b6001600160c01b03198116811461276057600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516101e081016001600160401b0381118282101715614c2357614c23614bea565b60405290565b604080519081016001600160401b0381118282101715614c2357614c23614bea565b60405160e081016001600160401b0381118282101715614c2357614c23614bea565b60405160a081016001600160401b0381118282101715614c2357614c23614bea565b60405161012081016001600160401b0381118282101715614c2357614c23614bea565b604051601f8201601f191681016001600160401b0381118282101715614cda57614cda614bea565b604052919050565b60006101e08284031215614cf557600080fd5b614cfd614c00565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013581830152506101608083013581830152506101808083013581830152506101a08083013581830152506101c080830135818301525092915050565b60008060006102208486031215614db957600080fd5b8335614dc481614bbf565b92506020840135614dd481614bd4565b9150614de38560408601614ce2565b90509250925092565b60008060408385031215614dff57600080fd5b8235614e0a81614bbf565b91506020830135614e1a81614bd4565b809150509250929050565b6001600160a01b038116811461276057600080fd5b60ff8116811461276057600080fd5b801515811461276057600080fd5b8035614e6281614e49565b919050565b60006001600160401b03821115614e8057614e80614bea565b50601f01601f191660200190565b600082601f830112614e9f57600080fd5b8135614eb2614ead82614e67565b614cb2565b818152846020838601011115614ec757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c08789031215614efd57600080fd5b8635614f0881614e25565b95506020870135614f1881614bbf565b94506040870135614f2881614e3a565b93506060870135614f3881614e49565b92506080870135614f4881614e25565b915060a08701356001600160401b03811115614f6357600080fd5b614f6f89828a01614e8e565b9150509295509295509295565b63ffffffff8116811461276057600080fd5b60008060008060008060008060006101208a8c031215614fad57600080fd5b89356001600160401b0380821115614fc457600080fd5b614fd08d838e01614e8e565b9a5060208c0135995060408c0135985060608c0135975060808c01359150614ff782614f7c565b90955060a08b01359061500982614f7c565b81955061501860c08d01614e57565b945061502660e08d01614e57565b93506101008c013591508082111561503d57600080fd5b5061504a8c828d01614e8e565b9150509295985092959850929598565b6001600160c01b031991909116815260200190565b60006020828403121561508157600080fd5b81356001600160401b0381111561509757600080fd5b614bb784828501614e8e565b6000806000606084860312156150b857600080fd5b83356150c381614bbf565b925060208401356150d381614bd4565b915060408401356001600160401b038111156150ee57600080fd5b6150fa86828701614e8e565b9150509250925092565b60006020828403121561511657600080fd5b813561129a81614e25565b6000806040838503121561513457600080fd5b823561513f81614e25565b915060208301356001600160401b0381111561515a57600080fd5b61516685828601614e8e565b9150509250929050565b60008060006060848603121561518557600080fd5b83356150c381614e25565b64ffffffffff8116811461276057600080fd5b60008060008060008060c087890312156151bc57600080fd5b86356151c781614bbf565b955060208701356001600160401b03808211156151e357600080fd5b6151ef8a838b01614e8e565b9650604089013595506060890135915061520882614f7c565b90935060808801359061521a82615190565b90925060a0880135908082111561523057600080fd5b50614f6f89828a01614e8e565b60006040828403121561524f57600080fd5b615257614c29565b9050813581526020820135602082015292915050565b6000806080838503121561528057600080fd5b61528a848461523d565b9150615299846040850161523d565b90509250929050565b60008060008061024085870312156152b957600080fd5b84356152c481614bbf565b935060208501356152d481614bd4565b92506152e38660408701614ce2565b939692955092936102200135925050565b6000806040838503121561530757600080fd5b823561531281614e25565b91506020830135614e1a81614e25565b60006020828403121561533457600080fd5b815162ffffff8116811461129a57600080fd5b600181811c9082168061535b57607f821691505b60208210810361537b57634e487b7160e01b600052602260045260246000fd5b50919050565b8051614e6281614e49565b60006020828403121561539e57600080fd5b815161129a81614e49565b8051614e6281614bbf565b6000602082840312156153c657600080fd5b815161129a81614bbf565b6000602082840312156153e357600080fd5b815161129a81614e25565b60006040828403121561540057600080fd5b615408614c29565b9050815181526020820151602082015292915050565b8051614e6281614e25565b6000610100828403121561543c57600080fd5b60405160c081018181106001600160401b038211171561545e5761545e614bea565b604052825161546c81614bbf565b8152602083015161547c81614e25565b602082015261548e84604085016153ee565b60408201526154a084608085016153ee565b606082015260c08301516154b381614e25565b608082015260e0929092015160a083015250919050565b6000602082840312156154dc57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156115ce576115ce6154e3565b600082601f83011261551d57600080fd5b815161552b614ead82614e67565b81815284602083860101111561554057600080fd5b614bb7826020830160208701614ae4565b8051614e6281614f7c565b8051614e6281615190565b60006020828403121561557957600080fd5b81516001600160401b038082111561559057600080fd5b9083019060e082860312156155a457600080fd5b6155ac614c4b565b6155b5836153a9565b81526020830151828111156155c957600080fd5b6155d58782860161550c565b602083015250604083015160408201526155f160608401615551565b606082015261560260808401615551565b608082015261561360a0840161555c565b60a082015260c08301518281111561562a57600080fd5b6156368782860161550c565b60c08301525095945050505050565b60006020828403121561565757600080fd5b81516001600160401b038082111561566e57600080fd5b9083019060a0828603121561568257600080fd5b61568a614c6d565b825161569581614bd4565b815260208301516156a581614e49565b60208201526040830151828111156156bc57600080fd5b6156c88782860161550c565b604083015250606083015160608201526080830151608082015280935050505092915050565b60006020828403121561570057600080fd5b81516001600160401b038082111561571757600080fd5b90830190610120828603121561572c57600080fd5b615734614c8f565b82518281111561574357600080fd5b61574f8782860161550c565b82525060208301516020820152604083015160408201526060830151606082015261577c60808401615551565b608082015261578d60a08401615551565b60a082015261579e60c08401615381565b60c08201526157af60e08401615381565b60e082015261010080840151838111156157c857600080fd5b6157d48882870161550c565b918301919091525095945050505050565b818103818111156115ce576115ce6154e3565b60006020828403121561580a57600080fd5b815161129a81615190565b601f82111561585f57600081815260208120601f850160051c8101602086101561583c5750805b601f850160051c820191505b8181101561585b57828155600101615848565b5050505b505050565b81516001600160401b0381111561587d5761587d614bea565b6158918161588b8454615347565b84615815565b602080601f8311600181146158c657600084156158ae5750858301515b600019600386901b1c1916600185901b17855561585b565b600085815260208120601f198616915b828110156158f5578886015182559484019460019091019084016158d6565b50858210156159135787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160601b0383168152604060208201526000614bb76040830184614b08565b60006020828403121561595757600080fd5b815161129a81614bd4565b8281526040602082015260008251610120806040850152615987610160850183614b08565b91506020850151606085015260408501516080850152606085015160a085015260808501516159be60c086018263ffffffff169052565b5060a085015163ffffffff811660e08601525060c08501516101006159e68187018315159052565b60e087015115159286019290925250840151603f1984830301610140850152615a0f8282614b08565b9695505050505050565b6001600160401b038116811461276057600080fd5b600060208284031215615a4057600080fd5b815161129a81615a19565b6001600160401b0360c01b81511682526020810151151560208301526000604082015160a06040850152615a8260a0850182614b08565b905060608301516060850152608083015160808501528091505092915050565b6001600160601b0384168152606060208201526000615ac46060830185615a4b565b905060ff83166040830152949350505050565b8051614e6281614e3a565b600060208284031215615af457600080fd5b81516001600160401b0380821115615b0b57600080fd5b9083019060e08286031215615b1f57600080fd5b615b27614c4b565b615b30836153a9565b8152615b3e602084016153a9565b6020820152615b4f60408401615ad7565b6040820152615b6060608401615381565b6060820152615b716080840161541e565b608082015261561360a0840161541e565b80516001600160601b031682526020808201516001600160a01b0390811682850152604080840151805191860191909152918201516060850152606083015180516080860152602081015160a0860152915060808301511660c08401525060a0015160e090910152565b6001600160601b0383168152610120810161129a6020830184615b82565b634e487b7160e01b600052603260045260246000fd5b600060208284031215615c3257600080fd5b81516001600160401b03811115615c4857600080fd5b614bb78482850161550c565b600081518084526020808501945080840160005b83811015615c8d5781516001600160401b031687529582019590820190600101615c68565b509495945050505050565b6001600160601b03861681526000602060018060a01b0387168184015260a06040840152615cc960a0840187614b08565b8381036060850152855180825282820190600581901b830184018489016000805b84811015615d4757868403601f19018652825180518086529089019089860190845b81811015615d325783516001600160e01b0319168352928b0192918b0191600101615d0c565b50509689019694505091870191600101615cea565b5050508681036080880152615d5c8189615c54565b9c9b505050505050505050505050565b6001600160601b0383168152604060208201526000614bb76040830184615a4b565b60208152600061129a6020830184614b08565b6001600160601b0381511682526000602082015160e06020850152615dc960e0850182614b08565b905060408301516040850152606083015163ffffffff8082166060870152806080860151166080870152505064ffffffffff60a08401511660a085015260c083015184820360c08601526115c98282614b08565b828152604060208201526000614bb76040830184615da1565b6001600160601b03841681526101408101615e546020830185615b82565b60ff8316610120830152949350505050565b600060208284031215615e7857600080fd5b815161129a81614e3a565b63ffffffff818116838216019080821115615ea057615ea06154e3565b5092915050565b838152606060208201526000615ac46060830185615da1565b60008060408385031215615ed357600080fd5b8251615ede81614e25565b6020840151909250614e1a81614e25565b634e487b7160e01b600052601260045260246000fdfe07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00f3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212205485d0c0a813c01b611d5e9810e5005a0228bc1902ea6b8f90720ace3a625acd64736f6c63430008140033",
1413
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102065760003560e01c8063644c45e01161011a578063b6b412ba116100ad578063cde749f41161007c578063cde749f414610561578063d25f509514610569578063ea8665721461057c578063f21de1e81461043e578063f7c34ee01461058f57600080fd5b8063b6b412ba14610520578063bf7e214f14610533578063caf4e3d414610551578063cc9fc59a1461055957600080fd5b80638dd2b781116100e95780638dd2b781146104c25780638fb36037146104d5578063ada9652e146104f6578063b68d18091461050b57600080fd5b8063644c45e014610476578063675393bf146104945780637a9e5e4b146104a7578063893d20e8146104ba57600080fd5b806327bb7a331161019d5780633d683fd91161016c5780633d683fd9146103ed5780634420e4861461040057806349bb9e4b1461042b5780635ab1bd531461043e5780635dcb3bae1461046357600080fd5b806327bb7a331461039f5780632b5198b1146103b2578063329d6e74146103d257806336fc697e146103e557600080fd5b80631eff4b22116101d95780631eff4b2214610288578063214cdb80146102bd578063219a3195146102d057806325d073841461038c57600080fd5b806301ffc9a71461020b5780630d8e6e2c1461024d5780630fec111c14610269578063138461e01461027e575b600080fd5b610238610219366004614aba565b6001600160e01b03191660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b6102556105a2565b60405162ffffff9091168152602001610244565b61027161062c565b6040516102449190614b34565b6102866107e0565b005b6102af7f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa30081565b604051908152602001610244565b6102866102cb366004614aba565b6109e7565b6102e36102de366004614da3565b610a14565b6040516102449190815181526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e08083015190820152610100808301519082015261012080830151908201526101408083015190820152610160808301519082015261018080830151908201526101a080830151908201526101c091820151918101919091526101e00190565b61023861039a366004614dec565b6112a1565b6102866103ad366004614ee4565b6115d4565b6103c56103c0366004614f8e565b611660565b604051610244919061505a565b6102866103e036600461506f565b611c1a565b610286611d67565b6102866103fb3660046150a3565b611dad565b61041361040e366004615104565b611f1a565b6040516001600160601b039091168152602001610244565b610286610439366004615121565b6123b6565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610244565b610413610471366004615170565b6124b5565b600080516020615f06833981519152546001600160601b0316610413565b6102866104a2366004615104565b612655565b6102866104b5366004615104565b612763565b61044b6127fd565b6103c56104d03660046151a3565b612934565b6104dd6131c3565b6040516001600160e01b03199091168152602001610244565b6102af600080516020615f0683398151915281565b60785b60405160ff9091168152602001610244565b61028661052e36600461526d565b6131fb565b600080516020615f26833981519152546001600160a01b031661044b565b61044b613481565b61044b613518565b61050e613542565b6102866105773660046152a2565b6135b9565b61028661058a3660046152f4565b613b0c565b61028661059d3660046152f4565b613bb4565b604051632efe011360e01b815260036004820152600060248201819052604482018190529073__$c0fcb9c1c2e971ebe3d8745a7e2c5cc364$__90632efe011390606401602060405180830381865af4158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190615322565b905090565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820183905260a082019290925260c081019190915260007f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa3006040805160808101825282546001600160601b038116825260ff600160601b820481166020840152600160681b909104161515918101919091526001820180549192916060840191906106dc90615347565b80601f016020809104026020016040519081016040528092919081815260200182805461070890615347565b80156107555780601f1061072a57610100808354040283529160200191610755565b820191906000526020600020905b81548152906001019060200180831161073857829003601f168201915b50505050508152505090506040518060e00160405280610773600090565b6001600160601b0316815260200182600001516001600160601b03168152602001826020015160ff168152602001826040015115158152602001306001600160a01b031681526020016107c46127fd565b6001600160a01b03168152602001826060015181525091505090565b6000600080516020615f0683398151915280546040516330b8415f60e01b81526001600160601b03909116600482015290915073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906330b8415f90602401602060405180830381865af415801561084f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610873919061538c565b156108a45780546040516301ab8b6760e21b81526001600160601b0390911660048201526024015b60405180910390fd5b306108b76001546001600160a01b031690565b60405163c3c5a54760e01b81526001600160a01b038381166004830152919091169063c3c5a54790602401602060405180830381865afa1580156108ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610923919061538c565b61094b5760405163b9304b0d60e01b81526001600160a01b038216600482015260240161089b565b6001546001600160a01b0316604051636939560f60e11b81526001600160a01b038381166004830152919091169063d272ac1e90602401602060405180830381865afa15801561099f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c391906153b4565b82546bffffffffffffffffffffffff19166001600160601b03919091161790915550565b6109ef613c2b565b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b610a8d604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000610a9885613c64565b90506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afe91906153d1565b604051639ad69c6760e01b81526001600160601b03881660048201529091506000906001600160a01b03831690639ad69c679060240161010060405180830381865afa158015610b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b769190615429565b6060810151604080830151885191516322f5db0f60e11b81529394509192600091610c109173__$5ac3274b8cf1e01ea223bf093142af05b0$__916345ebb61e91610bc8919060040190815260200190565b602060405180830381865af4158015610be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0991906154ca565b8451613d8d565b604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015610c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8591906154ca565b61014089018190526020890180519192508291610ca39083906154f9565b905250610cb08a8a6112a1565b610ce25750505060c085015161016086015250505061014082015161018083015250602081015160408201528061129a565b604051631d3be47760e01b81526000906001600160a01b03871690631d3be47790610d11908d9060040161505a565b600060405180830381865afa158015610d2e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d569190810190615567565b80516040516313d8ebc960e11b81526001600160601b0390911660048201529091506000906001600160a01b038816906327b1d79290602401600060405180830381865afa158015610dac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dd49190810190615645565b80516040516368322c6360e11b81529192506000916001600160a01b038a169163d06458c691610e07919060040161505a565b600060405180830381865afa158015610e24573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e4c91908101906156ee565b8b516040516322f5db0f60e11b8152600481019190915290915060009073__$5ac3274b8cf1e01ea223bf093142af05b0$__906345ebb61e90602401602060405180830381865af4158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec991906154ca565b60608301516040516332292b2760e21b815273__$5ac3274b8cf1e01ea223bf093142af05b0$__9263c8a4ac9c92610f0c92600401918252602082015260400190565b602060405180830381865af4158015610f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4d91906154ca565b604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc291906154ca565b6101a08d0181905260208d01516040516322f5db0f60e11b815291925073__$5ac3274b8cf1e01ea223bf093142af05b0$__916345ebb61e9161100b9160040190815260200190565b602060405180830381865af4158015611028573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104c91906154ca565b60408086015190516332292b2760e21b815273__$5ac3274b8cf1e01ea223bf093142af05b0$__9263c8a4ac9c9261108f92600401918252602082015260400190565b602060405180830381865af41580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d091906154ca565b604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015611121573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114591906154ca565b6101c08d0181905260208701516101608e015261116282876157e5565b61116c91906157e5565b6101808d01526101c08c015160208d015161118791906157e5565b60408d015250505050602082015161016089015110156112005760c08801516101408901516101608a01516101808b01516101a08c01516101c08d015160405163a4d2313f60e01b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161089b565b876101a00151886101800151896101c0015161121c91906154f9565b61122691906154f9565b886101400151146112905760c08801516101408901516101608a01516101808b01516101a08c01516101c08d015160405163a4d2313f60e01b81526004810196909652602486019490945260448501929092526064840152608483015260a482015260c40161089b565b8796505050505050505b9392505050565b6000806112ad84613c64565b90506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131391906153d1565b6001600160a01b0316631d3be477856040518263ffffffff1660e01b815260040161133e919061505a565b600060405180830381865afa15801561135b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113839190810190615567565b8051604051630a4d29dd60e31b81526001600160601b03909116600482015290915073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906352694ee890602401602060405180830381865af41580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611405919061538c565b15611415576000925050506115ce565b60a081015160405163790a38ad60e01b815264ffffffffff909116600482015273__$d53880c81dc91c20799140d711e5ab8718$__9063790a38ad90602401602060405180830381865af4158015611471573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611495919061538c565b806115a7575060a0810151604051638d38cd4b60e01b815264ffffffffff909116600482015273__$d53880c81dc91c20799140d711e5ab8718$__90638d38cd4b90602401602060405180830381865af41580156114f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151b919061538c565b80156115a757506115a773__$d53880c81dc91c20799140d711e5ab8718$__63adb618326040518163ffffffff1660e01b8152600401602060405180830381865af415801561156e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159291906157f8565b8260a0015164ffffffffff9081169116111590565b92508280156115c95750806060015163ffffffff16816080015163ffffffff16105b925050505b92915050565b6115dc613c2b565b6115e68287613bb4565b60007f6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa30080546001600160601b0388166cffffffffffffffffffffffffff1990911617600160601b60ff8816021760ff60681b1916600160681b861515021781559050600181016116568382615864565b5050505050505050565b600080600061166d613da2565b915091506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d591906153d1565b604051639ad69c6760e01b81526001600160601b03851660048201526001600160a01b039190911690639ad69c679060240161010060405180830381865afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117499190615429565b60408181015151905163771602f760e01b81526004810191909152602481018c905290915060009073__$5ac3274b8cf1e01ea223bf093142af05b0$__9063771602f790604401602060405180830381865af41580156117ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d191906154ca565b60608301515160405163b67d77c560e01b815260048101919091526024810182905290915060009073__$5ac3274b8cf1e01ea223bf093142af05b0$__9063b67d77c590604401602060405180830381865af4158015611835573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185991906154ca565b6040516321e5749b60e01b8152600481018f90526024810182905290915073__$5ac3274b8cf1e01ea223bf093142af05b0$__906321e5749b90604401602060405180830381865af41580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d7919061538c565b156119e657604051632255341b60e11b8152600481018e905273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af415801561192c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195091906154ca565b604051632255341b60e11b81526004810183905273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af41580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c491906154ca565b60405163e2ed03dd60e01b81526004810192909252602482015260440161089b565b50505073__$5906aa3f06c54ee09b434647963e1d1ed0$__63578c3039838e6040518363ffffffff1660e01b8152600401611a22929190615923565b602060405180830381865af4158015611a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a639190615945565b6040516355ee627560e01b815290935060009073__$5906aa3f06c54ee09b434647963e1d1ed0$__906355ee627590611aaa906001600160c01b031988169060040161505a565b602060405180830381865af4158015611ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aeb91906154ca565b604051630e29a66960e21b8152600481018290529091506001600160a01b038316906338a699a490602401602060405180830381865afa158015611b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b57919061538c565b611c0a5760408051610120810182528e8152602081018e90528082018d9052606081018c905263ffffffff808c1660808301528a1660a082015288151560c082015287151560e0820152610100810187905290516304f2a7e960e31b81526001600160a01b038416906327953f4890611bd69085908590600401615962565b600060405180830381600087803b158015611bf057600080fd5b505af1158015611c04573d6000803e3d6000fd5b50505050505b5050509998505050505050505050565b73__$c0fcb9c1c2e971ebe3d8745a7e2c5cc364$__63a123b37c611c3c6105a2565b6040516001600160e01b031960e084901b16815262ffffff9091166004820152602401602060405180830381865af4158015611c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca09190615a2e565b600080516020615f468339815191528054600160401b900460ff1680611cd3575080546001600160401b03808416911610155b15611cf15760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611d1b83614026565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b611d6f613c2b565b6301ffc9a760e01b60009081526020527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c5805460ff19166001179055565b6000611db7613da2565b9150506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1e91906153d1565b6040516313d8ebc960e11b81526001600160601b03871660048201529091506000906001600160a01b038316906327b1d79290602401600060405180830381865afa158015611e71573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e999190810190615645565b6001600160c01b031986168152604080820186905251633ed2a38d60e21b81529091506001600160a01b0384169063fb4a8e3490611ee0908990859060ff90600401615aa2565b600060405180830381600087803b158015611efa57600080fd5b505af1158015611f0e573d6000803e3d6000fd5b50505050505050505050565b600080808080611f33866078611f2e61402e565b6140a6565b93509350935093506000611f45613481565b604051638fbc2d8160e01b81526001600160a01b03878116600483015286811660248301529190911690638fbc2d81906044016000604051808303816000875af1158015611f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fbf9190810190615ae2565b90506000879050806001600160a01b031663138461e06040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561200157600080fd5b505af1158015612015573d6000803e3d6000fd5b5050505081600001519650836001600160a01b0316639e90178c88836001600160a01b031663c200b8096040518163ffffffff1660e01b815260040161010060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120939190615429565b6040518363ffffffff1660e01b81526004016120b0929190615bec565b600060405180830381600087803b1580156120ca57600080fd5b505af11580156120de573d6000803e3d6000fd5b5060009250600291506120ee9050565b60405190808252806020026020018201604052801561212157816020015b606081526020019060019003908161210c5790505b5060408051600180825281830190925291925060208083019080368337019050508160008151811061215557612155615c0a565b60209081029190910101526040805160028082526060820190925290816020016020820280368337019050508160018151811061219457612194615c0a565b602002602001018190525063b6b412ba60e01b816000815181106121ba576121ba615c0a565b60200260200101516000815181106121d4576121d4615c0a565b6001600160e01b0319909216602092830291909101909101528051637c07103960e11b908290600190811061220b5761220b615c0a565b602002602001015160008151811061222557612225615c0a565b6001600160e01b031992909216602092830291909101820152604080516002808252606082018352600093919290918301908036833701905050905061226961402e565b8160008151811061227c5761227c615c0a565b60200260200101906001600160401b031690816001600160401b0316815250506122a46144d7565b816001815181106122b7576122b7615c0a565b60200260200101906001600160401b031690816001600160401b0316815250506122df613518565b6001600160a01b0316636c6fbb28868c866001600160a01b03166317d7de7c6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561232d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123559190810190615c20565b86866040518663ffffffff1660e01b8152600401612377959493929190615c98565b600060405180830381600087803b15801561239157600080fd5b505af11580156123a5573d6000803e3d6000fd5b505050505050505050505050919050565b600080516020615f468339815191528054600160401b810460ff1615906001600160401b03166000811580156123e95750825b90506000826001600160401b031660011480156124055750303b155b905081158015612413575080155b156124315760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561245b57845460ff60401b1916600160401b1785555b6124658787614513565b83156124ac57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b50505050505050565b60008060006124c2613da2565b915091506124ce613481565b6001600160a01b03166357a8fba76040518060e001604052806124ef600090565b6001600160601b03168152602001856001600160601b03168152602001612514607a90565b60ff16815260200160011515815260200160006001600160a01b03168152602001896001600160a01b03168152602001604051806020016040528060008152508152506040518263ffffffff1660e01b81526004016125739190614b34565b6020604051808303816000875af1158015612592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b691906153b4565b6040805160a0810182526001600160c01b0319881681526001602082015280820187905260006060820181905260808201529051635338a4af60e11b8152919450906001600160a01b0383169063a671495e906126199087908590600401615d6c565b600060405180830381600087803b15801561263357600080fd5b505af1158015612647573d6000803e3d6000fd5b505050505050509392505050565b61265d613c2b565b806001600160a01b03163b6000036126935760405163fdeac91f60e01b81526001600160a01b038216600482015260240161089b565b600180546001600160a01b0319166001600160a01b0383169081179091556040516301ffc9a760e01b8152630a3888e560e31b60048201526301ffc9a790602401602060405180830381865afa92505050801561270d575060408051601f3d908101601f1916820190925261270a9181019061538c565b60015b6127355760405163fdeac91f60e01b81526001600160a01b038216600482015260240161089b565b8061275e5760405163fdeac91f60e01b81526001600160a01b038316600482015260240161089b565b505b50565b33612783600080516020615f26833981519152546001600160a01b031690565b6001600160a01b0316816001600160a01b0316146127be5760405162d1953b60e31b81526001600160a01b038216600482015260240161089b565b816001600160a01b03163b6000036127f4576040516361798f2f60e11b81526001600160a01b038316600482015260240161089b565b61275e82614631565b600080600080516020615f0683398151915280546040516330b8415f60e01b81526001600160601b03909116600482015290915073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906330b8415f90602401602060405180830381865af415801561286d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612891919061538c565b1561291e576001546001600160a01b03168154604051631c5da14d60e11b81526001600160601b0390911660048201526001600160a01b0391909116906338bb429a90602401602060405180830381865afa1580156128f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291891906153d1565b91505090565b54600160601b90046001600160a01b0316919050565b6000806000612941613da2565b9150915087516000036129695787604051634fad6a5360e11b815260040161089b9190615d8e565b60405163790a38ad60e01b815264ffffffffff8616600482015273__$d53880c81dc91c20799140d711e5ab8718$__9063790a38ad90602401602060405180830381865af41580156129bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e3919061538c565b15612a0a5760405163df85467b60e01b815264ffffffffff8616600482015260240161089b565b6000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6e91906153d1565b6040516313d8ebc960e11b81526001600160601b038c1660048201529091506000906001600160a01b038316906327b1d79290602401600060405180830381865afa158015612ac1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612ae99190810190615645565b80516040516368322c6360e11b8152919250906000906001600160a01b0385169063d06458c690612b1e90859060040161505a565b600060405180830381865afa158015612b3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b6391908101906156ee565b90508963ffffffff16816080015163ffffffff161015612ba4576080810151604051636fcee12560e01b815263ffffffff909116600482015260240161089b565b60208101518b1015612cc0576020810151604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015612c06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2a91906154ca565b604051632255341b60e11b8152600481018d905273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015612c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9e91906154ca565b6040516338a25a8b60e21b81526004810192909252602482015260440161089b565b60408101518b1115612ddc576040818101519051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015612d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4691906154ca565b604051632255341b60e11b8152600481018d905273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015612d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dba91906154ca565b604051631e1ea4f360e31b81526004810192909252602482015260440161089b565b8060a0015163ffffffff1673__$d53880c81dc91c20799140d711e5ab8718$__63adb618326040518163ffffffff1660e01b8152600401602060405180830381865af4158015612e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5491906157f8565b604051633682752160e21b815264ffffffffff909116600482015273__$d53880c81dc91c20799140d711e5ab8718$__9063da09d48490602401602060405180830381865af4158015612eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ecf91906154ca565b604051633682752160e21b815264ffffffffff8c16600482015273__$d53880c81dc91c20799140d711e5ab8718$__9063da09d48490602401602060405180830381865af4158015612f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4991906154ca565b612f5391906157e5565b1115612fff5760a0810151604051633682752160e21b815264ffffffffff8b16600482015273__$d53880c81dc91c20799140d711e5ab8718$__9063da09d48490602401602060405180830381865af4158015612fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd891906154ca565b6040516331fa6ab160e11b815263ffffffff9092166004830152602482015260440161089b565b73__$9f290d768183857d0249ab5bb54619c5ab$__633f093cd6878e6040518363ffffffff1660e01b8152600401613038929190615923565b602060405180830381865af4158015613055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130799190615945565b965060006040518060e001604052808f6001600160601b031681526020018e81526020018d81526020018c63ffffffff168152602001600063ffffffff1681526020018b64ffffffffff1681526020018a8152509050856001600160a01b03166354d747a8896001600160c01b03191673__$9f290d768183857d0249ab5bb54619c5ab$__6355ee627590916040518263ffffffff1660e01b8152600401613121919061505a565b602060405180830381865af415801561313e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316291906154ca565b836040518363ffffffff1660e01b8152600401613180929190615e1d565b600060405180830381600087803b15801561319a57600080fd5b505af11580156131ae573d6000803e3d6000fd5b50505050505050505050509695505050505050565b600080516020615f26833981519152805460009190600160a01b900460ff166131ed576000612918565b638fb3603760e01b91505090565b815181511015613315578151604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af4158015613258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327c91906154ca565b8151604051632255341b60e11b8152600481019190915273__$5ac3274b8cf1e01ea223bf093142af05b0$__906344aa683690602401602060405180830381865af41580156132cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f391906154ca565b604051631a9c6b0960e01b81526004810192909252602482015260440161089b565b600080806133236078614692565b9250925092506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa158015613369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338d91906153d1565b604051639ad69c6760e01b81526001600160601b03861660048201529091506000906001600160a01b03831690639ad69c679060240161010060405180830381865afa1580156133e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134059190615429565b6040818101899052606082018890525163f7b442d160e01b81529091506001600160a01b0384169063f7b442d190613446908890859060ff90600401615e36565b600060405180830381600087803b15801561346057600080fd5b505af1158015613474573d6000803e3d6000fd5b5050505050505050505050565b6000806134966001546001600160a01b031690565b6001600160a01b031663d39e604360285b6134af613542565b6040516001600160e01b031960e085901b16815260ff928316600482015291166024820152604401602060405180830381865afa1580156134f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ce91906153d1565b60008061352d6001546001600160a01b031690565b6001600160a01b031663d39e604360466134a7565b604051632392b61b60e21b81526003600482015260009073__$9dab98ad7ae1a426029e5739f922230a41$__90638e4ad86c90602401602060405180830381865af4158015613595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190615e66565b604051637bc32ecf60e01b815260009073__$9f290d768183857d0249ab5bb54619c5ab$__90637bc32ecf906135fd906001600160c01b031988169060040161505a565b602060405180830381865af415801561361a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363e919061538c565b159050600061364d86866112a1565b905081801561365a575080155b1561369357604051631cf73cd360e21b81526001600160601b03871660048201526001600160c01b03198616602482015260440161089b565b600061369e87613c64565b90506000816001600160a01b03166302cd30716040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370491906153d1565b90506000816001600160a01b0316631d3be477896040518263ffffffff1660e01b8152600401613734919061505a565b600060405180830381865afa158015613751573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137799190810190615567565b80516040516313d8ebc960e11b81526001600160601b0390911660048201529091506000906001600160a01b038416906327b1d79290602401600060405180830381865afa1580156137cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137f79190810190615645565b604051639ad69c6760e01b81526001600160601b038c1660048201529091506000906001600160a01b03851690639ad69c679060240161010060405180830381865afa15801561384b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386f9190615429565b905060008961018001518a610160015161388991906154f9565b6101a08b015190915061389c81836154f9565b8a146138cf57896138ad82846154f9565b60405163b9d36bcd60e01b81526004810192909252602482015260440161089b565b811561394e57818360a0018181516138e791906154f9565b9052506001600160a01b03871663f7b442d18e8560ff6040518463ffffffff1660e01b815260040161391b93929190615e36565b600060405180830381600087803b15801561393557600080fd5b505af1158015613949573d6000803e3d6000fd5b505050505b8815613afd576001856080018181516139679190615e83565b91509063ffffffff16908163ffffffff1681525050866001600160a01b031663cf947d208d6001600160c01b03191673__$9f290d768183857d0249ab5bb54619c5ab$__6355ee627590916040518263ffffffff1660e01b81526004016139ce919061505a565b602060405180830381865af41580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f91906154ca565b8760ff6040518463ffffffff1660e01b8152600401613a3093929190615ea7565b600060405180830381600087803b158015613a4a57600080fd5b505af1158015613a5e573d6000803e3d6000fd5b505050506000811115613afd578084606001818151613a7d91906154f9565b90525060808401805160019190613a959083906154f9565b9052508451604051633ed2a38d60e21b81526001600160a01b0389169163fb4a8e3491613aca9190889060ff90600401615aa2565b600060405180830381600087803b158015613ae457600080fd5b505af1158015613af8573d6000803e3d6000fd5b505050505b50505050505050505050505050565b613b14613c2b565b613b9482836001600160a01b031663644c45e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7a91906153b4565b603c600085604051806020016040528060008152506115d4565b613ba4634a531f3360e01b6109e7565b61275e637b6a51fd60e01b6109e7565b613bbc613c2b565b613bc581612655565b613bcd611d67565b6001600160a01b038216613bf45760405163f17ef42d60e01b815260040160405180910390fd5b50600080516020615f0683398151915280546001600160601b0316600160601b6001600160a01b0390931692909202919091179055565b600080516020615f4683398151915254600160401b900460ff16613c6257604051631afcd79f60e31b815260040160405180910390fd5b565b600080613c796001546001600160a01b031690565b6040516305247a1760e51b81526001600160601b03851660048201526001600160a01b03919091169063a48f42e090602401600060405180830381865afa158015613cc8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613cf09190810190615ae2565b6020015190506000613d0a6001546001600160a01b031690565b6040516305247a1760e51b81526001600160601b03841660048201526001600160a01b03919091169063a48f42e090602401600060405180830381865afa158015613d59573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d819190810190615ae2565b60800151949350505050565b600061129a8383670de0b6b3a7640000614939565b600080613db76001546001600160a01b031690565b604051636939560f60e11b81523360048201526001600160a01b03919091169063d272ac1e90602401602060405180830381865afa158015613dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2191906153b4565b604051630a4d29dd60e31b81526001600160601b038216600482015290925073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906352694ee890602401602060405180830381865af4158015613e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea0919061538c565b15613ec05760405163aec62dbb60e01b815233600482015260240161089b565b6000613ed46001546001600160a01b031690565b6040516305247a1760e51b81526001600160601b03851660048201526001600160a01b03919091169063a48f42e090602401600060405180830381865afa158015613f23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f4b9190810190615ae2565b9050613f698160400151613f5d607890565b60ff9081169116141590565b15613f8957604051637ab07d8760e01b815233600482015260240161089b565b6000613f9d6001546001600160a01b031690565b60208301516040516305247a1760e51b81526001600160601b0390911660048201526001600160a01b03919091169063a48f42e090602401600060405180830381865afa158015613ff2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261401a9190810190615ae2565b60800151939492505050565b610206613c2b565b6040516368aebf7b60e01b81526002600482015260009073__$cd131c2b3ba46b9dbe046aaf4458b9777d$__906368aebf7b906024015b602060405180830381865af4158015614082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190615a2e565b6000338180806140be6001546001600160a01b031690565b604051636939560f60e11b81526001600160a01b038a81166004830152919091169063d272ac1e90602401602060405180830381865afa158015614106573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061412a91906153b4565b6040516330b8415f60e01b81526001600160601b038216600482015290915073__$6facc32ab6029a5f5de2a1d5e55ea9da0e$__906330b8415f90602401602060405180830381865af4158015614185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a9919061538c565b156141e05760405162b8422b60e71b81526001600160a01b03891660048201526001600160601b038216602482015260440161089b565b6040516301ffc9a760e01b81526396c8ab0560e01b60048201528895506001600160a01b038616906301ffc9a790602401602060405180830381865afa15801561422e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614252919061538c565b61427a576040516359bff0e360e11b81526001600160a01b038916600482015260240161089b565b6000856001600160a01b0316630fec111c6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156142ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142e29190810190615ae2565b90506142f981604001518960ff9081169116141590565b15614339576040808201519051634a2e948760e11b81526001600160a01b038b16600482015260ff808b166024830152909116604482015260640161089b565b60a08101516001600160a01b038681169082161461438b5760a0820151604051632b50a20960e21b81526001600160a01b03808d1660048301529182166024820152908716604482015260640161089b565b8160200151935061439b84614a23565b94506000856001600160a01b031663e5f6cd276040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061440191906153d1565b6040516368fc2b7760e11b81526001600160401b038b1660048201526001600160a01b03898116602483015291925060009183169063d1f856ee90604401602060405180830381865afa15801561445c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614480919061538c565b9050806144c957604051636af540d960e01b81526001600160601b03871660048201526001600160401b038b1660248201526001600160a01b038916604482015260640161089b565b505050505093509350935093565b6040516368aebf7b60e01b81526108fc600482015260009073__$cd131c2b3ba46b9dbe046aaf4458b9777d$__906368aebf7b90602401614065565b600080516020615f468339815191528054600160401b810460ff1615906001600160401b03166000811580156145465750825b90506000826001600160401b031660011480156145625750303b155b905081158015614570575080155b1561458e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156145b857845460ff60401b1916600160401b1785555b600080878060200190518101906145cf9190615ec0565b925090506145dd818a613b0c565b6145ed63a6812b7960e01b6109e7565b505083156124ac57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016124a3565b600080516020615f2683398151915280546001600160a01b0383166001600160a01b03199091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c08201526000806146de6001546001600160a01b031690565b6040516308b09a5f60e41b81523360048201529091506001600160a01b03821690638b09a5f090602401600060405180830381865afa158015614725573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261474d9190810190615ae2565b8051604082015190955090935060ff8681169116146147a45760405162461bcd60e51b815260206004820152601360248201527213d0929150d517d516541157d2539590531251606a1b604482015260640161089b565b60208301516040516305247a1760e51b81526001600160601b0390911660048201526000906001600160a01b0383169063a48f42e090602401600060405180830381865afa1580156147fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148229190810190615ae2565b6080015190508092506000836001600160a01b031663e5f6cd276040518163ffffffff1660e01b8152600401602060405180830381865afa15801561486b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061488f91906153d1565b6080860151604051629b7b3560e61b81526001600160a01b0391821660048201529192508216906326decd4090602401602060405180830381865afa1580156148dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614900919061538c565b1561492f57608085015160405163d53987e560e01b81526001600160a01b03909116600482015260240161089b565b5050509193909250565b60008080600019858709858702925082811083820303915050806000036149735783828161496957614969615eef565b049250505061129a565b8084116149ba5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161089b565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600080614a386001546001600160a01b031690565b6040516305247a1760e51b81526001600160601b03851660048201526001600160a01b03919091169063a48f42e090602401600060405180830381865afa158015614a87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614aaf9190810190615ae2565b608001519392505050565b600060208284031215614acc57600080fd5b81356001600160e01b03198116811461129a57600080fd5b60005b83811015614aff578181015183820152602001614ae7565b50506000910152565b60008151808452614b20816020860160208601614ae4565b601f01601f19169290920160200192915050565b6020815260006001600160601b038084511660208401528060208501511660408401525060ff604084015116606083015260608301511515608083015260018060a01b0360808401511660a083015260a0830151614b9d60c08401826001600160a01b03169052565b5060c083015160e080840152614bb7610100840182614b08565b949350505050565b6001600160601b038116811461276057600080fd5b6001600160c01b03198116811461276057600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516101e081016001600160401b0381118282101715614c2357614c23614bea565b60405290565b604080519081016001600160401b0381118282101715614c2357614c23614bea565b60405160e081016001600160401b0381118282101715614c2357614c23614bea565b60405160a081016001600160401b0381118282101715614c2357614c23614bea565b60405161012081016001600160401b0381118282101715614c2357614c23614bea565b604051601f8201601f191681016001600160401b0381118282101715614cda57614cda614bea565b604052919050565b60006101e08284031215614cf557600080fd5b614cfd614c00565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101208083013581830152506101408083013581830152506101608083013581830152506101808083013581830152506101a08083013581830152506101c080830135818301525092915050565b60008060006102208486031215614db957600080fd5b8335614dc481614bbf565b92506020840135614dd481614bd4565b9150614de38560408601614ce2565b90509250925092565b60008060408385031215614dff57600080fd5b8235614e0a81614bbf565b91506020830135614e1a81614bd4565b809150509250929050565b6001600160a01b038116811461276057600080fd5b60ff8116811461276057600080fd5b801515811461276057600080fd5b8035614e6281614e49565b919050565b60006001600160401b03821115614e8057614e80614bea565b50601f01601f191660200190565b600082601f830112614e9f57600080fd5b8135614eb2614ead82614e67565b614cb2565b818152846020838601011115614ec757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c08789031215614efd57600080fd5b8635614f0881614e25565b95506020870135614f1881614bbf565b94506040870135614f2881614e3a565b93506060870135614f3881614e49565b92506080870135614f4881614e25565b915060a08701356001600160401b03811115614f6357600080fd5b614f6f89828a01614e8e565b9150509295509295509295565b63ffffffff8116811461276057600080fd5b60008060008060008060008060006101208a8c031215614fad57600080fd5b89356001600160401b0380821115614fc457600080fd5b614fd08d838e01614e8e565b9a5060208c0135995060408c0135985060608c0135975060808c01359150614ff782614f7c565b90955060a08b01359061500982614f7c565b81955061501860c08d01614e57565b945061502660e08d01614e57565b93506101008c013591508082111561503d57600080fd5b5061504a8c828d01614e8e565b9150509295985092959850929598565b6001600160c01b031991909116815260200190565b60006020828403121561508157600080fd5b81356001600160401b0381111561509757600080fd5b614bb784828501614e8e565b6000806000606084860312156150b857600080fd5b83356150c381614bbf565b925060208401356150d381614bd4565b915060408401356001600160401b038111156150ee57600080fd5b6150fa86828701614e8e565b9150509250925092565b60006020828403121561511657600080fd5b813561129a81614e25565b6000806040838503121561513457600080fd5b823561513f81614e25565b915060208301356001600160401b0381111561515a57600080fd5b61516685828601614e8e565b9150509250929050565b60008060006060848603121561518557600080fd5b83356150c381614e25565b64ffffffffff8116811461276057600080fd5b60008060008060008060c087890312156151bc57600080fd5b86356151c781614bbf565b955060208701356001600160401b03808211156151e357600080fd5b6151ef8a838b01614e8e565b9650604089013595506060890135915061520882614f7c565b90935060808801359061521a82615190565b90925060a0880135908082111561523057600080fd5b50614f6f89828a01614e8e565b60006040828403121561524f57600080fd5b615257614c29565b9050813581526020820135602082015292915050565b6000806080838503121561528057600080fd5b61528a848461523d565b9150615299846040850161523d565b90509250929050565b60008060008061024085870312156152b957600080fd5b84356152c481614bbf565b935060208501356152d481614bd4565b92506152e38660408701614ce2565b939692955092936102200135925050565b6000806040838503121561530757600080fd5b823561531281614e25565b91506020830135614e1a81614e25565b60006020828403121561533457600080fd5b815162ffffff8116811461129a57600080fd5b600181811c9082168061535b57607f821691505b60208210810361537b57634e487b7160e01b600052602260045260246000fd5b50919050565b8051614e6281614e49565b60006020828403121561539e57600080fd5b815161129a81614e49565b8051614e6281614bbf565b6000602082840312156153c657600080fd5b815161129a81614bbf565b6000602082840312156153e357600080fd5b815161129a81614e25565b60006040828403121561540057600080fd5b615408614c29565b9050815181526020820151602082015292915050565b8051614e6281614e25565b6000610100828403121561543c57600080fd5b60405160c081018181106001600160401b038211171561545e5761545e614bea565b604052825161546c81614bbf565b8152602083015161547c81614e25565b602082015261548e84604085016153ee565b60408201526154a084608085016153ee565b606082015260c08301516154b381614e25565b608082015260e0929092015160a083015250919050565b6000602082840312156154dc57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156115ce576115ce6154e3565b600082601f83011261551d57600080fd5b815161552b614ead82614e67565b81815284602083860101111561554057600080fd5b614bb7826020830160208701614ae4565b8051614e6281614f7c565b8051614e6281615190565b60006020828403121561557957600080fd5b81516001600160401b038082111561559057600080fd5b9083019060e082860312156155a457600080fd5b6155ac614c4b565b6155b5836153a9565b81526020830151828111156155c957600080fd5b6155d58782860161550c565b602083015250604083015160408201526155f160608401615551565b606082015261560260808401615551565b608082015261561360a0840161555c565b60a082015260c08301518281111561562a57600080fd5b6156368782860161550c565b60c08301525095945050505050565b60006020828403121561565757600080fd5b81516001600160401b038082111561566e57600080fd5b9083019060a0828603121561568257600080fd5b61568a614c6d565b825161569581614bd4565b815260208301516156a581614e49565b60208201526040830151828111156156bc57600080fd5b6156c88782860161550c565b604083015250606083015160608201526080830151608082015280935050505092915050565b60006020828403121561570057600080fd5b81516001600160401b038082111561571757600080fd5b90830190610120828603121561572c57600080fd5b615734614c8f565b82518281111561574357600080fd5b61574f8782860161550c565b82525060208301516020820152604083015160408201526060830151606082015261577c60808401615551565b608082015261578d60a08401615551565b60a082015261579e60c08401615381565b60c08201526157af60e08401615381565b60e082015261010080840151838111156157c857600080fd5b6157d48882870161550c565b918301919091525095945050505050565b818103818111156115ce576115ce6154e3565b60006020828403121561580a57600080fd5b815161129a81615190565b601f82111561585f57600081815260208120601f850160051c8101602086101561583c5750805b601f850160051c820191505b8181101561585b57828155600101615848565b5050505b505050565b81516001600160401b0381111561587d5761587d614bea565b6158918161588b8454615347565b84615815565b602080601f8311600181146158c657600084156158ae5750858301515b600019600386901b1c1916600185901b17855561585b565b600085815260208120601f198616915b828110156158f5578886015182559484019460019091019084016158d6565b50858210156159135787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160601b0383168152604060208201526000614bb76040830184614b08565b60006020828403121561595757600080fd5b815161129a81614bd4565b8281526040602082015260008251610120806040850152615987610160850183614b08565b91506020850151606085015260408501516080850152606085015160a085015260808501516159be60c086018263ffffffff169052565b5060a085015163ffffffff811660e08601525060c08501516101006159e68187018315159052565b60e087015115159286019290925250840151603f1984830301610140850152615a0f8282614b08565b9695505050505050565b6001600160401b038116811461276057600080fd5b600060208284031215615a4057600080fd5b815161129a81615a19565b6001600160401b0360c01b81511682526020810151151560208301526000604082015160a06040850152615a8260a0850182614b08565b905060608301516060850152608083015160808501528091505092915050565b6001600160601b0384168152606060208201526000615ac46060830185615a4b565b905060ff83166040830152949350505050565b8051614e6281614e3a565b600060208284031215615af457600080fd5b81516001600160401b0380821115615b0b57600080fd5b9083019060e08286031215615b1f57600080fd5b615b27614c4b565b615b30836153a9565b8152615b3e602084016153a9565b6020820152615b4f60408401615ad7565b6040820152615b6060608401615381565b6060820152615b716080840161541e565b608082015261561360a0840161541e565b80516001600160601b031682526020808201516001600160a01b0390811682850152604080840151805191860191909152918201516060850152606083015180516080860152602081015160a0860152915060808301511660c08401525060a0015160e090910152565b6001600160601b0383168152610120810161129a6020830184615b82565b634e487b7160e01b600052603260045260246000fd5b600060208284031215615c3257600080fd5b81516001600160401b03811115615c4857600080fd5b614bb78482850161550c565b600081518084526020808501945080840160005b83811015615c8d5781516001600160401b031687529582019590820190600101615c68565b509495945050505050565b6001600160601b03861681526000602060018060a01b0387168184015260a06040840152615cc960a0840187614b08565b8381036060850152855180825282820190600581901b830184018489016000805b84811015615d4757868403601f19018652825180518086529089019089860190845b81811015615d325783516001600160e01b0319168352928b0192918b0191600101615d0c565b50509689019694505091870191600101615cea565b5050508681036080880152615d5c8189615c54565b9c9b505050505050505050505050565b6001600160601b0383168152604060208201526000614bb76040830184615a4b565b60208152600061129a6020830184614b08565b6001600160601b0381511682526000602082015160e06020850152615dc960e0850182614b08565b905060408301516040850152606083015163ffffffff8082166060870152806080860151166080870152505064ffffffffff60a08401511660a085015260c083015184820360c08601526115c98282614b08565b828152604060208201526000614bb76040830184615da1565b6001600160601b03841681526101408101615e546020830185615b82565b60ff8316610120830152949350505050565b600060208284031215615e7857600080fd5b815161129a81614e3a565b63ffffffff818116838216019080821115615ea057615ea06154e3565b5092915050565b838152606060208201526000615ac46060830185615da1565b60008060408385031215615ed357600080fd5b8251615ede81614e25565b6020840151909250614e1a81614e25565b634e487b7160e01b600052601260045260246000fdfe07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00f3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212205485d0c0a813c01b611d5e9810e5005a0228bc1902ea6b8f90720ace3a625acd64736f6c63430008140033",
576
1414
  "linkReferences": {
577
- "contracts/types/Blocknumber.sol": {
578
- "BlocknumberLib": [
1415
+ "contracts/types/DistributorType.sol": {
1416
+ "DistributorTypeLib": [
579
1417
  {
580
1418
  "length": 20,
581
- "start": 3499
1419
+ "start": 6865
1420
+ },
1421
+ {
1422
+ "length": 20,
1423
+ "start": 7006
582
1424
  }
583
1425
  ]
584
1426
  },
@@ -586,11 +1428,43 @@
586
1428
  "NftIdLib": [
587
1429
  {
588
1430
  "length": 20,
589
- "start": 2044
1431
+ "start": 2299
1432
+ },
1433
+ {
1434
+ "length": 20,
1435
+ "start": 5261
1436
+ },
1437
+ {
1438
+ "length": 20,
1439
+ "start": 10521
1440
+ },
1441
+ {
1442
+ "length": 20,
1443
+ "start": 16168
1444
+ },
1445
+ {
1446
+ "length": 20,
1447
+ "start": 16945
1448
+ }
1449
+ ]
1450
+ },
1451
+ "contracts/types/Referral.sol": {
1452
+ "ReferralLib": [
1453
+ {
1454
+ "length": 20,
1455
+ "start": 12519
1456
+ },
1457
+ {
1458
+ "length": 20,
1459
+ "start": 12753
1460
+ },
1461
+ {
1462
+ "length": 20,
1463
+ "start": 14001
590
1464
  },
591
1465
  {
592
1466
  "length": 20,
593
- "start": 3643
1467
+ "start": 14974
594
1468
  }
595
1469
  ]
596
1470
  },
@@ -598,7 +1472,11 @@
598
1472
  "RoleIdLib": [
599
1473
  {
600
1474
  "length": 20,
601
- "start": 5600
1475
+ "start": 16685
1476
+ },
1477
+ {
1478
+ "length": 20,
1479
+ "start": 17879
602
1480
  }
603
1481
  ]
604
1482
  },
@@ -606,7 +1484,115 @@
606
1484
  "TimestampLib": [
607
1485
  {
608
1486
  "length": 20,
609
- "start": 6035
1487
+ "start": 5405
1488
+ },
1489
+ {
1490
+ "length": 20,
1491
+ "start": 5539
1492
+ },
1493
+ {
1494
+ "length": 20,
1495
+ "start": 5645
1496
+ },
1497
+ {
1498
+ "length": 20,
1499
+ "start": 10859
1500
+ },
1501
+ {
1502
+ "length": 20,
1503
+ "start": 11983
1504
+ },
1505
+ {
1506
+ "length": 20,
1507
+ "start": 12119
1508
+ },
1509
+ {
1510
+ "length": 20,
1511
+ "start": 12241
1512
+ },
1513
+ {
1514
+ "length": 20,
1515
+ "start": 12384
1516
+ }
1517
+ ]
1518
+ },
1519
+ "contracts/types/UFixed.sol": {
1520
+ "UFixedLib": [
1521
+ {
1522
+ "length": 20,
1523
+ "start": 3203
1524
+ },
1525
+ {
1526
+ "length": 20,
1527
+ "start": 3341
1528
+ },
1529
+ {
1530
+ "length": 20,
1531
+ "start": 3921
1532
+ },
1533
+ {
1534
+ "length": 20,
1535
+ "start": 4035
1536
+ },
1537
+ {
1538
+ "length": 20,
1539
+ "start": 4170
1540
+ },
1541
+ {
1542
+ "length": 20,
1543
+ "start": 4295
1544
+ },
1545
+ {
1546
+ "length": 20,
1547
+ "start": 4422
1548
+ },
1549
+ {
1550
+ "length": 20,
1551
+ "start": 4557
1552
+ },
1553
+ {
1554
+ "length": 20,
1555
+ "start": 6233
1556
+ },
1557
+ {
1558
+ "length": 20,
1559
+ "start": 6369
1560
+ },
1561
+ {
1562
+ "length": 20,
1563
+ "start": 6495
1564
+ },
1565
+ {
1566
+ "length": 20,
1567
+ "start": 6616
1568
+ },
1569
+ {
1570
+ "length": 20,
1571
+ "start": 6732
1572
+ },
1573
+ {
1574
+ "length": 20,
1575
+ "start": 11442
1576
+ },
1577
+ {
1578
+ "length": 20,
1579
+ "start": 11558
1580
+ },
1581
+ {
1582
+ "length": 20,
1583
+ "start": 11726
1584
+ },
1585
+ {
1586
+ "length": 20,
1587
+ "start": 11842
1588
+ },
1589
+ {
1590
+ "length": 20,
1591
+ "start": 13060
1592
+ },
1593
+ {
1594
+ "length": 20,
1595
+ "start": 13179
610
1596
  }
611
1597
  ]
612
1598
  },
@@ -614,25 +1600,31 @@
614
1600
  "VersionLib": [
615
1601
  {
616
1602
  "length": 20,
617
- "start": 1566
1603
+ "start": 1711
618
1604
  },
619
1605
  {
620
1606
  "length": 20,
621
- "start": 3884
622
- },
1607
+ "start": 7426
1608
+ }
1609
+ ],
1610
+ "VersionPartLib": [
623
1611
  {
624
1612
  "length": 20,
625
- "start": 4686
1613
+ "start": 13889
626
1614
  }
627
1615
  ]
628
1616
  }
629
1617
  },
630
1618
  "deployedLinkReferences": {
631
- "contracts/types/Blocknumber.sol": {
632
- "BlocknumberLib": [
1619
+ "contracts/types/DistributorType.sol": {
1620
+ "DistributorTypeLib": [
633
1621
  {
634
1622
  "length": 20,
635
- "start": 3185
1623
+ "start": 6635
1624
+ },
1625
+ {
1626
+ "length": 20,
1627
+ "start": 6776
636
1628
  }
637
1629
  ]
638
1630
  },
@@ -640,11 +1632,43 @@
640
1632
  "NftIdLib": [
641
1633
  {
642
1634
  "length": 20,
643
- "start": 1730
1635
+ "start": 2069
1636
+ },
1637
+ {
1638
+ "length": 20,
1639
+ "start": 5031
1640
+ },
1641
+ {
1642
+ "length": 20,
1643
+ "start": 10291
1644
+ },
1645
+ {
1646
+ "length": 20,
1647
+ "start": 15938
1648
+ },
1649
+ {
1650
+ "length": 20,
1651
+ "start": 16715
1652
+ }
1653
+ ]
1654
+ },
1655
+ "contracts/types/Referral.sol": {
1656
+ "ReferralLib": [
1657
+ {
1658
+ "length": 20,
1659
+ "start": 12289
1660
+ },
1661
+ {
1662
+ "length": 20,
1663
+ "start": 12523
1664
+ },
1665
+ {
1666
+ "length": 20,
1667
+ "start": 13771
644
1668
  },
645
1669
  {
646
1670
  "length": 20,
647
- "start": 3329
1671
+ "start": 14744
648
1672
  }
649
1673
  ]
650
1674
  },
@@ -652,7 +1676,11 @@
652
1676
  "RoleIdLib": [
653
1677
  {
654
1678
  "length": 20,
655
- "start": 5286
1679
+ "start": 16455
1680
+ },
1681
+ {
1682
+ "length": 20,
1683
+ "start": 17649
656
1684
  }
657
1685
  ]
658
1686
  },
@@ -660,7 +1688,115 @@
660
1688
  "TimestampLib": [
661
1689
  {
662
1690
  "length": 20,
663
- "start": 5721
1691
+ "start": 5175
1692
+ },
1693
+ {
1694
+ "length": 20,
1695
+ "start": 5309
1696
+ },
1697
+ {
1698
+ "length": 20,
1699
+ "start": 5415
1700
+ },
1701
+ {
1702
+ "length": 20,
1703
+ "start": 10629
1704
+ },
1705
+ {
1706
+ "length": 20,
1707
+ "start": 11753
1708
+ },
1709
+ {
1710
+ "length": 20,
1711
+ "start": 11889
1712
+ },
1713
+ {
1714
+ "length": 20,
1715
+ "start": 12011
1716
+ },
1717
+ {
1718
+ "length": 20,
1719
+ "start": 12154
1720
+ }
1721
+ ]
1722
+ },
1723
+ "contracts/types/UFixed.sol": {
1724
+ "UFixedLib": [
1725
+ {
1726
+ "length": 20,
1727
+ "start": 2973
1728
+ },
1729
+ {
1730
+ "length": 20,
1731
+ "start": 3111
1732
+ },
1733
+ {
1734
+ "length": 20,
1735
+ "start": 3691
1736
+ },
1737
+ {
1738
+ "length": 20,
1739
+ "start": 3805
1740
+ },
1741
+ {
1742
+ "length": 20,
1743
+ "start": 3940
1744
+ },
1745
+ {
1746
+ "length": 20,
1747
+ "start": 4065
1748
+ },
1749
+ {
1750
+ "length": 20,
1751
+ "start": 4192
1752
+ },
1753
+ {
1754
+ "length": 20,
1755
+ "start": 4327
1756
+ },
1757
+ {
1758
+ "length": 20,
1759
+ "start": 6003
1760
+ },
1761
+ {
1762
+ "length": 20,
1763
+ "start": 6139
1764
+ },
1765
+ {
1766
+ "length": 20,
1767
+ "start": 6265
1768
+ },
1769
+ {
1770
+ "length": 20,
1771
+ "start": 6386
1772
+ },
1773
+ {
1774
+ "length": 20,
1775
+ "start": 6502
1776
+ },
1777
+ {
1778
+ "length": 20,
1779
+ "start": 11212
1780
+ },
1781
+ {
1782
+ "length": 20,
1783
+ "start": 11328
1784
+ },
1785
+ {
1786
+ "length": 20,
1787
+ "start": 11496
1788
+ },
1789
+ {
1790
+ "length": 20,
1791
+ "start": 11612
1792
+ },
1793
+ {
1794
+ "length": 20,
1795
+ "start": 12830
1796
+ },
1797
+ {
1798
+ "length": 20,
1799
+ "start": 12949
664
1800
  }
665
1801
  ]
666
1802
  },
@@ -668,15 +1804,17 @@
668
1804
  "VersionLib": [
669
1805
  {
670
1806
  "length": 20,
671
- "start": 1252
1807
+ "start": 1481
672
1808
  },
673
1809
  {
674
1810
  "length": 20,
675
- "start": 3570
676
- },
1811
+ "start": 7196
1812
+ }
1813
+ ],
1814
+ "VersionPartLib": [
677
1815
  {
678
1816
  "length": 20,
679
- "start": 4372
1817
+ "start": 13659
680
1818
  }
681
1819
  ]
682
1820
  }