@artblocks/contracts 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/README.md +11 -10
  2. package/artifacts/contracts/AdminACLV0RoyaltyRegistry.sol/AdminACLV0RoyaltyRegistry.json +193 -0
  3. package/artifacts/contracts/AdminACLV0RoyaltyRegistry.sol/IRoyaltyRegistry.json +35 -0
  4. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  5. package/artifacts/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2.sol/BytecodeStorageReaderContractV2.json +2 -2
  6. package/artifacts/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2_Web3Call.sol/BytecodeStorageReaderContractV2_Web3Call.json +2 -2
  7. package/artifacts/contracts/BytecodeStorageV2Writer.sol/BytecodeStorageV2Writer.json +2 -2
  8. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +210 -2
  9. package/artifacts/contracts/GenArt721CoreV3_Curated.sol/GenArt721CoreV3_Curated.json +235 -20
  10. package/artifacts/contracts/GenArt721CoreV3_Curated_Flex.sol/GenArt721CoreV3_Curated_Flex.json +3197 -0
  11. package/artifacts/contracts/GenArt721CoreV3_Explorations_Flex.sol/GenArt721CoreV3_Explorations_Flex.json +3192 -0
  12. package/artifacts/contracts/OwnedCreate2FactoryV0.sol/OwnedCreate2FactoryV0.json +2 -2
  13. package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +27 -2
  14. package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +27 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  25. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  26. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  27. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  28. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  31. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  33. package/artifacts/contracts/archive/minter-suite/Minters/MinterPolyptych/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +25 -0
  34. package/artifacts/contracts/archive/minter-suite/Minters/MinterPolyptych/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  35. package/artifacts/contracts/archive/minter-suite/Minters/MinterSEA/MinterSEAV0.sol/MinterSEAV0.json +2 -2
  36. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  37. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  38. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  39. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  40. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  41. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  42. package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +28 -2
  43. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +239 -20
  44. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +267 -48
  45. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +27 -2
  46. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  47. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +27 -2
  48. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +25 -0
  49. package/artifacts/contracts/engine/V3/transfer-hooks/AbstractTransferHook.sol/AbstractTransferHook.json +79 -0
  50. package/artifacts/contracts/engine/V3/transfer-hooks/OwnerHistoryTransferHook.sol/OwnerHistoryTransferHook.json +315 -0
  51. package/artifacts/contracts/generator/GenArt721GeneratorV0.sol/GenArt721GeneratorV0.json +2 -2
  52. package/artifacts/contracts/interfaces/v0.8.x/IClaimMinter.sol/IClaimMinter.json +189 -0
  53. package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +149 -0
  54. package/artifacts/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol/IEngineFactoryV0.json +26 -0
  55. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +25 -0
  56. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +25 -0
  57. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +123 -0
  58. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +123 -0
  59. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +25 -0
  60. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +25 -0
  61. package/artifacts/contracts/interfaces/v0.8.x/IOwnerHistoryTransferHook.sol/IOwnerHistoryTransferHook.json +299 -0
  62. package/artifacts/contracts/interfaces/v0.8.x/IPMPV0.sol/IPMPV0.json +7 -1
  63. package/artifacts/contracts/interfaces/v0.8.x/ISRHooks.sol/ISRHooks.json +432 -0
  64. package/artifacts/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol/ISeaDropShimForContract.json +0 -13
  65. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterTieredAllowV0.sol/ISharedMinterTieredAllowV0.json +94 -0
  66. package/artifacts/contracts/interfaces/v0.8.x/ITransferHook.sol/ITransferHook.json +63 -0
  67. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
  68. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageReader.json +2 -2
  69. package/artifacts/contracts/libs/v0.8.x/BytecodeStorageV2.sol/BytecodeStorageWriter.json +2 -2
  70. package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +2 -2
  71. package/artifacts/contracts/libs/v0.8.x/ENSLib.sol/ENSLib.json +10 -0
  72. package/artifacts/contracts/libs/v0.8.x/ENSLib.sol/IUniversalResolver.json +45 -0
  73. package/artifacts/contracts/libs/v0.8.x/EnumerableSetUint16.sol/EnumerableSetUint16.json +10 -0
  74. package/artifacts/contracts/libs/v0.8.x/FeistelWalkLib.sol/FeistelWalkLib.json +10 -0
  75. package/artifacts/contracts/libs/v0.8.x/ImmutableUint16Array.sol/ImmutableUint16Array.json +10 -0
  76. package/artifacts/contracts/libs/v0.8.x/V3EngineLib.sol/V3EngineLib.json +163 -0
  77. package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +2 -2
  78. package/artifacts/contracts/libs/v0.8.x/V3TransferHookLib.sol/V3TransferHookLib.json +79 -0
  79. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +2 -2
  80. package/artifacts/contracts/libs/v0.8.x/minter-libs/OnChainAllowlistLib.sol/OnChainAllowlistLib.json +10 -0
  81. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
  82. package/artifacts/contracts/libs/v0.8.x/minter-libs/RAMLib.sol/RAMLib.json +2 -2
  83. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +2 -2
  84. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +2 -2
  85. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +2 -2
  86. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  87. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +2 -2
  88. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +2 -2
  89. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +2 -2
  90. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +2 -2
  91. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +2 -2
  92. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +2 -2
  93. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceMerkleV0.sol/MinterMinPriceMerkleV0.json +2 -2
  94. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceV0.sol/MinterMinPriceV0.json +2 -2
  95. package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +2 -2
  96. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +2 -2
  97. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +2 -2
  98. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +2 -2
  99. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +2 -2
  100. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceOnChainAllowV0.sol/MinterSetPriceOnChainAllowV0.json +522 -0
  101. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +2 -2
  102. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +2 -2
  103. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceTieredAllowV1.sol/MinterSetPriceTieredAllowV1.json +715 -0
  104. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +2 -2
  105. package/artifacts/contracts/minter-suite/Minters/MinterSlidingScaleV0.sol/MinterSlidingScaleV0.json +431 -0
  106. package/artifacts/contracts/minter-suite/Minters/one-off/ClaimMinter.sol/ClaimMinter.json +502 -0
  107. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceTieredOnChainAllowV0.sol/MinterSetPriceTieredOnChainAllowV0.json +673 -0
  108. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +2 -2
  109. package/artifacts/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol/SeaDropXArtBlocksShim.json +6 -19
  110. package/artifacts/contracts/mock/BytecodeV2TextCR_DMock.sol/BytecodeV2TextCR_DMock.json +2 -2
  111. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  112. package/artifacts/contracts/mock/ENSLibMock.sol/ENSLibMock.json +30 -0
  113. package/artifacts/contracts/mock/EnumerableSetUint16Mock.sol/EnumerableSetUint16Mock.json +146 -0
  114. package/artifacts/contracts/mock/FeistelWalkLibMock.sol/FeistelWalkLibMock.json +142 -0
  115. package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +2 -2
  116. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
  117. package/artifacts/contracts/mock/ImmutableUint16ArrayMock.sol/ImmutableUint16ArrayMock.json +89 -0
  118. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +2 -2
  119. package/artifacts/contracts/mock/MockGenArt721V3Core.sol/MockGenArt721V3Core.json +490 -0
  120. package/artifacts/contracts/mock/MockPMP.sol/MockPMP.json +523 -0
  121. package/artifacts/contracts/mock/MockPMPAugmentHook.sol/MockPMPAugmentHook.json +2 -2
  122. package/artifacts/contracts/mock/MockPMPConfigureHook.sol/MockPMPConfigureHook.json +2 -2
  123. package/artifacts/contracts/mock/MockTransferHook.sol/MockTransferHook.json +453 -0
  124. package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockBatchTransferrer.json +39 -0
  125. package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockForwardingERC721Receiver.json +71 -0
  126. package/artifacts/contracts/mock/MockTransferHookTestHelpers.sol/MockSpoofingCore.json +94 -0
  127. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  128. package/artifacts/contracts/mock/ReentrancyBatchMockShared.sol/IBatchMinter.json +64 -0
  129. package/artifacts/contracts/mock/ReentrancyBatchMockShared.sol/ReentrancyBatchMockShared.json +113 -0
  130. package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/MockTarget.json +74 -0
  131. package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/RelayExecutorPartialRevertsTestHelper.json +138 -0
  132. package/artifacts/contracts/mock/RelayExecutorTestHelper.sol/RelayExecutorTestHelper.json +119 -0
  133. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  134. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  135. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +2 -2
  136. package/artifacts/contracts/relay/RelayExecutor.sol/RelayExecutor.json +101 -0
  137. package/artifacts/contracts/relay/RelayExecutorPartialReverts.sol/RelayExecutorPartialReverts.json +120 -0
  138. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverrideSplits.sol/GenArt721RoyaltyOverrideSplits.json +263 -0
  139. package/artifacts/contracts/utils/MintMulticallUtil.sol/IMinterSetPriceV5.json +40 -0
  140. package/artifacts/contracts/utils/MintMulticallUtil.sol/MintMulticallUtil.json +163 -0
  141. package/artifacts/contracts/web3call/PMPV0.sol/PMPV0.json +9 -3
  142. package/artifacts/contracts/web3call/PMPV1.sol/PMPV1.json +648 -0
  143. package/artifacts/contracts/web3call/augment-hooks/InjectBaseGasFee.sol/InjectBaseGasFee.json +2 -2
  144. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeight.sol/InjectBlockHeight.json +83 -0
  145. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightAndArtistProjectOverrides.sol/InjectBlockHeightAndArtistProjectOverrides.json +226 -0
  146. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightAndNumOwnedProjectTokens.sol/InjectBlockHeightAndNumOwnedProjectTokens.json +182 -0
  147. package/artifacts/contracts/web3call/augment-hooks/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.sol/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.json +226 -0
  148. package/artifacts/contracts/web3call/augment-hooks/InjectBlockTimestamp.sol/InjectBlockTimestamp.json +83 -0
  149. package/artifacts/contracts/web3call/augment-hooks/InjectBytesPerToken.sol/InjectBytesPerToken.json +358 -0
  150. package/artifacts/contracts/web3call/augment-hooks/InjectChromieSquiggleFloorPrice.sol/InjectChromieSquiggleFloorPrice.json +2 -2
  151. package/artifacts/contracts/web3call/augment-hooks/InjectIsNounsDaoMember.sol/InjectIsNounsDaoMember.json +2 -2
  152. package/artifacts/contracts/web3call/augment-hooks/InjectIsProjectFullyMinted.sol/InjectIsProjectFullyMinted.json +2 -2
  153. package/artifacts/contracts/web3call/augment-hooks/InjectPolyptychTokenHash.sol/InjectPolyptychTokenHash.json +2 -2
  154. package/artifacts/contracts/web3call/augment-hooks/InjectTokenHashSeed.sol/InjectTokenHashSeed.json +2 -2
  155. package/artifacts/contracts/web3call/augment-hooks/InjectTokenOwner.sol/InjectTokenOwner.json +2 -2
  156. package/artifacts/contracts/web3call/augment-hooks/InjectTokenOwnerEthBalance.sol/InjectTokenOwnerEthBalance.json +2 -2
  157. package/artifacts/contracts/web3call/augment-hooks/InjectUSDCTotalSupply.sol/InjectUSDCTotalSupply.json +2 -2
  158. package/artifacts/contracts/web3call/augment-hooks/SRHooks.sol/SRHooks.json +899 -0
  159. package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/IGenArt721V0_Minimal.json +30 -0
  160. package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/IRelic.json +35 -0
  161. package/artifacts/contracts/web3call/combined-hooks/LiftHooks.sol/LiftHooks.json +256 -0
  162. package/artifacts/contracts/web3call/configure-hooks/{abstractPMPConfigureHook.sol → AbstractPMPConfigureHook.sol}/AbstractPMPConfigureHook.json +1 -1
  163. package/artifacts/contracts/web3call/configure-hooks/PMPConfigureLockHook.sol/PMPConfigureLockHook.json +195 -0
  164. package/contracts/AdminACLV0RoyaltyRegistry.sol +142 -0
  165. package/contracts/DependencyRegistryV0.sol +143 -13
  166. package/contracts/GenArt721CoreV3_Curated.sol +1 -1
  167. package/contracts/GenArt721CoreV3_Curated_Flex.sol +173 -0
  168. package/contracts/GenArt721CoreV3_Explorations_Flex.sol +159 -0
  169. package/contracts/engine/V3/EngineFactoryV0.sol +20 -1
  170. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +286 -299
  171. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +292 -301
  172. package/contracts/engine/V3/transfer-hooks/AbstractTransferHook.sol +101 -0
  173. package/contracts/engine/V3/transfer-hooks/OwnerHistoryTransferHook.sol +291 -0
  174. package/contracts/generator/GenArt721GeneratorV0.sol +145 -47
  175. package/contracts/helpers/ERC1967ProxyImport.sol +5 -0
  176. package/contracts/interfaces/v0.8.x/IArtblocksRoyaltyOverride.sol +1 -1
  177. package/contracts/interfaces/v0.8.x/IClaimMinter.sol +70 -0
  178. package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +95 -0
  179. package/contracts/interfaces/v0.8.x/IEngineFactoryV0.sol +15 -0
  180. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +21 -2
  181. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +72 -0
  182. package/contracts/interfaces/v0.8.x/IOwnerHistoryTransferHook.sol +119 -0
  183. package/contracts/interfaces/v0.8.x/IPMPV0.sol +5 -3
  184. package/contracts/interfaces/v0.8.x/ISRHooks.sol +229 -0
  185. package/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol +0 -6
  186. package/contracts/interfaces/v0.8.x/ISharedMinterTieredAllowV0.sol +69 -0
  187. package/contracts/interfaces/v0.8.x/ITransferHook.sol +48 -0
  188. package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +12 -0
  189. package/contracts/libs/v0.8.x/ENSLib.sol +85 -0
  190. package/contracts/libs/v0.8.x/EnumerableSetUint16.sol +429 -0
  191. package/contracts/libs/v0.8.x/FeistelWalkLib.sol +221 -0
  192. package/contracts/libs/v0.8.x/ImmutableUint16Array.sol +201 -0
  193. package/contracts/libs/v0.8.x/V3EngineLib.sol +490 -0
  194. package/contracts/libs/v0.8.x/V3TransferHookLib.sol +251 -0
  195. package/contracts/libs/v0.8.x/minter-libs/OnChainAllowlistLib.sol +165 -0
  196. package/contracts/minter-suite/Minters/MinterSetPriceOnChainAllowV0.sol +632 -0
  197. package/contracts/minter-suite/Minters/MinterSetPriceTieredAllowV1.sol +871 -0
  198. package/contracts/minter-suite/Minters/MinterSlidingScaleV0.sol +493 -0
  199. package/contracts/minter-suite/Minters/one-off/ClaimMinter.sol +595 -0
  200. package/contracts/minter-suite/Minters/one-off/MinterSetPriceTieredOnChainAllowV0.sol +894 -0
  201. package/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol +59 -41
  202. package/contracts/mock/ENSLibMock.sol +25 -0
  203. package/contracts/mock/EnumerableSetUint16Mock.sol +88 -0
  204. package/contracts/mock/FeistelWalkLibMock.sol +81 -0
  205. package/contracts/mock/ImmutableUint16ArrayMock.sol +62 -0
  206. package/contracts/mock/MockGenArt721V3Core.sol +416 -0
  207. package/contracts/mock/MockPMP.sol +287 -0
  208. package/contracts/mock/MockTransferHook.sol +160 -0
  209. package/contracts/mock/MockTransferHookTestHelpers.sol +96 -0
  210. package/contracts/mock/ReentrancyBatchMockShared.sol +53 -0
  211. package/contracts/mock/RelayExecutorTestHelper.sol +44 -0
  212. package/contracts/relay/RelayExecutor.sol +61 -0
  213. package/contracts/relay/RelayExecutorPartialReverts.sol +79 -0
  214. package/contracts/royalty-registry/GenArt721RoyaltyOverrideSplits.sol +130 -0
  215. package/contracts/utils/MintMulticallUtil.sol +103 -0
  216. package/contracts/web3call/PMPV0.sol +92 -98
  217. package/contracts/web3call/PMPV1.sol +1204 -0
  218. package/contracts/web3call/augment-hooks/AbstractPMPAugmentHook.sol +1 -1
  219. package/contracts/web3call/augment-hooks/InjectBaseGasFee.sol +1 -1
  220. package/contracts/web3call/augment-hooks/InjectBlockHeight.sol +57 -0
  221. package/contracts/web3call/augment-hooks/InjectBlockHeightAndArtistProjectOverrides.sol +310 -0
  222. package/contracts/web3call/augment-hooks/InjectBlockHeightAndNumOwnedProjectTokens.sol +141 -0
  223. package/contracts/web3call/augment-hooks/InjectBlockHeightProjectInvocationsAndArtistProjectOverrides.sol +326 -0
  224. package/contracts/web3call/augment-hooks/InjectBlockTimestamp.sol +57 -0
  225. package/contracts/web3call/augment-hooks/InjectBytesPerToken.sol +279 -0
  226. package/contracts/web3call/augment-hooks/InjectIsProjectFullyMinted.sol +1 -1
  227. package/contracts/web3call/augment-hooks/InjectTokenHashSeed.sol +1 -1
  228. package/contracts/web3call/augment-hooks/InjectTokenOwner.sol +1 -1
  229. package/contracts/web3call/augment-hooks/InjectTokenOwnerEthBalance.sol +1 -1
  230. package/contracts/web3call/augment-hooks/SRHooks.sol +1722 -0
  231. package/contracts/web3call/combined-hooks/LiftHooks.sol +304 -0
  232. package/contracts/web3call/configure-hooks/{abstractPMPConfigureHook.sol → AbstractPMPConfigureHook.sol} +1 -1
  233. package/contracts/web3call/configure-hooks/PMPConfigureLockHook.sol +107 -0
  234. package/package.json +40 -25
@@ -141,6 +141,44 @@
141
141
  "name": "DependencyAdditionalRepositoryUpdated",
142
142
  "type": "event"
143
143
  },
144
+ {
145
+ "anonymous": false,
146
+ "inputs": [
147
+ {
148
+ "indexed": true,
149
+ "internalType": "bytes32",
150
+ "name": "dependencyNameAndVersion",
151
+ "type": "bytes32"
152
+ },
153
+ {
154
+ "indexed": false,
155
+ "internalType": "enum IDependencyRegistryV0.CanvasTagType",
156
+ "name": "canvasTagType",
157
+ "type": "uint8"
158
+ }
159
+ ],
160
+ "name": "DependencyCanvasTagTypeUpdated",
161
+ "type": "event"
162
+ },
163
+ {
164
+ "anonymous": false,
165
+ "inputs": [
166
+ {
167
+ "indexed": true,
168
+ "internalType": "bytes32",
169
+ "name": "dependencyNameAndVersion",
170
+ "type": "bytes32"
171
+ },
172
+ {
173
+ "indexed": false,
174
+ "internalType": "bool",
175
+ "name": "loadAsModule",
176
+ "type": "bool"
177
+ }
178
+ ],
179
+ "name": "DependencyLoadAsModuleUpdated",
180
+ "type": "event"
181
+ },
144
182
  {
145
183
  "anonymous": false,
146
184
  "inputs": [
@@ -179,6 +217,31 @@
179
217
  "name": "DependencyPreferredRepositoryUpdated",
180
218
  "type": "event"
181
219
  },
220
+ {
221
+ "anonymous": false,
222
+ "inputs": [
223
+ {
224
+ "indexed": true,
225
+ "internalType": "bytes32",
226
+ "name": "dependencyNameAndVersion",
227
+ "type": "bytes32"
228
+ },
229
+ {
230
+ "indexed": false,
231
+ "internalType": "enum IDependencyRegistryV0.ProjectScriptTagType",
232
+ "name": "projectScriptTagType",
233
+ "type": "uint8"
234
+ },
235
+ {
236
+ "indexed": false,
237
+ "internalType": "string",
238
+ "name": "projectScriptSpecialType",
239
+ "type": "string"
240
+ }
241
+ ],
242
+ "name": "DependencyProjectScriptTagTypeUpdated",
243
+ "type": "event"
244
+ },
182
245
  {
183
246
  "anonymous": false,
184
247
  "inputs": [
@@ -797,6 +860,92 @@
797
860
  "stateMutability": "view",
798
861
  "type": "function"
799
862
  },
863
+ {
864
+ "inputs": [
865
+ {
866
+ "internalType": "bytes32",
867
+ "name": "dependencyNameAndVersion",
868
+ "type": "bytes32"
869
+ }
870
+ ],
871
+ "name": "getDependencyDetailsV2",
872
+ "outputs": [
873
+ {
874
+ "components": [
875
+ {
876
+ "internalType": "string",
877
+ "name": "nameAndVersion",
878
+ "type": "string"
879
+ },
880
+ {
881
+ "internalType": "string",
882
+ "name": "licenseType",
883
+ "type": "string"
884
+ },
885
+ {
886
+ "internalType": "string",
887
+ "name": "preferredCDN",
888
+ "type": "string"
889
+ },
890
+ {
891
+ "internalType": "uint24",
892
+ "name": "additionalCDNCount",
893
+ "type": "uint24"
894
+ },
895
+ {
896
+ "internalType": "string",
897
+ "name": "preferredRepository",
898
+ "type": "string"
899
+ },
900
+ {
901
+ "internalType": "uint24",
902
+ "name": "additionalRepositoryCount",
903
+ "type": "uint24"
904
+ },
905
+ {
906
+ "internalType": "string",
907
+ "name": "dependencyWebsite",
908
+ "type": "string"
909
+ },
910
+ {
911
+ "internalType": "bool",
912
+ "name": "availableOnChain",
913
+ "type": "bool"
914
+ },
915
+ {
916
+ "internalType": "uint24",
917
+ "name": "scriptCount",
918
+ "type": "uint24"
919
+ },
920
+ {
921
+ "internalType": "bool",
922
+ "name": "loadAsModule",
923
+ "type": "bool"
924
+ },
925
+ {
926
+ "internalType": "enum IDependencyRegistryV0.CanvasTagType",
927
+ "name": "canvasTagType",
928
+ "type": "uint8"
929
+ },
930
+ {
931
+ "internalType": "enum IDependencyRegistryV0.ProjectScriptTagType",
932
+ "name": "projectScriptTagType",
933
+ "type": "uint8"
934
+ },
935
+ {
936
+ "internalType": "string",
937
+ "name": "projectScriptSpecialType",
938
+ "type": "string"
939
+ }
940
+ ],
941
+ "internalType": "struct IDependencyRegistryV0.DependencyDetails",
942
+ "name": "dependencyDetails",
943
+ "type": "tuple"
944
+ }
945
+ ],
946
+ "stateMutability": "view",
947
+ "type": "function"
948
+ },
800
949
  {
801
950
  "inputs": [
802
951
  {
@@ -1326,6 +1475,42 @@
1326
1475
  "stateMutability": "nonpayable",
1327
1476
  "type": "function"
1328
1477
  },
1478
+ {
1479
+ "inputs": [
1480
+ {
1481
+ "internalType": "bytes32",
1482
+ "name": "dependencyNameAndVersion",
1483
+ "type": "bytes32"
1484
+ },
1485
+ {
1486
+ "internalType": "enum IDependencyRegistryV0.CanvasTagType",
1487
+ "name": "canvasTagType",
1488
+ "type": "uint8"
1489
+ }
1490
+ ],
1491
+ "name": "updateDependencyCanvasTagType",
1492
+ "outputs": [],
1493
+ "stateMutability": "nonpayable",
1494
+ "type": "function"
1495
+ },
1496
+ {
1497
+ "inputs": [
1498
+ {
1499
+ "internalType": "bytes32",
1500
+ "name": "dependencyNameAndVersion",
1501
+ "type": "bytes32"
1502
+ },
1503
+ {
1504
+ "internalType": "bool",
1505
+ "name": "loadAsModule",
1506
+ "type": "bool"
1507
+ }
1508
+ ],
1509
+ "name": "updateDependencyLoadAsModule",
1510
+ "outputs": [],
1511
+ "stateMutability": "nonpayable",
1512
+ "type": "function"
1513
+ },
1329
1514
  {
1330
1515
  "inputs": [
1331
1516
  {
@@ -1362,6 +1547,29 @@
1362
1547
  "stateMutability": "nonpayable",
1363
1548
  "type": "function"
1364
1549
  },
1550
+ {
1551
+ "inputs": [
1552
+ {
1553
+ "internalType": "bytes32",
1554
+ "name": "dependencyNameAndVersion",
1555
+ "type": "bytes32"
1556
+ },
1557
+ {
1558
+ "internalType": "enum IDependencyRegistryV0.ProjectScriptTagType",
1559
+ "name": "projectScriptTagType",
1560
+ "type": "uint8"
1561
+ },
1562
+ {
1563
+ "internalType": "string",
1564
+ "name": "projectScriptSpecialType",
1565
+ "type": "string"
1566
+ }
1567
+ ],
1568
+ "name": "updateDependencyProjectScriptTagType",
1569
+ "outputs": [],
1570
+ "stateMutability": "nonpayable",
1571
+ "type": "function"
1572
+ },
1365
1573
  {
1366
1574
  "inputs": [
1367
1575
  {
@@ -1463,8 +1671,8 @@
1463
1671
  "type": "function"
1464
1672
  }
1465
1673
  ],
1466
- "bytecode": "0x608060405234801561001057600080fd5b506141df806100206000396000f3fe608060405234801561001057600080fd5b50600436106102ac5760003560e01c80638da5cb5b11610173578063c4d66de8116100d4578063c4d66de8146105d6578063caaa3bb7146105e9578063cc86ba4b146105fc578063cea2961a1461060f578063cfb5192814610622578063dc33f4ae14610635578063dfa3be5314610648578063f0b993821461065b578063f146f17f1461066e578063f2fde38b14610681578063f8ac18be14610694578063f9c0fae6146106a7578063fb5cd19b146106ba578063fed37e82146106c257600080fd5b80638da5cb5b146104e057806392b794db146104e85780639532f2f4146104fb5780639897993714610510578063a0a82bd314610523578063a1a7a47b14610536578063ad6b414d14610549578063b1d24cb21461055c578063b86b69f11461056f578063ba22851214610577578063be3d3ee61461058a578063c07392701461059d578063c0cd565f146105b0578063c42ae814146105c357600080fd5b80634c66823c1161021d5780634c66823c146103ec5780634f5267ef146103f4578063518cb3df1461040757806352ccc0211461041a5780635668bc5e1461042d5780635710f83d14610440578063613d57fd1461045357806366d549a114610466578063675abe24146104795780636dfa9f561461048c578063715018a61461049f57806371b70a71146104a757806381e7837c146104ba5780638b6ad1ec146104cd57600080fd5b8062e87903146102b157806307f9f786146102da57806313762186146102ef57806316a1012d146103045780631a051d49146103175780631e9bef461461032a578063230448b11461033f57806325ffb376146103625780633e76919a1461038a57806344346a5f1461039d578063447b051a146103b35780634a78a932146103c65780634bd1a387146103d9575b600080fd5b6102c46102bf36600461357b565b6106ca565b6040516102d191906135ed565b60405180910390f35b6102e26107a3565b6040516102d19190613600565b6103026102fd366004613710565b610974565b005b610302610312366004613710565b610a25565b610302610325366004613710565b610acd565b610332610b7e565b6040516102d1919061375f565b61035261034d366004613788565b610b97565b60405190151581526020016102d1565b6103756103703660046137e0565b610c4b565b6040516102d1999897969594939291906137f9565b6103326103983660046137e0565b610e86565b6103a5610ff0565b6040519081526020016102d1565b6103026103c1366004613894565b61100a565b6102c46103d43660046138c9565b611098565b6103026103e73660046138f5565b6111eb565b6103326112bd565b6103026104023660046138c9565b6112d9565b6102c461041536600461357b565b6113bb565b6103026104283660046137e0565b611424565b6103a561043b3660046137e0565b611549565b61030261044e366004613925565b611576565b6103a56104613660046137e0565b611640565b61030261047436600461396b565b611666565b610302610487366004613a06565b6117bc565b61030261049a36600461357b565b61186a565b61030261196f565b6102c46104b536600461357b565b611983565b6103026104c8366004613a06565b6119da565b6103026104db366004613a06565b611a96565b610332611b05565b6103756104f6366004613a23565b611b19565b610503611b5d565b6040516102d19190613a57565b61030261051e366004613a06565b611c23565b610302610531366004613925565b611c92565b61030261054436600461357b565b611d5a565b6103026105573660046137e0565b611e39565b6102c461056a3660046137e0565b611f3e565b6103a5611f71565b6103a561058536600461357b565b612016565b610302610598366004613925565b6120db565b6103026105ab3660046137e0565b61215a565b6103026105be366004613ab9565b612250565b6103026105d1366004613925565b6122f1565b6103026105e4366004613a06565b612361565b6103026105f7366004613710565b61247c565b6102c461060a3660046137e0565b612526565b61035261061d366004613a06565b612554565b6103a5610630366004613a23565b6125eb565b610302610643366004613925565b6125ff565b61033261065636600461357b565b61269e565b6102c461066936600461357b565b6126f9565b61030261067c366004613925565b612751565b61030261068f366004613a06565b612814565b6103026106a23660046137e0565b61288d565b6103026106b5366004613925565b612a12565b610503612a85565b6103a5612b33565b606060006106d6612b48565b600085815260059190910160205260409020600781015490915061070090849062ffffff16612b6c565b60008381526002820160205260409020805461071b90613ae7565b80601f016020809104026020016040519081016040528092919081815260200182805461074790613ae7565b80156107945780601f1061076957610100808354040283529160200191610794565b820191906000526020600020905b81548152906001019060200180831161077757829003601f168201915b50505050509150505b92915050565b606060006107af612b48565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316631676ddc36040518163ffffffff1660e01b8152600401600060405180830381865afa158015610803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082b9190810190613b1b565b8051909150600061084561083d612b48565b600b01612b8b565b90506000815184516108579190613be2565b6001600160401b0381111561086e5761086e61364d565b604051908082528060200260200182016040528015610897578160200160208202803683370190505b50805190915060005b818110156109695784811015610901578581815181106108c2576108c2613bf5565b60200260200101518382815181106108dc576108dc613bf5565b60200260200101906001600160a01b031690816001600160a01b031681525050610957565b8361090c8683613c0b565b8151811061091c5761091c613bf5565b602002602001015183828151811061093657610936613bf5565b60200260200101906001600160a01b031690816001600160a01b0316815250505b8061096181613c1e565b9150506108a0565b509095945050505050565b6109846309bb10c360e11b612b98565b61098d81612be8565b61099683612c37565b60006109a0612b48565b60008581526005919091016020526040902060078101549091506109ca90849062ffffff16612b6c565b600083815260028201602052604090206109e48382613c9b565b50837f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d8385604051610a17929190613d54565b60405180910390a250505050565b610a356316a1012d60e01b612b98565b610a3e81612be8565b610a4783612c94565b6000610a51612b48565b6000858152600691909101602052604090206001810154909150610a7b90849062ffffff16612b6c565b610a8482612cf3565b60008481526020839052604080822080546001600160a01b0319166001600160a01b0394909416939093179092559051859160008051602061416a83398151915291a250505050565b610add631a051d4960e01b612b98565b610ae681612be8565b610aef83612c37565b6000610af9612b48565b6000858152600591909101602052604090206007810154909150610b2a908490600160301b900462ffffff16612b6c565b610b3382612cf3565b600084815260068301602052604080822080546001600160a01b0319166001600160a01b0394909416939093179092559051859160008051602061418a83398151915291a250505050565b6000610b88612b48565b546001600160a01b0316919050565b600080610ba2611b05565b6001600160a01b031614158015610c415750610bbc612b48565b546040516217798b60e61b81526001600160a01b03868116600483015285811660248301526001600160e01b031985166044830152909116906305de62c0906064016020604051808303816000875af1158015610c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c419190613d76565b90505b9392505050565b606080606060006060600060606000806000610c65612b48565b60008c8152600591909101602052604090209050610c828b612da3565b8154610c8d90612da3565b6007830154600184018054909162ffffff8082169260038801926301000000810483169260058a0192600160301b90920416801515918790610cce90613ae7565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfa90613ae7565b8015610d475780601f10610d1c57610100808354040283529160200191610d47565b820191906000526020600020905b815481529060010190602001808311610d2a57829003601f168201915b50505050509650848054610d5a90613ae7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8690613ae7565b8015610dd35780601f10610da857610100808354040283529160200191610dd3565b820191906000526020600020905b815481529060010190602001808311610db657829003601f168201915b50505050509450828054610de690613ae7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1290613ae7565b8015610e5f5780601f10610e3457610100808354040283529160200191610e5f565b820191906000526020600020905b815481529060010190602001808311610e4257829003601f168201915b50505050509250995099509950995099509950995099509950509193959799909294969850565b600080610e91612b48565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316637ac4f3296040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f099190613d98565b905080831015610f8957610f1b612b48565b600a0154604051631ef6bdbf60e21b8152600481018590526001600160a01b0390911690637bdaf6fc90602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c449190613db1565b6000610f9e610f96612b48565b600b01612e0e565b9050610faa8183613be2565b8410610fd15760405162461bcd60e51b8152600401610fc890613dce565b60405180910390fd5b610fe8828503610fdf612b48565b600b0190612e18565b949350505050565b6000611005610ffd612b48565b600101612e0e565b905090565b61101a63223d828d60e11b612b98565b61102381612c37565b61102c83612e24565b80611035612b48565b6001600160a01b03851660008181526009929092016020908152604080842087855282529283902093909355905183815284927ff2f4de0c34a4899f5cf7a30aced71b0c27f629f80fb61efc06c7a12ecabdb7ba910160405180910390a3505050565b60606110a383612e24565b60006110ad612b48565b6001600160a01b038516600090815260099190910160209081526040808320868452909152902054905080156110ee576110e681612da3565b91505061079d565b604051633ae7357560e21b8152600481018490526001600160a01b0385169063eb9cd5d490602401600060405180830381865afa92505050801561115457506040513d6000823e601f3d908101601f191682016040526111519190810190613e4a565b60015b6111d85760405162461bcd60e51b815260206004820152604960248201527f436f6e747261637420646f6573206e6f7420696d706c656d656e742070726f6a60448201527f65637453637269707444657461696c7320616e6420686173206e6f206f7665726064820152683934b2329039b2ba1760b91b608482015260a401610fc8565b8294505050505061079d565b5092915050565b6111fb634bd1a38760e01b612b98565b61120481612e77565b61120d82612c37565b6000611217612b48565b600084815260059190910160209081526040808320600781018054600160301b9081900462ffffff9081168752600684019095529290942080546001600160a01b0319166001600160a01b038816179055925492935061127a9204166001613eb6565b60078201805462ffffff92909216600160301b0262ffffff60301b19909216919091179055604051839060008051602061418a83398151915290600090a2505050565b60006112c7612b48565b600a01546001600160a01b0316919050565b6112e9634f5267ef60e01b612b98565b60006112f3612b48565b6001600160a01b038416600090815260098201602090815260408083208684529091529020549091506113665760405162461bcd60e51b815260206004820152601b60248201527a139bc81bdd995c9c9a5919481cd95d08199bdc881c1c9bda9958dd602a1b6044820152606401610fc8565b6001600160a01b03831660008181526009830160209081526040808320868452909152808220829055518492917f618154ee1a16009759db8e59ff744e79dd094831be73c4b9383f885678c20b7391a3505050565b606060006113c7612b48565b60008581526005919091016020526040902060078101549091506113f8908490600160301b900462ffffff16612b6c565b60008381526006820160205260409020546001600160a01b031661141b81612ecb565b95945050505050565b6114346352ccc02160e01b612b98565b61143d81612c37565b6000611447612b48565b6000838152600591909101602052604090206007810154909150600160301b900462ffffff166114b95760405162461bcd60e51b815260206004820152601e60248201527f746865726520617265206e6f207363726970747320746f2072656d6f766500006044820152606401610fc8565b600781015460068201906000906114de90600190600160301b900462ffffff16613ed2565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560078401805462ffffff60301b198116600160301b91829004861660001901909516029390931790925551839160008051602061418a83398151915291a25050565b6000611553612b48565b6000928352600501602052506040902060070154600160301b900462ffffff1690565b611586635710f83d60e01b612b98565b61158f81612be8565b61159882612c37565b60006115a2612b48565b60008481526005919091016020908152604080832060078101546301000000900462ffffff16808552600482019093529220919250906115e28482613c9b565b506115ee816001613be2565b8260070160036101000a81548162ffffff021916908362ffffff160217905550837ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde8483604051610a17929190613d54565b600061164a612b48565b600092835260060160205250604090206001015462ffffff1690565b6116766366d549a160e01b612b98565b61167f84612c94565b61168c8560406001613053565b6116d55760405162461bcd60e51b815260206004820152601a60248201527901b5d5cdd0818dbdb9d185a5b88195e1858dd1b1e481bdb9948160361b6044820152606401610fc8565b60006116df612b48565b90506116ee60018201876130c7565b6117365760405162461bcd60e51b8152602060048201526019602482015278446570656e64656e637920616c72656164792065786973747360381b6044820152606401610fc8565b60008681526005820160205260409020858155600181016117578682613c9b565b50600381016117668582613c9b565b50600581016117758482613c9b565b5085877f14d15ecf0e955bdd7a921efba642deef4d718696d3fc369454c84817fed0fb778787876040516117ab93929190613eee565b60405180910390a350505050505050565b6117cc6319d6af8960e21b612b98565b6117d581612e77565b6117ea816117e1612b48565b600b01906130d3565b6118335760405162461bcd60e51b815260206004820152601a60248201527910dbdb9d1c9858dd08185b1c9958591e481cdd5c1c1bdc9d195960321b6044820152606401610fc8565b6040516001600160a01b038216907f85796181e67d093fd8fc344cdf114629c14c1396c47bfd9cda9392285e74d43f90600090a250565b61187a6336fd4fab60e11b612b98565b61188382612c37565b600061188d612b48565b600084815260058201602052604090206007810154919250906301000000900462ffffff166118bc8482612b6c565b60006118c9600183613c0b565b60008781526005860160209081526040808320848452600490810183528184208a85529088019092529091209192506119029082613f31565b506000818152600484016020526040812061191c9161352d565b60078301805465ffffff0000001916630100000062ffffff841602179055604051859087907fc02725dfc9639e3399432cdae3db1c062229f4cc41bcc18631517617c020b71c90600090a3505050505050565b6119776130e8565b6119816000613147565b565b6060600061198f612b48565b60008581526006919091016020526040902060018101549091506119b990849062ffffff16612b6c565b6000838152602082905260409020546001600160a01b031661141b81612ecb565b6119ea632079e0df60e21b612b98565b6119ff816119f6612b48565b600b019061317a565b611a5f5760405162461bcd60e51b815260206004820152602b60248201527f436f726520636f6e747261637420616c72656164792072656d6f766564206f7260448201526a081b9bdd081a5b881cd95d60aa1b6064820152608401610fc8565b6040516001600160a01b038216907f24f057e6bd463ac72bb963a1e55a41494d252695f97a7671c2b7018345eb31f790600090a250565b611aa66322dab47b60e21b612b98565b611aaf81612e77565b80611ab8612b48565b600a0180546001600160a01b0319166001600160a01b03928316179055604051908216907f38429341ba977e6c97809dd9fed1f58cf5c409bfe8132475b3f73bda02dd84f690600090a250565b60006110056033546001600160a01b031690565b60608060606000606060006060600080611b328a61318f565b611b3e6103708b6131d3565b9850985098509850985098509850985098509193959799909294969850565b60606000611b69612b48565b90506000611b7982600101612e0e565b90506000816001600160401b03811115611b9557611b9561364d565b604051908082528060200260200182016040528015611bc857816020015b6060815260200190600190039081611bb35790505b50905060005b82811015611c1b57611beb611be66001860183612e18565b612da3565b828281518110611bfd57611bfd613bf5565b60200260200101819052508080611c1390613c1e565b915050611bce565b509392505050565b611c33639897993760e01b612b98565b611c3c81612e77565b80611c45612b48565b600d0180546001600160a01b0319166001600160a01b03928316179055604051908216907f0b9c67948019a508c85a8b9abbe9b2ff80ab26c068bc4edb68425299f360be6e90600090a250565b611ca263a0a82bd360e01b612b98565b611cab81612be8565b611cb482612c94565b6000611cbe612b48565b6000848152600691909101602052604090209050611cdb82612cf3565b6001828101805462ffffff908116600090815260208690526040902080546001600160a01b0319166001600160a01b03959095169490941790935554611d22921690613eb6565b60018201805462ffffff191662ffffff92909216919091179055604051839060008051602061416a83398151915290600090a2505050565b611d6a63a1a7a47b60e01b612b98565b611d7382612c37565b6000611d7d612b48565b600084815260059190910160205260409020600781015490915062ffffff16611da68382612b6c565b6000611db3600183613c0b565b60008181526002850160205260408082208783529120919250611dd69082613f31565b5060008181526002840160205260408120611df09161352d565b60078301805462ffffff191662ffffff8316179055604051849086907f225454b600cf489553fde6e3b7f5e458b1093c035390b678067ea799b3b016cd90600090a35050505050565b611e4963ad6b414d60e01b612b98565b611e5281612c94565b6000611e5c612b48565b600083815260069190910160205260409020600181015490915062ffffff1680611ed35760405162461bcd60e51b815260206004820152602260248201527f5468657265206973206e6f206c6963656e7365207465787420746f2072656d6f604482015261766560f01b6064820152608401610fc8565b816000611ee1600184613ed2565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560018501805462ffffff191660001986019094169390931790925551849160008051602061416a83398151915291a2505050565b60606000611f4a612b48565b9050611f6183611f5c83600101612e0e565b612b6c565b610c44611be66001830185612e18565b600080611f7c612b48565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316637ac4f3296040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff49190613d98565b90506000612003610f96612b48565b905061200f8183613be2565b9250505090565b600080612021612b48565b6000858152600591909101602052604090206007810154909150612052908490600160301b900462ffffff16612b6c565b61205a6131f2565b60008481526006830160205260409081902054905163cc31a33160e01b81526001600160a01b039283169263cc31a3319261209a9291169060040161375f565b602060405180830381865afa1580156120b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe89190613d98565b6120eb635f1e9f7360e11b612b98565b6120f482612c37565b806120fd612b48565b6000848152600591909101602052604090206001019061211d9082613c9b565b50817fc9890a31ec780bb5a8a017d683d3913f97260548d71c2cee78194ed2833f02358260405161214e91906135ed565b60405180910390a25050565b61216a630c07392760e41b612b98565b806121c35760405162461bcd60e51b815260206004820152602360248201527f4c6963656e736520747970652063616e6e6f7420626520656d70747920737472604482015262696e6760e81b6064820152608401610fc8565b6121d8816121cf612b48565b600301906130c7565b6122225760405162461bcd60e51b815260206004820152601b60248201527a4c6963656e7365207479706520616c72656164792065786973747360281b6044820152606401610fc8565b60405181907fad5dcce4588345db351371d105540f3fb69966f418d923539f19d5f44a1cfc4b90600090a250565b61226063c0cd565f60e01b612b98565b61226981612e77565b61227283612c37565b600061227c612b48565b60008581526005919091016020526040902060078101549091506122ad908490600160301b900462ffffff16612b6c565b600083815260068201602052604080822080546001600160a01b0319166001600160a01b03861617905551859160008051602061418a83398151915291a250505050565b61230163310aba0560e21b612b98565b61230a82612c37565b80612313612b48565b600084815260059182016020526040902001906123309082613c9b565b50817f94747dffac14b8b9a15e699c998cc8f42ad81f21ae95e155c8a1c49403117b8b8260405161214e91906135ed565b600054610100900460ff16158080156123815750600054600160ff909116105b8061239b5750303b15801561239b575060005460ff166001145b6123fe5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610fc8565b6000805460ff191660011790558015612421576000805461ff0019166101001790555b612429613274565b61243282613147565b8015612478576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61248c63caaa3bb760e01b612b98565b61249581612be8565b61249e83612c37565b60006124a8612b48565b60008581526005919091016020526040902060078101549091506124d99084906301000000900462ffffff16612b6c565b600083815260048201602052604090206124f38382613c9b565b50837ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde8385604051610a17929190613d54565b60606000612532612b48565b905061254483611f5c83600301612e0e565b610c44611be66003830185612e18565b600061255e612b48565b600a015460405163f1052af560e01b81526001600160a01b039091169063f1052af59061258f90859060040161375f565b602060405180830381865afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d09190613d76565b8061079d575061079d826125e2612b48565b600b01906132a3565b60006125f68261318f565b61079d826131d3565b61260f636e19fa5760e11b612b98565b61261881612be8565b61262182612c37565b600061262b612b48565b600084815260059190910160205260409020905061264882612cf3565b600782018054600160301b9081900462ffffff9081166000908152600686016020526040902080546001600160a01b0319166001600160a01b039590951694909417909355905461127a92919004166001613eb6565b6000806126a9612b48565b60008581526005919091016020526040902060078101549091506126da908490600160301b900462ffffff16612b6c565b60009283526006016020525060409020546001600160a01b0316919050565b60606000612705612b48565b60008581526005919091016020526040902060078101549091506127369084906301000000900462ffffff16612b6c565b60008381526004820160205260409020805461071b90613ae7565b61276163f146f17f60e01b612b98565b61276a81612be8565b61277382612c37565b600061277d612b48565b600084815260059190910160209081526040808320600781015462ffffff16808552600282019093529220919250906127b68482613c9b565b506127c2816001613be2565b8260070160006101000a81548162ffffff021916908362ffffff160217905550837f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d8483604051610a17929190613d54565b61281c6130e8565b6001600160a01b0381166128815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fc8565b61288a81613147565b50565b61289d637c560c5f60e11b612b98565b6128a681612c37565b60006128b0612b48565b6000838152600582016020526040902060078101549192509062ffffff161580156128e9575060078101546301000000900462ffffff16155b801561290357506007810154600160301b900462ffffff16155b6129855760405162461bcd60e51b815260206004820152604760248201527f43616e6e6f742072656d6f766520646570656e64656e6379207769746820616460448201527f646974696f6e616c2043444e732c207265706f7369746f726965732c206f72206064820152667363726970747360c81b608482015260a401610fc8565b61299260018301846132b8565b5060008381526005830160205260408120818155906129b4600183018261352d565b6129c260038301600061352d565b6129d060058301600061352d565b5060070180546001600160481b031916905560405183907f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7290600090a2505050565b612a22637ce07d7360e11b612b98565b612a2b82612c37565b80612a34612b48565b60008481526005919091016020526040902060030190612a549082613c9b565b50817f774918414e4887efe5349a305fe253ee8b1e3fe0c2117012f0c215645693cbfd8260405161214e91906135ed565b60606000612a91612b48565b90506000612aa182600301612e0e565b90506000816001600160401b03811115612abd57612abd61364d565b604051908082528060200260200182016040528015612af057816020015b6060815260200190600190039081612adb5790505b50905060005b82811015611c1b57612b0e611be66003860183612e18565b828281518110612b2057612b20613bf5565b6020908102919091010152600101612af6565b6000611005612b40612b48565b600301612e0e565b7fb1832496845cc2c2d1bd0879f9ba0b1ef7ffcfdc79a541ee494477d8e10b9a3190565b8082106124785760405162461bcd60e51b8152600401610fc890613dce565b60606000610c44836132c4565b612ba3333083610b97565b61288a5760405162461bcd60e51b815260206004820152601660248201527513db9b1e4810591b5a5b881050d308185b1b1bddd95960521b6044820152606401610fc8565b805160000361288a5760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d656d70747920737472696e6760281b6044820152606401610fc8565b612c4c81612c43612b48565b60010190613320565b61288a5760405162461bcd60e51b815260206004820152601960248201527811195c195b99195b98de48191bd95cc81b9bdd08195e1a5cdd603a1b6044820152606401610fc8565b612ca981612ca0612b48565b60030190613320565b61288a5760405162461bcd60e51b815260206004820152601b60248201527a131a58d95b9cd9481d1e5c1948191bd95cc81b9bdd08195e1a5cdd602a1b6044820152606401610fc8565b6000807f42797465636f646553746f726167655f56322e302e305f5f5f5f5f5f5f5f5f203084604051602001612d2b93929190614005565b60405160208183030381529060405290508051602082016000f091506001600160a01b038216612d9d5760405162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374417353746f726167653a205772697465204572726f7200006044820152606401610fc8565b50919050565b606060005b828160ff1660208110612dbd57612dbd613bf5565b1a60f81b6001600160f81b03191615801590612ddc575060208160ff16105b15612df35780612deb8161406d565b915050612da8565b60405191506040820160405280825282602083015250919050565b600061079d825490565b6000610c44838361332c565b612e2d81612554565b61288a5760405162461bcd60e51b815260206004820152601b60248201527a10dbdc994818dbdb9d1c9858dd081b9bdd081cdd5c1c1bdc9d1959602a1b6044820152606401610fc8565b6001600160a01b03811661288a5760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d7a65726f206164647265737360281b6044820152606401610fc8565b60606000612ed76131f2565b90506000816001600160a01b031663cc31a331856040518263ffffffff1660e01b8152600401612f07919061375f565b602060405180830381865afa158015612f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f489190613d98565b90507f554e4b4e4f574e5f56455253494f4e5f535452494e475f5f5f5f5f5f5f5f5f208103612fe257604051632475d70960e01b81526001600160a01b03831690632475d70990612f9d90879060040161375f565b600060405180830381865afa158015612fba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fe8919081019061408c565b604051630eacc5e760e31b81526001600160a01b038316906375662f389061300e90879060040161375f565b600060405180830381865afa15801561302b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fe891908101906140d4565b60008060005b60208160ff1610156130b3576000868260ff166020811061307c5761307c613bf5565b1a90508015801590613091575060808160ff16105b156130aa578560ff168160ff16036130aa578260010192505b50600101613059565b8360ff168260ff1614925050509392505050565b6000610c448383613356565b6000610c44836001600160a01b038416613356565b336130f1611b05565b6001600160a01b0316146119815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fc8565b613150816133a0565b80613159612b48565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6000610c44836001600160a01b0384166133f2565b60208151111561288a5760405162461bcd60e51b815260206004820152600f60248201526e537472696e6720746f6f206c6f6e6760881b6044820152606401610fc8565b8051600090829082036131e95750600092915050565b50506020015190565b60006131fc612b48565b600d0160009054906101000a90046001600160a01b03166001600160a01b03166310ba84aa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613250573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110059190613db1565b600054610100900460ff1661329b5760405162461bcd60e51b8152600401610fc890614108565b6119816134e5565b6000610c44836001600160a01b038416613515565b6000610c4483836133f2565b60608160000180548060200260200160405190810160405280929190818152602001828054801561331457602002820191906000526020600020905b815481526020019060010190808311613300575b50505050509050919050565b6000610c448383613515565b600082600001828154811061334357613343613bf5565b9060005260206000200154905092915050565b60006133628383613515565b6133985750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561079d565b50600061079d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081815260018301602052604081205480156134db576000613416600183613c0b565b855490915060009061342a90600190613c0b565b905081811461348f57600086600001828154811061344a5761344a613bf5565b906000526020600020015490508087600001848154811061346d5761346d613bf5565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806134a0576134a0614153565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061079d565b600091505061079d565b600054610100900460ff1661350c5760405162461bcd60e51b8152600401610fc890614108565b61198133613147565b60009081526001919091016020526040902054151590565b50805461353990613ae7565b6000825580601f10613549575050565b601f01602090049060005260206000209081019061288a91905b808211156135775760008155600101613563565b5090565b6000806040838503121561358e57600080fd5b50508035926020909101359150565b60005b838110156135b85781810151838201526020016135a0565b50506000910152565b600081518084526135d981602086016020860161359d565b601f01601f19169290920160200192915050565b602081526000610c4460208301846135c1565b6020808252825182820181905260009190848201906040850190845b818110156136415783516001600160a01b03168352928401929184019160010161361c565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561368b5761368b61364d565b604052919050565b60006001600160401b038211156136ac576136ac61364d565b50601f01601f191660200190565b600082601f8301126136cb57600080fd5b81356136de6136d982613693565b613663565b8181528460208386010111156136f357600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561372557600080fd5b833592506020840135915060408401356001600160401b0381111561374957600080fd5b613755868287016136ba565b9150509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461288a57600080fd5b60008060006060848603121561379d57600080fd5b83356137a881613773565b925060208401356137b881613773565b915060408401356001600160e01b0319811681146137d557600080fd5b809150509250925092565b6000602082840312156137f257600080fd5b5035919050565b600061012080835261380d8184018d6135c1565b90508281036020840152613821818c6135c1565b90508281036040840152613835818b6135c1565b905062ffffff808a1660608501528382036080850152613855828a6135c1565b915080881660a085015283820360c085015261387182886135c1565b925085151560e085015280851661010085015250509a9950505050505050505050565b6000806000606084860312156138a957600080fd5b83356138b481613773565b95602085013595506040909401359392505050565b600080604083850312156138dc57600080fd5b82356138e781613773565b946020939093013593505050565b6000806040838503121561390857600080fd5b82359150602083013561391a81613773565b809150509250929050565b6000806040838503121561393857600080fd5b8235915060208301356001600160401b0381111561395557600080fd5b613961858286016136ba565b9150509250929050565b600080600080600060a0868803121561398357600080fd5b853594506020860135935060408601356001600160401b03808211156139a857600080fd5b6139b489838a016136ba565b945060608801359150808211156139ca57600080fd5b6139d689838a016136ba565b935060808801359150808211156139ec57600080fd5b506139f9888289016136ba565b9150509295509295909350565b600060208284031215613a1857600080fd5b8135610c4481613773565b600060208284031215613a3557600080fd5b81356001600160401b03811115613a4b57600080fd5b610fe8848285016136ba565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613aac57603f19888603018452613a9a8583516135c1565b94509285019290850190600101613a7e565b5092979650505050505050565b600080600060608486031215613ace57600080fd5b833592506020840135915060408401356137d581613773565b600181811c90821680613afb57607f821691505b602082108103612d9d57634e487b7160e01b600052602260045260246000fd5b60006020808385031215613b2e57600080fd5b82516001600160401b0380821115613b4557600080fd5b818501915085601f830112613b5957600080fd5b815181811115613b6b57613b6b61364d565b8060051b9150613b7c848301613663565b8181529183018401918481019088841115613b9657600080fd5b938501935b83851015613bc05784519250613bb083613773565b8282529385019390850190613b9b565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561079d5761079d613bcc565b634e487b7160e01b600052603260045260246000fd5b8181038181111561079d5761079d613bcc565b600060018201613c3057613c30613bcc565b5060010190565b601f821115613c8157600081815260208120601f850160051c81016020861015613c5e5750805b601f850160051c820191505b81811015613c7d57828155600101613c6a565b5050505b505050565b600019600383901b1c191660019190911b1790565b81516001600160401b03811115613cb457613cb461364d565b613cc881613cc28454613ae7565b84613c37565b602080601f831160018114613cf75760008415613ce55750858301515b613cef8582613c86565b865550613c7d565b600085815260208120601f198616915b82811015613d2657888601518255948401946001909101908401613d07565b5085821015613d445787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000613d6760408301856135c1565b90508260208301529392505050565b600060208284031215613d8857600080fd5b81518015158114610c4457600080fd5b600060208284031215613daa57600080fd5b5051919050565b600060208284031215613dc357600080fd5b8151610c4481613773565b602080825260129082015271496e646578206f7574206f662072616e676560701b604082015260600190565b6000613e086136d984613693565b9050828152838383011115613e1c57600080fd5b610c4483602083018461359d565b600082601f830112613e3b57600080fd5b610c4483835160208501613dfa565b600080600060608486031215613e5f57600080fd5b83516001600160401b0380821115613e7657600080fd5b613e8287838801613e2a565b94506020860151915080821115613e9857600080fd5b50613ea586828701613e2a565b925050604084015190509250925092565b62ffffff8181168382160190808211156111e4576111e4613bcc565b62ffffff8281168282160390808211156111e4576111e4613bcc565b606081526000613f0160608301866135c1565b8281036020840152613f1381866135c1565b90508281036040840152613f2781856135c1565b9695505050505050565b818103613f3c575050565b613f468254613ae7565b6001600160401b03811115613f5d57613f5d61364d565b613f6b81613cc28454613ae7565b6000601f821160018114613f995760008315613f875750848201545b613f918482613c86565b855550613ffe565b600085815260209020601f19841690600086815260209020845b83811015613fd35782860154825560019586019590910190602001613fb3565b5085831015613ff15781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b6a600b5981380380925939f360a81b8152607f60f91b600b820152600c81018490526000602c8201819052606084901b6001600160601b0319166038830152604c8201819052825161405e81604d85016020870161359d565b91909101604d01949350505050565b600060ff821660ff810361408357614083613bcc565b60010192915050565b60006020828403121561409e57600080fd5b81516001600160401b038111156140b457600080fd5b8201601f810184136140c557600080fd5b610fe884825160208401613dfa565b6000602082840312156140e657600080fd5b81516001600160401b038111156140fc57600080fd5b610fe884828501613e2a565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fdfe5d7871759f44bc77f64c9eb647afdcf4a49d2fbba70fc64411a3bdc750b05274f79e11fc86b9bf37d5dfd4359c053136f7c046da6a08f9cf7ca56d80d5aab839a2646970667358221220f0ac9b9af391007a7205e68df125fa4ee54c8b1cc9f71ff28ca87726fd9a712164736f6c63430008130033",
1467
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102ac5760003560e01c80638da5cb5b11610173578063c4d66de8116100d4578063c4d66de8146105d6578063caaa3bb7146105e9578063cc86ba4b146105fc578063cea2961a1461060f578063cfb5192814610622578063dc33f4ae14610635578063dfa3be5314610648578063f0b993821461065b578063f146f17f1461066e578063f2fde38b14610681578063f8ac18be14610694578063f9c0fae6146106a7578063fb5cd19b146106ba578063fed37e82146106c257600080fd5b80638da5cb5b146104e057806392b794db146104e85780639532f2f4146104fb5780639897993714610510578063a0a82bd314610523578063a1a7a47b14610536578063ad6b414d14610549578063b1d24cb21461055c578063b86b69f11461056f578063ba22851214610577578063be3d3ee61461058a578063c07392701461059d578063c0cd565f146105b0578063c42ae814146105c357600080fd5b80634c66823c1161021d5780634c66823c146103ec5780634f5267ef146103f4578063518cb3df1461040757806352ccc0211461041a5780635668bc5e1461042d5780635710f83d14610440578063613d57fd1461045357806366d549a114610466578063675abe24146104795780636dfa9f561461048c578063715018a61461049f57806371b70a71146104a757806381e7837c146104ba5780638b6ad1ec146104cd57600080fd5b8062e87903146102b157806307f9f786146102da57806313762186146102ef57806316a1012d146103045780631a051d49146103175780631e9bef461461032a578063230448b11461033f57806325ffb376146103625780633e76919a1461038a57806344346a5f1461039d578063447b051a146103b35780634a78a932146103c65780634bd1a387146103d9575b600080fd5b6102c46102bf36600461357b565b6106ca565b6040516102d191906135ed565b60405180910390f35b6102e26107a3565b6040516102d19190613600565b6103026102fd366004613710565b610974565b005b610302610312366004613710565b610a25565b610302610325366004613710565b610acd565b610332610b7e565b6040516102d1919061375f565b61035261034d366004613788565b610b97565b60405190151581526020016102d1565b6103756103703660046137e0565b610c4b565b6040516102d1999897969594939291906137f9565b6103326103983660046137e0565b610e86565b6103a5610ff0565b6040519081526020016102d1565b6103026103c1366004613894565b61100a565b6102c46103d43660046138c9565b611098565b6103026103e73660046138f5565b6111eb565b6103326112bd565b6103026104023660046138c9565b6112d9565b6102c461041536600461357b565b6113bb565b6103026104283660046137e0565b611424565b6103a561043b3660046137e0565b611549565b61030261044e366004613925565b611576565b6103a56104613660046137e0565b611640565b61030261047436600461396b565b611666565b610302610487366004613a06565b6117bc565b61030261049a36600461357b565b61186a565b61030261196f565b6102c46104b536600461357b565b611983565b6103026104c8366004613a06565b6119da565b6103026104db366004613a06565b611a96565b610332611b05565b6103756104f6366004613a23565b611b19565b610503611b5d565b6040516102d19190613a57565b61030261051e366004613a06565b611c23565b610302610531366004613925565b611c92565b61030261054436600461357b565b611d5a565b6103026105573660046137e0565b611e39565b6102c461056a3660046137e0565b611f3e565b6103a5611f71565b6103a561058536600461357b565b612016565b610302610598366004613925565b6120db565b6103026105ab3660046137e0565b61215a565b6103026105be366004613ab9565b612250565b6103026105d1366004613925565b6122f1565b6103026105e4366004613a06565b612361565b6103026105f7366004613710565b61247c565b6102c461060a3660046137e0565b612526565b61035261061d366004613a06565b612554565b6103a5610630366004613a23565b6125eb565b610302610643366004613925565b6125ff565b61033261065636600461357b565b61269e565b6102c461066936600461357b565b6126f9565b61030261067c366004613925565b612751565b61030261068f366004613a06565b612814565b6103026106a23660046137e0565b61288d565b6103026106b5366004613925565b612a12565b610503612a85565b6103a5612b33565b606060006106d6612b48565b600085815260059190910160205260409020600781015490915061070090849062ffffff16612b6c565b60008381526002820160205260409020805461071b90613ae7565b80601f016020809104026020016040519081016040528092919081815260200182805461074790613ae7565b80156107945780601f1061076957610100808354040283529160200191610794565b820191906000526020600020905b81548152906001019060200180831161077757829003601f168201915b50505050509150505b92915050565b606060006107af612b48565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316631676ddc36040518163ffffffff1660e01b8152600401600060405180830381865afa158015610803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082b9190810190613b1b565b8051909150600061084561083d612b48565b600b01612b8b565b90506000815184516108579190613be2565b6001600160401b0381111561086e5761086e61364d565b604051908082528060200260200182016040528015610897578160200160208202803683370190505b50805190915060005b818110156109695784811015610901578581815181106108c2576108c2613bf5565b60200260200101518382815181106108dc576108dc613bf5565b60200260200101906001600160a01b031690816001600160a01b031681525050610957565b8361090c8683613c0b565b8151811061091c5761091c613bf5565b602002602001015183828151811061093657610936613bf5565b60200260200101906001600160a01b031690816001600160a01b0316815250505b8061096181613c1e565b9150506108a0565b509095945050505050565b6109846309bb10c360e11b612b98565b61098d81612be8565b61099683612c37565b60006109a0612b48565b60008581526005919091016020526040902060078101549091506109ca90849062ffffff16612b6c565b600083815260028201602052604090206109e48382613c9b565b50837f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d8385604051610a17929190613d54565b60405180910390a250505050565b610a356316a1012d60e01b612b98565b610a3e81612be8565b610a4783612c94565b6000610a51612b48565b6000858152600691909101602052604090206001810154909150610a7b90849062ffffff16612b6c565b610a8482612cf3565b60008481526020839052604080822080546001600160a01b0319166001600160a01b0394909416939093179092559051859160008051602061416a83398151915291a250505050565b610add631a051d4960e01b612b98565b610ae681612be8565b610aef83612c37565b6000610af9612b48565b6000858152600591909101602052604090206007810154909150610b2a908490600160301b900462ffffff16612b6c565b610b3382612cf3565b600084815260068301602052604080822080546001600160a01b0319166001600160a01b0394909416939093179092559051859160008051602061418a83398151915291a250505050565b6000610b88612b48565b546001600160a01b0316919050565b600080610ba2611b05565b6001600160a01b031614158015610c415750610bbc612b48565b546040516217798b60e61b81526001600160a01b03868116600483015285811660248301526001600160e01b031985166044830152909116906305de62c0906064016020604051808303816000875af1158015610c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c419190613d76565b90505b9392505050565b606080606060006060600060606000806000610c65612b48565b60008c8152600591909101602052604090209050610c828b612da3565b8154610c8d90612da3565b6007830154600184018054909162ffffff8082169260038801926301000000810483169260058a0192600160301b90920416801515918790610cce90613ae7565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfa90613ae7565b8015610d475780601f10610d1c57610100808354040283529160200191610d47565b820191906000526020600020905b815481529060010190602001808311610d2a57829003601f168201915b50505050509650848054610d5a90613ae7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8690613ae7565b8015610dd35780601f10610da857610100808354040283529160200191610dd3565b820191906000526020600020905b815481529060010190602001808311610db657829003601f168201915b50505050509450828054610de690613ae7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1290613ae7565b8015610e5f5780601f10610e3457610100808354040283529160200191610e5f565b820191906000526020600020905b815481529060010190602001808311610e4257829003601f168201915b50505050509250995099509950995099509950995099509950509193959799909294969850565b600080610e91612b48565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316637ac4f3296040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f099190613d98565b905080831015610f8957610f1b612b48565b600a0154604051631ef6bdbf60e21b8152600481018590526001600160a01b0390911690637bdaf6fc90602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c449190613db1565b6000610f9e610f96612b48565b600b01612e0e565b9050610faa8183613be2565b8410610fd15760405162461bcd60e51b8152600401610fc890613dce565b60405180910390fd5b610fe8828503610fdf612b48565b600b0190612e18565b949350505050565b6000611005610ffd612b48565b600101612e0e565b905090565b61101a63223d828d60e11b612b98565b61102381612c37565b61102c83612e24565b80611035612b48565b6001600160a01b03851660008181526009929092016020908152604080842087855282529283902093909355905183815284927ff2f4de0c34a4899f5cf7a30aced71b0c27f629f80fb61efc06c7a12ecabdb7ba910160405180910390a3505050565b60606110a383612e24565b60006110ad612b48565b6001600160a01b038516600090815260099190910160209081526040808320868452909152902054905080156110ee576110e681612da3565b91505061079d565b604051633ae7357560e21b8152600481018490526001600160a01b0385169063eb9cd5d490602401600060405180830381865afa92505050801561115457506040513d6000823e601f3d908101601f191682016040526111519190810190613e4a565b60015b6111d85760405162461bcd60e51b815260206004820152604960248201527f436f6e747261637420646f6573206e6f7420696d706c656d656e742070726f6a60448201527f65637453637269707444657461696c7320616e6420686173206e6f206f7665726064820152683934b2329039b2ba1760b91b608482015260a401610fc8565b8294505050505061079d565b5092915050565b6111fb634bd1a38760e01b612b98565b61120481612e77565b61120d82612c37565b6000611217612b48565b600084815260059190910160209081526040808320600781018054600160301b9081900462ffffff9081168752600684019095529290942080546001600160a01b0319166001600160a01b038816179055925492935061127a9204166001613eb6565b60078201805462ffffff92909216600160301b0262ffffff60301b19909216919091179055604051839060008051602061418a83398151915290600090a2505050565b60006112c7612b48565b600a01546001600160a01b0316919050565b6112e9634f5267ef60e01b612b98565b60006112f3612b48565b6001600160a01b038416600090815260098201602090815260408083208684529091529020549091506113665760405162461bcd60e51b815260206004820152601b60248201527a139bc81bdd995c9c9a5919481cd95d08199bdc881c1c9bda9958dd602a1b6044820152606401610fc8565b6001600160a01b03831660008181526009830160209081526040808320868452909152808220829055518492917f618154ee1a16009759db8e59ff744e79dd094831be73c4b9383f885678c20b7391a3505050565b606060006113c7612b48565b60008581526005919091016020526040902060078101549091506113f8908490600160301b900462ffffff16612b6c565b60008381526006820160205260409020546001600160a01b031661141b81612ecb565b95945050505050565b6114346352ccc02160e01b612b98565b61143d81612c37565b6000611447612b48565b6000838152600591909101602052604090206007810154909150600160301b900462ffffff166114b95760405162461bcd60e51b815260206004820152601e60248201527f746865726520617265206e6f207363726970747320746f2072656d6f766500006044820152606401610fc8565b600781015460068201906000906114de90600190600160301b900462ffffff16613ed2565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560078401805462ffffff60301b198116600160301b91829004861660001901909516029390931790925551839160008051602061418a83398151915291a25050565b6000611553612b48565b6000928352600501602052506040902060070154600160301b900462ffffff1690565b611586635710f83d60e01b612b98565b61158f81612be8565b61159882612c37565b60006115a2612b48565b60008481526005919091016020908152604080832060078101546301000000900462ffffff16808552600482019093529220919250906115e28482613c9b565b506115ee816001613be2565b8260070160036101000a81548162ffffff021916908362ffffff160217905550837ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde8483604051610a17929190613d54565b600061164a612b48565b600092835260060160205250604090206001015462ffffff1690565b6116766366d549a160e01b612b98565b61167f84612c94565b61168c8560406001613053565b6116d55760405162461bcd60e51b815260206004820152601a60248201527901b5d5cdd0818dbdb9d185a5b88195e1858dd1b1e481bdb9948160361b6044820152606401610fc8565b60006116df612b48565b90506116ee60018201876130c7565b6117365760405162461bcd60e51b8152602060048201526019602482015278446570656e64656e637920616c72656164792065786973747360381b6044820152606401610fc8565b60008681526005820160205260409020858155600181016117578682613c9b565b50600381016117668582613c9b565b50600581016117758482613c9b565b5085877f14d15ecf0e955bdd7a921efba642deef4d718696d3fc369454c84817fed0fb778787876040516117ab93929190613eee565b60405180910390a350505050505050565b6117cc6319d6af8960e21b612b98565b6117d581612e77565b6117ea816117e1612b48565b600b01906130d3565b6118335760405162461bcd60e51b815260206004820152601a60248201527910dbdb9d1c9858dd08185b1c9958591e481cdd5c1c1bdc9d195960321b6044820152606401610fc8565b6040516001600160a01b038216907f85796181e67d093fd8fc344cdf114629c14c1396c47bfd9cda9392285e74d43f90600090a250565b61187a6336fd4fab60e11b612b98565b61188382612c37565b600061188d612b48565b600084815260058201602052604090206007810154919250906301000000900462ffffff166118bc8482612b6c565b60006118c9600183613c0b565b60008781526005860160209081526040808320848452600490810183528184208a85529088019092529091209192506119029082613f31565b506000818152600484016020526040812061191c9161352d565b60078301805465ffffff0000001916630100000062ffffff841602179055604051859087907fc02725dfc9639e3399432cdae3db1c062229f4cc41bcc18631517617c020b71c90600090a3505050505050565b6119776130e8565b6119816000613147565b565b6060600061198f612b48565b60008581526006919091016020526040902060018101549091506119b990849062ffffff16612b6c565b6000838152602082905260409020546001600160a01b031661141b81612ecb565b6119ea632079e0df60e21b612b98565b6119ff816119f6612b48565b600b019061317a565b611a5f5760405162461bcd60e51b815260206004820152602b60248201527f436f726520636f6e747261637420616c72656164792072656d6f766564206f7260448201526a081b9bdd081a5b881cd95d60aa1b6064820152608401610fc8565b6040516001600160a01b038216907f24f057e6bd463ac72bb963a1e55a41494d252695f97a7671c2b7018345eb31f790600090a250565b611aa66322dab47b60e21b612b98565b611aaf81612e77565b80611ab8612b48565b600a0180546001600160a01b0319166001600160a01b03928316179055604051908216907f38429341ba977e6c97809dd9fed1f58cf5c409bfe8132475b3f73bda02dd84f690600090a250565b60006110056033546001600160a01b031690565b60608060606000606060006060600080611b328a61318f565b611b3e6103708b6131d3565b9850985098509850985098509850985098509193959799909294969850565b60606000611b69612b48565b90506000611b7982600101612e0e565b90506000816001600160401b03811115611b9557611b9561364d565b604051908082528060200260200182016040528015611bc857816020015b6060815260200190600190039081611bb35790505b50905060005b82811015611c1b57611beb611be66001860183612e18565b612da3565b828281518110611bfd57611bfd613bf5565b60200260200101819052508080611c1390613c1e565b915050611bce565b509392505050565b611c33639897993760e01b612b98565b611c3c81612e77565b80611c45612b48565b600d0180546001600160a01b0319166001600160a01b03928316179055604051908216907f0b9c67948019a508c85a8b9abbe9b2ff80ab26c068bc4edb68425299f360be6e90600090a250565b611ca263a0a82bd360e01b612b98565b611cab81612be8565b611cb482612c94565b6000611cbe612b48565b6000848152600691909101602052604090209050611cdb82612cf3565b6001828101805462ffffff908116600090815260208690526040902080546001600160a01b0319166001600160a01b03959095169490941790935554611d22921690613eb6565b60018201805462ffffff191662ffffff92909216919091179055604051839060008051602061416a83398151915290600090a2505050565b611d6a63a1a7a47b60e01b612b98565b611d7382612c37565b6000611d7d612b48565b600084815260059190910160205260409020600781015490915062ffffff16611da68382612b6c565b6000611db3600183613c0b565b60008181526002850160205260408082208783529120919250611dd69082613f31565b5060008181526002840160205260408120611df09161352d565b60078301805462ffffff191662ffffff8316179055604051849086907f225454b600cf489553fde6e3b7f5e458b1093c035390b678067ea799b3b016cd90600090a35050505050565b611e4963ad6b414d60e01b612b98565b611e5281612c94565b6000611e5c612b48565b600083815260069190910160205260409020600181015490915062ffffff1680611ed35760405162461bcd60e51b815260206004820152602260248201527f5468657265206973206e6f206c6963656e7365207465787420746f2072656d6f604482015261766560f01b6064820152608401610fc8565b816000611ee1600184613ed2565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560018501805462ffffff191660001986019094169390931790925551849160008051602061416a83398151915291a2505050565b60606000611f4a612b48565b9050611f6183611f5c83600101612e0e565b612b6c565b610c44611be66001830185612e18565b600080611f7c612b48565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316637ac4f3296040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff49190613d98565b90506000612003610f96612b48565b905061200f8183613be2565b9250505090565b600080612021612b48565b6000858152600591909101602052604090206007810154909150612052908490600160301b900462ffffff16612b6c565b61205a6131f2565b60008481526006830160205260409081902054905163cc31a33160e01b81526001600160a01b039283169263cc31a3319261209a9291169060040161375f565b602060405180830381865afa1580156120b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe89190613d98565b6120eb635f1e9f7360e11b612b98565b6120f482612c37565b806120fd612b48565b6000848152600591909101602052604090206001019061211d9082613c9b565b50817fc9890a31ec780bb5a8a017d683d3913f97260548d71c2cee78194ed2833f02358260405161214e91906135ed565b60405180910390a25050565b61216a630c07392760e41b612b98565b806121c35760405162461bcd60e51b815260206004820152602360248201527f4c6963656e736520747970652063616e6e6f7420626520656d70747920737472604482015262696e6760e81b6064820152608401610fc8565b6121d8816121cf612b48565b600301906130c7565b6122225760405162461bcd60e51b815260206004820152601b60248201527a4c6963656e7365207479706520616c72656164792065786973747360281b6044820152606401610fc8565b60405181907fad5dcce4588345db351371d105540f3fb69966f418d923539f19d5f44a1cfc4b90600090a250565b61226063c0cd565f60e01b612b98565b61226981612e77565b61227283612c37565b600061227c612b48565b60008581526005919091016020526040902060078101549091506122ad908490600160301b900462ffffff16612b6c565b600083815260068201602052604080822080546001600160a01b0319166001600160a01b03861617905551859160008051602061418a83398151915291a250505050565b61230163310aba0560e21b612b98565b61230a82612c37565b80612313612b48565b600084815260059182016020526040902001906123309082613c9b565b50817f94747dffac14b8b9a15e699c998cc8f42ad81f21ae95e155c8a1c49403117b8b8260405161214e91906135ed565b600054610100900460ff16158080156123815750600054600160ff909116105b8061239b5750303b15801561239b575060005460ff166001145b6123fe5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610fc8565b6000805460ff191660011790558015612421576000805461ff0019166101001790555b612429613274565b61243282613147565b8015612478576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61248c63caaa3bb760e01b612b98565b61249581612be8565b61249e83612c37565b60006124a8612b48565b60008581526005919091016020526040902060078101549091506124d99084906301000000900462ffffff16612b6c565b600083815260048201602052604090206124f38382613c9b565b50837ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde8385604051610a17929190613d54565b60606000612532612b48565b905061254483611f5c83600301612e0e565b610c44611be66003830185612e18565b600061255e612b48565b600a015460405163f1052af560e01b81526001600160a01b039091169063f1052af59061258f90859060040161375f565b602060405180830381865afa1580156125ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d09190613d76565b8061079d575061079d826125e2612b48565b600b01906132a3565b60006125f68261318f565b61079d826131d3565b61260f636e19fa5760e11b612b98565b61261881612be8565b61262182612c37565b600061262b612b48565b600084815260059190910160205260409020905061264882612cf3565b600782018054600160301b9081900462ffffff9081166000908152600686016020526040902080546001600160a01b0319166001600160a01b039590951694909417909355905461127a92919004166001613eb6565b6000806126a9612b48565b60008581526005919091016020526040902060078101549091506126da908490600160301b900462ffffff16612b6c565b60009283526006016020525060409020546001600160a01b0316919050565b60606000612705612b48565b60008581526005919091016020526040902060078101549091506127369084906301000000900462ffffff16612b6c565b60008381526004820160205260409020805461071b90613ae7565b61276163f146f17f60e01b612b98565b61276a81612be8565b61277382612c37565b600061277d612b48565b600084815260059190910160209081526040808320600781015462ffffff16808552600282019093529220919250906127b68482613c9b565b506127c2816001613be2565b8260070160006101000a81548162ffffff021916908362ffffff160217905550837f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d8483604051610a17929190613d54565b61281c6130e8565b6001600160a01b0381166128815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fc8565b61288a81613147565b50565b61289d637c560c5f60e11b612b98565b6128a681612c37565b60006128b0612b48565b6000838152600582016020526040902060078101549192509062ffffff161580156128e9575060078101546301000000900462ffffff16155b801561290357506007810154600160301b900462ffffff16155b6129855760405162461bcd60e51b815260206004820152604760248201527f43616e6e6f742072656d6f766520646570656e64656e6379207769746820616460448201527f646974696f6e616c2043444e732c207265706f7369746f726965732c206f72206064820152667363726970747360c81b608482015260a401610fc8565b61299260018301846132b8565b5060008381526005830160205260408120818155906129b4600183018261352d565b6129c260038301600061352d565b6129d060058301600061352d565b5060070180546001600160481b031916905560405183907f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7290600090a2505050565b612a22637ce07d7360e11b612b98565b612a2b82612c37565b80612a34612b48565b60008481526005919091016020526040902060030190612a549082613c9b565b50817f774918414e4887efe5349a305fe253ee8b1e3fe0c2117012f0c215645693cbfd8260405161214e91906135ed565b60606000612a91612b48565b90506000612aa182600301612e0e565b90506000816001600160401b03811115612abd57612abd61364d565b604051908082528060200260200182016040528015612af057816020015b6060815260200190600190039081612adb5790505b50905060005b82811015611c1b57612b0e611be66003860183612e18565b828281518110612b2057612b20613bf5565b6020908102919091010152600101612af6565b6000611005612b40612b48565b600301612e0e565b7fb1832496845cc2c2d1bd0879f9ba0b1ef7ffcfdc79a541ee494477d8e10b9a3190565b8082106124785760405162461bcd60e51b8152600401610fc890613dce565b60606000610c44836132c4565b612ba3333083610b97565b61288a5760405162461bcd60e51b815260206004820152601660248201527513db9b1e4810591b5a5b881050d308185b1b1bddd95960521b6044820152606401610fc8565b805160000361288a5760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d656d70747920737472696e6760281b6044820152606401610fc8565b612c4c81612c43612b48565b60010190613320565b61288a5760405162461bcd60e51b815260206004820152601960248201527811195c195b99195b98de48191bd95cc81b9bdd08195e1a5cdd603a1b6044820152606401610fc8565b612ca981612ca0612b48565b60030190613320565b61288a5760405162461bcd60e51b815260206004820152601b60248201527a131a58d95b9cd9481d1e5c1948191bd95cc81b9bdd08195e1a5cdd602a1b6044820152606401610fc8565b6000807f42797465636f646553746f726167655f56322e302e305f5f5f5f5f5f5f5f5f203084604051602001612d2b93929190614005565b60405160208183030381529060405290508051602082016000f091506001600160a01b038216612d9d5760405162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374417353746f726167653a205772697465204572726f7200006044820152606401610fc8565b50919050565b606060005b828160ff1660208110612dbd57612dbd613bf5565b1a60f81b6001600160f81b03191615801590612ddc575060208160ff16105b15612df35780612deb8161406d565b915050612da8565b60405191506040820160405280825282602083015250919050565b600061079d825490565b6000610c44838361332c565b612e2d81612554565b61288a5760405162461bcd60e51b815260206004820152601b60248201527a10dbdc994818dbdb9d1c9858dd081b9bdd081cdd5c1c1bdc9d1959602a1b6044820152606401610fc8565b6001600160a01b03811661288a5760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d7a65726f206164647265737360281b6044820152606401610fc8565b60606000612ed76131f2565b90506000816001600160a01b031663cc31a331856040518263ffffffff1660e01b8152600401612f07919061375f565b602060405180830381865afa158015612f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f489190613d98565b90507f554e4b4e4f574e5f56455253494f4e5f535452494e475f5f5f5f5f5f5f5f5f208103612fe257604051632475d70960e01b81526001600160a01b03831690632475d70990612f9d90879060040161375f565b600060405180830381865afa158015612fba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fe8919081019061408c565b604051630eacc5e760e31b81526001600160a01b038316906375662f389061300e90879060040161375f565b600060405180830381865afa15801561302b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fe891908101906140d4565b60008060005b60208160ff1610156130b3576000868260ff166020811061307c5761307c613bf5565b1a90508015801590613091575060808160ff16105b156130aa578560ff168160ff16036130aa578260010192505b50600101613059565b8360ff168260ff1614925050509392505050565b6000610c448383613356565b6000610c44836001600160a01b038416613356565b336130f1611b05565b6001600160a01b0316146119815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fc8565b613150816133a0565b80613159612b48565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6000610c44836001600160a01b0384166133f2565b60208151111561288a5760405162461bcd60e51b815260206004820152600f60248201526e537472696e6720746f6f206c6f6e6760881b6044820152606401610fc8565b8051600090829082036131e95750600092915050565b50506020015190565b60006131fc612b48565b600d0160009054906101000a90046001600160a01b03166001600160a01b03166310ba84aa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613250573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110059190613db1565b600054610100900460ff1661329b5760405162461bcd60e51b8152600401610fc890614108565b6119816134e5565b6000610c44836001600160a01b038416613515565b6000610c4483836133f2565b60608160000180548060200260200160405190810160405280929190818152602001828054801561331457602002820191906000526020600020905b815481526020019060010190808311613300575b50505050509050919050565b6000610c448383613515565b600082600001828154811061334357613343613bf5565b9060005260206000200154905092915050565b60006133628383613515565b6133985750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561079d565b50600061079d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600081815260018301602052604081205480156134db576000613416600183613c0b565b855490915060009061342a90600190613c0b565b905081811461348f57600086600001828154811061344a5761344a613bf5565b906000526020600020015490508087600001848154811061346d5761346d613bf5565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806134a0576134a0614153565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061079d565b600091505061079d565b600054610100900460ff1661350c5760405162461bcd60e51b8152600401610fc890614108565b61198133613147565b60009081526001919091016020526040902054151590565b50805461353990613ae7565b6000825580601f10613549575050565b601f01602090049060005260206000209081019061288a91905b808211156135775760008155600101613563565b5090565b6000806040838503121561358e57600080fd5b50508035926020909101359150565b60005b838110156135b85781810151838201526020016135a0565b50506000910152565b600081518084526135d981602086016020860161359d565b601f01601f19169290920160200192915050565b602081526000610c4460208301846135c1565b6020808252825182820181905260009190848201906040850190845b818110156136415783516001600160a01b03168352928401929184019160010161361c565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561368b5761368b61364d565b604052919050565b60006001600160401b038211156136ac576136ac61364d565b50601f01601f191660200190565b600082601f8301126136cb57600080fd5b81356136de6136d982613693565b613663565b8181528460208386010111156136f357600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561372557600080fd5b833592506020840135915060408401356001600160401b0381111561374957600080fd5b613755868287016136ba565b9150509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461288a57600080fd5b60008060006060848603121561379d57600080fd5b83356137a881613773565b925060208401356137b881613773565b915060408401356001600160e01b0319811681146137d557600080fd5b809150509250925092565b6000602082840312156137f257600080fd5b5035919050565b600061012080835261380d8184018d6135c1565b90508281036020840152613821818c6135c1565b90508281036040840152613835818b6135c1565b905062ffffff808a1660608501528382036080850152613855828a6135c1565b915080881660a085015283820360c085015261387182886135c1565b925085151560e085015280851661010085015250509a9950505050505050505050565b6000806000606084860312156138a957600080fd5b83356138b481613773565b95602085013595506040909401359392505050565b600080604083850312156138dc57600080fd5b82356138e781613773565b946020939093013593505050565b6000806040838503121561390857600080fd5b82359150602083013561391a81613773565b809150509250929050565b6000806040838503121561393857600080fd5b8235915060208301356001600160401b0381111561395557600080fd5b613961858286016136ba565b9150509250929050565b600080600080600060a0868803121561398357600080fd5b853594506020860135935060408601356001600160401b03808211156139a857600080fd5b6139b489838a016136ba565b945060608801359150808211156139ca57600080fd5b6139d689838a016136ba565b935060808801359150808211156139ec57600080fd5b506139f9888289016136ba565b9150509295509295909350565b600060208284031215613a1857600080fd5b8135610c4481613773565b600060208284031215613a3557600080fd5b81356001600160401b03811115613a4b57600080fd5b610fe8848285016136ba565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613aac57603f19888603018452613a9a8583516135c1565b94509285019290850190600101613a7e565b5092979650505050505050565b600080600060608486031215613ace57600080fd5b833592506020840135915060408401356137d581613773565b600181811c90821680613afb57607f821691505b602082108103612d9d57634e487b7160e01b600052602260045260246000fd5b60006020808385031215613b2e57600080fd5b82516001600160401b0380821115613b4557600080fd5b818501915085601f830112613b5957600080fd5b815181811115613b6b57613b6b61364d565b8060051b9150613b7c848301613663565b8181529183018401918481019088841115613b9657600080fd5b938501935b83851015613bc05784519250613bb083613773565b8282529385019390850190613b9b565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561079d5761079d613bcc565b634e487b7160e01b600052603260045260246000fd5b8181038181111561079d5761079d613bcc565b600060018201613c3057613c30613bcc565b5060010190565b601f821115613c8157600081815260208120601f850160051c81016020861015613c5e5750805b601f850160051c820191505b81811015613c7d57828155600101613c6a565b5050505b505050565b600019600383901b1c191660019190911b1790565b81516001600160401b03811115613cb457613cb461364d565b613cc881613cc28454613ae7565b84613c37565b602080601f831160018114613cf75760008415613ce55750858301515b613cef8582613c86565b865550613c7d565b600085815260208120601f198616915b82811015613d2657888601518255948401946001909101908401613d07565b5085821015613d445787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000613d6760408301856135c1565b90508260208301529392505050565b600060208284031215613d8857600080fd5b81518015158114610c4457600080fd5b600060208284031215613daa57600080fd5b5051919050565b600060208284031215613dc357600080fd5b8151610c4481613773565b602080825260129082015271496e646578206f7574206f662072616e676560701b604082015260600190565b6000613e086136d984613693565b9050828152838383011115613e1c57600080fd5b610c4483602083018461359d565b600082601f830112613e3b57600080fd5b610c4483835160208501613dfa565b600080600060608486031215613e5f57600080fd5b83516001600160401b0380821115613e7657600080fd5b613e8287838801613e2a565b94506020860151915080821115613e9857600080fd5b50613ea586828701613e2a565b925050604084015190509250925092565b62ffffff8181168382160190808211156111e4576111e4613bcc565b62ffffff8281168282160390808211156111e4576111e4613bcc565b606081526000613f0160608301866135c1565b8281036020840152613f1381866135c1565b90508281036040840152613f2781856135c1565b9695505050505050565b818103613f3c575050565b613f468254613ae7565b6001600160401b03811115613f5d57613f5d61364d565b613f6b81613cc28454613ae7565b6000601f821160018114613f995760008315613f875750848201545b613f918482613c86565b855550613ffe565b600085815260209020601f19841690600086815260209020845b83811015613fd35782860154825560019586019590910190602001613fb3565b5085831015613ff15781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b6a600b5981380380925939f360a81b8152607f60f91b600b820152600c81018490526000602c8201819052606084901b6001600160601b0319166038830152604c8201819052825161405e81604d85016020870161359d565b91909101604d01949350505050565b600060ff821660ff810361408357614083613bcc565b60010192915050565b60006020828403121561409e57600080fd5b81516001600160401b038111156140b457600080fd5b8201601f810184136140c557600080fd5b610fe884825160208401613dfa565b6000602082840312156140e657600080fd5b81516001600160401b038111156140fc57600080fd5b610fe884828501613e2a565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fdfe5d7871759f44bc77f64c9eb647afdcf4a49d2fbba70fc64411a3bdc750b05274f79e11fc86b9bf37d5dfd4359c053136f7c046da6a08f9cf7ca56d80d5aab839a2646970667358221220f0ac9b9af391007a7205e68df125fa4ee54c8b1cc9f71ff28ca87726fd9a712164736f6c63430008130033",
1674
+ "bytecode": "0x608060405234801561001057600080fd5b50614903806100206000396000f3fe608060405234801561001057600080fd5b50600436106102d85760003560e01c806392b794db11610189578063c42ae814116100df578063c42ae81414610648578063c4d66de81461065b578063caaa3bb71461066e578063cc86ba4b14610681578063cea2961a14610694578063cfb51928146106a7578063dc33f4ae146106ba578063dfa3be53146106cd578063f0b99382146106e0578063f146f17f146106f3578063f2fde38b14610706578063f8ac18be14610719578063f9c0fae61461072c578063fb5cd19b1461073f578063fed37e821461074757600080fd5b806392b794db146105275780639532f2f41461053a578063989799371461054f57806398a885ad14610562578063a0a82bd314610582578063a1a7a47b14610595578063ad6b414d146105a8578063ae9358de146105bb578063b1d24cb2146105ce578063b86b69f1146105e1578063ba228512146105e9578063be3d3ee6146105fc578063c01ba5381461060f578063c073927014610622578063c0cd565f1461063557600080fd5b80634c66823c1161023e5780634c66823c1461042b5780634f5267ef14610433578063518cb3df1461044657806352ccc021146104595780635668bc5e1461046c5780635710f83d1461047f578063613d57fd1461049257806366d549a1146104a5578063675abe24146104b85780636dfa9f56146104cb578063715018a6146104de57806371b70a71146104e657806381e7837c146104f95780638b6ad1ec1461050c5780638da5cb5b1461051f57600080fd5b8062e87903146102dd57806307f9f78614610306578063137621861461031b57806316a1012d146103305780631a051d49146103435780631e9bef4614610356578063230448b11461036b57806325ffb3761461038e57806326978a64146103b65780633e76919a146103c957806344346a5f146103dc578063447b051a146103f25780634a78a932146104055780634bd1a38714610418575b600080fd5b6102f06102eb366004613a4f565b61074f565b6040516102fd9190613ac1565b60405180910390f35b61030e610828565b6040516102fd9190613ad4565b61032e610329366004613be4565b6109f9565b005b61032e61033e366004613be4565b610aaa565b61032e610351366004613be4565b610b52565b61035e610c03565b6040516102fd9190613c33565b61037e610379366004613c5c565b610c1c565b60405190151581526020016102fd565b6103a161039c366004613cb4565b610cd0565b6040516102fd99989796959493929190613ccd565b61032e6103c4366004613d76565b610d3b565b61035e6103d7366004613cb4565b610dcb565b6103e4610f35565b6040519081526020016102fd565b61032e610400366004613da6565b610f4f565b6102f0610413366004613ddb565b610fdd565b61032e610426366004613e07565b611130565b61035e611202565b61032e610441366004613ddb565b61121e565b6102f0610454366004613a4f565b611300565b61032e610467366004613cb4565b611369565b6103e461047a366004613cb4565b61148e565b61032e61048d366004613e2c565b6114bb565b6103e46104a0366004613cb4565b611585565b61032e6104b3366004613e72565b6115ab565b61032e6104c6366004613f0d565b611701565b61032e6104d9366004613a4f565b6117af565b61032e6118b4565b6102f06104f4366004613a4f565b6118c8565b61032e610507366004613f0d565b61191f565b61032e61051a366004613f0d565b6119db565b61035e611a4a565b6103a1610535366004613f2a565b611a5e565b610542611aa2565b6040516102fd9190613f5e565b61032e61055d366004613f0d565b611b68565b610575610570366004613cb4565b611bd7565b6040516102fd9190613ffa565b61032e610590366004613e2c565b611f21565b61032e6105a3366004613a4f565b611fe9565b61032e6105b6366004613cb4565b6120c8565b61032e6105c936600461414f565b6121cd565b6102f06105dc366004613cb4565b6122f1565b6103e4612324565b6103e46105f7366004613a4f565b6123c9565b61032e61060a366004613e2c565b61248e565b61032e61061d366004614195565b612501565b61032e610630366004613cb4565b61258d565b61032e6106433660046141be565b612683565b61032e610656366004613e2c565b612724565b61032e610669366004613f0d565b612794565b61032e61067c366004613be4565b6128af565b6102f061068f366004613cb4565b612959565b61037e6106a2366004613f0d565b612987565b6103e46106b5366004613f2a565b612a1e565b61032e6106c8366004613e2c565b612a32565b61035e6106db366004613a4f565b612ad1565b6102f06106ee366004613a4f565b612b2c565b61032e610701366004613e2c565b612b84565b61032e610714366004613f0d565b612c47565b61032e610727366004613cb4565b612cc0565b61032e61073a366004613e2c565b612e55565b610542612ec8565b6103e4612f76565b6060600061075b612f8b565b600085815260059190910160205260409020600781015490915061078590849062ffffff16612faf565b6000838152600282016020526040902080546107a0906141ec565b80601f01602080910402602001604051908101604052809291908181526020018280546107cc906141ec565b80156108195780601f106107ee57610100808354040283529160200191610819565b820191906000526020600020905b8154815290600101906020018083116107fc57829003601f168201915b50505050509150505b92915050565b60606000610834612f8b565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316631676ddc36040518163ffffffff1660e01b8152600401600060405180830381865afa158015610888573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108b09190810190614220565b805190915060006108ca6108c2612f8b565b600b01612fce565b90506000815184516108dc91906142e7565b6001600160401b038111156108f3576108f3613b21565b60405190808252806020026020018201604052801561091c578160200160208202803683370190505b50805190915060005b818110156109ee578481101561098657858181518110610947576109476142fa565b6020026020010151838281518110610961576109616142fa565b60200260200101906001600160a01b031690816001600160a01b0316815250506109dc565b836109918683614310565b815181106109a1576109a16142fa565b60200260200101518382815181106109bb576109bb6142fa565b60200260200101906001600160a01b031690816001600160a01b0316815250505b806109e681614323565b915050610925565b509095945050505050565b610a096309bb10c360e11b612fdb565b610a128161302b565b610a1b8361307a565b6000610a25612f8b565b6000858152600591909101602052604090206007810154909150610a4f90849062ffffff16612faf565b60008381526002820160205260409020610a6983826143a0565b50837f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d8385604051610a9c929190614459565b60405180910390a250505050565b610aba6316a1012d60e01b612fdb565b610ac38161302b565b610acc836130d7565b6000610ad6612f8b565b6000858152600691909101602052604090206001810154909150610b0090849062ffffff16612faf565b610b0982613136565b60008481526020839052604080822080546001600160a01b0319166001600160a01b0394909416939093179092559051859160008051602061488e83398151915291a250505050565b610b62631a051d4960e01b612fdb565b610b6b8161302b565b610b748361307a565b6000610b7e612f8b565b6000858152600591909101602052604090206007810154909150610baf908490600160301b900462ffffff16612faf565b610bb882613136565b600084815260068301602052604080822080546001600160a01b0319166001600160a01b039490941693909317909255905185916000805160206148ae83398151915291a250505050565b6000610c0d612f8b565b546001600160a01b0316919050565b600080610c27611a4a565b6001600160a01b031614158015610cc65750610c41612f8b565b546040516217798b60e61b81526001600160a01b03868116600483015285811660248301526001600160e01b031985166044830152909116906305de62c0906064016020604051808303816000875af1158015610ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc6919061447b565b90505b9392505050565b606080606060006060600060606000806000610ceb8b611bd7565b9050806000015181602001518260400151836060015184608001518560a001518660c001518760e00151886101000151995099509950995099509950995099509950509193959799909294969850565b610d4b6309a5e29960e21b612fdb565b610d548261307a565b80610d5d612f8b565b6005016000848152602001908152602001600020600701600b6101000a81548160ff021916908315150217905550817f82a9470304050368bf56293216be37485c0bf0cf16745447a127a9886ceb9fc882604051610dbf911515815260200190565b60405180910390a25050565b600080610dd6612f8b565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316637ac4f3296040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190614498565b905080831015610ece57610e60612f8b565b600a0154604051631ef6bdbf60e21b8152600481018590526001600160a01b0390911690637bdaf6fc90602401602060405180830381865afa158015610eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc991906144b1565b6000610ee3610edb612f8b565b600b016131e6565b9050610eef81836142e7565b8410610f165760405162461bcd60e51b8152600401610f0d906144ce565b60405180910390fd5b610f2d828503610f24612f8b565b600b01906131f0565b949350505050565b6000610f4a610f42612f8b565b6001016131e6565b905090565b610f5f63223d828d60e11b612fdb565b610f688161307a565b610f71836131fc565b80610f7a612f8b565b6001600160a01b03851660008181526009929092016020908152604080842087855282529283902093909355905183815284927ff2f4de0c34a4899f5cf7a30aced71b0c27f629f80fb61efc06c7a12ecabdb7ba910160405180910390a3505050565b6060610fe8836131fc565b6000610ff2612f8b565b6001600160a01b038516600090815260099190910160209081526040808320868452909152902054905080156110335761102b8161324f565b915050610822565b604051633ae7357560e21b8152600481018490526001600160a01b0385169063eb9cd5d490602401600060405180830381865afa92505050801561109957506040513d6000823e601f3d908101601f19168201604052611096919081019061454a565b60015b61111d5760405162461bcd60e51b815260206004820152604960248201527f436f6e747261637420646f6573206e6f7420696d706c656d656e742070726f6a60448201527f65637453637269707444657461696c7320616e6420686173206e6f206f7665726064820152683934b2329039b2ba1760b91b608482015260a401610f0d565b82945050505050610822565b5092915050565b611140634bd1a38760e01b612fdb565b611149816132ba565b6111528261307a565b600061115c612f8b565b600084815260059190910160209081526040808320600781018054600160301b9081900462ffffff9081168752600684019095529290942080546001600160a01b0319166001600160a01b03881617905592549293506111bf92041660016145b6565b60078201805462ffffff92909216600160301b0262ffffff60301b1990921691909117905560405183906000805160206148ae83398151915290600090a2505050565b600061120c612f8b565b600a01546001600160a01b0316919050565b61122e634f5267ef60e01b612fdb565b6000611238612f8b565b6001600160a01b038416600090815260098201602090815260408083208684529091529020549091506112ab5760405162461bcd60e51b815260206004820152601b60248201527a139bc81bdd995c9c9a5919481cd95d08199bdc881c1c9bda9958dd602a1b6044820152606401610f0d565b6001600160a01b03831660008181526009830160209081526040808320868452909152808220829055518492917f618154ee1a16009759db8e59ff744e79dd094831be73c4b9383f885678c20b7391a3505050565b6060600061130c612f8b565b600085815260059190910160205260409020600781015490915061133d908490600160301b900462ffffff16612faf565b60008381526006820160205260409020546001600160a01b03166113608161330e565b95945050505050565b6113796352ccc02160e01b612fdb565b6113828161307a565b600061138c612f8b565b6000838152600591909101602052604090206007810154909150600160301b900462ffffff166113fe5760405162461bcd60e51b815260206004820152601e60248201527f746865726520617265206e6f207363726970747320746f2072656d6f766500006044820152606401610f0d565b6007810154600682019060009061142390600190600160301b900462ffffff166145d2565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560078401805462ffffff60301b198116600160301b9182900486166000190190951602939093179092555183916000805160206148ae83398151915291a25050565b6000611498612f8b565b6000928352600501602052506040902060070154600160301b900462ffffff1690565b6114cb635710f83d60e01b612fdb565b6114d48161302b565b6114dd8261307a565b60006114e7612f8b565b60008481526005919091016020908152604080832060078101546301000000900462ffffff168085526004820190935292209192509061152784826143a0565b506115338160016142e7565b8260070160036101000a81548162ffffff021916908362ffffff160217905550837ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde8483604051610a9c929190614459565b600061158f612f8b565b600092835260060160205250604090206001015462ffffff1690565b6115bb6366d549a160e01b612fdb565b6115c4846130d7565b6115d18560406001613496565b61161a5760405162461bcd60e51b815260206004820152601a60248201527901b5d5cdd0818dbdb9d185a5b88195e1858dd1b1e481bdb9948160361b6044820152606401610f0d565b6000611624612f8b565b9050611633600182018761350a565b61167b5760405162461bcd60e51b8152602060048201526019602482015278446570656e64656e637920616c72656164792065786973747360381b6044820152606401610f0d565b600086815260058201602052604090208581556001810161169c86826143a0565b50600381016116ab85826143a0565b50600581016116ba84826143a0565b5085877f14d15ecf0e955bdd7a921efba642deef4d718696d3fc369454c84817fed0fb778787876040516116f0939291906145ee565b60405180910390a350505050505050565b6117116319d6af8960e21b612fdb565b61171a816132ba565b61172f81611726612f8b565b600b0190613516565b6117785760405162461bcd60e51b815260206004820152601a60248201527910dbdb9d1c9858dd08185b1c9958591e481cdd5c1c1bdc9d195960321b6044820152606401610f0d565b6040516001600160a01b038216907f85796181e67d093fd8fc344cdf114629c14c1396c47bfd9cda9392285e74d43f90600090a250565b6117bf6336fd4fab60e11b612fdb565b6117c88261307a565b60006117d2612f8b565b600084815260058201602052604090206007810154919250906301000000900462ffffff166118018482612faf565b600061180e600183614310565b60008781526005860160209081526040808320848452600490810183528184208a85529088019092529091209192506118479082614627565b506000818152600484016020526040812061186191613970565b60078301805465ffffff0000001916630100000062ffffff841602179055604051859087907fc02725dfc9639e3399432cdae3db1c062229f4cc41bcc18631517617c020b71c90600090a3505050505050565b6118bc61352b565b6118c6600061358a565b565b606060006118d4612f8b565b60008581526006919091016020526040902060018101549091506118fe90849062ffffff16612faf565b6000838152602082905260409020546001600160a01b03166113608161330e565b61192f632079e0df60e21b612fdb565b6119448161193b612f8b565b600b01906135bd565b6119a45760405162461bcd60e51b815260206004820152602b60248201527f436f726520636f6e747261637420616c72656164792072656d6f766564206f7260448201526a081b9bdd081a5b881cd95d60aa1b6064820152608401610f0d565b6040516001600160a01b038216907f24f057e6bd463ac72bb963a1e55a41494d252695f97a7671c2b7018345eb31f790600090a250565b6119eb6322dab47b60e21b612fdb565b6119f4816132ba565b806119fd612f8b565b600a0180546001600160a01b0319166001600160a01b03928316179055604051908216907f38429341ba977e6c97809dd9fed1f58cf5c409bfe8132475b3f73bda02dd84f690600090a250565b6000610f4a6033546001600160a01b031690565b60608060606000606060006060600080611a778a6135d2565b611a8361039c8b613616565b9850985098509850985098509850985098509193959799909294969850565b60606000611aae612f8b565b90506000611abe826001016131e6565b90506000816001600160401b03811115611ada57611ada613b21565b604051908082528060200260200182016040528015611b0d57816020015b6060815260200190600190039081611af85790505b50905060005b82811015611b6057611b30611b2b60018601836131f0565b61324f565b828281518110611b4257611b426142fa565b60200260200101819052508080611b5890614323565b915050611b13565b509392505050565b611b78639897993760e01b612fdb565b611b81816132ba565b80611b8a612f8b565b600d0180546001600160a01b0319166001600160a01b03928316179055604051908216907f0b9c67948019a508c85a8b9abbe9b2ff80ab26c068bc4edb68425299f360be6e90600090a250565b611bdf6139aa565b6000611be9612f8b565b60050160008481526020019081526020016000209050604051806101a00160405280611c148561324f565b8152602001611c26836000015461324f565b8152602001826001018054611c3a906141ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611c66906141ec565b8015611cb35780601f10611c8857610100808354040283529160200191611cb3565b820191906000526020600020905b815481529060010190602001808311611c9657829003601f168201915b5050509183525050600783015462ffffff166020820152600383018054604090920191611cdf906141ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0b906141ec565b8015611d585780601f10611d2d57610100808354040283529160200191611d58565b820191906000526020600020905b815481529060010190602001808311611d3b57829003601f168201915b505050918352505060078301546301000000900462ffffff166020820152600583018054604090920191611d8b906141ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611db7906141ec565b8015611e045780601f10611dd957610100808354040283529160200191611e04565b820191906000526020600020905b815481529060010190602001808311611de757829003601f168201915b5050509183525050600783015462ffffff600160301b8204168015156020840152604083015260ff600160581b8204811615156060840152608090920191600160481b909104166002811115611e5c57611e5c613fc0565b815260200182600701600a9054906101000a900460ff166003811115611e8457611e84613fc0565b8152602001826008018054611e98906141ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec4906141ec565b8015611f115780601f10611ee657610100808354040283529160200191611f11565b820191906000526020600020905b815481529060010190602001808311611ef457829003601f168201915b5050505050815250915050919050565b611f3163a0a82bd360e01b612fdb565b611f3a8161302b565b611f43826130d7565b6000611f4d612f8b565b6000848152600691909101602052604090209050611f6a82613136565b6001828101805462ffffff908116600090815260208690526040902080546001600160a01b0319166001600160a01b03959095169490941790935554611fb19216906145b6565b60018201805462ffffff191662ffffff92909216919091179055604051839060008051602061488e83398151915290600090a2505050565b611ff963a1a7a47b60e01b612fdb565b6120028261307a565b600061200c612f8b565b600084815260059190910160205260409020600781015490915062ffffff166120358382612faf565b6000612042600183614310565b600081815260028501602052604080822087835291209192506120659082614627565b506000818152600284016020526040812061207f91613970565b60078301805462ffffff191662ffffff8316179055604051849086907f225454b600cf489553fde6e3b7f5e458b1093c035390b678067ea799b3b016cd90600090a35050505050565b6120d863ad6b414d60e01b612fdb565b6120e1816130d7565b60006120eb612f8b565b600083815260069190910160205260409020600181015490915062ffffff16806121625760405162461bcd60e51b815260206004820152602260248201527f5468657265206973206e6f206c6963656e7365207465787420746f2072656d6f604482015261766560f01b6064820152608401610f0d565b8160006121706001846145d2565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560018501805462ffffff191660001986019094169390931790925551849160008051602061488e83398151915291a2505050565b6121dd635749ac6f60e11b612fdb565b6121e68361307a565b60028260038111156121fa576121fa613fc0565b0361220d576122088161302b565b612266565b8051156122665760405162461bcd60e51b815260206004820152602160248201527f5370656369616c2074797065206f6e6c7920666f72205370656369616c5479706044820152606560f81b6064820152608401610f0d565b6000612270612f8b565b600085815260059190910160205260409020600781018054919250849160ff60501b1916600160501b8360038111156122ab576122ab613fc0565b0217905550600881016122be83826143a0565b50837fbbd81765285a998af7d9596059834c4fc0ecf88c2f02603028ebdde6a31360188484604051610a9c9291906146fb565b606060006122fd612f8b565b90506123148361230f836001016131e6565b612faf565b610cc9611b2b60018301856131f0565b60008061232f612f8b565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316637ac4f3296040518163ffffffff1660e01b8152600401602060405180830381865afa158015612383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a79190614498565b905060006123b6610edb612f8b565b90506123c281836142e7565b9250505090565b6000806123d4612f8b565b6000858152600591909101602052604090206007810154909150612405908490600160301b900462ffffff16612faf565b61240d613635565b60008481526006830160205260409081902054905163cc31a33160e01b81526001600160a01b039283169263cc31a3319261244d92911690600401613c33565b602060405180830381865afa15801561246a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614498565b61249e635f1e9f7360e11b612fdb565b6124a78261307a565b806124b0612f8b565b600084815260059190910160205260409020600101906124d090826143a0565b50817fc9890a31ec780bb5a8a017d683d3913f97260548d71c2cee78194ed2833f023582604051610dbf9190613ac1565b61251163180374a760e31b612fdb565b61251a8261307a565b80612523612f8b565b600084815260059190910160205260409020600701805460ff60481b1916600160481b83600281111561255857612558613fc0565b0217905550817f8e4c6c7d23bb4f93ea943eaec1079246ca1965149805db5734e6447e2f75741f82604051610dbf919061471b565b61259d630c07392760e41b612fdb565b806125f65760405162461bcd60e51b815260206004820152602360248201527f4c6963656e736520747970652063616e6e6f7420626520656d70747920737472604482015262696e6760e81b6064820152608401610f0d565b61260b81612602612f8b565b6003019061350a565b6126555760405162461bcd60e51b815260206004820152601b60248201527a4c6963656e7365207479706520616c72656164792065786973747360281b6044820152606401610f0d565b60405181907fad5dcce4588345db351371d105540f3fb69966f418d923539f19d5f44a1cfc4b90600090a250565b61269363c0cd565f60e01b612fdb565b61269c816132ba565b6126a58361307a565b60006126af612f8b565b60008581526005919091016020526040902060078101549091506126e0908490600160301b900462ffffff16612faf565b600083815260068201602052604080822080546001600160a01b0319166001600160a01b0386161790555185916000805160206148ae83398151915291a250505050565b61273463310aba0560e21b612fdb565b61273d8261307a565b80612746612f8b565b6000848152600591820160205260409020019061276390826143a0565b50817f94747dffac14b8b9a15e699c998cc8f42ad81f21ae95e155c8a1c49403117b8b82604051610dbf9190613ac1565b600054610100900460ff16158080156127b45750600054600160ff909116105b806127ce5750303b1580156127ce575060005460ff166001145b6128315760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610f0d565b6000805460ff191660011790558015612854576000805461ff0019166101001790555b61285c6136b7565b6128658261358a565b80156128ab576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6128bf63caaa3bb760e01b612fdb565b6128c88161302b565b6128d18361307a565b60006128db612f8b565b600085815260059190910160205260409020600781015490915061290c9084906301000000900462ffffff16612faf565b6000838152600482016020526040902061292683826143a0565b50837ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde8385604051610a9c929190614459565b60606000612965612f8b565b90506129778361230f836003016131e6565b610cc9611b2b60038301856131f0565b6000612991612f8b565b600a015460405163f1052af560e01b81526001600160a01b039091169063f1052af5906129c2908590600401613c33565b602060405180830381865afa1580156129df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a03919061447b565b80610822575061082282612a15612f8b565b600b01906136e6565b6000612a29826135d2565b61082282613616565b612a42636e19fa5760e11b612fdb565b612a4b8161302b565b612a548261307a565b6000612a5e612f8b565b6000848152600591909101602052604090209050612a7b82613136565b600782018054600160301b9081900462ffffff9081166000908152600686016020526040902080546001600160a01b0319166001600160a01b03959095169490941790935590546111bf929190041660016145b6565b600080612adc612f8b565b6000858152600591909101602052604090206007810154909150612b0d908490600160301b900462ffffff16612faf565b60009283526006016020525060409020546001600160a01b0316919050565b60606000612b38612f8b565b6000858152600591909101602052604090206007810154909150612b699084906301000000900462ffffff16612faf565b6000838152600482016020526040902080546107a0906141ec565b612b9463f146f17f60e01b612fdb565b612b9d8161302b565b612ba68261307a565b6000612bb0612f8b565b600084815260059190910160209081526040808320600781015462ffffff1680855260028201909352922091925090612be984826143a0565b50612bf58160016142e7565b8260070160006101000a81548162ffffff021916908362ffffff160217905550837f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d8483604051610a9c929190614459565b612c4f61352b565b6001600160a01b038116612cb45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f0d565b612cbd8161358a565b50565b612cd0637c560c5f60e11b612fdb565b612cd98161307a565b6000612ce3612f8b565b6000838152600582016020526040902060078101549192509062ffffff16158015612d1c575060078101546301000000900462ffffff16155b8015612d3657506007810154600160301b900462ffffff16155b612db85760405162461bcd60e51b815260206004820152604760248201527f43616e6e6f742072656d6f766520646570656e64656e6379207769746820616460448201527f646974696f6e616c2043444e732c207265706f7369746f726965732c206f72206064820152667363726970747360c81b608482015260a401610f0d565b612dc560018301846136fb565b506000838152600583016020526040812081815590612de76001830182613970565b612df5600383016000613970565b612e03600583016000613970565b6007820180546001600160601b0319169055612e23600883016000613970565b505060405183907f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7290600090a2505050565b612e65637ce07d7360e11b612fdb565b612e6e8261307a565b80612e77612f8b565b60008481526005919091016020526040902060030190612e9790826143a0565b50817f774918414e4887efe5349a305fe253ee8b1e3fe0c2117012f0c215645693cbfd82604051610dbf9190613ac1565b60606000612ed4612f8b565b90506000612ee4826003016131e6565b90506000816001600160401b03811115612f0057612f00613b21565b604051908082528060200260200182016040528015612f3357816020015b6060815260200190600190039081612f1e5790505b50905060005b82811015611b6057612f51611b2b60038601836131f0565b828281518110612f6357612f636142fa565b6020908102919091010152600101612f39565b6000610f4a612f83612f8b565b6003016131e6565b7fb1832496845cc2c2d1bd0879f9ba0b1ef7ffcfdc79a541ee494477d8e10b9a3190565b8082106128ab5760405162461bcd60e51b8152600401610f0d906144ce565b60606000610cc983613707565b612fe6333083610c1c565b612cbd5760405162461bcd60e51b815260206004820152601660248201527513db9b1e4810591b5a5b881050d308185b1b1bddd95960521b6044820152606401610f0d565b8051600003612cbd5760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d656d70747920737472696e6760281b6044820152606401610f0d565b61308f81613086612f8b565b60010190613763565b612cbd5760405162461bcd60e51b815260206004820152601960248201527811195c195b99195b98de48191bd95cc81b9bdd08195e1a5cdd603a1b6044820152606401610f0d565b6130ec816130e3612f8b565b60030190613763565b612cbd5760405162461bcd60e51b815260206004820152601b60248201527a131a58d95b9cd9481d1e5c1948191bd95cc81b9bdd08195e1a5cdd602a1b6044820152606401610f0d565b6000807f42797465636f646553746f726167655f56322e302e305f5f5f5f5f5f5f5f5f20308460405160200161316e93929190614729565b60405160208183030381529060405290508051602082016000f091506001600160a01b0382166131e05760405162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374417353746f726167653a205772697465204572726f7200006044820152606401610f0d565b50919050565b6000610822825490565b6000610cc9838361376f565b61320581612987565b612cbd5760405162461bcd60e51b815260206004820152601b60248201527a10dbdc994818dbdb9d1c9858dd081b9bdd081cdd5c1c1bdc9d1959602a1b6044820152606401610f0d565b606060005b828160ff1660208110613269576132696142fa565b1a60f81b6001600160f81b03191615801590613288575060208160ff16105b1561329f578061329781614791565b915050613254565b60405191506040820160405280825282602083015250919050565b6001600160a01b038116612cbd5760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d7a65726f206164647265737360281b6044820152606401610f0d565b6060600061331a613635565b90506000816001600160a01b031663cc31a331856040518263ffffffff1660e01b815260040161334a9190613c33565b602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b9190614498565b90507f554e4b4e4f574e5f56455253494f4e5f535452494e475f5f5f5f5f5f5f5f5f20810361342557604051632475d70960e01b81526001600160a01b03831690632475d709906133e0908790600401613c33565b600060405180830381865afa1580156133fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f2d91908101906147b0565b604051630eacc5e760e31b81526001600160a01b038316906375662f3890613451908790600401613c33565b600060405180830381865afa15801561346e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f2d91908101906147f8565b60008060005b60208160ff1610156134f6576000868260ff16602081106134bf576134bf6142fa565b1a905080158015906134d4575060808160ff16105b156134ed578560ff168160ff16036134ed578260010192505b5060010161349c565b8360ff168260ff1614925050509392505050565b6000610cc98383613799565b6000610cc9836001600160a01b038416613799565b33613534611a4a565b6001600160a01b0316146118c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f0d565b613593816137e3565b8061359c612f8b565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6000610cc9836001600160a01b038416613835565b602081511115612cbd5760405162461bcd60e51b815260206004820152600f60248201526e537472696e6720746f6f206c6f6e6760881b6044820152606401610f0d565b80516000908290820361362c5750600092915050565b50506020015190565b600061363f612f8b565b600d0160009054906101000a90046001600160a01b03166001600160a01b03166310ba84aa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613693573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a91906144b1565b600054610100900460ff166136de5760405162461bcd60e51b8152600401610f0d9061482c565b6118c6613928565b6000610cc9836001600160a01b038416613958565b6000610cc98383613835565b60608160000180548060200260200160405190810160405280929190818152602001828054801561375757602002820191906000526020600020905b815481526020019060010190808311613743575b50505050509050919050565b6000610cc98383613958565b6000826000018281548110613786576137866142fa565b9060005260206000200154905092915050565b60006137a58383613958565b6137db57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610822565b506000610822565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000818152600183016020526040812054801561391e576000613859600183614310565b855490915060009061386d90600190614310565b90508181146138d257600086600001828154811061388d5761388d6142fa565b90600052602060002001549050808760000184815481106138b0576138b06142fa565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806138e3576138e3614877565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610822565b6000915050610822565b600054610100900460ff1661394f5760405162461bcd60e51b8152600401610f0d9061482c565b6118c63361358a565b60009081526001919091016020526040902054151590565b50805461397c906141ec565b6000825580601f1061398c575050565b601f016020900490600052602060002090810190612cbd9190613a36565b604051806101a00160405280606081526020016060815260200160608152602001600062ffffff16815260200160608152602001600062ffffff16815260200160608152602001600015158152602001600062ffffff16815260200160001515815260200160006002811115613a2257613a22613fc0565b815260200160008152602001606081525090565b5b80821115613a4b5760008155600101613a37565b5090565b60008060408385031215613a6257600080fd5b50508035926020909101359150565b60005b83811015613a8c578181015183820152602001613a74565b50506000910152565b60008151808452613aad816020860160208601613a71565b601f01601f19169290920160200192915050565b602081526000610cc96020830184613a95565b6020808252825182820181905260009190848201906040850190845b81811015613b155783516001600160a01b031683529284019291840191600101613af0565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613b5f57613b5f613b21565b604052919050565b60006001600160401b03821115613b8057613b80613b21565b50601f01601f191660200190565b600082601f830112613b9f57600080fd5b8135613bb2613bad82613b67565b613b37565b818152846020838601011115613bc757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613bf957600080fd5b833592506020840135915060408401356001600160401b03811115613c1d57600080fd5b613c2986828701613b8e565b9150509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114612cbd57600080fd5b600080600060608486031215613c7157600080fd5b8335613c7c81613c47565b92506020840135613c8c81613c47565b915060408401356001600160e01b031981168114613ca957600080fd5b809150509250925092565b600060208284031215613cc657600080fd5b5035919050565b6000610120808352613ce18184018d613a95565b90508281036020840152613cf5818c613a95565b90508281036040840152613d09818b613a95565b905062ffffff808a1660608501528382036080850152613d29828a613a95565b915080881660a085015283820360c0850152613d458288613a95565b925085151560e085015280851661010085015250509a9950505050505050505050565b8015158114612cbd57600080fd5b60008060408385031215613d8957600080fd5b823591506020830135613d9b81613d68565b809150509250929050565b600080600060608486031215613dbb57600080fd5b8335613dc681613c47565b95602085013595506040909401359392505050565b60008060408385031215613dee57600080fd5b8235613df981613c47565b946020939093013593505050565b60008060408385031215613e1a57600080fd5b823591506020830135613d9b81613c47565b60008060408385031215613e3f57600080fd5b8235915060208301356001600160401b03811115613e5c57600080fd5b613e6885828601613b8e565b9150509250929050565b600080600080600060a08688031215613e8a57600080fd5b853594506020860135935060408601356001600160401b0380821115613eaf57600080fd5b613ebb89838a01613b8e565b94506060880135915080821115613ed157600080fd5b613edd89838a01613b8e565b93506080880135915080821115613ef357600080fd5b50613f0088828901613b8e565b9150509295509295909350565b600060208284031215613f1f57600080fd5b8135610cc981613c47565b600060208284031215613f3c57600080fd5b81356001600160401b03811115613f5257600080fd5b610f2d84828501613b8e565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613fb357603f19888603018452613fa1858351613a95565b94509285019290850190600101613f85565b5092979650505050505050565b634e487b7160e01b600052602160045260246000fd5b60038110613fe657613fe6613fc0565b9052565b60048110613fe657613fe6613fc0565b60208152600082516101a08060208501526140196101c0850183613a95565b91506020850151601f19808685030160408701526140378483613a95565b935060408701519150808685030160608701526140548483613a95565b93506060870151915061406e608087018362ffffff169052565b60808701519150808685030160a08701526140898483613a95565b935060a087015191506140a360c087018362ffffff169052565b60c08701519150808685030160e08701526140be8483613a95565b935060e087015191506101006140d78188018415159052565b87015191506101206140ef8782018462ffffff169052565b87015191506101406141048782018415159052565b870151915061016061411887820184613fd6565b870151915061018061412c87820184613fea565b8701518685039091018387015290506141458382613a95565b9695505050505050565b60008060006060848603121561416457600080fd5b8335925060208401356004811061417a57600080fd5b915060408401356001600160401b03811115613c1d57600080fd5b600080604083850312156141a857600080fd5b82359150602083013560038110613d9b57600080fd5b6000806000606084860312156141d357600080fd5b83359250602084013591506040840135613ca981613c47565b600181811c9082168061420057607f821691505b6020821081036131e057634e487b7160e01b600052602260045260246000fd5b6000602080838503121561423357600080fd5b82516001600160401b038082111561424a57600080fd5b818501915085601f83011261425e57600080fd5b81518181111561427057614270613b21565b8060051b9150614281848301613b37565b818152918301840191848101908884111561429b57600080fd5b938501935b838510156142c557845192506142b583613c47565b82825293850193908501906142a0565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610822576108226142d1565b634e487b7160e01b600052603260045260246000fd5b81810381811115610822576108226142d1565b600060018201614335576143356142d1565b5060010190565b601f82111561438657600081815260208120601f850160051c810160208610156143635750805b601f850160051c820191505b818110156143825782815560010161436f565b5050505b505050565b600019600383901b1c191660019190911b1790565b81516001600160401b038111156143b9576143b9613b21565b6143cd816143c784546141ec565b8461433c565b602080601f8311600181146143fc57600084156143ea5750858301515b6143f4858261438b565b865550614382565b600085815260208120601f198616915b8281101561442b5788860151825594840194600190910190840161440c565b50858210156144495787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600061446c6040830185613a95565b90508260208301529392505050565b60006020828403121561448d57600080fd5b8151610cc981613d68565b6000602082840312156144aa57600080fd5b5051919050565b6000602082840312156144c357600080fd5b8151610cc981613c47565b602080825260129082015271496e646578206f7574206f662072616e676560701b604082015260600190565b6000614508613bad84613b67565b905082815283838301111561451c57600080fd5b610cc9836020830184613a71565b600082601f83011261453b57600080fd5b610cc9838351602085016144fa565b60008060006060848603121561455f57600080fd5b83516001600160401b038082111561457657600080fd5b6145828783880161452a565b9450602086015191508082111561459857600080fd5b506145a58682870161452a565b925050604084015190509250925092565b62ffffff818116838216019080821115611129576111296142d1565b62ffffff828116828216039080821115611129576111296142d1565b6060815260006146016060830186613a95565b82810360208401526146138186613a95565b905082810360408401526141458185613a95565b818103614632575050565b61463c82546141ec565b6001600160401b0381111561465357614653613b21565b614661816143c784546141ec565b6000601f82116001811461468f576000831561467d5750848201545b614687848261438b565b8555506146f4565b600085815260209020601f19841690600086815260209020845b838110156146c957828601548255600195860195909101906020016146a9565b50858310156146e75781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b6147058184613fea565b604060208201526000610cc66040830184613a95565b602081016108228284613fd6565b6a600b5981380380925939f360a81b8152607f60f91b600b820152600c81018490526000602c8201819052606084901b6001600160601b0319166038830152604c8201819052825161478281604d850160208701613a71565b91909101604d01949350505050565b600060ff821660ff81036147a7576147a76142d1565b60010192915050565b6000602082840312156147c257600080fd5b81516001600160401b038111156147d857600080fd5b8201601f810184136147e957600080fd5b610f2d848251602084016144fa565b60006020828403121561480a57600080fd5b81516001600160401b0381111561482057600080fd5b610f2d8482850161452a565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fdfe5d7871759f44bc77f64c9eb647afdcf4a49d2fbba70fc64411a3bdc750b05274f79e11fc86b9bf37d5dfd4359c053136f7c046da6a08f9cf7ca56d80d5aab839a2646970667358221220880fa808abfe58fd694021aa495012de7c1aec9f8b96d9a1fc947718678ddb9b64736f6c63430008130033",
1675
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102d85760003560e01c806392b794db11610189578063c42ae814116100df578063c42ae81414610648578063c4d66de81461065b578063caaa3bb71461066e578063cc86ba4b14610681578063cea2961a14610694578063cfb51928146106a7578063dc33f4ae146106ba578063dfa3be53146106cd578063f0b99382146106e0578063f146f17f146106f3578063f2fde38b14610706578063f8ac18be14610719578063f9c0fae61461072c578063fb5cd19b1461073f578063fed37e821461074757600080fd5b806392b794db146105275780639532f2f41461053a578063989799371461054f57806398a885ad14610562578063a0a82bd314610582578063a1a7a47b14610595578063ad6b414d146105a8578063ae9358de146105bb578063b1d24cb2146105ce578063b86b69f1146105e1578063ba228512146105e9578063be3d3ee6146105fc578063c01ba5381461060f578063c073927014610622578063c0cd565f1461063557600080fd5b80634c66823c1161023e5780634c66823c1461042b5780634f5267ef14610433578063518cb3df1461044657806352ccc021146104595780635668bc5e1461046c5780635710f83d1461047f578063613d57fd1461049257806366d549a1146104a5578063675abe24146104b85780636dfa9f56146104cb578063715018a6146104de57806371b70a71146104e657806381e7837c146104f95780638b6ad1ec1461050c5780638da5cb5b1461051f57600080fd5b8062e87903146102dd57806307f9f78614610306578063137621861461031b57806316a1012d146103305780631a051d49146103435780631e9bef4614610356578063230448b11461036b57806325ffb3761461038e57806326978a64146103b65780633e76919a146103c957806344346a5f146103dc578063447b051a146103f25780634a78a932146104055780634bd1a38714610418575b600080fd5b6102f06102eb366004613a4f565b61074f565b6040516102fd9190613ac1565b60405180910390f35b61030e610828565b6040516102fd9190613ad4565b61032e610329366004613be4565b6109f9565b005b61032e61033e366004613be4565b610aaa565b61032e610351366004613be4565b610b52565b61035e610c03565b6040516102fd9190613c33565b61037e610379366004613c5c565b610c1c565b60405190151581526020016102fd565b6103a161039c366004613cb4565b610cd0565b6040516102fd99989796959493929190613ccd565b61032e6103c4366004613d76565b610d3b565b61035e6103d7366004613cb4565b610dcb565b6103e4610f35565b6040519081526020016102fd565b61032e610400366004613da6565b610f4f565b6102f0610413366004613ddb565b610fdd565b61032e610426366004613e07565b611130565b61035e611202565b61032e610441366004613ddb565b61121e565b6102f0610454366004613a4f565b611300565b61032e610467366004613cb4565b611369565b6103e461047a366004613cb4565b61148e565b61032e61048d366004613e2c565b6114bb565b6103e46104a0366004613cb4565b611585565b61032e6104b3366004613e72565b6115ab565b61032e6104c6366004613f0d565b611701565b61032e6104d9366004613a4f565b6117af565b61032e6118b4565b6102f06104f4366004613a4f565b6118c8565b61032e610507366004613f0d565b61191f565b61032e61051a366004613f0d565b6119db565b61035e611a4a565b6103a1610535366004613f2a565b611a5e565b610542611aa2565b6040516102fd9190613f5e565b61032e61055d366004613f0d565b611b68565b610575610570366004613cb4565b611bd7565b6040516102fd9190613ffa565b61032e610590366004613e2c565b611f21565b61032e6105a3366004613a4f565b611fe9565b61032e6105b6366004613cb4565b6120c8565b61032e6105c936600461414f565b6121cd565b6102f06105dc366004613cb4565b6122f1565b6103e4612324565b6103e46105f7366004613a4f565b6123c9565b61032e61060a366004613e2c565b61248e565b61032e61061d366004614195565b612501565b61032e610630366004613cb4565b61258d565b61032e6106433660046141be565b612683565b61032e610656366004613e2c565b612724565b61032e610669366004613f0d565b612794565b61032e61067c366004613be4565b6128af565b6102f061068f366004613cb4565b612959565b61037e6106a2366004613f0d565b612987565b6103e46106b5366004613f2a565b612a1e565b61032e6106c8366004613e2c565b612a32565b61035e6106db366004613a4f565b612ad1565b6102f06106ee366004613a4f565b612b2c565b61032e610701366004613e2c565b612b84565b61032e610714366004613f0d565b612c47565b61032e610727366004613cb4565b612cc0565b61032e61073a366004613e2c565b612e55565b610542612ec8565b6103e4612f76565b6060600061075b612f8b565b600085815260059190910160205260409020600781015490915061078590849062ffffff16612faf565b6000838152600282016020526040902080546107a0906141ec565b80601f01602080910402602001604051908101604052809291908181526020018280546107cc906141ec565b80156108195780601f106107ee57610100808354040283529160200191610819565b820191906000526020600020905b8154815290600101906020018083116107fc57829003601f168201915b50505050509150505b92915050565b60606000610834612f8b565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316631676ddc36040518163ffffffff1660e01b8152600401600060405180830381865afa158015610888573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108b09190810190614220565b805190915060006108ca6108c2612f8b565b600b01612fce565b90506000815184516108dc91906142e7565b6001600160401b038111156108f3576108f3613b21565b60405190808252806020026020018201604052801561091c578160200160208202803683370190505b50805190915060005b818110156109ee578481101561098657858181518110610947576109476142fa565b6020026020010151838281518110610961576109616142fa565b60200260200101906001600160a01b031690816001600160a01b0316815250506109dc565b836109918683614310565b815181106109a1576109a16142fa565b60200260200101518382815181106109bb576109bb6142fa565b60200260200101906001600160a01b031690816001600160a01b0316815250505b806109e681614323565b915050610925565b509095945050505050565b610a096309bb10c360e11b612fdb565b610a128161302b565b610a1b8361307a565b6000610a25612f8b565b6000858152600591909101602052604090206007810154909150610a4f90849062ffffff16612faf565b60008381526002820160205260409020610a6983826143a0565b50837f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d8385604051610a9c929190614459565b60405180910390a250505050565b610aba6316a1012d60e01b612fdb565b610ac38161302b565b610acc836130d7565b6000610ad6612f8b565b6000858152600691909101602052604090206001810154909150610b0090849062ffffff16612faf565b610b0982613136565b60008481526020839052604080822080546001600160a01b0319166001600160a01b0394909416939093179092559051859160008051602061488e83398151915291a250505050565b610b62631a051d4960e01b612fdb565b610b6b8161302b565b610b748361307a565b6000610b7e612f8b565b6000858152600591909101602052604090206007810154909150610baf908490600160301b900462ffffff16612faf565b610bb882613136565b600084815260068301602052604080822080546001600160a01b0319166001600160a01b039490941693909317909255905185916000805160206148ae83398151915291a250505050565b6000610c0d612f8b565b546001600160a01b0316919050565b600080610c27611a4a565b6001600160a01b031614158015610cc65750610c41612f8b565b546040516217798b60e61b81526001600160a01b03868116600483015285811660248301526001600160e01b031985166044830152909116906305de62c0906064016020604051808303816000875af1158015610ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc6919061447b565b90505b9392505050565b606080606060006060600060606000806000610ceb8b611bd7565b9050806000015181602001518260400151836060015184608001518560a001518660c001518760e00151886101000151995099509950995099509950995099509950509193959799909294969850565b610d4b6309a5e29960e21b612fdb565b610d548261307a565b80610d5d612f8b565b6005016000848152602001908152602001600020600701600b6101000a81548160ff021916908315150217905550817f82a9470304050368bf56293216be37485c0bf0cf16745447a127a9886ceb9fc882604051610dbf911515815260200190565b60405180910390a25050565b600080610dd6612f8b565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316637ac4f3296040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190614498565b905080831015610ece57610e60612f8b565b600a0154604051631ef6bdbf60e21b8152600481018590526001600160a01b0390911690637bdaf6fc90602401602060405180830381865afa158015610eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc991906144b1565b6000610ee3610edb612f8b565b600b016131e6565b9050610eef81836142e7565b8410610f165760405162461bcd60e51b8152600401610f0d906144ce565b60405180910390fd5b610f2d828503610f24612f8b565b600b01906131f0565b949350505050565b6000610f4a610f42612f8b565b6001016131e6565b905090565b610f5f63223d828d60e11b612fdb565b610f688161307a565b610f71836131fc565b80610f7a612f8b565b6001600160a01b03851660008181526009929092016020908152604080842087855282529283902093909355905183815284927ff2f4de0c34a4899f5cf7a30aced71b0c27f629f80fb61efc06c7a12ecabdb7ba910160405180910390a3505050565b6060610fe8836131fc565b6000610ff2612f8b565b6001600160a01b038516600090815260099190910160209081526040808320868452909152902054905080156110335761102b8161324f565b915050610822565b604051633ae7357560e21b8152600481018490526001600160a01b0385169063eb9cd5d490602401600060405180830381865afa92505050801561109957506040513d6000823e601f3d908101601f19168201604052611096919081019061454a565b60015b61111d5760405162461bcd60e51b815260206004820152604960248201527f436f6e747261637420646f6573206e6f7420696d706c656d656e742070726f6a60448201527f65637453637269707444657461696c7320616e6420686173206e6f206f7665726064820152683934b2329039b2ba1760b91b608482015260a401610f0d565b82945050505050610822565b5092915050565b611140634bd1a38760e01b612fdb565b611149816132ba565b6111528261307a565b600061115c612f8b565b600084815260059190910160209081526040808320600781018054600160301b9081900462ffffff9081168752600684019095529290942080546001600160a01b0319166001600160a01b03881617905592549293506111bf92041660016145b6565b60078201805462ffffff92909216600160301b0262ffffff60301b1990921691909117905560405183906000805160206148ae83398151915290600090a2505050565b600061120c612f8b565b600a01546001600160a01b0316919050565b61122e634f5267ef60e01b612fdb565b6000611238612f8b565b6001600160a01b038416600090815260098201602090815260408083208684529091529020549091506112ab5760405162461bcd60e51b815260206004820152601b60248201527a139bc81bdd995c9c9a5919481cd95d08199bdc881c1c9bda9958dd602a1b6044820152606401610f0d565b6001600160a01b03831660008181526009830160209081526040808320868452909152808220829055518492917f618154ee1a16009759db8e59ff744e79dd094831be73c4b9383f885678c20b7391a3505050565b6060600061130c612f8b565b600085815260059190910160205260409020600781015490915061133d908490600160301b900462ffffff16612faf565b60008381526006820160205260409020546001600160a01b03166113608161330e565b95945050505050565b6113796352ccc02160e01b612fdb565b6113828161307a565b600061138c612f8b565b6000838152600591909101602052604090206007810154909150600160301b900462ffffff166113fe5760405162461bcd60e51b815260206004820152601e60248201527f746865726520617265206e6f207363726970747320746f2072656d6f766500006044820152606401610f0d565b6007810154600682019060009061142390600190600160301b900462ffffff166145d2565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560078401805462ffffff60301b198116600160301b9182900486166000190190951602939093179092555183916000805160206148ae83398151915291a25050565b6000611498612f8b565b6000928352600501602052506040902060070154600160301b900462ffffff1690565b6114cb635710f83d60e01b612fdb565b6114d48161302b565b6114dd8261307a565b60006114e7612f8b565b60008481526005919091016020908152604080832060078101546301000000900462ffffff168085526004820190935292209192509061152784826143a0565b506115338160016142e7565b8260070160036101000a81548162ffffff021916908362ffffff160217905550837ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde8483604051610a9c929190614459565b600061158f612f8b565b600092835260060160205250604090206001015462ffffff1690565b6115bb6366d549a160e01b612fdb565b6115c4846130d7565b6115d18560406001613496565b61161a5760405162461bcd60e51b815260206004820152601a60248201527901b5d5cdd0818dbdb9d185a5b88195e1858dd1b1e481bdb9948160361b6044820152606401610f0d565b6000611624612f8b565b9050611633600182018761350a565b61167b5760405162461bcd60e51b8152602060048201526019602482015278446570656e64656e637920616c72656164792065786973747360381b6044820152606401610f0d565b600086815260058201602052604090208581556001810161169c86826143a0565b50600381016116ab85826143a0565b50600581016116ba84826143a0565b5085877f14d15ecf0e955bdd7a921efba642deef4d718696d3fc369454c84817fed0fb778787876040516116f0939291906145ee565b60405180910390a350505050505050565b6117116319d6af8960e21b612fdb565b61171a816132ba565b61172f81611726612f8b565b600b0190613516565b6117785760405162461bcd60e51b815260206004820152601a60248201527910dbdb9d1c9858dd08185b1c9958591e481cdd5c1c1bdc9d195960321b6044820152606401610f0d565b6040516001600160a01b038216907f85796181e67d093fd8fc344cdf114629c14c1396c47bfd9cda9392285e74d43f90600090a250565b6117bf6336fd4fab60e11b612fdb565b6117c88261307a565b60006117d2612f8b565b600084815260058201602052604090206007810154919250906301000000900462ffffff166118018482612faf565b600061180e600183614310565b60008781526005860160209081526040808320848452600490810183528184208a85529088019092529091209192506118479082614627565b506000818152600484016020526040812061186191613970565b60078301805465ffffff0000001916630100000062ffffff841602179055604051859087907fc02725dfc9639e3399432cdae3db1c062229f4cc41bcc18631517617c020b71c90600090a3505050505050565b6118bc61352b565b6118c6600061358a565b565b606060006118d4612f8b565b60008581526006919091016020526040902060018101549091506118fe90849062ffffff16612faf565b6000838152602082905260409020546001600160a01b03166113608161330e565b61192f632079e0df60e21b612fdb565b6119448161193b612f8b565b600b01906135bd565b6119a45760405162461bcd60e51b815260206004820152602b60248201527f436f726520636f6e747261637420616c72656164792072656d6f766564206f7260448201526a081b9bdd081a5b881cd95d60aa1b6064820152608401610f0d565b6040516001600160a01b038216907f24f057e6bd463ac72bb963a1e55a41494d252695f97a7671c2b7018345eb31f790600090a250565b6119eb6322dab47b60e21b612fdb565b6119f4816132ba565b806119fd612f8b565b600a0180546001600160a01b0319166001600160a01b03928316179055604051908216907f38429341ba977e6c97809dd9fed1f58cf5c409bfe8132475b3f73bda02dd84f690600090a250565b6000610f4a6033546001600160a01b031690565b60608060606000606060006060600080611a778a6135d2565b611a8361039c8b613616565b9850985098509850985098509850985098509193959799909294969850565b60606000611aae612f8b565b90506000611abe826001016131e6565b90506000816001600160401b03811115611ada57611ada613b21565b604051908082528060200260200182016040528015611b0d57816020015b6060815260200190600190039081611af85790505b50905060005b82811015611b6057611b30611b2b60018601836131f0565b61324f565b828281518110611b4257611b426142fa565b60200260200101819052508080611b5890614323565b915050611b13565b509392505050565b611b78639897993760e01b612fdb565b611b81816132ba565b80611b8a612f8b565b600d0180546001600160a01b0319166001600160a01b03928316179055604051908216907f0b9c67948019a508c85a8b9abbe9b2ff80ab26c068bc4edb68425299f360be6e90600090a250565b611bdf6139aa565b6000611be9612f8b565b60050160008481526020019081526020016000209050604051806101a00160405280611c148561324f565b8152602001611c26836000015461324f565b8152602001826001018054611c3a906141ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611c66906141ec565b8015611cb35780601f10611c8857610100808354040283529160200191611cb3565b820191906000526020600020905b815481529060010190602001808311611c9657829003601f168201915b5050509183525050600783015462ffffff166020820152600383018054604090920191611cdf906141ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0b906141ec565b8015611d585780601f10611d2d57610100808354040283529160200191611d58565b820191906000526020600020905b815481529060010190602001808311611d3b57829003601f168201915b505050918352505060078301546301000000900462ffffff166020820152600583018054604090920191611d8b906141ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611db7906141ec565b8015611e045780601f10611dd957610100808354040283529160200191611e04565b820191906000526020600020905b815481529060010190602001808311611de757829003601f168201915b5050509183525050600783015462ffffff600160301b8204168015156020840152604083015260ff600160581b8204811615156060840152608090920191600160481b909104166002811115611e5c57611e5c613fc0565b815260200182600701600a9054906101000a900460ff166003811115611e8457611e84613fc0565b8152602001826008018054611e98906141ec565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec4906141ec565b8015611f115780601f10611ee657610100808354040283529160200191611f11565b820191906000526020600020905b815481529060010190602001808311611ef457829003601f168201915b5050505050815250915050919050565b611f3163a0a82bd360e01b612fdb565b611f3a8161302b565b611f43826130d7565b6000611f4d612f8b565b6000848152600691909101602052604090209050611f6a82613136565b6001828101805462ffffff908116600090815260208690526040902080546001600160a01b0319166001600160a01b03959095169490941790935554611fb19216906145b6565b60018201805462ffffff191662ffffff92909216919091179055604051839060008051602061488e83398151915290600090a2505050565b611ff963a1a7a47b60e01b612fdb565b6120028261307a565b600061200c612f8b565b600084815260059190910160205260409020600781015490915062ffffff166120358382612faf565b6000612042600183614310565b600081815260028501602052604080822087835291209192506120659082614627565b506000818152600284016020526040812061207f91613970565b60078301805462ffffff191662ffffff8316179055604051849086907f225454b600cf489553fde6e3b7f5e458b1093c035390b678067ea799b3b016cd90600090a35050505050565b6120d863ad6b414d60e01b612fdb565b6120e1816130d7565b60006120eb612f8b565b600083815260069190910160205260409020600181015490915062ffffff16806121625760405162461bcd60e51b815260206004820152602260248201527f5468657265206973206e6f206c6963656e7365207465787420746f2072656d6f604482015261766560f01b6064820152608401610f0d565b8160006121706001846145d2565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560018501805462ffffff191660001986019094169390931790925551849160008051602061488e83398151915291a2505050565b6121dd635749ac6f60e11b612fdb565b6121e68361307a565b60028260038111156121fa576121fa613fc0565b0361220d576122088161302b565b612266565b8051156122665760405162461bcd60e51b815260206004820152602160248201527f5370656369616c2074797065206f6e6c7920666f72205370656369616c5479706044820152606560f81b6064820152608401610f0d565b6000612270612f8b565b600085815260059190910160205260409020600781018054919250849160ff60501b1916600160501b8360038111156122ab576122ab613fc0565b0217905550600881016122be83826143a0565b50837fbbd81765285a998af7d9596059834c4fc0ecf88c2f02603028ebdde6a31360188484604051610a9c9291906146fb565b606060006122fd612f8b565b90506123148361230f836001016131e6565b612faf565b610cc9611b2b60018301856131f0565b60008061232f612f8b565b600a0160009054906101000a90046001600160a01b03166001600160a01b0316637ac4f3296040518163ffffffff1660e01b8152600401602060405180830381865afa158015612383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a79190614498565b905060006123b6610edb612f8b565b90506123c281836142e7565b9250505090565b6000806123d4612f8b565b6000858152600591909101602052604090206007810154909150612405908490600160301b900462ffffff16612faf565b61240d613635565b60008481526006830160205260409081902054905163cc31a33160e01b81526001600160a01b039283169263cc31a3319261244d92911690600401613c33565b602060405180830381865afa15801561246a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2d9190614498565b61249e635f1e9f7360e11b612fdb565b6124a78261307a565b806124b0612f8b565b600084815260059190910160205260409020600101906124d090826143a0565b50817fc9890a31ec780bb5a8a017d683d3913f97260548d71c2cee78194ed2833f023582604051610dbf9190613ac1565b61251163180374a760e31b612fdb565b61251a8261307a565b80612523612f8b565b600084815260059190910160205260409020600701805460ff60481b1916600160481b83600281111561255857612558613fc0565b0217905550817f8e4c6c7d23bb4f93ea943eaec1079246ca1965149805db5734e6447e2f75741f82604051610dbf919061471b565b61259d630c07392760e41b612fdb565b806125f65760405162461bcd60e51b815260206004820152602360248201527f4c6963656e736520747970652063616e6e6f7420626520656d70747920737472604482015262696e6760e81b6064820152608401610f0d565b61260b81612602612f8b565b6003019061350a565b6126555760405162461bcd60e51b815260206004820152601b60248201527a4c6963656e7365207479706520616c72656164792065786973747360281b6044820152606401610f0d565b60405181907fad5dcce4588345db351371d105540f3fb69966f418d923539f19d5f44a1cfc4b90600090a250565b61269363c0cd565f60e01b612fdb565b61269c816132ba565b6126a58361307a565b60006126af612f8b565b60008581526005919091016020526040902060078101549091506126e0908490600160301b900462ffffff16612faf565b600083815260068201602052604080822080546001600160a01b0319166001600160a01b0386161790555185916000805160206148ae83398151915291a250505050565b61273463310aba0560e21b612fdb565b61273d8261307a565b80612746612f8b565b6000848152600591820160205260409020019061276390826143a0565b50817f94747dffac14b8b9a15e699c998cc8f42ad81f21ae95e155c8a1c49403117b8b82604051610dbf9190613ac1565b600054610100900460ff16158080156127b45750600054600160ff909116105b806127ce5750303b1580156127ce575060005460ff166001145b6128315760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610f0d565b6000805460ff191660011790558015612854576000805461ff0019166101001790555b61285c6136b7565b6128658261358a565b80156128ab576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6128bf63caaa3bb760e01b612fdb565b6128c88161302b565b6128d18361307a565b60006128db612f8b565b600085815260059190910160205260409020600781015490915061290c9084906301000000900462ffffff16612faf565b6000838152600482016020526040902061292683826143a0565b50837ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde8385604051610a9c929190614459565b60606000612965612f8b565b90506129778361230f836003016131e6565b610cc9611b2b60038301856131f0565b6000612991612f8b565b600a015460405163f1052af560e01b81526001600160a01b039091169063f1052af5906129c2908590600401613c33565b602060405180830381865afa1580156129df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a03919061447b565b80610822575061082282612a15612f8b565b600b01906136e6565b6000612a29826135d2565b61082282613616565b612a42636e19fa5760e11b612fdb565b612a4b8161302b565b612a548261307a565b6000612a5e612f8b565b6000848152600591909101602052604090209050612a7b82613136565b600782018054600160301b9081900462ffffff9081166000908152600686016020526040902080546001600160a01b0319166001600160a01b03959095169490941790935590546111bf929190041660016145b6565b600080612adc612f8b565b6000858152600591909101602052604090206007810154909150612b0d908490600160301b900462ffffff16612faf565b60009283526006016020525060409020546001600160a01b0316919050565b60606000612b38612f8b565b6000858152600591909101602052604090206007810154909150612b699084906301000000900462ffffff16612faf565b6000838152600482016020526040902080546107a0906141ec565b612b9463f146f17f60e01b612fdb565b612b9d8161302b565b612ba68261307a565b6000612bb0612f8b565b600084815260059190910160209081526040808320600781015462ffffff1680855260028201909352922091925090612be984826143a0565b50612bf58160016142e7565b8260070160006101000a81548162ffffff021916908362ffffff160217905550837f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d8483604051610a9c929190614459565b612c4f61352b565b6001600160a01b038116612cb45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f0d565b612cbd8161358a565b50565b612cd0637c560c5f60e11b612fdb565b612cd98161307a565b6000612ce3612f8b565b6000838152600582016020526040902060078101549192509062ffffff16158015612d1c575060078101546301000000900462ffffff16155b8015612d3657506007810154600160301b900462ffffff16155b612db85760405162461bcd60e51b815260206004820152604760248201527f43616e6e6f742072656d6f766520646570656e64656e6379207769746820616460448201527f646974696f6e616c2043444e732c207265706f7369746f726965732c206f72206064820152667363726970747360c81b608482015260a401610f0d565b612dc560018301846136fb565b506000838152600583016020526040812081815590612de76001830182613970565b612df5600383016000613970565b612e03600583016000613970565b6007820180546001600160601b0319169055612e23600883016000613970565b505060405183907f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7290600090a2505050565b612e65637ce07d7360e11b612fdb565b612e6e8261307a565b80612e77612f8b565b60008481526005919091016020526040902060030190612e9790826143a0565b50817f774918414e4887efe5349a305fe253ee8b1e3fe0c2117012f0c215645693cbfd82604051610dbf9190613ac1565b60606000612ed4612f8b565b90506000612ee4826003016131e6565b90506000816001600160401b03811115612f0057612f00613b21565b604051908082528060200260200182016040528015612f3357816020015b6060815260200190600190039081612f1e5790505b50905060005b82811015611b6057612f51611b2b60038601836131f0565b828281518110612f6357612f636142fa565b6020908102919091010152600101612f39565b6000610f4a612f83612f8b565b6003016131e6565b7fb1832496845cc2c2d1bd0879f9ba0b1ef7ffcfdc79a541ee494477d8e10b9a3190565b8082106128ab5760405162461bcd60e51b8152600401610f0d906144ce565b60606000610cc983613707565b612fe6333083610c1c565b612cbd5760405162461bcd60e51b815260206004820152601660248201527513db9b1e4810591b5a5b881050d308185b1b1bddd95960521b6044820152606401610f0d565b8051600003612cbd5760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d656d70747920737472696e6760281b6044820152606401610f0d565b61308f81613086612f8b565b60010190613763565b612cbd5760405162461bcd60e51b815260206004820152601960248201527811195c195b99195b98de48191bd95cc81b9bdd08195e1a5cdd603a1b6044820152606401610f0d565b6130ec816130e3612f8b565b60030190613763565b612cbd5760405162461bcd60e51b815260206004820152601b60248201527a131a58d95b9cd9481d1e5c1948191bd95cc81b9bdd08195e1a5cdd602a1b6044820152606401610f0d565b6000807f42797465636f646553746f726167655f56322e302e305f5f5f5f5f5f5f5f5f20308460405160200161316e93929190614729565b60405160208183030381529060405290508051602082016000f091506001600160a01b0382166131e05760405162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374417353746f726167653a205772697465204572726f7200006044820152606401610f0d565b50919050565b6000610822825490565b6000610cc9838361376f565b61320581612987565b612cbd5760405162461bcd60e51b815260206004820152601b60248201527a10dbdc994818dbdb9d1c9858dd081b9bdd081cdd5c1c1bdc9d1959602a1b6044820152606401610f0d565b606060005b828160ff1660208110613269576132696142fa565b1a60f81b6001600160f81b03191615801590613288575060208160ff16105b1561329f578061329781614791565b915050613254565b60405191506040820160405280825282602083015250919050565b6001600160a01b038116612cbd5760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d7a65726f206164647265737360281b6044820152606401610f0d565b6060600061331a613635565b90506000816001600160a01b031663cc31a331856040518263ffffffff1660e01b815260040161334a9190613c33565b602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b9190614498565b90507f554e4b4e4f574e5f56455253494f4e5f535452494e475f5f5f5f5f5f5f5f5f20810361342557604051632475d70960e01b81526001600160a01b03831690632475d709906133e0908790600401613c33565b600060405180830381865afa1580156133fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f2d91908101906147b0565b604051630eacc5e760e31b81526001600160a01b038316906375662f3890613451908790600401613c33565b600060405180830381865afa15801561346e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f2d91908101906147f8565b60008060005b60208160ff1610156134f6576000868260ff16602081106134bf576134bf6142fa565b1a905080158015906134d4575060808160ff16105b156134ed578560ff168160ff16036134ed578260010192505b5060010161349c565b8360ff168260ff1614925050509392505050565b6000610cc98383613799565b6000610cc9836001600160a01b038416613799565b33613534611a4a565b6001600160a01b0316146118c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f0d565b613593816137e3565b8061359c612f8b565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6000610cc9836001600160a01b038416613835565b602081511115612cbd5760405162461bcd60e51b815260206004820152600f60248201526e537472696e6720746f6f206c6f6e6760881b6044820152606401610f0d565b80516000908290820361362c5750600092915050565b50506020015190565b600061363f612f8b565b600d0160009054906101000a90046001600160a01b03166001600160a01b03166310ba84aa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613693573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a91906144b1565b600054610100900460ff166136de5760405162461bcd60e51b8152600401610f0d9061482c565b6118c6613928565b6000610cc9836001600160a01b038416613958565b6000610cc98383613835565b60608160000180548060200260200160405190810160405280929190818152602001828054801561375757602002820191906000526020600020905b815481526020019060010190808311613743575b50505050509050919050565b6000610cc98383613958565b6000826000018281548110613786576137866142fa565b9060005260206000200154905092915050565b60006137a58383613958565b6137db57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610822565b506000610822565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000818152600183016020526040812054801561391e576000613859600183614310565b855490915060009061386d90600190614310565b90508181146138d257600086600001828154811061388d5761388d6142fa565b90600052602060002001549050808760000184815481106138b0576138b06142fa565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806138e3576138e3614877565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610822565b6000915050610822565b600054610100900460ff1661394f5760405162461bcd60e51b8152600401610f0d9061482c565b6118c63361358a565b60009081526001919091016020526040902054151590565b50805461397c906141ec565b6000825580601f1061398c575050565b601f016020900490600052602060002090810190612cbd9190613a36565b604051806101a00160405280606081526020016060815260200160608152602001600062ffffff16815260200160608152602001600062ffffff16815260200160608152602001600015158152602001600062ffffff16815260200160001515815260200160006002811115613a2257613a22613fc0565b815260200160008152602001606081525090565b5b80821115613a4b5760008155600101613a37565b5090565b60008060408385031215613a6257600080fd5b50508035926020909101359150565b60005b83811015613a8c578181015183820152602001613a74565b50506000910152565b60008151808452613aad816020860160208601613a71565b601f01601f19169290920160200192915050565b602081526000610cc96020830184613a95565b6020808252825182820181905260009190848201906040850190845b81811015613b155783516001600160a01b031683529284019291840191600101613af0565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613b5f57613b5f613b21565b604052919050565b60006001600160401b03821115613b8057613b80613b21565b50601f01601f191660200190565b600082601f830112613b9f57600080fd5b8135613bb2613bad82613b67565b613b37565b818152846020838601011115613bc757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215613bf957600080fd5b833592506020840135915060408401356001600160401b03811115613c1d57600080fd5b613c2986828701613b8e565b9150509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114612cbd57600080fd5b600080600060608486031215613c7157600080fd5b8335613c7c81613c47565b92506020840135613c8c81613c47565b915060408401356001600160e01b031981168114613ca957600080fd5b809150509250925092565b600060208284031215613cc657600080fd5b5035919050565b6000610120808352613ce18184018d613a95565b90508281036020840152613cf5818c613a95565b90508281036040840152613d09818b613a95565b905062ffffff808a1660608501528382036080850152613d29828a613a95565b915080881660a085015283820360c0850152613d458288613a95565b925085151560e085015280851661010085015250509a9950505050505050505050565b8015158114612cbd57600080fd5b60008060408385031215613d8957600080fd5b823591506020830135613d9b81613d68565b809150509250929050565b600080600060608486031215613dbb57600080fd5b8335613dc681613c47565b95602085013595506040909401359392505050565b60008060408385031215613dee57600080fd5b8235613df981613c47565b946020939093013593505050565b60008060408385031215613e1a57600080fd5b823591506020830135613d9b81613c47565b60008060408385031215613e3f57600080fd5b8235915060208301356001600160401b03811115613e5c57600080fd5b613e6885828601613b8e565b9150509250929050565b600080600080600060a08688031215613e8a57600080fd5b853594506020860135935060408601356001600160401b0380821115613eaf57600080fd5b613ebb89838a01613b8e565b94506060880135915080821115613ed157600080fd5b613edd89838a01613b8e565b93506080880135915080821115613ef357600080fd5b50613f0088828901613b8e565b9150509295509295909350565b600060208284031215613f1f57600080fd5b8135610cc981613c47565b600060208284031215613f3c57600080fd5b81356001600160401b03811115613f5257600080fd5b610f2d84828501613b8e565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613fb357603f19888603018452613fa1858351613a95565b94509285019290850190600101613f85565b5092979650505050505050565b634e487b7160e01b600052602160045260246000fd5b60038110613fe657613fe6613fc0565b9052565b60048110613fe657613fe6613fc0565b60208152600082516101a08060208501526140196101c0850183613a95565b91506020850151601f19808685030160408701526140378483613a95565b935060408701519150808685030160608701526140548483613a95565b93506060870151915061406e608087018362ffffff169052565b60808701519150808685030160a08701526140898483613a95565b935060a087015191506140a360c087018362ffffff169052565b60c08701519150808685030160e08701526140be8483613a95565b935060e087015191506101006140d78188018415159052565b87015191506101206140ef8782018462ffffff169052565b87015191506101406141048782018415159052565b870151915061016061411887820184613fd6565b870151915061018061412c87820184613fea565b8701518685039091018387015290506141458382613a95565b9695505050505050565b60008060006060848603121561416457600080fd5b8335925060208401356004811061417a57600080fd5b915060408401356001600160401b03811115613c1d57600080fd5b600080604083850312156141a857600080fd5b82359150602083013560038110613d9b57600080fd5b6000806000606084860312156141d357600080fd5b83359250602084013591506040840135613ca981613c47565b600181811c9082168061420057607f821691505b6020821081036131e057634e487b7160e01b600052602260045260246000fd5b6000602080838503121561423357600080fd5b82516001600160401b038082111561424a57600080fd5b818501915085601f83011261425e57600080fd5b81518181111561427057614270613b21565b8060051b9150614281848301613b37565b818152918301840191848101908884111561429b57600080fd5b938501935b838510156142c557845192506142b583613c47565b82825293850193908501906142a0565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610822576108226142d1565b634e487b7160e01b600052603260045260246000fd5b81810381811115610822576108226142d1565b600060018201614335576143356142d1565b5060010190565b601f82111561438657600081815260208120601f850160051c810160208610156143635750805b601f850160051c820191505b818110156143825782815560010161436f565b5050505b505050565b600019600383901b1c191660019190911b1790565b81516001600160401b038111156143b9576143b9613b21565b6143cd816143c784546141ec565b8461433c565b602080601f8311600181146143fc57600084156143ea5750858301515b6143f4858261438b565b865550614382565b600085815260208120601f198616915b8281101561442b5788860151825594840194600190910190840161440c565b50858210156144495787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600061446c6040830185613a95565b90508260208301529392505050565b60006020828403121561448d57600080fd5b8151610cc981613d68565b6000602082840312156144aa57600080fd5b5051919050565b6000602082840312156144c357600080fd5b8151610cc981613c47565b602080825260129082015271496e646578206f7574206f662072616e676560701b604082015260600190565b6000614508613bad84613b67565b905082815283838301111561451c57600080fd5b610cc9836020830184613a71565b600082601f83011261453b57600080fd5b610cc9838351602085016144fa565b60008060006060848603121561455f57600080fd5b83516001600160401b038082111561457657600080fd5b6145828783880161452a565b9450602086015191508082111561459857600080fd5b506145a58682870161452a565b925050604084015190509250925092565b62ffffff818116838216019080821115611129576111296142d1565b62ffffff828116828216039080821115611129576111296142d1565b6060815260006146016060830186613a95565b82810360208401526146138186613a95565b905082810360408401526141458185613a95565b818103614632575050565b61463c82546141ec565b6001600160401b0381111561465357614653613b21565b614661816143c784546141ec565b6000601f82116001811461468f576000831561467d5750848201545b614687848261438b565b8555506146f4565b600085815260209020601f19841690600086815260209020845b838110156146c957828601548255600195860195909101906020016146a9565b50858310156146e75781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b6147058184613fea565b604060208201526000610cc66040830184613a95565b602081016108228284613fd6565b6a600b5981380380925939f360a81b8152607f60f91b600b820152600c81018490526000602c8201819052606084901b6001600160601b0319166038830152604c8201819052825161478281604d850160208701613a71565b91909101604d01949350505050565b600060ff821660ff81036147a7576147a76142d1565b60010192915050565b6000602082840312156147c257600080fd5b81516001600160401b038111156147d857600080fd5b8201601f810184136147e957600080fd5b610f2d848251602084016144fa565b60006020828403121561480a57600080fd5b81516001600160401b0381111561482057600080fd5b610f2d8482850161452a565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fdfe5d7871759f44bc77f64c9eb647afdcf4a49d2fbba70fc64411a3bdc750b05274f79e11fc86b9bf37d5dfd4359c053136f7c046da6a08f9cf7ca56d80d5aab839a2646970667358221220880fa808abfe58fd694021aa495012de7c1aec9f8b96d9a1fc947718678ddb9b64736f6c63430008130033",
1468
1676
  "linkReferences": {},
1469
1677
  "deployedLinkReferences": {}
1470
1678
  }