@across-protocol/contracts 5.0.11-alpha.4 → 5.0.12-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/contracts/external/interfaces/CCTPInterfaces.sol +18 -0
  2. package/contracts/handlers/MulticallHandler.sol +7 -1
  3. package/contracts/interfaces/SponsoredCCTPInterface.sol +11 -0
  4. package/contracts/libraries/SafeTransferERC20.sol +21 -0
  5. package/contracts/libraries/SponsoredCCTPQuoteLib.sol +22 -0
  6. package/contracts/libraries/TronTransferLib.sol +42 -0
  7. package/contracts/periphery/SpokePoolPeriphery.sol +4 -0
  8. package/contracts/periphery/counterfactual/CounterfactualDepositSpokePool.sol +7 -3
  9. package/contracts/periphery/counterfactual/CounterfactualDepositSpokePoolTr.sol +36 -0
  10. package/contracts/periphery/counterfactual/WithdrawImplementation.sol +3 -6
  11. package/contracts/periphery/counterfactual/WithdrawImplementationTron.sol +22 -0
  12. package/contracts/periphery/mintburn/ArbitraryEVMFlowExecutor.sol +38 -15
  13. package/contracts/periphery/mintburn/sponsored-cctp/SponsoredCCTPDstPeriphery.sol +41 -12
  14. package/contracts/sp1-helios/SP1AutoVerifier.sol +1 -1
  15. package/contracts/spoke-pools/SpokePool.sol +11 -6
  16. package/contracts/spoke-pools/Tron_SpokePool.sol +65 -0
  17. package/contracts/test/MockCCTP.sol +10 -0
  18. package/contracts/test/MockTronUSDT.sol +36 -0
  19. package/contracts/tron/TronCounterfactualImports.sol +4 -3
  20. package/contracts/tron/TronImports.sol +2 -2
  21. package/contracts/tron/TronPeripheryImports.sol +1 -1
  22. package/dist/broadcast/deployed-addresses.json +186 -121
  23. package/dist/evm/artifacts/AcrossMessageHandlerMock.sol/AcrossMessageHandlerMock.json +1 -1
  24. package/dist/evm/artifacts/AdminWithdrawManager.sol/AdminWithdrawManager.json +1 -1
  25. package/dist/evm/artifacts/Arbitrum_Adapter.sol/Arbitrum_Adapter.json +1 -1
  26. package/dist/evm/artifacts/Arbitrum_CustomGasToken_Adapter.sol/Arbitrum_CustomGasToken_Adapter.json +1 -1
  27. package/dist/evm/artifacts/Arbitrum_RescueAdapter.sol/Arbitrum_RescueAdapter.json +1 -1
  28. package/dist/evm/artifacts/Arbitrum_SendTokensAdapter.sol/Arbitrum_SendTokensAdapter.json +1 -1
  29. package/dist/evm/artifacts/Arbitrum_SpokePool.sol/Arbitrum_SpokePool.json +1 -1
  30. package/dist/evm/artifacts/Arbitrum_WithdrawalHelper.sol/Arbitrum_WithdrawalHelper.json +1 -1
  31. package/dist/evm/artifacts/Base_Adapter.sol/Base_Adapter.json +1 -1
  32. package/dist/evm/artifacts/Blast_Adapter.sol/Blast_Adapter.json +1 -1
  33. package/dist/evm/artifacts/Blast_SpokePool.sol/Blast_SpokePool.json +1 -1
  34. package/dist/evm/artifacts/Boba_SpokePool.sol/Boba_SpokePool.json +1 -1
  35. package/dist/evm/artifacts/CCTPInterfaces.sol/ITokenMessengerV2.json +1 -1
  36. package/dist/evm/artifacts/CCTPInterfaces.sol/ITokenMinter.json +1 -1
  37. package/dist/evm/artifacts/Cher_SpokePool.sol/Cher_SpokePool.json +1 -1
  38. package/dist/evm/artifacts/CircleCCTPAdapter.sol/CircleDomainIds.json +1 -1
  39. package/dist/evm/artifacts/CounterfactualDepositCCTP.sol/CounterfactualDepositCCTP.json +1 -1
  40. package/dist/evm/artifacts/CounterfactualDepositSpokePool.sol/CounterfactualDepositSpokePool.json +1 -1
  41. package/dist/evm/artifacts/CounterfactualDepositSpokePoolTr.sol/CounterfactualDepositSpokePoolTr.json +1 -0
  42. package/dist/evm/artifacts/DoctorWho_Adapter.sol/DoctorWho_Adapter.json +1 -1
  43. package/dist/evm/artifacts/DstOFTHandler.sol/DstOFTHandler.json +1 -1
  44. package/dist/evm/artifacts/Ethereum_SpokePool.sol/Ethereum_SpokePool.json +1 -1
  45. package/dist/evm/artifacts/HubPoolTestBase.sol/MockAddressWhitelist.json +1 -1
  46. package/dist/evm/artifacts/HubPoolTestBase.sol/MockFinder.json +1 -1
  47. package/dist/evm/artifacts/HubPoolTestBase.sol/MockIdentifierWhitelist.json +1 -1
  48. package/dist/evm/artifacts/HubPoolTestBase.sol/MockLpTokenFactory.json +1 -1
  49. package/dist/evm/artifacts/HubPoolTestBase.sol/MockOptimisticOracle.json +1 -1
  50. package/dist/evm/artifacts/HubPoolTestBase.sol/MockStore.json +1 -1
  51. package/dist/evm/artifacts/Ink_SpokePool.sol/Ink_SpokePool.json +1 -1
  52. package/dist/evm/artifacts/Lens_SpokePool.sol/Lens_SpokePool.json +1 -1
  53. package/dist/evm/artifacts/Linea_Adapter.sol/Linea_Adapter.json +1 -1
  54. package/dist/evm/artifacts/Linea_SpokePool.sol/Linea_SpokePool.json +1 -1
  55. package/dist/evm/artifacts/Lisk_Adapter.sol/Lisk_Adapter.json +1 -1
  56. package/dist/evm/artifacts/Lisk_SpokePool.sol/Lisk_SpokePool.json +1 -1
  57. package/dist/evm/artifacts/MockBedrockStandardBridge.sol/MockBedrockCrossDomainMessenger.json +1 -1
  58. package/dist/evm/artifacts/MockBedrockStandardBridge.sol/MockBedrockL1StandardBridge.json +1 -1
  59. package/dist/evm/artifacts/MockBedrockStandardBridge.sol/MockBedrockL2StandardBridge.json +1 -1
  60. package/dist/evm/artifacts/MockCCTP.sol/MockCCTPMessageTransmitter.json +1 -1
  61. package/dist/evm/artifacts/MockCCTP.sol/MockCCTPMessenger.json +1 -1
  62. package/dist/evm/artifacts/MockCCTP.sol/MockCCTPMessengerV2.json +1 -1
  63. package/dist/evm/artifacts/MockCCTP.sol/MockCCTPMinter.json +1 -1
  64. package/dist/evm/artifacts/MockOptimism_SpokePool.sol/MockOptimism_SpokePool.json +1 -1
  65. package/dist/evm/artifacts/MockSpokePool.sol/MockSpokePool.json +1 -1
  66. package/dist/evm/artifacts/MockSpokePoolV2.sol/MockSpokePoolV2.json +1 -1
  67. package/dist/evm/artifacts/MockTronUSDT.sol/MockTronUSDT.json +1 -0
  68. package/dist/evm/artifacts/Mode_Adapter.sol/Mode_Adapter.json +1 -1
  69. package/dist/evm/artifacts/MulticallHandler.sol/MulticallHandler.json +1 -1
  70. package/dist/evm/artifacts/OP_Adapter.sol/OP_Adapter.json +1 -1
  71. package/dist/evm/artifacts/OP_SpokePool.sol/OP_SpokePool.json +1 -1
  72. package/dist/evm/artifacts/Optimism_Adapter.sol/Optimism_Adapter.json +1 -1
  73. package/dist/evm/artifacts/Optimism_SpokePool.sol/Optimism_SpokePool.json +1 -1
  74. package/dist/evm/artifacts/Ovm_SpokePool.sol/Ovm_SpokePool.json +1 -1
  75. package/dist/evm/artifacts/Ovm_WithdrawalHelper.sol/Ovm_WithdrawalHelper.json +1 -1
  76. package/dist/evm/artifacts/PermissionedMulticallHandler.sol/PermissionedMulticallHandler.json +1 -1
  77. package/dist/evm/artifacts/PolygonZkEVM_SpokePool.sol/PolygonZkEVM_SpokePool.json +1 -1
  78. package/dist/evm/artifacts/Polygon_Adapter.sol/Polygon_Adapter.json +1 -1
  79. package/dist/evm/artifacts/Polygon_SpokePool.sol/Polygon_SpokePool.json +1 -1
  80. package/dist/evm/artifacts/SP1AutoVerifier.sol/SP1AutoVerifier.json +1 -1
  81. package/dist/evm/artifacts/Scroll_SpokePool.sol/Scroll_SpokePool.json +1 -1
  82. package/dist/evm/artifacts/Solana_Adapter.sol/Solana_Adapter.json +1 -1
  83. package/dist/evm/artifacts/SpokePool.sol/SpokePool.json +1 -1
  84. package/dist/evm/artifacts/SpokePoolPeriphery.sol/SpokePoolPeriphery.json +1 -1
  85. package/dist/evm/artifacts/SpokePoolPeriphery.sol/SwapProxy.json +1 -1
  86. package/dist/evm/artifacts/SponsoredCCTPDstPeriphery.sol/SponsoredCCTPDstPeriphery.json +1 -1
  87. package/dist/evm/artifacts/SponsoredCCTPInterface.sol/SponsoredCCTPInterface.json +1 -1
  88. package/dist/evm/artifacts/SponsoredCCTPSrcPeriphery.sol/SponsoredCCTPSrcPeriphery.json +1 -1
  89. package/dist/evm/artifacts/SponsoredOFTSrcPeriphery.sol/SponsoredOFTSrcPeriphery.json +1 -1
  90. package/dist/evm/artifacts/TronTransferLib.sol/TronTransferLib.json +1 -0
  91. package/dist/evm/artifacts/Tron_SpokePool.sol/Tron_SpokePool.json +1 -0
  92. package/dist/evm/artifacts/Universal_Adapter.sol/Universal_Adapter.json +1 -1
  93. package/dist/evm/artifacts/Universal_SpokePool.sol/Universal_SpokePool.json +1 -1
  94. package/dist/evm/artifacts/WithdrawImplementation.sol/WithdrawImplementation.json +1 -1
  95. package/dist/evm/artifacts/WithdrawImplementationTron.sol/WithdrawImplementationTron.json +1 -0
  96. package/dist/evm/artifacts/WorldChain_SpokePool.sol/WorldChain_SpokePool.json +1 -1
  97. package/dist/evm/artifacts/ZkStack_Adapter.sol/ZkStack_Adapter.json +1 -1
  98. package/dist/evm/artifacts/ZkStack_CustomGasToken_Adapter.sol/ZkStack_CustomGasToken_Adapter.json +1 -1
  99. package/dist/evm/artifacts/ZkSync_SpokePool.sol/ZkSync_SpokePool.json +1 -1
  100. package/dist/evm/artifacts/Zora_Adapter.sol/Zora_Adapter.json +1 -1
  101. package/dist/evm/artifacts/eraVM_EIP7702.sol/SimpleContract.json +1 -1
  102. package/dist/evm/artifacts/eraVM_EIP7702.sol/SpokePoolEIP7702Test.json +1 -1
  103. package/dist/evm/artifacts/eraVM_EIP7702.sol/TestableMockSpokePool.json +1 -1
  104. package/package.json +3 -3
@@ -1 +1 @@
1
- {"abi":[{"type":"constructor","inputs":[{"name":"_cctpMessageTransmitter","type":"address","internalType":"address"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_donationBox","type":"address","internalType":"address"},{"name":"_baseToken","type":"address","internalType":"address"},{"name":"_multicallHandler","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"AUTHORIZED_FUNDED_FLOW_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DIRECT_CALLER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FUNDS_SWEEPER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"PERMISSIONED_BOT_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"baseToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"cctpMessageTransmitter","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMessageTransmitterV2"}],"stateMutability":"view"},{"type":"function","name":"directReceiveMessage","inputs":[{"name":"quote","type":"tuple","internalType":"struct SponsoredCCTPInterface.SponsoredCCTPQuote","components":[{"name":"sourceDomain","type":"uint32","internalType":"uint32"},{"name":"destinationDomain","type":"uint32","internalType":"uint32"},{"name":"mintRecipient","type":"bytes32","internalType":"bytes32"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"burnToken","type":"bytes32","internalType":"bytes32"},{"name":"destinationCaller","type":"bytes32","internalType":"bytes32"},{"name":"maxFee","type":"uint256","internalType":"uint256"},{"name":"minFinalityThreshold","type":"uint32","internalType":"uint32"},{"name":"nonce","type":"bytes32","internalType":"bytes32"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","internalType":"uint256"},{"name":"finalRecipient","type":"bytes32","internalType":"bytes32"},{"name":"finalToken","type":"bytes32","internalType":"bytes32"},{"name":"destinationDex","type":"uint32","internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","internalType":"uint8"},{"name":"executionMode","type":"uint8","internalType":"uint8"},{"name":"actionData","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"emergencyReceiveMessage","inputs":[{"name":"message","type":"bytes","internalType":"bytes"},{"name":"attestation","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"hyperCoreModule","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"multicallHandler","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"quoteDeadlineBuffer","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"receiveMessage","inputs":[{"name":"message","type":"bytes","internalType":"bytes"},{"name":"attestation","type":"bytes","internalType":"bytes"},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setQuoteDeadlineBuffer","inputs":[{"name":"_quoteDeadlineBuffer","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSigner","inputs":[{"name":"_signer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"usedNonces","inputs":[{"name":"nonce","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"validateMessage","inputs":[{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"ArbitraryActionsExecuted","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"initialToken","type":"address","indexed":true,"internalType":"address"},{"name":"initialAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"address","indexed":true,"internalType":"address"},{"name":"finalAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EmergencyReceiveMessage","inputs":[{"name":"nonce","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"finalRecipent","type":"address","indexed":false,"internalType":"address"},{"name":"finalToken","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SponsoredCCTPDirectExecution","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"SponsoredDepositForBurn","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"CCTPMessageTransmitterFailed","inputs":[]},{"type":"error","name":"FundedFlowNotAuthorized","inputs":[]},{"type":"error","name":"InvalidBurnToken","inputs":[]},{"type":"error","name":"InvalidBytes32","inputs":[]},{"type":"error","name":"InvalidDeadline","inputs":[]},{"type":"error","name":"InvalidDirectHandler","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidNonce","inputs":[]},{"type":"error","name":"InvalidSignature","inputs":[]},{"type":"error","name":"InvalidSourceDomain","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OutOfBounds","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]}],"bytecode":"0x6101003461032357601f6191da38819003918201601f19168301916001600160401b0383118484101761030f5780849260a0946040528339810103126103235761004881610327565b61005460208301610327565b9161006160408201610327565b610079608061007260608501610327565b9301610327565b60015f5560405190916162f98083016001600160401b0381118482101761030f576040928492612e8184396001600160a01b039081168252861660208201520301905ff08015610304576001600160a01b03166080527f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef65f8181525f5160206191ba5f395f51905f526020527fcf7720576cdb70176b3017d893bcb89ba0f36ed0261d4350fd0180e938b3bace80549082905590915f51602061917a5f395f51905f528380a47f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f5f8181525f5160206191ba5f395f51905f526020527f176c3a4e1b4d1d61213187c0dde7f83e2e2c933a339cb5403b4090bc2f0aa49b80549082905590915f51602061917a5f395f51905f528380a47f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d8794995f8181525f5160206191ba5f395f51905f526020527fc2bbb88da029d1ef2e193d87ca6c1679455bd9c1e99d2e95c312005c0bf4d1d880549082905590915f51602061917a5f395f51905f528380a460a05260e0526001600160a01b0390811660c0527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0080546001600160a01b031916929091169190911790556107087fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f01556102983361033b565b50604051612abc90816103c5823960805181818161022e0152611d86015260a051818181610883015281816122b6015261282b015260c05181818161096b01528181610ca10152610f35015260e051818181610afc01528181610de30152818161101e015261183d0152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b51906001600160a01b038216820361032357565b6001600160a01b0381165f9081525f51602061919a5f395f51905f52602052604090205460ff166103bf576001600160a01b03165f8181525f51602061919a5f395f51905f5260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f9056fe60806040526004361015610030575b361561002e573461002a57610022366110fb565b602081519101f35b5f80fd5b005b5f3560e01c806301ffc9a7146101af57806309cfd675146101aa5780631b1062b8146101a557806321081d3c146101a0578063238ac9331461019b578063248a9ca3146101965780632561efb214610191578063277e661d1461018c5780632f2ff15d14610187578063351711201461018257806336568abe1461017d578063490e662f146101785780634b3b029b146101735780634f7d9d2e1461016e578063657cad8a146101695780636c19e783146101645780638c73eb041461015f57806391d148541461015a57806393de311914610155578063a217fddf14610150578063c55dae631461014b578063d4d35af814610146578063d547741f146101415763feb617240361000e57610ba7565b610b5a565b610b20565b610add565b610ac3565b6109ee565b61098f565b61094c565b6108a7565b610864565b610828565b6107ee565b6107b4565b61076c565b61061c565b61059b565b610545565b6104f9565b6104ba565b610475565b61043b565b610368565b61020f565b3461002a57602036600319011261002a5760043563ffffffff60e01b811680910361002a57602090637965db0b60e01b81149081156101f4575b506040519015158152f35b6301ffc9a760e01b1490505f6101e9565b5f91031261002a57565b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761028257604052565b610252565b90601f8019910116810190811067ffffffffffffffff82111761028257604052565b604051906102b961024083610287565b565b604051906102b961010083610287565b604051906102b9608083610287565b604051906102b9606083610287565b604051906102b9604083610287565b67ffffffffffffffff811161028257601f01601f191660200190565b929192610320826102f8565b9161032e6040519384610287565b82948184528183011161002a578281602093845f960137010152565b9080601f8301121561002a5781602061036593359101610314565b90565b3461002a57606036600319011261002a5760043567ffffffffffffffff811161002a5761039990369060040161034a565b60243567ffffffffffffffff811161002a576103b990369060040161034a565b906044359167ffffffffffffffff831161002a576103de61041093369060040161034a565b916103e761111e565b60017fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d10055610c72565b5f7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1005560015f555f80f35b3461002a575f36600319011261002a5760206040517f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f8152f35b3461002a575f36600319011261002a5760206001600160a01b037fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f005416604051908152f35b3461002a57602036600319011261002a5760206104f16004355f525f516020612a675f395f51905f52602052600160405f20015490565b604051908152f35b3461002a57602036600319011261002a5760043561051561111e565b61051d611988565b7fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f015560015f55005b3461002a57602036600319011261002a5760043567ffffffffffffffff811161002a5761058061057b602092369060040161034a565b611a9a565b6040519015158152f35b6001600160a01b0381160361002a57565b3461002a57604036600319011261002a5761002e6024356004356105be8261058a565b6105e86105e3825f525f516020612a675f395f51905f52602052600160405f20015490565b611a46565b611b50565b63ffffffff81160361002a57565b35906102b9826105ed565b60ff81160361002a57565b35906102b982610606565b3461002a57602036600319011261002a5760043567ffffffffffffffff811161002a57610240600319823603011261002a576106566102a9565b610662826004016105fb565b8152610670602483016105fb565b602082015260448201356040820152606482013560608201526084820135608082015260a482013560a082015260c482013560c08201526106b360e483016105fb565b60e08201526101048201356101008201526101248201356101208201526101448201356101408201526101648201356101608201526101848201356101808201526101a48201356101a082015261070d6101c483016105fb565b6101c08201526107206101e48301610611565b6101e08201526107336102048301610611565b61020082015261022482013567ffffffffffffffff811161002a5761002e926004610761923692010161034a565b610220820152610d97565b3461002a57604036600319011261002a5760043560243561078c8161058a565b336001600160a01b038216036107a55761002e91611c25565b63334bd91960e11b5f5260045ffd5b3461002a575f36600319011261002a5760206040517fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1008152f35b3461002a575f36600319011261002a5760206040517f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef68152f35b3461002a575f36600319011261002a5760207fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0154604051908152f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a57602036600319011261002a576001600160a01b036004356108cc8161058a565b6108d461111e565b6108dc611988565b167fffffffffffffffffffffffff00000000000000000000000000000000000000007fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f005416177fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f005560015f555f80f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a57604036600319011261002a57602060ff6109e26024356004356109b68261058a565b5f525f516020612a675f395f51905f52845260405f20906001600160a01b03165f5260205260405f2090565b54166040519015158152f35b3461002a57604036600319011261002a5760043567ffffffffffffffff811161002a57610a1f90369060040161034a565b60243567ffffffffffffffff811161002a57610a3f90369060040161034a565b610a4761111e565b335f9081527fcf7720576cdb70176b3017d893bcb89ba0f36ed0261d4350fd0180e938b3bacd602052604090205460ff1615610a8c57610a8691610f06565b60015f55005b63e2517d3f60e01b5f52336004527f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef660245260445ffd5b3461002a575f36600319011261002a5760206040515f8152f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a575f36600319011261002a5760206040517f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d8794998152f35b3461002a57604036600319011261002a5761002e602435600435610b7d8261058a565b610ba26105e3825f525f516020612a675f395f51905f52602052600160405f20015490565b611c25565b3461002a57602036600319011261002a576004355f527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f02602052602060ff60405f2054166040519015158152f35b9081602091031261002a5751801515810361002a5790565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9091610c4861036593604084526040840190610c0d565b916020818403910152610c0d565b6040513d5f823e3d90fd5b906020610365928181520190610c0d565b906020610c949160405180938192630afd9fa560e31b83528660048401610c31565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610d92575f91610d73575b5015610d645760405163277e661d60e01b815260208180610cf58560048301610c61565b0381305afa5f9181610d33575b50610d0c57505050565b15610d2f576102b991610d21610d2a9261126c565b929091826113bc565b6118b9565b5050565b610d5691925060203d602011610d5d575b610d4e8183610287565b810190610bf5565b905f610d02565b503d610d44565b6368c2a52360e11b5f5260045ffd5b610d8c915060203d602011610d5d57610d4e8183610287565b5f610cd1565b610c56565b610d9f61111e565b60017fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d10055610dcb6119d7565b610dd86080820151611c02565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016911603610ec35761010081019081515f527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0260205260ff60405f205416610eb457610e8891515f527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f02602052610e8360405f20600160ff19825416179055565b611727565b5f7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d100556102b960015f55565b633ab3447f60e11b5f5260045ffd5b6372ba210360e11b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5f19810191908211610ef457565b610ed2565b91908203918211610ef457565b906020610f289160405180938192630afd9fa560e31b83528660048401610c31565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610d92575f916110dc575b50156110b85760405163277e661d60e01b815260208180610f898560048301610c61565b0381305afa5f91816110bb575b50610f9f575050565b156110b857610fce7f1f46a1a2dc661ca8c3c13ebcec8d8dbefdf24d5f9c9b5fe909f1b8036c719e7e9161126c565b6110b361010083019161101961100c84515f527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0260205260405f2090565b805460ff19166001179055565b6110837f00000000000000000000000000000000000000000000000000000000000000009161107c61018087019561107460606110568951611c02565b990198611064858b51610ef9565b906001600160a01b038816611ccf565b519551611c02565b9551610ef9565b9060405194859485909493926001600160a01b039081606094608085019885521660208401521660408201520152565b0390a1565b50565b6110d591925060203d602011610d5d57610d4e8183610287565b905f610f96565b6110f5915060203d602011610d5d57610d4e8183610287565b5f610f65565b6111126111179161110a61111e565b36905f610314565b611d7b565b9060015f55565b60025f541461002a5760025f55565b6111356102a9565b905f82525f60208301525f60408301525f60608301525f60808301525f60a08301525f60c08301525f60e08301525f6101008301525f6101208301525f6101408301525f6101608301525f6101808301525f6101a08301525f6101c08301525f6101e08301525f6102008301526060610220830152565b81601f8201121561002a578051906111c3826102f8565b926111d16040519485610287565b8284526020838301011161002a57815f9260208093018386015e8301015290565b906101408282031261002a5781519260208301519260408101519260608201519260808301519260a08101519260c082015161122d816105ed565b9260e083015161123c81610606565b9261010081015161124c81610606565b9261012082015167ffffffffffffffff811161002a5761036592016111ac565b906112d761127861112d565b9261128f61128582611dc0565b63ffffffff168552565b6112a861129b82611ddf565b63ffffffff166020860152565b6112b181611dff565b60a08501526112cf6112c282611def565b63ffffffff1660e0860152565b805190611ef5565b906112e182611e0f565b60408401526112ef82611e1f565b60608401526112fd82611e2f565b608084015261130b82611e3f565b60c084015261137b61136d6102006113628661134461133561132c89611e4f565b98805190611f4f565b602080825183010191016111f2565b610220999e989d969b94998b9294989d93969b0152019060ff169052565b60ff166101e08d0152565b63ffffffff166101c08b0152565b6101a0890152610180880152610160870152610140860152610120850152610100840152565b9060018201809211610ef457565b91908201809211610ef457565b6115976115936001600160a01b037fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f005416936113fc845163ffffffff1690565b602085015163ffffffff16611496604087015191611488606089015189608081015160a08201519061143a60e060c085015194015163ffffffff1690565b93604051988997602089019b8c96929363ffffffff95919998948660e09894816101008c019d168b521660208a015260408901526060880152608087015260a086015260c085015216910152565b03601f198101835282610287565b5190209461010085019561148861158a885161012089019861156b8a5161148861014084015193610160810151906101808101516101a08201516114e26101c084015163ffffffff1690565b906114f26101e085015160ff1690565b9261022061150561020087015160ff1690565b95015160208151910120956040519a8b9960208b019d8e96909a9998949560ff9687956101209a9563ffffffff956101408c019f8c5260208c015260408b015260608a0152608089015260a08801521660c08601521660e0840152166101008201520152565b5190206040805160208101958652908101919091529182906060820190565b51902090611f7c565b1590565b611651576115d76115d083515f527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0260205260405f2090565b5460ff1690565b610eb457517fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0154611607916113af565b42116116425761100c6102b991515f527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0260205260405f2090565b631da7447960e21b5f5260045ffd5b638baa579f60e01b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b60ff1660028110156116835790565b611660565b60028210156116835752565b9060028210156116835752565b60e0809180518452602081015160208501526001600160a01b0360408201511660408501526001600160a01b03606082015116606085015263ffffffff60808201511660808501526116fb60a082015160a0860190611694565b60c081015160c08501520151910152565b6101009093929193611723816101208101966116a1565b0152565b6117355f6060830151610ef9565b6101008201516117dc61174c610180850151611c02565b916117d361175e6101a0870151611c02565b6117c66117736101c089015163ffffffff1690565b916117b66101408a0151976117956117906101e08d015160ff1690565b611674565b9661179e6102bb565b9a8b5260208b01526001600160a01b031660408a0152565b6001600160a01b03166060880152565b63ffffffff166080860152565b60a08401611688565b60c08201525f60e08201526102008201600160ff6117fb835160ff1690565b161480156118a2575b156118755761187090600160ff6118256102206102b9970151935160ff1690565b1614906118306102cb565b9384526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020850152604084015215156060830152565b611e80565b506111126101606110b893015191611488604051938492632498b83f60e21b60208501526024840161170c565b50600260ff6118b2835160ff1690565b1614611804565b906118c8816060840151610ef9565b908261196a6101008201516119616118e4610180850151611c02565b6119546118f56101a0870151611c02565b61194461190a6101c089015163ffffffff1690565b936119236117906101e06101408c01519b015160ff1690565b9661192c6102bb565b9b8c5260208c01526001600160a01b031660408b0152565b6001600160a01b03166060890152565b63ffffffff166080870152565b60a08501611688565b60c083015260e08201526102008201600160ff6117fb835160ff1690565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16156119c057565b63e2517d3f60e01b5f52336004525f60245260445ffd5b335f9081527fc2bbb88da029d1ef2e193d87ca6c1679455bd9c1e99d2e95c312005c0bf4d1d7602052604090205460ff1615611a0f57565b63e2517d3f60e01b5f52336004527f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d87949960245260445ffd5b805f525f516020612a675f395f51905f5260205260ff611a7a3360405f20906001600160a01b03165f5260205260405f2090565b541615611a845750565b63e2517d3f60e01b5f523360045260245260445ffd5b6102d8815110611b4b57611ab5611ab082611e5f565b611c02565b6001600160a01b0330911603611b4b578051806094108160941802811891828203918211610ef457611b389282611335926020611af4611b26966102f8565b93611b026040519586610287565b838552611b0e846102f8565b8583019390601f19013685370101905e805190611f4f565b505050509594509250505060a01c1590565b9081611b42575090565b60a01c15905090565b505f90565b805f525f516020612a675f395f51905f5260205260ff611b848360405f20906001600160a01b03165f5260205260405f2090565b5416611bfc57805f525f516020612a675f395f51905f52602052611bbc8260405f20906001600160a01b03165f5260205260405f2090565b805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b8060a01c611c16576001600160a01b031690565b6379ec0ed760e11b5f5260045ffd5b805f525f516020612a675f395f51905f5260205260ff611c598360405f20906001600160a01b03165f5260205260405f2090565b541615611bfc57805f525f516020612a675f395f51905f52602052611c928260405f20906001600160a01b03165f5260205260405f2090565b805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b916001600160a01b036040519263a9059cbb60e01b5f521660045260245260205f60448180865af160015f5114811615611d2d575b60409190915215611d125750565b635274afe760e01b5f526001600160a01b031660045260245ffd5b6001811516611d43573d15833b15151616611d04565b503d5f823e3d90fd5b3d15611d76573d90611d5d826102f8565b91611d6b6040519384610287565b82523d5f602084013e565b606090565b5f80916020815191017f00000000000000000000000000000000000000000000000000000000000000005af4611daf611d4c565b9015611db85790565b602081519101fd5b6008815110611dd0576008015190565b632d0483c560e21b5f5260045ffd5b600c815110611dd057600c015190565b6090815110611dd0576090015190565b608c815110611dd057608c015190565b6044815110611dd0576044015190565b6064815110611dd0576064015190565b6024815110611dd0576024015190565b60a4815110611dd05760a4015190565b60c4815110611dd05760c4015190565b60d8815110611dd05760d8015190565b610100810192916102b991906116a1565b611e89816121cf565b90818152815115610d2f576110b891611ea56060830151151590565b15611ed0575051604051635956364d60e01b6020820152906111129082906114889060248301611e6f565b60405163f7e02c2160e01b602082015291506111129082906114889060248301611e6f565b908151908180821091180218806094108160941802811891828203918211610ef4576020611f22836102f8565b93611f306040519586610287565b838552611f3c846102f8565b8583019390601f19013685370101905e90565b9081519081808210911802188060e4108160e41802811891828203918211610ef4576020611f22836102f8565b90611f87838261257c565b600581959295101561168357159384612032575b508315611fa9575b50505090565b5f935090611488611fe18594936040519283916020830195630b135d3f60e11b87526024840152604060448401526064830190610c0d565b51915afa611fed611d4c565b81612024575b81612002575b505f8080611fa3565b905060208180518101031261002a5760200151630b135d3f60e11b145f611ff9565b905060208151101590611ff3565b6001600160a01b0384811691161493505f611f9b565b60405190610100820182811067ffffffffffffffff821117610282576040525f60e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b67ffffffffffffffff81116102825760051b60200190565b60208183031261002a5780519067ffffffffffffffff821161002a57019080601f8301121561002a578151916120e383612096565b926120f16040519485610287565b80845260208085019160051b8301019183831161002a5760208101915b83831061211d57505050505090565b825167ffffffffffffffff811161002a578201906040828703601f19011261002a576040519061214c82610266565b602083015161215a8161058a565b825260408301519167ffffffffffffffff831161002a57612183886020809695819601016111ac565b8382015281520192019161210e565b9081602091031261002a575190565b9061036594936080936001600160a01b03809316845260208401521660408201528160608201520190610c0d565b6121d7612048565b506121ef6040820151602080825183010191016120ae565b602082019061221761220b61220b84516001600160a01b031690565b6001600160a01b031690565b6040516370a0823160e01b815230600482015290602090829060249082905afa908115610d92575f9161255d575b5061226161220b61220b6060875101516001600160a01b031690565b6040516370a0823160e01b81523060048201529290602090849060249082905afa928315610d92575f9361253c575b506001600160a01b036122f86122b061220b87516001600160a01b031690565b926122e07f000000000000000000000000000000000000000000000000000000000000000094858a5151916125b1565b8751606001513091906001600160a01b0316906127af565b911661230b85516001600160a01b031690565b9186515191803b1561002a5761233d935f809460405196879586948593633a5be8cb60e01b85523091600486016121a1565b03925af18015610d9257612522575b5061236461220b61220b85516001600160a01b031690565b6040516370a0823160e01b81523060048201529190602090839060249082905afa918215610d92575f92612501575b500361246557506123c16123ae82516001600160a01b031690565b6060845101906001600160a01b03169052565b815151905b6123d982845160e0815191015190612921565b60e084510152818351528251907fb88fc27be67e678ffb77faf8f8bb00d39b66b4845e4f7ec1e623b0f15abd52136001600160a01b03612425602085015193516001600160a01b031690565b9461245e61243f606087519701516001600160a01b031690565b9183604051948594169816968360209093929193604081019481520152565b0390a45190565b61248161220b61220b60608651016001600160a01b0390511690565b6040516370a0823160e01b81523060048201529190602090839060249082905afa918215610d92575f926124d0575b508082106124c7576124c191610ef9565b906123c6565b50505f906123c6565b6124f391925060203d6020116124fa575b6124eb8183610287565b810190612192565b905f6124b0565b503d6124e1565b61251b91925060203d6020116124fa576124eb8183610287565b905f612393565b806125305f61253693610287565b80610205565b5f61234c565b61255691935060203d6020116124fa576124eb8183610287565b915f612290565b612576915060203d6020116124fa576124eb8183610287565b5f612245565b9060418151145f146125a8576125a491602082015190606060408401519301515f1a906129c0565b9091565b50505f90600290565b905f806001600160a01b0361263e95946040519582602088019663a9059cbb60e01b88521660248801526044870152604486526125ef606487610287565b169260405194612600604087610287565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af1612638611d4c565b91612a3b565b8051908115918215612654575b50501561002a57565b6126679250602080918301019101610bf5565b5f8061264b565b9061267882612096565b6126856040519182610287565b8281528092612696601f1991612096565b015f5b8181106126a557505050565b60405190606082019180831067ffffffffffffffff841117610282576020926040525f81526060838201525f604082015282828601015201612699565b80518210156126f65760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b6020815260608101918051926040602084015283518091526080830190602060808260051b8601019501915f905b82821061275e575050505090604060206103659301519101906001600160a01b03169052565b90919295602080600192607f198982030185528951906001600160a01b03825116815260408061279b858501516060878601526060850190610c0d565b930151910152980192019201909291612738565b929183516127c46127bf826113a1565b61266e565b925f5b828110612895575060405163ef8738d360e01b60208201526001600160a01b039182166024820152908316604482015293945061148893610365939261288692909161286a919061281981606481018a565b6128216102da565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681529060208201525f604082015261286382876126e2565b52846126e2565b506128736102e9565b9283526001600160a01b03166020830152565b6040519283916020830161270a565b806128b36128a56001938a6126e2565b51516001600160a01b031690565b60206128bf838b6126e2565b5101516128dc6128cd6102da565b6001600160a01b039093168352565b60208201525f60408201526128f182886126e2565b526128fc81876126e2565b50016127c7565b811561290d570490565b634e487b7160e01b5f52601260045260245ffd5b818101809111610ef457670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610ef457808201809211610ef4575f198201918211610ef45761296a91612903565b670de0b6b3a76400000390670de0b6b3a76400008211610ef457670de0b6b3a7640000808202908282041482151715610ef457826129b66129b1610365956129bb946113af565b610ee6565b612903565b610ef9565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612a30576020935f9360ff60809460405194855216868401526040830152606082015282805260015afa15610d92575f516001600160a01b03811615612a2857905f90565b505f90600190565b505050505f90600390565b91925015612a5757815115612a4e575090565b3b1561002a5790565b50805190811561002a57602001fdfe02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212200b5efbe62cdba64c609e338567414d94d4b0076789e13c820f722f885b11a29f64736f6c634300081e003360c0346100d157601f6162f938819003918201601f19168301916001600160401b038311848410176100d55780849260409485528339810103126100d157610052602061004b836100e9565b92016100e9565b6001600160a01b0390911660805260a0526040516161fb90816100fe82396080518181816108be01528181610bae015281816117540152818161198f01528181612a3d01528181614009015281816140ff015281816150e2015261531a015260a051818181610678015281816107f001528181610d5d01526143080152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100d15756fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146125fb57508063037a06a4146123b057806304c73f6014612392578063057f0370146122d85780631f74a0b51461226657806321081d3c1461222b578063248a9ca3146121eb5780632e748b211461208f5780632f2ff15d14612044578063319adf9f14611c7c57806336568abe14611c3757806337710e2014611be25780633b1c6a011461188b5780633cf3a02514611856578063490e662f1461181b5780634b3b029b146117e0578063502a82e214611723578063521c98ba14610fe95780635956364d14610f9d57806369b97ac714610f7f57806379c7b60b14610f2a57806379c7f28914610e2b57806390a0827b14610df257806391d1485414610d9b5780639262e0fc14610d0257806396cc2cfb14610aae578063a217fddf14610a92578063a38d8fa6146108e2578063a4b672b61461089e578063af5de6f914610814578063c55dae63146107d0578063ccbedaec14610551578063d06e28ed14610464578063d4d35af814610429578063d547741f146103d5578063e38b73a9146103b9578063ea0aaf241461035b578063eb84e7f21461022b5763f7e02c21146101cb575f80fd5b3461022857610100366003190112610228576101e6366127bd565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d10054156102195761021690614fb3565b80f35b63cd6d8f7d60e01b8252600482fd5b80fd5b50346102285760203660031901126102285760408160e09260c0835161025081612781565b82815282602082015282858201528260608201528260808201528260a0820152015260043581527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0360205220604051906102a982612781565b6001600160a01b03815416918281526001600160401b0360018301548160208401916001600160a01b038116835263ffffffff60026040870197828460a01c168952606088019360c01c84520154966001600160a01b036080880195858a16875260ff60c060a08b019a828d60401c1615158c52019a60481c1615158a526040519a8b52511660208a015251166040880152511660608601525116608084015251151560a083015251151560c0820152f35b50346102285760203660031901126102285760206103b061037a61264e565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0560205260405f2090565b54604051908152f35b5034610228578060031936011261022857602060405160068152f35b5034610228576040366003190112610228576104256004356103f5612664565b9061042061041b825f525f5160206161a65f395f51905f52602052600160405f20015490565b6130a9565b613885565b5080f35b503461022857806003193601126102285760206040517f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d8794998152f35b50346102285760403660031901126102285761047e61264e565b602435906fffffffffffffffffffffffffffffffff8216809203610542576104a461303a565b826104ae826131c5565b63ffffffff6001600160a01b03608083015116915116813b1561054257829160448392604051948593849263435354d360e01b845260048401528960248401525af180156105465761052d575b50506001600160a01b03167f02366c0d102495be1ee805b749be7baebab4fc0710c6d3f38751f1a22bd711648380a380f35b816105379161279c565b61054257825f6104fb565b8280fd5b6040513d84823e3d90fd5b5034610228576060366003190112610228578061056c61264e565b6105746126df565b61057c6126f5565b90610585612fcb565b6105bf836001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b544311156107245743610602846001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b556001600160a01b036001610647856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b015416926001600160401b038216610729575b50506001600160401b03811661066e575050f35b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683525f5160206161865f395f51905f526020526001600160401b0360046040852001541690823b1561072457604051633ded719760e11b81526001600160401b0392831660048201523360248201529116604482015263ffffffff60648201529082908290608490829084905af18015610546576107135750f35b8161071d9161279c565b6102285780f35b505050fd5b6001600160a01b031684525f5160206161865f395f51905f526020526001600160401b03600460408620015416833b156107cc57604051633ded719760e11b81526001600160401b0391821660048201523360248201529116604482015263ffffffff6064820152838160848183875af19081156107c15784911561065a57816107b29161279c565b6107bd57825f61065a565b5050fd5b6040513d86823e3d90fd5b8480fd5b503461022857806003193601126102285760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102285760203660031901126102285760206001600160a01b0361084061083b61264e565b6130f6565b610c236040516108528583018261279c565b818152848101916155638339519020604051908482019260ff60f81b84523060601b6021840152603583015260558201526055815261089260758261279c565b51902016604051908152f35b503461022857806003193601126102285760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461022857608036600319011261022857806108fd61264e565b6109056126df565b60443563ffffffff8116809103610724576001600160a01b0361092661268d565b9361092f612fcb565b1684525f5160206161865f395f51905f5260205263ffffffff6001600160401b03600460408720015416931663ffffffff811480610a85575b15610a2c5750506109b2916001600160401b036109c092604051923360208501526040840152166060820152606081526109a360808261279c565b60405192839160208301614f91565b03601f19810183528261279c565b7333333333333333333333333333333333333333333b15610a295781610a0291604051809381926317938e1360e01b835260206004840152602483019061270b565b0381837333333333333333333333333333333333333333335af18015610546576107135750f35b50fd5b610a80926109b2946001600160401b0392604051943360208701528860408701526060860152608085015260a08401521660c082015260c08152610a7160e08261279c565b60405192839160208301614f6e565b6109c0565b5063ffffffff8214610968565b5034610228578060031936011261022857602090604051908152f35b503461022857604036600319011261022857610ac861264e565b90610ad161303a565b610ada82612d3c565b610ae3836131c5565b92610af760e083510151840b602435614ee9565b946020840190610b206001600160401b03835116886001600160401b0360a089015116916137b0565b15610cd957859650610b62846001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b610b6d8482546128a5565b90556001600160a01b038416807f410b9a8c926b6c439cdceb39c0bb8f829838a25bc5a26af9d4c263d1313cc46b6020604051878152a26001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610cd55760405163f3fef3a360e01b81526001600160a01b0383166004820152602481018690529088908290604490829084905af18015610cca5785918991610cad575b50506001600160401b0391610c3d6001600160a01b0392608060e09601928484511690613229565b511692511694510151850b93813b15610ca957604051639c45c34b60e01b81526001600160a01b039490941660048501526001600160401b0316602484015260448301919091525f9290920b60648201529082908290608490829084905af18015610546576107135750f35b8580fd5b81925090610cba9161279c565b610cc65783875f610c15565b8680fd5b6040513d8a823e3d90fd5b8780fd5b6377e88bc960e11b86526001600160a01b0384166004526001600160401b038716602452604486fd5b50346102285761012036600319011261022857610d1e366127bd565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1005415610219576001600160a01b036060820151166001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145f14610d8d5761021690613938565b610216906101043590614306565b5034610228576040366003190112610228576001600160a01b036040610dbf612664565b9260043581525f5160206161a65f395f51905f526020522091165f52602052602060ff60405f2054166040519015158152f35b503461022857604036600319011261022857610216610e0f61264e565b610e17612fcb565b602435906001600160a01b03339116613229565b50346102285760203660031901126102285760a0610e89610e4a61264e565b610e52612d12565b506001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b6001600160a01b03600160405192610ea08461272f565b63ffffffff8154818116865260ff8160201c1615156020870152818160281c16604087015260481c1660608501520154166080820152610f2860405180926001600160a01b036080809263ffffffff815116855260208101511515602086015263ffffffff604082015116604086015263ffffffff6060820151166060860152015116910152565bf35b50346102285760203660031901126102285760206103b0610f4961264e565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b50346102285780600319360112610228576020604051620f42408152f35b50346102285761010036600319011261022857610fb9366127bd565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d10054156102195761021690613938565b50346102285760a03660031901126102285761100361264e565b61100b61267a565b906110146126a0565b6064356001600160401b03811681036107cc57608435916001600160401b0383168303610ca957611043612f7c565b61104b612c59565b50611054612c1b565b508580604051602081019063ffffffff891682526020815261107760408261279c565b519061080c5afa611086612ce3565b9015611714578051810160208101916020818303126116f0576020810151906001600160401b0382116117105701906101009082900312610cd557604051916110ce83612765565b60208201516001600160401b0381116117105760209083010181601f8201121561171057898151916110ff83612cc8565b9261110d604051948561279c565b8084528460208284010111610542578060208093018386015e83010152835260408201516001600160401b038111611710576020908301019080601f83011215611710578151916001600160401b0383116116dc578260051b9060405193611178602084018661279c565b845260208085019282010192831161170c57602001905b8282106116f4575050506020830152610100906111ae606082016132a7565b60408401526111bf608082016154a2565b60608401526111d060a082016154a2565b60808401526111e160c082016154b6565b60a08401526111f260e082016154b6565b60c0840152015180880b8082036116f0576112129160e08401528461370e565b50604051916112208361274a565b825263ffffffff87166020830152821515604083015260608201526001600160401b03831660808201526001600160401b03841660a08201526001600160a01b03851687525f5160206161865f395f51905f5260205260408720815180518051906001600160401b0382116116dc5781908b61129c8654612c90565b601f81116116a1575b5050602090601f831160011461163f578c92611634575b50508160011b915f199060031b1c19161782555b6001820160208201518051906001600160401b03821161162057680100000000000000008211611620576020908c84548486558085106115d4575b505001918b5260208b20908b5b8160021c811061158f57506003198116810380611533575b505050506001600160a01b03947f12cf3d04179e82c834f3ee7169a5df80651aa65530127f9ddb04c8cd8224435397946001600160401b039460a06006868896600260809d9901888060408401511616891982541617815560608201517fffffffff0000000000000000000000000000000000000000ffffffffffffffff7bffffffffffffffffffffffffffffffffffffffff000000000000000083549260401b16911617905560038201908c808f83015116166001600160a01b0319835416178255848101519082547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff74ff000000000000000000000000000000000000000060e075ff00000000000000000000000000000000000000000060c086015160a81b1694015160b01b76ff000000000000000000000000000000000000000000001694891b16911617171790556114c16004820188806020880151161689198254161781556040860151151568ff0000000000000000825491151560401b169068ff00000000000000001916179055565b60608401516005820155019185808c8301511616861984541617835501516fffffffffffffffff000000000000000082549160401b16906fffffffffffffffff0000000000000000191617905563ffffffff6040519a168a52151560208a01521660408801521660608601521692a280f35b928c938d5b8181106115515750505060021c015584848460a0611330565b90919460206115856001926001600160401b03895116908560031b6001600160401b03809160031b9316831b921b19161790565b9601929101611538565b8c8d5b600481106115a7575083820155600101611318565b85519095916001916020916001600160401b0360068a901b81811b199092169216901b1792019501611592565b838287611600945220600380870160021c820192601888831b1680611607575b500160021c0190613922565b8c5f61130b565b5f198501908154905f19908a03851b1c1690555f6115f4565b634e487b7160e01b8c52604160045260248cfd5b015190505f806112bc565b858d52818d209250601f1984168d5b8181106116895750908460019594939210611671575b505050811b0182556112d0565b01515f1960f88460031b161c191690555f8080611664565b9293602060018192878601518155019501930161164e565b602082886116cb945220601f850160051c810191602086106116d2575b601f0160051c0190613922565b8b5f6112a5565b90915081906116be565b634e487b7160e01b8b52604160045260248bfd5b8880fd5b60208091611701846132a7565b81520191019061118f565b8b80fd5b8980fd5b639b0c335d60e01b8752600487fd5b50346102285760403660031901126102285761173d61264e565b602435611748612fcb565b826001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016931692803b156117dc5760405163f3fef3a360e01b81526001600160a01b0385166004820152602481018490529082908290604490829084905af18015610546576117c7575b5050610216913390613229565b816117d19161279c565b61054257825f6117ba565b5080fd5b503461022857806003193601126102285760206040517f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef68152f35b503461022857806003193601126102285760206040517fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1008152f35b503461022857602036600319011261022857611870612fcb565b80808080600435335af1611882612ce3565b50156102285780f35b5034610228576060366003190112610228576118a5612664565b6044356001600160a01b03811691828203611ad6576118c261303a565b6118cb82612d3c565b916118d58261313e565b6107cc576040830151156107cc5760016001600160401b0360808501511601906001600160401b038211611bce5790859161193961191a60e087510151850b8461370e565b509560208101936001600160401b0360a08187511693015116916137b0565b1561054257611978906001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0560205260405f2090565b6119838582546128a5565b90556001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156105425760405163f3fef3a360e01b81526001600160a01b0387166004820152602481018690529083908290604490829084905af1908115611bc3578391611bae575b5050516001600160401b031680611ada575050611a128284615204565b736b9e773128f453f5c2c60935ee2de2cbc5390a243b15611ad6578360405163611e2a2d60e11b81526001600160a01b038316600482015283602482015263ffffffff6044820152818160648183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561054657611ac1575b50506001600160a01b03905b60405192835216907f2b348084e891b20d449a69f90114c5ab7bf7c84d64c25445c8ab440d469a6b4d602060043592a480f35b81611acb9161279c565b611ad657835f611a82565b8380fd5b611b2281611af486611aee6109b29561519d565b896151c3565b604051906001600160a01b0386166020830152604082015260016060820152606081526109a360808261279c565b7333333333333333333333333333333333333333333b156117dc5781611b6491604051809381926317938e1360e01b835260206004840152602483019061270b565b0381837333333333333333333333333333333333333333335af1801561054657611b99575b50506001600160a01b0390611a8e565b81611ba39161279c565b611ad657835f611b89565b81611bb89161279c565b6117dc57815f6119f5565b6040513d85823e3d90fd5b634e487b7160e01b86526011600452602486fd5b50346102285760203660031901126102285760206103b0611c0161264e565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b503461022857604036600319011261022857611c51612664565b336001600160a01b03821603611c6d5761042590600435613885565b63334bd91960e11b8252600482fd5b5034610228576020366003190112610228576001600160a01b03611c9e61264e565b611ca6612c59565b501681525f5160206161865f395f51905f52602052604081209060405190611ccd8261274a565b604051611cd981612765565b60405184548184611ce983612c90565b80835292600181169081156120255750600114611fe4575b611d0d9250038261279c565b815260018401604051808260208294549384815201908652602086209286905b806003830110611f9257611d63945491818110611f78575b818110611f5b575b818110611f3e575b10611f30575b50038261279c565b60208201526001600160a01b0360028501546001600160401b038116604084015260401c16606082015260038401546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c820b60e0820152825260048301549260208301906001600160401b038516825260ff604085019560401c161515855260066005820154916060860192835201549460808501926001600160401b03871684526001600160401b0360a087019760401c1687526040519560208752519460c06020880152611e4a865161010060e08a01526101e089019061270b565b60208088015189830360df19016101008b015280518084529282019892910190835b818110611f1157505050926001600160401b03809693899a969360e0878c610120866040819c0151169101528c6101406001600160a01b036060840151169101528c6101606001600160a01b036080840151169101528c61018060ff60a0840151169101528c6101a060ff60c0840151169101520151900b6101c08b0152511660408901525115156060880152516080870152511660a0850152511660c08301520390f35b82516001600160401b03168a526020998a019990920191600101611e6c565b60c01c81526020015f611d5b565b9260206001916001600160401b038560801c168152019301611d55565b9260206001916001600160401b038560401c168152019301611d4d565b9260206001916001600160401b0385168152019301611d45565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019401920184929391611d2d565b5090868552602085209085915b818310612009575050906020611d0d92820101611d01565b6020919350806001915483858801015201910190918392611ff1565b60209250611d0d94915060ff191682840152151560051b820101611d01565b503461022857604036600319011261022857610425600435612064612664565b9061208a61041b825f525f5160206161a65f395f51905f52602052600160405f20015490565b6137de565b5034610228576080366003190112610228576120a961264e565b6120b16126df565b6120b96126f5565b90606435926fffffffffffffffffffffffffffffffff84168094036107cc576120e061303a565b846120ea826131c5565b926001600160a01b0360808501511693843b15610542576121746101048492836001600160401b03806040519788968795636f0d192560e11b875260048701906001600160a01b036080809263ffffffff815116855260208101511515602086015263ffffffff604082015116604086015263ffffffff6060820151166060860152015116910152565b169a8b60a485015216988960c48401528b60e48401525af18015610546576121d6575b50506001600160a01b036040917f500d805a349357fe5d4759fe052d79bd744b82c8452837f52a7456ec7d3d751c93835195865260208601521692a380f35b816121e09161279c565b6107cc57845f612197565b50346102285760203660031901126102285760206122236004355f525f5160206161a65f395f51905f52602052600160405f20015490565b604051908152f35b503461022857806003193601126102285760206040517f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f8152f35b50346102285760603660031901126102285761228061264e565b6024356001600160401b0381116105425761229f9036906004016126af565b9092604435906001600160401b0382116102285760206122238686866122c836600489016126af565b9390926122d361303a565b6128b2565b503461238e57604036600319011261238e576122f261264e565b906024356122fe612fcb565b6001600160a01b036080612311856131c5565b015116803b1561238e576040516390a0827b60e01b81526001600160a01b038516600482015260248101839052905f908290604490829084905af180156123835761236d575b5061021691926001600160a01b03339116613229565b61021692505f61237c9161279c565b5f91612357565b6040513d5f823e3d90fd5b5f80fd5b3461238e575f36600319011261238e5760206040516305f5e1008152f35b3461238e5760a036600319011261238e576123c961264e565b6123d161267a565b6123d96126a0565b916123e261268d565b926084359163ffffffff831680930361238e576123fe81612d3c565b50612407612f7c565b6001600160a01b03600161244b836001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b0154169081156125aa575b63ffffffff604051956124688761272f565b16948581526001600160a01b03600181602084019615159586885263ffffffff604086019b1697888c52606086018a8152836080880193169c8d845263ffffffff6124e38a6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b985116926cffffffff00000000000000000068ffffffff000000000064ff000000008b549351151560201b16935160281b16935160481b16936cffffffff000000000000000000199168ffffffffffffffffff1916171617171785555116920191166001600160a01b031982541617905561255d8661313e565b1561238e577ff0dcc8957a27613dd82c92382ad37254b9744169d0caa5f3873cfec7ba794eb9936080936001600160a01b03936040519788526020880152604087015260608601521692a3005b90506125b5816130f6565b604051610c238082018281106001600160401b038211176125e7578291615563833903905ff580156123835790612456565b634e487b7160e01b5f52604160045260245ffd5b3461238e57602036600319011261238e576004359063ffffffff60e01b821680920361238e57602091637965db0b60e01b811490811561263d575b5015158152f35b6301ffc9a760e01b14905083612636565b600435906001600160a01b038216820361238e57565b602435906001600160a01b038216820361238e57565b6024359063ffffffff8216820361238e57565b6064359063ffffffff8216820361238e57565b60443590811515820361238e57565b9181601f8401121561238e578235916001600160401b03831161238e576020808501948460051b01011161238e57565b602435906001600160401b038216820361238e57565b604435906001600160401b038216820361238e57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b60a081019081106001600160401b038211176125e757604052565b60c081019081106001600160401b038211176125e757604052565b61010081019081106001600160401b038211176125e757604052565b60e081019081106001600160401b038211176125e757604052565b90601f801991011681019081106001600160401b038211176125e757604052565b61010090600319011261238e57604051906127d782612765565b81600435815260243560208201526044356001600160a01b038116810361238e5760408201526064356001600160a01b038116810361238e57606082015260843563ffffffff8116810361238e57608082015260a435600281101561238e5760a082015260c43560c082015260e060e435910152565b919081101561285d5760051b0190565b634e487b7160e01b5f52603260045260245ffd5b906001600160401b03809116911601906001600160401b03821161289157565b634e487b7160e01b5f52601160045260245ffd5b9190820180921161289157565b9194935f935f9682810361238e576128fa856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b5443111561238e57929061290d85612d3c565b916080612919876131c5565b01916001600160a01b038351169461294060208601966001600160401b03885116906132bb565b965f975b818d10612bb0575b50508a159250612ba59150505743612994866001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b556001600160401b038416806129ae575b50505050505050565b6129c36129e69560e0855101515f0b9061370e565b6001600160401b03869792975116906001600160401b0360a087015116916137b0565b15612b865750612a26856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b612a318582546128a5565b90556001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166001600160a01b03861690803b1561238e5760405163f3fef3a360e01b81526001600160a01b038316600482015260248101879052905f908290604490829084905af1801561238357612b5a575b506001600160a01b0382612ace876001600160401b03948460e097511690613229565b511693511691510151850b93823b15610ca957604051639c45c34b60e01b81526001600160a01b0390911660048201526001600160401b03909116602482015260448101929092525f9290920b606482015290829082908183816084810103925af1801561054657612b45575b80808080806129a5565b612b5082809261279c565b6102285780612b3b565b6001600160401b0391975060e092612b7a5f6001600160a01b039361279c565b5f989093509150612aab565b6001600160a01b03866377e88bc960e11b5f521660045260245260445ffd5b505f96505050505050565b612bbf8d83879f9b969761284d565b3590612bcc8a858861284d565b356001600160401b038116810361238e57612bf592898d926001600160a01b038b51169261339d565b94909115612c1357600191612c0991612871565b98019b9392612944565b989c5061294c565b60405190612c2882612765565b5f60e08360608152606060208201528260408201528260608201528260808201528260a08201528260c08201520152565b60405190612c668261274a565b5f60a083612c72612c1b565b81528260208201528260408201528260608201528260808201520152565b90600182811c92168015612cbe575b6020831014612caa57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612c9f565b6001600160401b0381116125e757601f01601f191660200190565b3d15612d0d573d90612cf482612cc8565b91612d02604051938461279c565b82523d5f602084013e565b606090565b60405190612d1f8261272f565b5f6080838281528260208201528260408201528260608201520152565b6001600160a01b0390612d4d612c59565b50165f525f5160206161865f395f51905f5260205260405f2060405191612d738361274a565b60405191612d8083612765565b6040518154815f612d9083612c90565b8083529260018116908115612f5d5750600114612f1c575b612db49250038261279c565b8352600181019360405180602087549182815201965f5260205f20905f915b816003840110612ed05797612e149284926001600160a01b039798999a5491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208601528160028401546001600160401b038116604088015260401c1660608601526001600160401b0360066003850154946080880197858716895260ff8760a01c1660a082015260c081019660ff8160a81c16885260b01c5f0b60e0820152845260ff6004820154848116602087015260401c1615156040850152600581015460608501520154818116608084015260401c1660a082015293511615159081612ec2575b501561238e57565b60ff9150511615155f612eba565b97600160806004928b546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019901920191612dd3565b5090835f5260205f20905f915b818310612f41575050906020612db492820101612da8565b6020919350806001915483858801015201910190918392612f29565b60209250612db494915060ff191682840152151560051b820101612da8565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615612fb457565b63e2517d3f60e01b5f52336004525f60245260445ffd5b335f9081527f176c3a4e1b4d1d61213187c0dde7f83e2e2c933a339cb5403b4090bc2f0aa49a602052604090205460ff161561300357565b63e2517d3f60e01b5f52336004527f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f60245260445ffd5b335f9081527fcf7720576cdb70176b3017d893bcb89ba0f36ed0261d4350fd0180e938b3bacd602052604090205460ff161561307257565b63e2517d3f60e01b5f52336004527f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef660245260445ffd5b805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0333165f5260205260ff60405f205416156130e05750565b63e2517d3f60e01b5f523360045260245260445ffd5b60405160208101913060601b83526bffffffffffffffffffffffff199060601b1660348201526028815261312b60488261279c565b51902090565b5190811515820361238e57565b5f80916040516001600160a01b0360208201921682526020815261316360408261279c565b51906108105afa613172612ce3565b90156131b65760208180518101031261238e5760405190602082018281106001600160401b038211176125e7576040526131ae90602001613131565b809152151590565b6313dd7ccd60e31b5f5260045ffd5b6131d190610e52612d12565b906001600160a01b036001604051936131e98561272f565b63ffffffff8154818116875260ff8160201c1615156020880152818160281c16604088015260481c16606086015201541691826080820152911561238e57565b916001600160a01b036040519263a9059cbb60e01b5f521660045260245260205f60448180865af19060015f5114821615613286575b6040521561326a5750565b6001600160a01b0390635274afe760e01b5f521660045260245ffd5b90600181151661329e57823b15153d1516169061325f565b503d5f823e3d90fd5b51906001600160401b038216820361238e57565b5f919082916001600160401b03604051916001600160a01b036020840194168452166040820152604081526132f160608261279c565b51906108015afa613300612ce3565b901561336e5760608180518101031261238e576040519060608201918083106001600160401b038411176125e7576001600160401b03926040526040613367606061334d602086016132a7565b9485855261335c8482016132a7565b6020860152016132a7565b9101521690565b639d2c8fcb60e01b5f5260045ffd5b906001600160401b03809116911603906001600160401b03821161289157565b959291909395805f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0360205260405f206001600160a01b0381541695861561369657600282019889549860ff8a60481c166136875760018401956001600160a01b03875493166001600160a01b03841603613674575f9161341e8b61313e565b15613654575b8360c01c9c8c60ff6001600160401b0382169160401c165f146135fa57508d8e966001600160401b03811682115f146135f2576134609161337d565b9c5b6001600160401b038086169716928784111561238e578f8f96613488906134909261337d565b969f82612871565b936001600160401b038516106135dd575069ff0000000000000000001916690100000000000000000017905560019c6134c89161337d565b99815160e001515f0b6134db908d61370e565b50986001600160a01b031691602001516001600160401b031691803b1561238e575f928360849263ffffffff6001600160401b036040519889978896633ded719760e11b885260048801526024870152169889604486015260a01c1660648401525af18015612383577f53b9d5645f8b7ccd861ebd6036860fd21716451d1f238cb3720f12f3c49b0c43946040946001600160a01b039384936135cd575b5080613594575b5054169554169582519182526020820152a4565b82825416887f5adc50a7f1e65d6b397176e0807a39bd0ba27293997500a57ca2cc1359583ccb6020868d5416948a51908152a45f613580565b5f6135d79161279c565b5f613579565b5f9f508f9e509c505050505050505050505050565b50505f613460565b909d95809d96806001600160401b038316105f14613649576136269161361f9161337d565b809e612871565b816001600160401b038216115f1461364257505b9c8d95613462565b905061363a565b50506136265f61361f565b915060408101511561238e576001600160401b0360808201511691613424565b8563358d72d160e01b5f5260045260245ffd5b63f7348a7960e01b5f5260045ffd5b631a40316d60e01b5f5260045ffd5b60ff16604d811161289157600a0a90565b9190820391821161289157565b81156136cd570490565b634e487b7160e01b5f52601260045260245ffd5b90620f4240820291808304620f4240149015171561289157565b8181029291811591840414171561289157565b9190805f0b80155f1461372c5750506001600160401b03821691905b565b5f81131561375757506137446137539160ff166136a5565b6001600160401b0384166136fb565b9190565b9050607f198114612891576001600160401b039261377c613785925f0360ff166136a5565b938491166128a5565b5f198101908111612891576137ac6137a5846001600160401b03936136c3565b93846136fb565b1690565b6137d66001600160401b0392936137d084936137cb8161519d565b6132bb565b94612871565b169116101590565b805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f205416155f1461387f57805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260405f20600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f2054165f1461387f57805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260405f2060ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b81811061392d575050565b5f8155600101613922565b6060810151906001600160a01b035f921691825f525f5160206161865f395f51905f5260205260405f206040519061396f8261274a565b60405161397b81612765565b6040518254815f61398b83612c90565b80835292600181169081156142e757506001146142a6575b6139af9250038261279c565b815260018201604051808260208294549384815201905f5260205f20925f905b80600383011061425457613a01945491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208201526001600160a01b0360028301546001600160401b038116604084015260401c16606082015260038201546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e08201528252600481015492600660208401926001600160401b038616845260ff604086019660401c16151586526005810154606086015201549260808101936001600160401b03811685526001600160401b0360a083019160401c1681525f946040880196613ad66001600160a01b0389511661313e565b15614187575b5050865192612710613b02613af760e08b01968751906128a5565b60c08b0151906136fb565b049484519580871161417f575b50856140dd575b613b4e613b35613b27888c516128a5565b60e0875101515f0b90614ee9565b919094826001600160401b0380865116925116916137b0565b1561408e575085613fff575b6001600160401b0390613b9d8b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b613ba88882546128a5565b9055511692613bd460e06001600160a01b038a511692510151830b63ffffffff60808c01511694614ee9565b9390916001600160401b03891695866001600160401b0387161115613ff057908392918d97969594613cb6575b50505050507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c319161337d565b5080613c74575b5050613c6f6001600160a01b0360208701519551169551915192604051938493846040919493926060820195825260208201520152565b0390a4565b60208701517f5adc50a7f1e65d6b397176e0807a39bd0ba27293997500a57ca2cc1359583ccb60206001600160a01b0389511693604051908152a4855f613c38565b809791929394959697155f14613e47575083613cd191615204565b308103613d905750736b9e773128f453f5c2c60935ee2de2cbc5390a243b156105425760405191630acb7f4b60e21b835260048301526024820152818160448183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561054657908a94939291613d6d575b50507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c31915b9181975f80613c01565b818093949697989550613d7f9161279c565b610228579081899396959492613d3a565b91736b9e773128f453f5c2c60935ee2de2cbc5390a243b15611ad6576040519263611e2a2d60e11b8452600484015260248301526044820152818160648183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561054657908a94939291613e24575b50507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c3191613d63565b818093949697989550613e369161279c565b610228579081899396959492613df7565b9096959493613e5c90611aee8395949561519d565b308314801590613fe2575b613e9b575b505050507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c3191613d63565b90919293949550613eac898661337d565b9163ffffffff811480613fda575b15613f8b5750916001600160401b03613ef4926109b2946040519360208501526040840152166060820152606081526109a360808261279c565b7333333333333333333333333333333333333333333b156117dc5781613f3691604051809381926317938e1360e01b835260206004840152602483019061270b565b0381837333333333333333333333333333333333333333335af1801561054657908a94939291613f68575b8080613e6c565b818093949697989550613f7a9161279c565b610228579081899396959492613f61565b613fd5926109b294926001600160401b039260405194602086015287604086015263ffffffff6060860152608085015260a08401521660c082015260c08152610a7160e08261279c565b613ef4565b506001613eba565b5063ffffffff821415613e67565b6306506d5560e11b8552600485fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b1561238e5760405163f3fef3a360e01b81526001600160a01b038c16600482015260248101889052905f908290604490829084905af1801561238357614072575b50613b5a565b61407f9192505f9061279c565b5f906001600160401b0361406c565b989450505050507f8d61555dcf69ba745e97fdea78e2652d9cdd464ca521faad482fe796f6d5841c9350602092508291506140c881614fb3565b0151926001600160401b0360405191168152a3565b6140ec868b60208c015161530b565b613b16576040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048201529095506020816024818d5afa908115612383575f9161414d575b5094613b16565b90506020813d602011614177575b816141686020938361279c565b8101031261238e57515f614146565b3d915061415b565b95505f613b0f565b9091955060a088015160028110156142405715908180614233575b61421657811561420c575b506141c457516001600160401b0316935f80613adc565b505050505061372a92507f31604f5790fbed7a37471cea010a8f08483441a6e1235ac48bb59337439a630d60206001600160a01b0381850151935116604051908152a2614fb3565b905051155f6141ad565b6001600160a01b038851166320a2097d60e11b5f5260045260245ffd5b5060c089015115156141a2565b634e487b7160e01b5f52602160045260245ffd5b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c60608201520194019201849293916139cf565b5090845f5260205f20905f915b8183106142cb5750509060206139af928201016139a3565b60209193508060019154838588010152019101909183926142b3565b602092506139af94915060ff191682840152151560051b8201016139a3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811691825f525f5160206161865f395f51905f5260205260405f20604051936143578561274a565b60405161436381612765565b6040518354815f61437383612c90565b8083529260018116908115614eca5750600114614e89575b6143979250038261279c565b815260018301604051808260208294549384815201905f5260205f20925f905b806003830110614e37576143e9945491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208201526001600160a01b0360028401546001600160401b038116604084015260401c16606082015260038301546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e08201528552600660048301549260ff60208801946001600160401b038116865260401c1615156040880152600581015460608801520154956001600160401b03871660808701526001600160401b0360a087019760401c16875260608401936001600160a01b038551165f525f5160206161865f395f51905f5260205260405f2094604051956144d58761274a565b6040516144e181612765565b6040518254815f6144f183612c90565b8083529260018116908115614e185750600114614dd7575b6145159250038261279c565b815260018201604051808260208294549384815201905f5260205f20925f905b806003830110614d8557614567945491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208201526001600160a01b0360028301546001600160401b038116604084015260401c16606082015260038201546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e082015287526001600160401b03600660048301549282841660208b015260ff60408b019460401c1615158452600581015460608b0152015481811660808a015260401c1660a08801526146206001600160a01b038351166131c5565b9360408401916146396001600160a01b0384511661313e565b15614cd6575b5083519760e085019182519160c087019a8b5115159361465e916128a5565b8d5160e001515f0b61466f91614ee9565b90508d5160c0015160ff16825160c0015160ff169061468d926154d8565b9215614ca85782915b5f8063ffffffff8b511660405160208101918252602081526146b960408261279c565b51906108085afa6146c8612ce3565b9015614c995760208180518101031261238e57898f9360ff60a06147169260206001600160401b036146fe8261471c99016132a7565b16950197885115155f14614c8e5750510151166136a5565b906136fb565b825115614c445763ffffffff6147378160608d0151166153ee565b16620f4240019081620f4240116128915761476d620f4240916147166001600160401b039463ffffffff8f6040015116906128a5565b0416908c51908115155f14614c3c5750915b5115614bfb576305f5e100811015614bbb57505f5b6147b46147a186516136e1565b6147ae8a518851906128a5565b906128a5565b5f19810191908211612891576147ae6147da926147d48b518951906128a5565b906136c3565b6064808302838104821484151715612891578211614b415750505085518c5160e001515f0b61480891614ee9565b9d8e8b9c929c516001600160401b031691516001600160401b03169061482d926137b0565b15614af1579c8a9b9c9d85516001600160a01b03169287516001600160a01b03169460808a015163ffffffff16925115156040519561486b87612781565b8652602086019687526040860193845260608601916001600160401b03169586835260808101936001600160401b03169788855260a0820192835260c08201938d5f86526020019687515f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0360205260405f2093516001600160a01b03166001600160a01b031684546001600160a01b0319161784556001840192516001600160a01b03166001600160a01b031683546001600160a01b03191617835551908254905160c01b7fffffffffffffffff000000000000000000000000000000000000000000000000169160a01b77ffffffff000000000000000000000000000000000000000016906001600160a01b03161717905560020192516001600160401b03166001600160401b03166001600160401b03198454161783555115156149d490839068ff0000000000000000825491151560401b169068ff00000000000000001916179055565b51151581549060481b69ff000000000000000000169069ff00000000000000000019161790555194516001600160a01b031695516001600160a01b03169651935160405194855260208501526001600160401b031660408401526060830152608082015260a07f550576b2f9e0ac12dfd5dd2d5743b5b7f11f34302b5f6bec6ad60db81bd6a91891a4608001516001600160a01b03169283614a7592613229565b516001600160401b0316935160e001515f0b93813b1561238e57604051639c45c34b60e01b81526001600160a01b039490941660048501526001600160401b0316602484015260448301919091525f92830b60648301529091908290608490829084905af1801561238357614ae75750565b5f61372a9161279c565b505050505094509550509250508161372a947f8d61555dcf69ba745e97fdea78e2652d9cdd464ca521faad482fe796f6d5841c602080870151926001600160401b0360405191168152a352614fb3565b999c5099509c50505050509450809650602091500151906001600160a01b0384511692818101809111612891575f1981019081116128915781156136cd5761372a977fc8f90125c6a36c77a571201afc10310420481ab4895fadabb596d0ba71c22e3e92604092049082519182526020820152a352613938565b6305f5e0ff19016001600160401b03811161289157614bf5614bea6001600160401b036305f5e10093166136e1565b6305f5e0ff906128a5565b04614794565b6305f5e100811115614c0e57505f614794565b6305f5e100036001600160401b03811161289157614bf5614bea6001600160401b036305f5e10093166136e1565b90509161477f565b63ffffffff614c588160608d0151166153ee565b16620f42400390620f424082116128915761476d620f4240916147166001600160401b039463ffffffff8f6040015116906136b6565b9050510151166136a5565b635cffc5fb60e11b5f5260045ffd5b8161271003612710811161289157612710614ccd6001600160401b03928387166136fb565b04169291614696565b60a085015160028110156142405715908180614d78575b614d5b578115614d51575b50614d03575f61463f565b5094509450955050925061372a94507f31604f5790fbed7a37471cea010a8f08483441a6e1235ac48bb59337439a630d60206001600160a01b0381870151935116604051908152a252614fb3565b905051155f614cf8565b6001600160a01b038451166320a2097d60e11b5f5260045260245ffd5b5060c08601511515614ced565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019401920184929391614535565b5090845f5260205f20905f915b818310614dfc57505090602061451592820101614509565b6020919350806001915483858801015201910190918392614de4565b6020925061451594915060ff191682840152151560051b820101614509565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c60608201520194019201849293916143b7565b5090855f5260205f20905f915b818310614eae5750509060206143979282010161438b565b6020919350806001915483858801015201910190918392614e96565b6020925061439794915060ff191682840152151560051b82010161438b565b9190805f0b9081155f14614f15575050815b6001600160401b03811161238e576001600160401b031690565b5f821315614f4d57614f2a915060ff166136a5565b9182156136cd57614f418184614f489306906136b6565b92836136c3565b614efb565b505f0380805f0b0361289157614f68614f489160ff166136a5565b836136fb565b630100000d60e01b8152815160049290919082906020018483015e01015f815290565b6280000360e11b8152815160049290919082906020018483015e01015f815290565b8051612710614fd6614fcb60e08501938451906128a5565b60c0850151906136fb565b0481518181115f146151955750905b8190602084019161500883519460608701956001600160a01b038751169061530b565b1561518e575b806150d8575b7f4755f239bb1b047245415cb917deced72a3ca8baebcef109c396ff332ea6f50f91613c6f6001600160a01b038061504d858a516128a5565b96615065828a51169860408c0199848b511690613229565b6150a2828a51166001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b6150ad8782546128a5565b9055519651169651169651915192604051938493846040919493926060820195825260208201520152565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0385511692803b1561238e5760405163f3fef3a360e01b81526001600160a01b03949094166004850152602484018390525f908490604490829084905af1928315612383577f4755f239bb1b047245415cb917deced72a3ca8baebcef109c396ff332ea6f50f9361517e575b509150615014565b5f6151889161279c565b5f615176565b505f61500e565b905090614fe5565b6001600160401b03166001609d1b01806001609d1b11612891576001600160a01b031690565b60405163a9059cbb60e01b60208201526001600160a01b0392909216602483015260448083019390935291815261372a916151ff60648361279c565b615409565b9060405190602082019063095ea7b360e01b8252736b9e773128f453f5c2c60935ee2de2cbc5390a24602484015260448301526044825261524660648361279c565b5f806001600160a01b0385169284519082855af190615263612ce3565b826152d1575b50816152c6575b501561527a575050565b61372a916151ff60405163095ea7b360e01b6020820152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248201525f6044820152604481526152c060648261279c565b82615409565b90503b15155f615270565b805191925081159182156152e9575b5050905f615269565b819250906020918101031261238e5760206153049101613131565b5f806152e0565b6040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811660048301529092169392909190602082602481885afa918215612383575f926153ba575b508082109485159561537b575b50505050565b7f5180f0ad9e9bd2296de2ee38c85d11c56613fa73f8ee66792f26ac318f1274749260609260405192835260208301526040820152a25f808080615375565b9091506020813d6020116153e6575b816153d66020938361279c565b8101031261238e5751905f615368565b3d91506153c9565b63ffffffff60649116029063ffffffff821691820361289157565b906001600160a01b0361546a92165f806040519361542860408661279c565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1615464612ce3565b91615537565b8051908115918215615480575b50501561238e57565b819250906020918101031261238e57602061549b9101613131565b5f80615477565b51906001600160a01b038216820361238e57565b519060ff8216820361238e57565b9060ff8091169116039060ff821161289157565b9160ff811660ff83168181145f146154f1575050505090565b6001600160401b03949291111561551f576155186155136137ac9486936154c4565b6136a5565b91166136fb565b61553061551385926137ac956154c4565b91166136c3565b919250156155535781511561554a575090565b3b1561238e5790565b50805190811561238e57602001fdfe60a080604052346100455733608052610bd9908161004a8239608051818181607b01528181610187015281816103590152818161065a0152818161070101526108d20152f35b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c8063435354d3146108905780637bdae32e1461069b57806390a0827b146106365780639c45c34b1461030d578063de1a324a146100a25763eba61c0e1461005c575f80fd5b3461009f578060031936011261009f5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b503461009f57366003190161010081126102f55760a01361009f5760405160a0810181811067ffffffffffffffff8211176102f9576040526100e2610961565b918282526024359182151583036102f5576020810192835260443563ffffffff811681036102f1576040820152610117610974565b6060820152608435906001600160a01b03821682036102f1576080015260a43567ffffffffffffffff81168091036102f55760c4359067ffffffffffffffff82168092036102f15760e435946fffffffffffffffffffffffffffffffff86168096036102ed576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102ed5763ffffffff6101bc91166109d3565b935115159281156102de5782156102cf57916102509391600493506040519263ffffffff60208501971687526040840152606083015260808201525f945f60a0830152600260c083015260e082015260e0815261021b6101008261099d565b6020604051948592630100000160e01b83850152518091602485015e8201018281015f8152500301601f19810183528261099d565b7333333333333333333333333333333333333333333b156102cb575f61028a91604051809381926317938e1360e01b835260048301610a00565b0381837333333333333333333333333333333333333333335af180156102c0576102b2575080f35b6102be91505f9061099d565b005b6040513d5f823e3d90fd5b5f80fd5b6313c0a8df60e01b8152600490fd5b63017461b760e71b8152600490fd5b8380fd5b8280fd5b5080fd5b634e487b7160e01b83526041600452602483fd5b503461009f57608036600319011261009f57610327610987565b6024359067ffffffffffffffff82168092036102f1576044359060643580850b90818103610632576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361063257816105b4575050815b67ffffffffffffffff81116105b05767ffffffffffffffff169283156105a15790829185936103c0575b836103bc86610b0c565b5080f35b8061055857506001600160a01b031660405183806020830163095ea7b360e01b8152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248501528560448501526044845261041160648561099d565b83519082865af1610420610b28565b81610529575b508061051f575b156104c7575b5050736b9e773128f453f5c2c60935ee2de2cbc5390a243b156102f55760405190630acb7f4b60e21b8252600482015263ffffffff6024820152818160448183736b9e773128f453f5c2c60935ee2de2cbc5390a245af180156104bc576104a7575b50506103bc905b9050815f80806103b2565b816104b19161099d565b6102f557815f610495565b6040513d84823e3d90fd5b6105189161051360405163095ea7b360e01b6020820152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248201528660448201526044815261050d60648261099d565b82610a7b565b610a7b565b5f80610433565b50813b151561042d565b805180159250821561053e575b50505f610426565b6105519250602080918301019101610a63565b5f80610536565b909192506001609d1b01806001609d1b1161058d5791610588916001600160a01b03806103bc9695169116610a2a565b61049c565b634e487b7160e01b85526011600452602485fd5b6306506d5560e11b8552600485fd5b8480fd5b858213156105f6576105c9915060ff16610b67565b80156105e257808306830392831161058d578204610388565b634e487b7160e01b85526012600452602485fd5b5084038080860b0361058d5761060e9060ff16610b67565b82818102918183041490151761038857634e487b7160e01b85526011600452602485fd5b8580fd5b503461009f57604036600319011261009f57610650610987565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102f55761069890602435906001600160a01b03339116610a2a565b80f35b503461009f57608036600319011261009f578060043567ffffffffffffffff811680910361080d57602435906001600160a01b03821680920361088c576044359167ffffffffffffffff831680930361088a576106f6610974565b926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036105b05763ffffffff602094169263ffffffff841480610882575b156108105761079b93506040519285840152604083015260608201526060815261076960808261099d565b6004604051938492818401906280000360e11b82528051928391018483015e01015f815203601f19810183528261099d565b7333333333333333333333333333333333333333333b1561080d57816107d591604051809381926317938e1360e01b835260048301610a00565b0381837333333333333333333333333333333333333333335af180156104bc576107fc5750f35b816108069161099d565b61009f5780f35b50fd5b61087d93604051938685015286604085015263ffffffff6060850152608084015260a083015260c082015260c0815261084a60e08261099d565b600460405193849281840190630100000d60e01b82528051928391018483015e01015f815203601f19810183528261099d565b61079b565b50600161073e565b505b5050fd5b50346102cb5760403660031901126102cb576108aa610961565b602435906fffffffffffffffffffffffffffffffff82168092036102cb576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102cb576004610906610250926109d3565b926040519063ffffffff602083019516855260408201526040815261092c60608261099d565b6020604051948592630100000b60e01b83850152518091602485015e8201018281015f8152500301601f19810183528261099d565b6004359063ffffffff821682036102cb57565b6064359063ffffffff821682036102cb57565b600435906001600160a01b03821682036102cb57565b90601f8019910116810190811067ffffffffffffffff8211176109bf57604052565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff6127109116019063ffffffff82116109ec57565b634e487b7160e01b5f52601160045260245ffd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b610a61926001600160a01b036040519363a9059cbb60e01b602086015216602484015260448301526044825261051360648361099d565b565b908160209103126102cb575180151581036102cb5790565b906001600160a01b03610adc92165f8060405193610a9a60408661099d565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1610ad6610b28565b91610b78565b8051908115918215610af2575b5050156102cb57565b610b059250602080918301019101610a63565b5f80610ae9565b67ffffffffffffffff169067ffffffffffffffff82116109ec57565b3d15610b62573d9067ffffffffffffffff82116109bf5760405191610b57601f8201601f19166020018461099d565b82523d5f602084013e565b606090565b60ff16604d81116109ec57600a0a90565b91925015610b9457815115610b8b575090565b3b156102cb5790565b5080519081156102cb57602001fdfea2646970667358221220957eb92bf34977f1dbc400ded4a4688729e475d059af2473160b1dcd76c46a2064736f6c634300081e00336c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220b56f4a53d59578206a94ce74308306388bc2e012cfdab9326bc08a23f28b503f64736f6c634300081e0033bd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ffb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800"}
1
+ {"abi":[{"type":"constructor","inputs":[{"name":"_cctpMessageTransmitter","type":"address","internalType":"address"},{"name":"_cctpTokenMessenger","type":"address","internalType":"address"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_donationBox","type":"address","internalType":"address"},{"name":"_baseToken","type":"address","internalType":"address"},{"name":"_multicallHandler","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"AUTHORIZED_FUNDED_FLOW_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DIRECT_CALLER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FUNDS_SWEEPER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"PERMISSIONED_BOT_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"baseToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"cctpMessageTransmitter","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMessageTransmitterV2"}],"stateMutability":"view"},{"type":"function","name":"cctpTokenMessenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ITokenMessengerV2"}],"stateMutability":"view"},{"type":"function","name":"directReceiveMessage","inputs":[{"name":"quote","type":"tuple","internalType":"struct SponsoredCCTPInterface.SponsoredCCTPQuote","components":[{"name":"sourceDomain","type":"uint32","internalType":"uint32"},{"name":"destinationDomain","type":"uint32","internalType":"uint32"},{"name":"mintRecipient","type":"bytes32","internalType":"bytes32"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"burnToken","type":"bytes32","internalType":"bytes32"},{"name":"destinationCaller","type":"bytes32","internalType":"bytes32"},{"name":"maxFee","type":"uint256","internalType":"uint256"},{"name":"minFinalityThreshold","type":"uint32","internalType":"uint32"},{"name":"nonce","type":"bytes32","internalType":"bytes32"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","internalType":"uint256"},{"name":"finalRecipient","type":"bytes32","internalType":"bytes32"},{"name":"finalToken","type":"bytes32","internalType":"bytes32"},{"name":"destinationDex","type":"uint32","internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","internalType":"uint8"},{"name":"executionMode","type":"uint8","internalType":"uint8"},{"name":"actionData","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"emergencyReceiveMessage","inputs":[{"name":"message","type":"bytes","internalType":"bytes"},{"name":"attestation","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"hyperCoreModule","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"multicallHandler","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"quoteDeadlineBuffer","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"receiveMessage","inputs":[{"name":"message","type":"bytes","internalType":"bytes"},{"name":"attestation","type":"bytes","internalType":"bytes"},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setQuoteDeadlineBuffer","inputs":[{"name":"_quoteDeadlineBuffer","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSigner","inputs":[{"name":"_signer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"usedNonces","inputs":[{"name":"nonce","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"validateMessage","inputs":[{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"ArbitraryActionsExecuted","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"initialToken","type":"address","indexed":true,"internalType":"address"},{"name":"initialAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"address","indexed":true,"internalType":"address"},{"name":"finalAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EmergencyReceiveMessage","inputs":[{"name":"nonce","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"finalRecipent","type":"address","indexed":false,"internalType":"address"},{"name":"finalToken","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SponsoredCCTPDirectExecution","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"SponsoredDepositForBurn","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"CCTPMessageTransmitterFailed","inputs":[]},{"type":"error","name":"FundedFlowNotAuthorized","inputs":[]},{"type":"error","name":"InvalidBurnToken","inputs":[]},{"type":"error","name":"InvalidBytes32","inputs":[]},{"type":"error","name":"InvalidDeadline","inputs":[]},{"type":"error","name":"InvalidDirectHandler","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidMintedAmount","inputs":[]},{"type":"error","name":"InvalidMintedToken","inputs":[]},{"type":"error","name":"InvalidNonce","inputs":[]},{"type":"error","name":"InvalidRecipient","inputs":[]},{"type":"error","name":"InvalidSignature","inputs":[]},{"type":"error","name":"InvalidSourceDomain","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OutOfBounds","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]}],"bytecode":"0x6101203461035657601f61976b38819003918201601f19168301916001600160401b038311848410176103425780849260c094604052833981010312610356576100488161035a565b6100546020830161035a565b906100616040840161035a565b9261006e6060820161035a565b61008660a061007f6080850161035a565b930161035a565b60015f5560405190916162f98083016001600160401b0381118482101761034257604092849261341284396001600160a01b039081168252861660208201520301905ff08015610337576001600160a01b03166080527f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef65f8181525f51602061974b5f395f51905f526020527fcf7720576cdb70176b3017d893bcb89ba0f36ed0261d4350fd0180e938b3bace80549082905590915f51602061970b5f395f51905f528380a47f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f5f8181525f51602061974b5f395f51905f526020527f176c3a4e1b4d1d61213187c0dde7f83e2e2c933a339cb5403b4090bc2f0aa49b80549082905590915f51602061970b5f395f51905f528380a47f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d8794995f8181525f51602061974b5f395f51905f526020527fc2bbb88da029d1ef2e193d87ca6c1679455bd9c1e99d2e95c312005c0bf4d1d880549082905590915f51602061970b5f395f51905f528380a460a052610100526001600160a01b0390811660c05290811660e0527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0080546001600160a01b031916929091169190911790556107087fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f01556102ac3361036e565b5060405161301a90816103f8823960805181818161023e01526120cb015260a0518181816108af0152818161268501528181612b220152612d8e015260c05181818161099701528181610ea20152611282015260e051818181610b0e0152610d5e015261010051818181610b6b01528181610e1f0152818161110a015281816112100152611b7f0152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b51906001600160a01b038216820361035657565b6001600160a01b0381165f9081525f51602061972b5f395f51905f52602052604090205460ff166103f2576001600160a01b03165f8181525f51602061972b5f395f51905f5260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f9056fe60806040526004361015610030575b361561002e573461002a5761002236611430565b602081519101f35b5f80fd5b005b5f3560e01c806301ffc9a7146101bf57806309cfd675146101ba5780631b1062b8146101b557806321081d3c146101b0578063238ac933146101ab578063248a9ca3146101a65780632561efb2146101a1578063277e661d1461019c5780632f2ff15d14610197578063351711201461019257806336568abe1461018d578063490e662f146101885780634b3b029b146101835780634f7d9d2e1461017e578063657cad8a146101795780636c19e783146101745780638c73eb041461016f57806391d148541461016a57806393de3119146101655780639748cf7c14610160578063a217fddf1461015b578063c55dae6314610156578063d4d35af814610151578063d547741f1461014c5763feb617240361000e57610c16565b610bc9565b610b8f565b610b4c565b610b32565b610aef565b610a1a565b6109bb565b610978565b6108d3565b610890565b610854565b61081a565b6107e0565b610798565b610648565b6105c7565b610571565b610525565b6104e6565b6104a1565b610467565b610394565b61021f565b3461002a57602036600319011261002a5760043563ffffffff60e01b811680910361002a57602090637965db0b60e01b8114908115610204575b506040519015158152f35b6301ffc9a760e01b1490505f6101f9565b5f91031261002a57565b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761029257604052565b610262565b6060810190811067ffffffffffffffff82111761029257604052565b90601f8019910116810190811067ffffffffffffffff82111761029257604052565b604051906102e5610240836102b3565b565b604051906102e5610100836102b3565b604051906102e56080836102b3565b604051906102e56040836102b3565b604051906102e56060836102b3565b67ffffffffffffffff811161029257601f01601f191660200190565b92919261034c82610324565b9161035a60405193846102b3565b82948184528183011161002a578281602093845f960137010152565b9080601f8301121561002a5781602061039193359101610340565b90565b3461002a57606036600319011261002a5760043567ffffffffffffffff811161002a576103c5903690600401610376565b60243567ffffffffffffffff811161002a576103e5903690600401610376565b906044359167ffffffffffffffff831161002a5761040a61043c933690600401610376565b91610413611453565b60017fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d10055610d39565b5f7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1005560015f555f80f35b3461002a575f36600319011261002a5760206040517f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f8152f35b3461002a575f36600319011261002a5760206001600160a01b037fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f005416604051908152f35b3461002a57602036600319011261002a57602061051d6004355f525f516020612fc55f395f51905f52602052600160405f20015490565b604051908152f35b3461002a57602036600319011261002a57600435610541611453565b610549611ccd565b7fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f015560015f55005b3461002a57602036600319011261002a5760043567ffffffffffffffff811161002a576105ac6105a76020923690600401610376565b611ddf565b6040519015158152f35b6001600160a01b0381160361002a57565b3461002a57604036600319011261002a5761002e6024356004356105ea826105b6565b61061461060f825f525f516020612fc55f395f51905f52602052600160405f20015490565b611d8b565b611e95565b63ffffffff81160361002a57565b35906102e582610619565b60ff81160361002a57565b35906102e582610632565b3461002a57602036600319011261002a5760043567ffffffffffffffff811161002a57610240600319823603011261002a576106826102d5565b61068e82600401610627565b815261069c60248301610627565b602082015260448201356040820152606482013560608201526084820135608082015260a482013560a082015260c482013560c08201526106df60e48301610627565b60e08201526101048201356101008201526101248201356101208201526101448201356101408201526101648201356101608201526101848201356101808201526101a48201356101a08201526107396101c48301610627565b6101c082015261074c6101e4830161063d565b6101e082015261075f610204830161063d565b61020082015261022482013567ffffffffffffffff811161002a5761002e92600461078d9236920101610376565b6102208201526110be565b3461002a57604036600319011261002a576004356024356107b8816105b6565b336001600160a01b038216036107d15761002e91611f6a565b63334bd91960e11b5f5260045ffd5b3461002a575f36600319011261002a5760206040517fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1008152f35b3461002a575f36600319011261002a5760206040517f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef68152f35b3461002a575f36600319011261002a5760207fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0154604051908152f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a57602036600319011261002a576001600160a01b036004356108f8816105b6565b610900611453565b610908611ccd565b167fffffffffffffffffffffffff00000000000000000000000000000000000000007fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f005416177fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f005560015f555f80f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a57604036600319011261002a57602060ff610a0e6024356004356109e2826105b6565b5f525f516020612fc55f395f51905f52845260405f20906001600160a01b03165f5260205260405f2090565b54166040519015158152f35b3461002a57604036600319011261002a5760043567ffffffffffffffff811161002a57610a4b903690600401610376565b60243567ffffffffffffffff811161002a57610a6b903690600401610376565b610a73611453565b335f9081527fcf7720576cdb70176b3017d893bcb89ba0f36ed0261d4350fd0180e938b3bacd602052604090205460ff1615610ab857610ab2916111f9565b60015f55005b63e2517d3f60e01b5f52336004527f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef660245260445ffd5b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a575f36600319011261002a5760206040515f8152f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a575f36600319011261002a5760206040517f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d8794998152f35b3461002a57604036600319011261002a5761002e602435600435610bec826105b6565b610c1161060f825f525f516020612fc55f395f51905f52602052600160405f20015490565b611f6a565b3461002a57602036600319011261002a576004355f527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f02602052602060ff60405f2054166040519015158152f35b9081602091031261002a5751610391816105b6565b6040513d5f823e3d90fd5b9081602091031261002a575190565b9081602091031261002a5751801515810361002a5790565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9091610ce661039193604084526040840190610cab565b916020818403910152610cab565b906020610391928181520190610cab565b634e487b7160e01b5f52601160045260245ffd5b5f19810191908211610d2757565b610d05565b91908203918211610d2757565b906001600160a01b0391610d5b610d4f82612105565b6001600160a01b031690565b837f00000000000000000000000000000000000000000000000000000000000000001693849116036110af576020600493604051948580926332dd704760e21b82525afa928315610fc457610e00936020915f91611092575b50610dbe836121a4565b90610dc884612124565b604051633c502b2f60e11b815263ffffffff90931660048401526024830152909485919082906001600160a01b039082906044820190565b0392165afa8015610fc4576001600160a01b03935f91611063575b50837f0000000000000000000000000000000000000000000000000000000000000000169384911603611054576040516370a0823160e01b815230600482015291602083602481875afa928315610fc4575f9361102e575b506020610e959160405180938192630afd9fa560e31b83528660048401610ccf565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610fc4575f9161100f575b50156110005760405163277e661d60e01b815260208180610ef68560048301610cf4565b0381305afa5f9181610fcf575b50610f0f575050505050565b15610fc957610f1d906115bc565b6040516370a0823160e01b8152306004820152909391929091602090839060249082905afa918215610fc4575f92610f8f575b50610f6990610f63856060860151610d2c565b92610d2c565b03610f8057610f7b6102e593826116f1565b611bfe565b6332270a6b60e01b5f5260045ffd5b610f69919250610fb69060203d602011610fbd575b610fae81836102b3565b810190610c84565b9190610f50565b503d610fa4565b610c79565b50505050565b610ff291925060203d602011610ff9575b610fea81836102b3565b810190610c93565b905f610f03565b503d610fe0565b6368c2a52360e11b5f5260045ffd5b611028915060203d602011610ff957610fea81836102b3565b5f610ed2565b610e9591935061104c602091823d8411610fbd57610fae81836102b3565b939150610e73565b63b5ec391960e01b5f5260045ffd5b611085915060203d60201161108b575b61107d81836102b3565b810190610c64565b5f610e1b565b503d611073565b6110a99150823d841161108b5761107d81836102b3565b5f610db4565b634e46966960e11b5f5260045ffd5b6110c6611453565b60017fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d100556110f2611d1c565b6110ff6080820151611f47565b6001600160a01b03807f0000000000000000000000000000000000000000000000000000000000000000169116036111ea5761010081019081515f527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0260205260ff60405f2054166111db576111af91515f527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f026020526111aa60405f20600160ff19825416179055565b611a69565b5f7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d100556102e560015f55565b633ab3447f60e11b5f5260045ffd5b6372ba210360e11b5f5260045ffd5b6040516370a0823160e01b815230600482015290917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116929091602082602481875afa918215610fc4575f9261140a575b5060206112759160405180938192630afd9fa560e31b83528960048401610ccf565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610fc4575f916113eb575b5015610fc9576040516370a0823160e01b815230600482015290602082602481875afa8015610fc4576112ec925f916113cc575b50610d2c565b9260405163277e661d60e01b81526020818061130b8560048301610cf4565b0381305afa5f91816113ab575b50611324575050505050565b15610fc9577f1f46a1a2dc661ca8c3c13ebcec8d8dbefdf24d5f9c9b5fe909f1b8036c719e7e9361010061135a6113a6936115bc565b506113748361136d610180840151611f47565b8098612014565b01519260405194859485909493926001600160a01b039081606094608085019885521660208401521660408201520152565b0390a1565b6113c591925060203d602011610ff957610fea81836102b3565b905f611318565b6113e5915060203d602011610fbd57610fae81836102b3565b5f6112e6565b611404915060203d602011610ff957610fea81836102b3565b5f6112b2565b611275919250611428602091823d8411610fbd57610fae81836102b3565b929150611253565b61144761144c9161143f611453565b36905f610340565b6120c0565b9060015f55565b60025f541461002a5760025f55565b9060018201809211610d2757565b91908201809211610d2757565b6114856102d5565b905f82525f60208301525f60408301525f60608301525f60808301525f60a08301525f60c08301525f60e08301525f6101008301525f6101208301525f6101408301525f6101608301525f6101808301525f6101a08301525f6101c08301525f6101e08301525f6102008301526060610220830152565b81601f8201121561002a5780519061151382610324565b9261152160405194856102b3565b8284526020838301011161002a57815f9260208093018386015e8301015290565b906101408282031261002a5781519260208301519260408101519260608201519260808301519260a08101519260c082015161157d81610619565b9260e083015161158c81610632565b9261010081015161159c81610632565b9261012082015167ffffffffffffffff811161002a5761039192016114fc565b906116276115c861147d565b926115df6115d5826121a4565b63ffffffff168552565b6115f86115eb826121b4565b63ffffffff166020860152565b61160181612134565b60a085015261161f611612826121c4565b63ffffffff1660e0860152565b80519061225e565b9061163182612144565b604084015261163f82612154565b606084015261164d82612164565b608084015261165b82612174565b60c08401526116cb6116bd6102006116b28661169461168561167c89612184565b988051906122b8565b60208082518301019101611542565b610220999e989d969b94998b9294989d93969b0152019060ff169052565b60ff166101e08d0152565b63ffffffff166101c08b0152565b6101a0890152610180880152610160870152610140860152610120850152610100840152565b6118cc6118c86001600160a01b037fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f00541693611731845163ffffffff1690565b602085015163ffffffff166117cb6040870151916117bd606089015189608081015160a08201519061176f60e060c085015194015163ffffffff1690565b93604051988997602089019b8c96929363ffffffff95919998948660e09894816101008c019d168b521660208a015260408901526060880152608087015260a086015260c085015216910152565b03601f1981018352826102b3565b519020946101008501956117bd6118bf88516101208901986118a08a516117bd61014084015193610160810151906101808101516101a08201516118176101c084015163ffffffff1690565b906118276101e085015160ff1690565b9261022061183a61020087015160ff1690565b95015160208151910120956040519a8b9960208b019d8e96909a9998949560ff9687956101209a9563ffffffff956101408c019f8c5260208c015260408b015260608a0152608089015260a08801521660c08601521660e0840152166101008201520152565b5190206040805160208101958652908101919091529182906060820190565b519020906122e5565b1590565b6119935761190c61190583515f527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0260205260405f2090565b5460ff1690565b6111db57517fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f015461193c91611470565b4211611984576119776102e591515f527fb788edf5b6d001c4df53cb371352fd225afa05a1712075d5f89a08d6b6f79f0260205260405f2090565b805460ff19166001179055565b631da7447960e21b5f5260045ffd5b638baa579f60e01b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b60ff1660028110156119c55790565b6119a2565b60028210156119c55752565b9060028210156119c55752565b60e0809180518452602081015160208501526001600160a01b0360408201511660408501526001600160a01b03606082015116606085015263ffffffff6080820151166080850152611a3d60a082015160a08601906119d6565b60c081015160c08501520151910152565b6101009093929193611a65816101208101966119e3565b0152565b611a775f6060830151610d2c565b610100820151611b1e611a8e610180850151611f47565b91611b15611aa06101a0870151611f47565b611b08611ab56101c089015163ffffffff1690565b91611af86101408a015197611ad7611ad26101e08d015160ff1690565b6119b6565b96611ae06102e7565b9a8b5260208b01526001600160a01b031660408a0152565b6001600160a01b03166060880152565b63ffffffff166080860152565b60a084016119ca565b60c08201525f60e08201526102008201600160ff611b3d835160ff1690565b16148015611be7575b15611bb757611bb290600160ff611b676102206102e5970151935160ff1690565b161490611b726102f7565b9384526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020850152604084015215156060830152565b6121e5565b50611447610160611be4930151916117bd604051938492632498b83f60e21b602085015260248401611a4e565b50565b50600260ff611bf7835160ff1690565b1614611b46565b90611c0d816060840151610d2c565b9082611caf610100820151611ca6611c29610180850151611f47565b611c99611c3a6101a0870151611f47565b611c89611c4f6101c089015163ffffffff1690565b93611c68611ad26101e06101408c01519b015160ff1690565b96611c716102e7565b9b8c5260208c01526001600160a01b031660408b0152565b6001600160a01b03166060890152565b63ffffffff166080870152565b60a085016119ca565b60c083015260e08201526102008201600160ff611b3d835160ff1690565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615611d0557565b63e2517d3f60e01b5f52336004525f60245260445ffd5b335f9081527fc2bbb88da029d1ef2e193d87ca6c1679455bd9c1e99d2e95c312005c0bf4d1d7602052604090205460ff1615611d5457565b63e2517d3f60e01b5f52336004527f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d87949960245260445ffd5b805f525f516020612fc55f395f51905f5260205260ff611dbf3360405f20906001600160a01b03165f5260205260405f2090565b541615611dc95750565b63e2517d3f60e01b5f523360045260245260445ffd5b6102d8815110611e9057611dfa611df582612194565b611f47565b6001600160a01b0330911603611e90578051806094108160941802811891828203918211610d2757611e7d9282611685926020611e39611e6b96610324565b93611e4760405195866102b3565b838552611e5384610324565b8583019390601f19013685370101905e8051906122b8565b505050509594509250505060a01c1590565b9081611e87575090565b60a01c15905090565b505f90565b805f525f516020612fc55f395f51905f5260205260ff611ec98360405f20906001600160a01b03165f5260205260405f2090565b5416611f4157805f525f516020612fc55f395f51905f52602052611f018260405f20906001600160a01b03165f5260205260405f2090565b805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b8060a01c611f5b576001600160a01b031690565b6379ec0ed760e11b5f5260045ffd5b805f525f516020612fc55f395f51905f5260205260ff611f9e8360405f20906001600160a01b03165f5260205260405f2090565b541615611f4157805f525f516020612fc55f395f51905f52602052611fd78260405f20906001600160a01b03165f5260205260405f2090565b805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b916001600160a01b036040519263a9059cbb60e01b5f521660045260245260205f60448180865af160015f5114811615612072575b604091909152156120575750565b635274afe760e01b5f526001600160a01b031660045260245ffd5b6001811516612088573d15833b15151616612049565b503d5f823e3d90fd5b3d156120bb573d906120a282610324565b916120b060405193846102b3565b82523d5f602084013e565b606090565b5f80916020815191017f00000000000000000000000000000000000000000000000000000000000000005af46120f4612091565b90156120fd5790565b602081519101fd5b606c81511061211557606c015190565b632d0483c560e21b5f5260045ffd5b60b88151106121155760b8015190565b608c81511061211557608c015190565b6044815110612115576044015190565b6064815110612115576064015190565b6024815110612115576024015190565b60a48151106121155760a4015190565b60c48151106121155760c4015190565b60d88151106121155760d8015190565b6008815110612115576008015190565b600c81511061211557600c015190565b6090815110612115576090015190565b610100810192916102e591906119e3565b6121ee81612529565b9081815281511561225a57611be49161220a6060830151151590565b15612235575051604051635956364d60e01b6020820152906114479082906117bd90602483016121d4565b60405163f7e02c2160e01b602082015291506114479082906117bd90602483016121d4565b5050565b908151908180821091180218806094108160941802811891828203918211610d2757602061228b83610324565b9361229960405195866102b3565b8385526122a584610324565b8583019390601f19013685370101905e90565b9081519081808210911802188060e4108160e41802811891828203918211610d2757602061228b83610324565b906122f0838261295e565b60058195929510156119c55715938461239b575b508315612312575b50505090565b5f9350906117bd61234a8594936040519283916020830195630b135d3f60e11b87526024840152604060448401526064830190610cab565b51915afa612356612091565b8161238d575b8161236b575b505f808061230c565b905060208180518101031261002a5760200151630b135d3f60e11b145f612362565b90506020815110159061235c565b6001600160a01b0384811691161493505f612304565b60405190610100820182811067ffffffffffffffff821117610292576040525f60e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b67ffffffffffffffff81116102925760051b60200190565b60208183031261002a5780519067ffffffffffffffff821161002a57019080601f8301121561002a5781519161244c836123ff565b9261245a60405194856102b3565b80845260208085019160051b8301019183831161002a5760208101915b83831061248657505050505090565b825167ffffffffffffffff811161002a578201906040828703601f19011261002a57604051906124b582610276565b60208301516124c3816105b6565b825260408301519167ffffffffffffffff831161002a576124ec886020809695819601016114fc565b83820152815201920191612477565b9061039194936080936001600160a01b03809316845260208401521660408201528160608201520190610cab565b6125316123b1565b50612549604082015160208082518301019101612417565b6020820161256661256182516001600160a01b031690565b612b13565b8251606001516001600160a01b0316612589610d4f83516001600160a01b031690565b6001600160a01b0382160361294f575b5080516001600160a01b0316916125de610d4f6125c5610d4f60608851016001600160a01b0390511690565b6001600160a01b0386161415946001600160a01b031690565b6040516370a0823160e01b815230600482015290602090829060249082905afa908115610fc4575f91612930575b5083156129295761262f610d4f610d4f60608851016001600160a01b0390511690565b6040516370a0823160e01b815230600482015290602090829060249082905afa908115610fc4575f9161290a575b50915b6001600160a01b036126c761267f610d4f87516001600160a01b031690565b926126af7f000000000000000000000000000000000000000000000000000000000000000094858b515191612c2d565b8851606001513091906001600160a01b031690612d12565b91166126da85516001600160a01b031690565b9187515191803b1561002a5761270c935f809460405196879586948593633a5be8cb60e01b85523091600486016124fb565b03925af18015610fc4576128f0575b50612733610d4f610d4f85516001600160a01b031690565b6040516370a0823160e01b81523060048201529190602090839060249082905afa918215610fc45761277892612773915f916128d1575b50875151611470565b610d2c565b9261281e575b5061279282845160e0815191015190612e84565b60e084510152818351528251907fb88fc27be67e678ffb77faf8f8bb00d39b66b4845e4f7ec1e623b0f15abd52136001600160a01b036127de602085015193516001600160a01b031690565b946128176127f8606087519701516001600160a01b031690565b9183604051948594169816968360209093929193604081019481520152565b0390a45190565b61283a610d4f610d4f60608751016001600160a01b0390511690565b6040516370a0823160e01b815230600482015290602090829060249082905afa908115610fc4575f916128b2575b50818111156128845761287c929350610d2c565b905b5f61277e565b50506128ad61289a82516001600160a01b031690565b6060855101906001600160a01b03169052565b61287e565b6128cb915060203d602011610fbd57610fae81836102b3565b5f612868565b6128ea915060203d602011610fbd57610fae81836102b3565b5f61276a565b806128fe5f612904936102b3565b80610215565b5f61271b565b612923915060203d602011610fbd57610fae81836102b3565b5f61265d565b8091612660565b612949915060203d602011610fbd57610fae81836102b3565b5f61260c565b61295890612b13565b5f612599565b9060418151145f1461298a5761298691602082015190606060408401519301515f1a90612f1e565b9091565b50505f90600290565b604051906129a26020836102b3565b5f80835282815b8281106129b557505050565b6020906040516129c481610297565b5f81526060838201525f6040820152828285010152016129a9565b906129e9826123ff565b6129f660405191826102b3565b8281528092612a07601f19916123ff565b01905f5b828110612a1757505050565b602090604051612a2681610297565b5f81526060838201525f604082015282828501015201612a0b565b6020815260608101918051926040602084015283518091526080830190602060808260051b8601019501915f905b828210612a95575050505090604060206103919301519101906001600160a01b03169052565b90919295602080600192607f198982030185528951906001600160a01b038251168152604080612ad2858501516060878601526060850190610cab565b930151910152980192019201909291612a6f565b6001600160a01b036103919493816080941683525f60208401521660408201528160608201520190610cab565b6040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811660048301529190602081806024810103816001600160a01b0386165afa908115610fc4575f91612c0e575b501561225a576001600160a01b03612bb392612bc1612b93612993565b612b9b610306565b90815230602082015260405195869160208301612a41565b03601f1981018652856102b3565b1691823b1561002a57612bef925f9283604051809681958294633a5be8cb60e01b8452309060048501612ae6565b03925af18015610fc457612c005750565b806128fe5f6102e5936102b3565b612c27915060203d602011610fbd57610fae81836102b3565b5f612b76565b905f806001600160a01b03612cba95946040519582602088019663a9059cbb60e01b8852166024880152604487015260448652612c6b6064876102b3565b169260405194612c7c6040876102b3565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af1612cb4612091565b91612f99565b8051908115918215612cd0575b50501561002a57565b612ce39250602080918301019101610c93565b5f80612cc7565b8051821015612cfe5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b92918351612d27612d2282611462565b6129df565b925f5b828110612df8575060405163ef8738d360e01b60208201526001600160a01b03918216602482015290831660448201529394506117bd936103919392612de9929091612dcd9190612d7c81606481018a565b612d84610315565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681529060208201525f6040820152612dc68287612cea565b5284612cea565b50612dd6610306565b9283526001600160a01b03166020830152565b60405192839160208301612a41565b80612e16612e086001938a612cea565b51516001600160a01b031690565b6020612e22838b612cea565b510151612e3f612e30610315565b6001600160a01b039093168352565b60208201525f6040820152612e548288612cea565b52612e5f8187612cea565b5001612d2a565b8115612e70570490565b634e487b7160e01b5f52601260045260245ffd5b818101809111610d2757670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610d2757808201809211610d27575f198201918211610d2757612ecd91612e66565b670de0b6b3a76400000390670de0b6b3a76400008211610d2757670de0b6b3a7640000808202908282041482151715610d275782612f19612f146103919561277394611470565b610d19565b612e66565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612f8e576020935f9360ff60809460405194855216868401526040830152606082015282805260015afa15610fc4575f516001600160a01b03811615612f8657905f90565b505f90600190565b505050505f90600390565b91925015612fb557815115612fac575090565b3b1561002a5790565b50805190811561002a57602001fdfe02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220e9e3a07853e0a34ef8a16c568abce65ab82f0c9871b14d8c244906ba15ef3f9464736f6c634300081e003360c0346100d157601f6162f938819003918201601f19168301916001600160401b038311848410176100d55780849260409485528339810103126100d157610052602061004b836100e9565b92016100e9565b6001600160a01b0390911660805260a0526040516161fb90816100fe82396080518181816108be01528181610bae015281816117540152818161198f01528181612a3d01528181614009015281816140ff015281816150e2015261531a015260a051818181610678015281816107f001528181610d5d01526143080152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100d15756fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146125fb57508063037a06a4146123b057806304c73f6014612392578063057f0370146122d85780631f74a0b51461226657806321081d3c1461222b578063248a9ca3146121eb5780632e748b211461208f5780632f2ff15d14612044578063319adf9f14611c7c57806336568abe14611c3757806337710e2014611be25780633b1c6a011461188b5780633cf3a02514611856578063490e662f1461181b5780634b3b029b146117e0578063502a82e214611723578063521c98ba14610fe95780635956364d14610f9d57806369b97ac714610f7f57806379c7b60b14610f2a57806379c7f28914610e2b57806390a0827b14610df257806391d1485414610d9b5780639262e0fc14610d0257806396cc2cfb14610aae578063a217fddf14610a92578063a38d8fa6146108e2578063a4b672b61461089e578063af5de6f914610814578063c55dae63146107d0578063ccbedaec14610551578063d06e28ed14610464578063d4d35af814610429578063d547741f146103d5578063e38b73a9146103b9578063ea0aaf241461035b578063eb84e7f21461022b5763f7e02c21146101cb575f80fd5b3461022857610100366003190112610228576101e6366127bd565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d10054156102195761021690614fb3565b80f35b63cd6d8f7d60e01b8252600482fd5b80fd5b50346102285760203660031901126102285760408160e09260c0835161025081612781565b82815282602082015282858201528260608201528260808201528260a0820152015260043581527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0360205220604051906102a982612781565b6001600160a01b03815416918281526001600160401b0360018301548160208401916001600160a01b038116835263ffffffff60026040870197828460a01c168952606088019360c01c84520154966001600160a01b036080880195858a16875260ff60c060a08b019a828d60401c1615158c52019a60481c1615158a526040519a8b52511660208a015251166040880152511660608601525116608084015251151560a083015251151560c0820152f35b50346102285760203660031901126102285760206103b061037a61264e565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0560205260405f2090565b54604051908152f35b5034610228578060031936011261022857602060405160068152f35b5034610228576040366003190112610228576104256004356103f5612664565b9061042061041b825f525f5160206161a65f395f51905f52602052600160405f20015490565b6130a9565b613885565b5080f35b503461022857806003193601126102285760206040517f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d8794998152f35b50346102285760403660031901126102285761047e61264e565b602435906fffffffffffffffffffffffffffffffff8216809203610542576104a461303a565b826104ae826131c5565b63ffffffff6001600160a01b03608083015116915116813b1561054257829160448392604051948593849263435354d360e01b845260048401528960248401525af180156105465761052d575b50506001600160a01b03167f02366c0d102495be1ee805b749be7baebab4fc0710c6d3f38751f1a22bd711648380a380f35b816105379161279c565b61054257825f6104fb565b8280fd5b6040513d84823e3d90fd5b5034610228576060366003190112610228578061056c61264e565b6105746126df565b61057c6126f5565b90610585612fcb565b6105bf836001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b544311156107245743610602846001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b556001600160a01b036001610647856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b015416926001600160401b038216610729575b50506001600160401b03811661066e575050f35b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683525f5160206161865f395f51905f526020526001600160401b0360046040852001541690823b1561072457604051633ded719760e11b81526001600160401b0392831660048201523360248201529116604482015263ffffffff60648201529082908290608490829084905af18015610546576107135750f35b8161071d9161279c565b6102285780f35b505050fd5b6001600160a01b031684525f5160206161865f395f51905f526020526001600160401b03600460408620015416833b156107cc57604051633ded719760e11b81526001600160401b0391821660048201523360248201529116604482015263ffffffff6064820152838160848183875af19081156107c15784911561065a57816107b29161279c565b6107bd57825f61065a565b5050fd5b6040513d86823e3d90fd5b8480fd5b503461022857806003193601126102285760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102285760203660031901126102285760206001600160a01b0361084061083b61264e565b6130f6565b610c236040516108528583018261279c565b818152848101916155638339519020604051908482019260ff60f81b84523060601b6021840152603583015260558201526055815261089260758261279c565b51902016604051908152f35b503461022857806003193601126102285760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461022857608036600319011261022857806108fd61264e565b6109056126df565b60443563ffffffff8116809103610724576001600160a01b0361092661268d565b9361092f612fcb565b1684525f5160206161865f395f51905f5260205263ffffffff6001600160401b03600460408720015416931663ffffffff811480610a85575b15610a2c5750506109b2916001600160401b036109c092604051923360208501526040840152166060820152606081526109a360808261279c565b60405192839160208301614f91565b03601f19810183528261279c565b7333333333333333333333333333333333333333333b15610a295781610a0291604051809381926317938e1360e01b835260206004840152602483019061270b565b0381837333333333333333333333333333333333333333335af18015610546576107135750f35b50fd5b610a80926109b2946001600160401b0392604051943360208701528860408701526060860152608085015260a08401521660c082015260c08152610a7160e08261279c565b60405192839160208301614f6e565b6109c0565b5063ffffffff8214610968565b5034610228578060031936011261022857602090604051908152f35b503461022857604036600319011261022857610ac861264e565b90610ad161303a565b610ada82612d3c565b610ae3836131c5565b92610af760e083510151840b602435614ee9565b946020840190610b206001600160401b03835116886001600160401b0360a089015116916137b0565b15610cd957859650610b62846001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b610b6d8482546128a5565b90556001600160a01b038416807f410b9a8c926b6c439cdceb39c0bb8f829838a25bc5a26af9d4c263d1313cc46b6020604051878152a26001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610cd55760405163f3fef3a360e01b81526001600160a01b0383166004820152602481018690529088908290604490829084905af18015610cca5785918991610cad575b50506001600160401b0391610c3d6001600160a01b0392608060e09601928484511690613229565b511692511694510151850b93813b15610ca957604051639c45c34b60e01b81526001600160a01b039490941660048501526001600160401b0316602484015260448301919091525f9290920b60648201529082908290608490829084905af18015610546576107135750f35b8580fd5b81925090610cba9161279c565b610cc65783875f610c15565b8680fd5b6040513d8a823e3d90fd5b8780fd5b6377e88bc960e11b86526001600160a01b0384166004526001600160401b038716602452604486fd5b50346102285761012036600319011261022857610d1e366127bd565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1005415610219576001600160a01b036060820151166001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145f14610d8d5761021690613938565b610216906101043590614306565b5034610228576040366003190112610228576001600160a01b036040610dbf612664565b9260043581525f5160206161a65f395f51905f526020522091165f52602052602060ff60405f2054166040519015158152f35b503461022857604036600319011261022857610216610e0f61264e565b610e17612fcb565b602435906001600160a01b03339116613229565b50346102285760203660031901126102285760a0610e89610e4a61264e565b610e52612d12565b506001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b6001600160a01b03600160405192610ea08461272f565b63ffffffff8154818116865260ff8160201c1615156020870152818160281c16604087015260481c1660608501520154166080820152610f2860405180926001600160a01b036080809263ffffffff815116855260208101511515602086015263ffffffff604082015116604086015263ffffffff6060820151166060860152015116910152565bf35b50346102285760203660031901126102285760206103b0610f4961264e565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b50346102285780600319360112610228576020604051620f42408152f35b50346102285761010036600319011261022857610fb9366127bd565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d10054156102195761021690613938565b50346102285760a03660031901126102285761100361264e565b61100b61267a565b906110146126a0565b6064356001600160401b03811681036107cc57608435916001600160401b0383168303610ca957611043612f7c565b61104b612c59565b50611054612c1b565b508580604051602081019063ffffffff891682526020815261107760408261279c565b519061080c5afa611086612ce3565b9015611714578051810160208101916020818303126116f0576020810151906001600160401b0382116117105701906101009082900312610cd557604051916110ce83612765565b60208201516001600160401b0381116117105760209083010181601f8201121561171057898151916110ff83612cc8565b9261110d604051948561279c565b8084528460208284010111610542578060208093018386015e83010152835260408201516001600160401b038111611710576020908301019080601f83011215611710578151916001600160401b0383116116dc578260051b9060405193611178602084018661279c565b845260208085019282010192831161170c57602001905b8282106116f4575050506020830152610100906111ae606082016132a7565b60408401526111bf608082016154a2565b60608401526111d060a082016154a2565b60808401526111e160c082016154b6565b60a08401526111f260e082016154b6565b60c0840152015180880b8082036116f0576112129160e08401528461370e565b50604051916112208361274a565b825263ffffffff87166020830152821515604083015260608201526001600160401b03831660808201526001600160401b03841660a08201526001600160a01b03851687525f5160206161865f395f51905f5260205260408720815180518051906001600160401b0382116116dc5781908b61129c8654612c90565b601f81116116a1575b5050602090601f831160011461163f578c92611634575b50508160011b915f199060031b1c19161782555b6001820160208201518051906001600160401b03821161162057680100000000000000008211611620576020908c84548486558085106115d4575b505001918b5260208b20908b5b8160021c811061158f57506003198116810380611533575b505050506001600160a01b03947f12cf3d04179e82c834f3ee7169a5df80651aa65530127f9ddb04c8cd8224435397946001600160401b039460a06006868896600260809d9901888060408401511616891982541617815560608201517fffffffff0000000000000000000000000000000000000000ffffffffffffffff7bffffffffffffffffffffffffffffffffffffffff000000000000000083549260401b16911617905560038201908c808f83015116166001600160a01b0319835416178255848101519082547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff74ff000000000000000000000000000000000000000060e075ff00000000000000000000000000000000000000000060c086015160a81b1694015160b01b76ff000000000000000000000000000000000000000000001694891b16911617171790556114c16004820188806020880151161689198254161781556040860151151568ff0000000000000000825491151560401b169068ff00000000000000001916179055565b60608401516005820155019185808c8301511616861984541617835501516fffffffffffffffff000000000000000082549160401b16906fffffffffffffffff0000000000000000191617905563ffffffff6040519a168a52151560208a01521660408801521660608601521692a280f35b928c938d5b8181106115515750505060021c015584848460a0611330565b90919460206115856001926001600160401b03895116908560031b6001600160401b03809160031b9316831b921b19161790565b9601929101611538565b8c8d5b600481106115a7575083820155600101611318565b85519095916001916020916001600160401b0360068a901b81811b199092169216901b1792019501611592565b838287611600945220600380870160021c820192601888831b1680611607575b500160021c0190613922565b8c5f61130b565b5f198501908154905f19908a03851b1c1690555f6115f4565b634e487b7160e01b8c52604160045260248cfd5b015190505f806112bc565b858d52818d209250601f1984168d5b8181106116895750908460019594939210611671575b505050811b0182556112d0565b01515f1960f88460031b161c191690555f8080611664565b9293602060018192878601518155019501930161164e565b602082886116cb945220601f850160051c810191602086106116d2575b601f0160051c0190613922565b8b5f6112a5565b90915081906116be565b634e487b7160e01b8b52604160045260248bfd5b8880fd5b60208091611701846132a7565b81520191019061118f565b8b80fd5b8980fd5b639b0c335d60e01b8752600487fd5b50346102285760403660031901126102285761173d61264e565b602435611748612fcb565b826001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016931692803b156117dc5760405163f3fef3a360e01b81526001600160a01b0385166004820152602481018490529082908290604490829084905af18015610546576117c7575b5050610216913390613229565b816117d19161279c565b61054257825f6117ba565b5080fd5b503461022857806003193601126102285760206040517f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef68152f35b503461022857806003193601126102285760206040517fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1008152f35b503461022857602036600319011261022857611870612fcb565b80808080600435335af1611882612ce3565b50156102285780f35b5034610228576060366003190112610228576118a5612664565b6044356001600160a01b03811691828203611ad6576118c261303a565b6118cb82612d3c565b916118d58261313e565b6107cc576040830151156107cc5760016001600160401b0360808501511601906001600160401b038211611bce5790859161193961191a60e087510151850b8461370e565b509560208101936001600160401b0360a08187511693015116916137b0565b1561054257611978906001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0560205260405f2090565b6119838582546128a5565b90556001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156105425760405163f3fef3a360e01b81526001600160a01b0387166004820152602481018690529083908290604490829084905af1908115611bc3578391611bae575b5050516001600160401b031680611ada575050611a128284615204565b736b9e773128f453f5c2c60935ee2de2cbc5390a243b15611ad6578360405163611e2a2d60e11b81526001600160a01b038316600482015283602482015263ffffffff6044820152818160648183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561054657611ac1575b50506001600160a01b03905b60405192835216907f2b348084e891b20d449a69f90114c5ab7bf7c84d64c25445c8ab440d469a6b4d602060043592a480f35b81611acb9161279c565b611ad657835f611a82565b8380fd5b611b2281611af486611aee6109b29561519d565b896151c3565b604051906001600160a01b0386166020830152604082015260016060820152606081526109a360808261279c565b7333333333333333333333333333333333333333333b156117dc5781611b6491604051809381926317938e1360e01b835260206004840152602483019061270b565b0381837333333333333333333333333333333333333333335af1801561054657611b99575b50506001600160a01b0390611a8e565b81611ba39161279c565b611ad657835f611b89565b81611bb89161279c565b6117dc57815f6119f5565b6040513d85823e3d90fd5b634e487b7160e01b86526011600452602486fd5b50346102285760203660031901126102285760206103b0611c0161264e565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b503461022857604036600319011261022857611c51612664565b336001600160a01b03821603611c6d5761042590600435613885565b63334bd91960e11b8252600482fd5b5034610228576020366003190112610228576001600160a01b03611c9e61264e565b611ca6612c59565b501681525f5160206161865f395f51905f52602052604081209060405190611ccd8261274a565b604051611cd981612765565b60405184548184611ce983612c90565b80835292600181169081156120255750600114611fe4575b611d0d9250038261279c565b815260018401604051808260208294549384815201908652602086209286905b806003830110611f9257611d63945491818110611f78575b818110611f5b575b818110611f3e575b10611f30575b50038261279c565b60208201526001600160a01b0360028501546001600160401b038116604084015260401c16606082015260038401546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c820b60e0820152825260048301549260208301906001600160401b038516825260ff604085019560401c161515855260066005820154916060860192835201549460808501926001600160401b03871684526001600160401b0360a087019760401c1687526040519560208752519460c06020880152611e4a865161010060e08a01526101e089019061270b565b60208088015189830360df19016101008b015280518084529282019892910190835b818110611f1157505050926001600160401b03809693899a969360e0878c610120866040819c0151169101528c6101406001600160a01b036060840151169101528c6101606001600160a01b036080840151169101528c61018060ff60a0840151169101528c6101a060ff60c0840151169101520151900b6101c08b0152511660408901525115156060880152516080870152511660a0850152511660c08301520390f35b82516001600160401b03168a526020998a019990920191600101611e6c565b60c01c81526020015f611d5b565b9260206001916001600160401b038560801c168152019301611d55565b9260206001916001600160401b038560401c168152019301611d4d565b9260206001916001600160401b0385168152019301611d45565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019401920184929391611d2d565b5090868552602085209085915b818310612009575050906020611d0d92820101611d01565b6020919350806001915483858801015201910190918392611ff1565b60209250611d0d94915060ff191682840152151560051b820101611d01565b503461022857604036600319011261022857610425600435612064612664565b9061208a61041b825f525f5160206161a65f395f51905f52602052600160405f20015490565b6137de565b5034610228576080366003190112610228576120a961264e565b6120b16126df565b6120b96126f5565b90606435926fffffffffffffffffffffffffffffffff84168094036107cc576120e061303a565b846120ea826131c5565b926001600160a01b0360808501511693843b15610542576121746101048492836001600160401b03806040519788968795636f0d192560e11b875260048701906001600160a01b036080809263ffffffff815116855260208101511515602086015263ffffffff604082015116604086015263ffffffff6060820151166060860152015116910152565b169a8b60a485015216988960c48401528b60e48401525af18015610546576121d6575b50506001600160a01b036040917f500d805a349357fe5d4759fe052d79bd744b82c8452837f52a7456ec7d3d751c93835195865260208601521692a380f35b816121e09161279c565b6107cc57845f612197565b50346102285760203660031901126102285760206122236004355f525f5160206161a65f395f51905f52602052600160405f20015490565b604051908152f35b503461022857806003193601126102285760206040517f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f8152f35b50346102285760603660031901126102285761228061264e565b6024356001600160401b0381116105425761229f9036906004016126af565b9092604435906001600160401b0382116102285760206122238686866122c836600489016126af565b9390926122d361303a565b6128b2565b503461238e57604036600319011261238e576122f261264e565b906024356122fe612fcb565b6001600160a01b036080612311856131c5565b015116803b1561238e576040516390a0827b60e01b81526001600160a01b038516600482015260248101839052905f908290604490829084905af180156123835761236d575b5061021691926001600160a01b03339116613229565b61021692505f61237c9161279c565b5f91612357565b6040513d5f823e3d90fd5b5f80fd5b3461238e575f36600319011261238e5760206040516305f5e1008152f35b3461238e5760a036600319011261238e576123c961264e565b6123d161267a565b6123d96126a0565b916123e261268d565b926084359163ffffffff831680930361238e576123fe81612d3c565b50612407612f7c565b6001600160a01b03600161244b836001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b0154169081156125aa575b63ffffffff604051956124688761272f565b16948581526001600160a01b03600181602084019615159586885263ffffffff604086019b1697888c52606086018a8152836080880193169c8d845263ffffffff6124e38a6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b985116926cffffffff00000000000000000068ffffffff000000000064ff000000008b549351151560201b16935160281b16935160481b16936cffffffff000000000000000000199168ffffffffffffffffff1916171617171785555116920191166001600160a01b031982541617905561255d8661313e565b1561238e577ff0dcc8957a27613dd82c92382ad37254b9744169d0caa5f3873cfec7ba794eb9936080936001600160a01b03936040519788526020880152604087015260608601521692a3005b90506125b5816130f6565b604051610c238082018281106001600160401b038211176125e7578291615563833903905ff580156123835790612456565b634e487b7160e01b5f52604160045260245ffd5b3461238e57602036600319011261238e576004359063ffffffff60e01b821680920361238e57602091637965db0b60e01b811490811561263d575b5015158152f35b6301ffc9a760e01b14905083612636565b600435906001600160a01b038216820361238e57565b602435906001600160a01b038216820361238e57565b6024359063ffffffff8216820361238e57565b6064359063ffffffff8216820361238e57565b60443590811515820361238e57565b9181601f8401121561238e578235916001600160401b03831161238e576020808501948460051b01011161238e57565b602435906001600160401b038216820361238e57565b604435906001600160401b038216820361238e57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b60a081019081106001600160401b038211176125e757604052565b60c081019081106001600160401b038211176125e757604052565b61010081019081106001600160401b038211176125e757604052565b60e081019081106001600160401b038211176125e757604052565b90601f801991011681019081106001600160401b038211176125e757604052565b61010090600319011261238e57604051906127d782612765565b81600435815260243560208201526044356001600160a01b038116810361238e5760408201526064356001600160a01b038116810361238e57606082015260843563ffffffff8116810361238e57608082015260a435600281101561238e5760a082015260c43560c082015260e060e435910152565b919081101561285d5760051b0190565b634e487b7160e01b5f52603260045260245ffd5b906001600160401b03809116911601906001600160401b03821161289157565b634e487b7160e01b5f52601160045260245ffd5b9190820180921161289157565b9194935f935f9682810361238e576128fa856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b5443111561238e57929061290d85612d3c565b916080612919876131c5565b01916001600160a01b038351169461294060208601966001600160401b03885116906132bb565b965f975b818d10612bb0575b50508a159250612ba59150505743612994866001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b556001600160401b038416806129ae575b50505050505050565b6129c36129e69560e0855101515f0b9061370e565b6001600160401b03869792975116906001600160401b0360a087015116916137b0565b15612b865750612a26856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b612a318582546128a5565b90556001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166001600160a01b03861690803b1561238e5760405163f3fef3a360e01b81526001600160a01b038316600482015260248101879052905f908290604490829084905af1801561238357612b5a575b506001600160a01b0382612ace876001600160401b03948460e097511690613229565b511693511691510151850b93823b15610ca957604051639c45c34b60e01b81526001600160a01b0390911660048201526001600160401b03909116602482015260448101929092525f9290920b606482015290829082908183816084810103925af1801561054657612b45575b80808080806129a5565b612b5082809261279c565b6102285780612b3b565b6001600160401b0391975060e092612b7a5f6001600160a01b039361279c565b5f989093509150612aab565b6001600160a01b03866377e88bc960e11b5f521660045260245260445ffd5b505f96505050505050565b612bbf8d83879f9b969761284d565b3590612bcc8a858861284d565b356001600160401b038116810361238e57612bf592898d926001600160a01b038b51169261339d565b94909115612c1357600191612c0991612871565b98019b9392612944565b989c5061294c565b60405190612c2882612765565b5f60e08360608152606060208201528260408201528260608201528260808201528260a08201528260c08201520152565b60405190612c668261274a565b5f60a083612c72612c1b565b81528260208201528260408201528260608201528260808201520152565b90600182811c92168015612cbe575b6020831014612caa57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612c9f565b6001600160401b0381116125e757601f01601f191660200190565b3d15612d0d573d90612cf482612cc8565b91612d02604051938461279c565b82523d5f602084013e565b606090565b60405190612d1f8261272f565b5f6080838281528260208201528260408201528260608201520152565b6001600160a01b0390612d4d612c59565b50165f525f5160206161865f395f51905f5260205260405f2060405191612d738361274a565b60405191612d8083612765565b6040518154815f612d9083612c90565b8083529260018116908115612f5d5750600114612f1c575b612db49250038261279c565b8352600181019360405180602087549182815201965f5260205f20905f915b816003840110612ed05797612e149284926001600160a01b039798999a5491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208601528160028401546001600160401b038116604088015260401c1660608601526001600160401b0360066003850154946080880197858716895260ff8760a01c1660a082015260c081019660ff8160a81c16885260b01c5f0b60e0820152845260ff6004820154848116602087015260401c1615156040850152600581015460608501520154818116608084015260401c1660a082015293511615159081612ec2575b501561238e57565b60ff9150511615155f612eba565b97600160806004928b546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019901920191612dd3565b5090835f5260205f20905f915b818310612f41575050906020612db492820101612da8565b6020919350806001915483858801015201910190918392612f29565b60209250612db494915060ff191682840152151560051b820101612da8565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615612fb457565b63e2517d3f60e01b5f52336004525f60245260445ffd5b335f9081527f176c3a4e1b4d1d61213187c0dde7f83e2e2c933a339cb5403b4090bc2f0aa49a602052604090205460ff161561300357565b63e2517d3f60e01b5f52336004527f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f60245260445ffd5b335f9081527fcf7720576cdb70176b3017d893bcb89ba0f36ed0261d4350fd0180e938b3bacd602052604090205460ff161561307257565b63e2517d3f60e01b5f52336004527f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef660245260445ffd5b805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0333165f5260205260ff60405f205416156130e05750565b63e2517d3f60e01b5f523360045260245260445ffd5b60405160208101913060601b83526bffffffffffffffffffffffff199060601b1660348201526028815261312b60488261279c565b51902090565b5190811515820361238e57565b5f80916040516001600160a01b0360208201921682526020815261316360408261279c565b51906108105afa613172612ce3565b90156131b65760208180518101031261238e5760405190602082018281106001600160401b038211176125e7576040526131ae90602001613131565b809152151590565b6313dd7ccd60e31b5f5260045ffd5b6131d190610e52612d12565b906001600160a01b036001604051936131e98561272f565b63ffffffff8154818116875260ff8160201c1615156020880152818160281c16604088015260481c16606086015201541691826080820152911561238e57565b916001600160a01b036040519263a9059cbb60e01b5f521660045260245260205f60448180865af19060015f5114821615613286575b6040521561326a5750565b6001600160a01b0390635274afe760e01b5f521660045260245ffd5b90600181151661329e57823b15153d1516169061325f565b503d5f823e3d90fd5b51906001600160401b038216820361238e57565b5f919082916001600160401b03604051916001600160a01b036020840194168452166040820152604081526132f160608261279c565b51906108015afa613300612ce3565b901561336e5760608180518101031261238e576040519060608201918083106001600160401b038411176125e7576001600160401b03926040526040613367606061334d602086016132a7565b9485855261335c8482016132a7565b6020860152016132a7565b9101521690565b639d2c8fcb60e01b5f5260045ffd5b906001600160401b03809116911603906001600160401b03821161289157565b959291909395805f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0360205260405f206001600160a01b0381541695861561369657600282019889549860ff8a60481c166136875760018401956001600160a01b03875493166001600160a01b03841603613674575f9161341e8b61313e565b15613654575b8360c01c9c8c60ff6001600160401b0382169160401c165f146135fa57508d8e966001600160401b03811682115f146135f2576134609161337d565b9c5b6001600160401b038086169716928784111561238e578f8f96613488906134909261337d565b969f82612871565b936001600160401b038516106135dd575069ff0000000000000000001916690100000000000000000017905560019c6134c89161337d565b99815160e001515f0b6134db908d61370e565b50986001600160a01b031691602001516001600160401b031691803b1561238e575f928360849263ffffffff6001600160401b036040519889978896633ded719760e11b885260048801526024870152169889604486015260a01c1660648401525af18015612383577f53b9d5645f8b7ccd861ebd6036860fd21716451d1f238cb3720f12f3c49b0c43946040946001600160a01b039384936135cd575b5080613594575b5054169554169582519182526020820152a4565b82825416887f5adc50a7f1e65d6b397176e0807a39bd0ba27293997500a57ca2cc1359583ccb6020868d5416948a51908152a45f613580565b5f6135d79161279c565b5f613579565b5f9f508f9e509c505050505050505050505050565b50505f613460565b909d95809d96806001600160401b038316105f14613649576136269161361f9161337d565b809e612871565b816001600160401b038216115f1461364257505b9c8d95613462565b905061363a565b50506136265f61361f565b915060408101511561238e576001600160401b0360808201511691613424565b8563358d72d160e01b5f5260045260245ffd5b63f7348a7960e01b5f5260045ffd5b631a40316d60e01b5f5260045ffd5b60ff16604d811161289157600a0a90565b9190820391821161289157565b81156136cd570490565b634e487b7160e01b5f52601260045260245ffd5b90620f4240820291808304620f4240149015171561289157565b8181029291811591840414171561289157565b9190805f0b80155f1461372c5750506001600160401b03821691905b565b5f81131561375757506137446137539160ff166136a5565b6001600160401b0384166136fb565b9190565b9050607f198114612891576001600160401b039261377c613785925f0360ff166136a5565b938491166128a5565b5f198101908111612891576137ac6137a5846001600160401b03936136c3565b93846136fb565b1690565b6137d66001600160401b0392936137d084936137cb8161519d565b6132bb565b94612871565b169116101590565b805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f205416155f1461387f57805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260405f20600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f2054165f1461387f57805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260405f2060ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b81811061392d575050565b5f8155600101613922565b6060810151906001600160a01b035f921691825f525f5160206161865f395f51905f5260205260405f206040519061396f8261274a565b60405161397b81612765565b6040518254815f61398b83612c90565b80835292600181169081156142e757506001146142a6575b6139af9250038261279c565b815260018201604051808260208294549384815201905f5260205f20925f905b80600383011061425457613a01945491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208201526001600160a01b0360028301546001600160401b038116604084015260401c16606082015260038201546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e08201528252600481015492600660208401926001600160401b038616845260ff604086019660401c16151586526005810154606086015201549260808101936001600160401b03811685526001600160401b0360a083019160401c1681525f946040880196613ad66001600160a01b0389511661313e565b15614187575b5050865192612710613b02613af760e08b01968751906128a5565b60c08b0151906136fb565b049484519580871161417f575b50856140dd575b613b4e613b35613b27888c516128a5565b60e0875101515f0b90614ee9565b919094826001600160401b0380865116925116916137b0565b1561408e575085613fff575b6001600160401b0390613b9d8b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b613ba88882546128a5565b9055511692613bd460e06001600160a01b038a511692510151830b63ffffffff60808c01511694614ee9565b9390916001600160401b03891695866001600160401b0387161115613ff057908392918d97969594613cb6575b50505050507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c319161337d565b5080613c74575b5050613c6f6001600160a01b0360208701519551169551915192604051938493846040919493926060820195825260208201520152565b0390a4565b60208701517f5adc50a7f1e65d6b397176e0807a39bd0ba27293997500a57ca2cc1359583ccb60206001600160a01b0389511693604051908152a4855f613c38565b809791929394959697155f14613e47575083613cd191615204565b308103613d905750736b9e773128f453f5c2c60935ee2de2cbc5390a243b156105425760405191630acb7f4b60e21b835260048301526024820152818160448183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561054657908a94939291613d6d575b50507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c31915b9181975f80613c01565b818093949697989550613d7f9161279c565b610228579081899396959492613d3a565b91736b9e773128f453f5c2c60935ee2de2cbc5390a243b15611ad6576040519263611e2a2d60e11b8452600484015260248301526044820152818160648183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561054657908a94939291613e24575b50507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c3191613d63565b818093949697989550613e369161279c565b610228579081899396959492613df7565b9096959493613e5c90611aee8395949561519d565b308314801590613fe2575b613e9b575b505050507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c3191613d63565b90919293949550613eac898661337d565b9163ffffffff811480613fda575b15613f8b5750916001600160401b03613ef4926109b2946040519360208501526040840152166060820152606081526109a360808261279c565b7333333333333333333333333333333333333333333b156117dc5781613f3691604051809381926317938e1360e01b835260206004840152602483019061270b565b0381837333333333333333333333333333333333333333335af1801561054657908a94939291613f68575b8080613e6c565b818093949697989550613f7a9161279c565b610228579081899396959492613f61565b613fd5926109b294926001600160401b039260405194602086015287604086015263ffffffff6060860152608085015260a08401521660c082015260c08152610a7160e08261279c565b613ef4565b506001613eba565b5063ffffffff821415613e67565b6306506d5560e11b8552600485fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b1561238e5760405163f3fef3a360e01b81526001600160a01b038c16600482015260248101889052905f908290604490829084905af1801561238357614072575b50613b5a565b61407f9192505f9061279c565b5f906001600160401b0361406c565b989450505050507f8d61555dcf69ba745e97fdea78e2652d9cdd464ca521faad482fe796f6d5841c9350602092508291506140c881614fb3565b0151926001600160401b0360405191168152a3565b6140ec868b60208c015161530b565b613b16576040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048201529095506020816024818d5afa908115612383575f9161414d575b5094613b16565b90506020813d602011614177575b816141686020938361279c565b8101031261238e57515f614146565b3d915061415b565b95505f613b0f565b9091955060a088015160028110156142405715908180614233575b61421657811561420c575b506141c457516001600160401b0316935f80613adc565b505050505061372a92507f31604f5790fbed7a37471cea010a8f08483441a6e1235ac48bb59337439a630d60206001600160a01b0381850151935116604051908152a2614fb3565b905051155f6141ad565b6001600160a01b038851166320a2097d60e11b5f5260045260245ffd5b5060c089015115156141a2565b634e487b7160e01b5f52602160045260245ffd5b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c60608201520194019201849293916139cf565b5090845f5260205f20905f915b8183106142cb5750509060206139af928201016139a3565b60209193508060019154838588010152019101909183926142b3565b602092506139af94915060ff191682840152151560051b8201016139a3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811691825f525f5160206161865f395f51905f5260205260405f20604051936143578561274a565b60405161436381612765565b6040518354815f61437383612c90565b8083529260018116908115614eca5750600114614e89575b6143979250038261279c565b815260018301604051808260208294549384815201905f5260205f20925f905b806003830110614e37576143e9945491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208201526001600160a01b0360028401546001600160401b038116604084015260401c16606082015260038301546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e08201528552600660048301549260ff60208801946001600160401b038116865260401c1615156040880152600581015460608801520154956001600160401b03871660808701526001600160401b0360a087019760401c16875260608401936001600160a01b038551165f525f5160206161865f395f51905f5260205260405f2094604051956144d58761274a565b6040516144e181612765565b6040518254815f6144f183612c90565b8083529260018116908115614e185750600114614dd7575b6145159250038261279c565b815260018201604051808260208294549384815201905f5260205f20925f905b806003830110614d8557614567945491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208201526001600160a01b0360028301546001600160401b038116604084015260401c16606082015260038201546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e082015287526001600160401b03600660048301549282841660208b015260ff60408b019460401c1615158452600581015460608b0152015481811660808a015260401c1660a08801526146206001600160a01b038351166131c5565b9360408401916146396001600160a01b0384511661313e565b15614cd6575b5083519760e085019182519160c087019a8b5115159361465e916128a5565b8d5160e001515f0b61466f91614ee9565b90508d5160c0015160ff16825160c0015160ff169061468d926154d8565b9215614ca85782915b5f8063ffffffff8b511660405160208101918252602081526146b960408261279c565b51906108085afa6146c8612ce3565b9015614c995760208180518101031261238e57898f9360ff60a06147169260206001600160401b036146fe8261471c99016132a7565b16950197885115155f14614c8e5750510151166136a5565b906136fb565b825115614c445763ffffffff6147378160608d0151166153ee565b16620f4240019081620f4240116128915761476d620f4240916147166001600160401b039463ffffffff8f6040015116906128a5565b0416908c51908115155f14614c3c5750915b5115614bfb576305f5e100811015614bbb57505f5b6147b46147a186516136e1565b6147ae8a518851906128a5565b906128a5565b5f19810191908211612891576147ae6147da926147d48b518951906128a5565b906136c3565b6064808302838104821484151715612891578211614b415750505085518c5160e001515f0b61480891614ee9565b9d8e8b9c929c516001600160401b031691516001600160401b03169061482d926137b0565b15614af1579c8a9b9c9d85516001600160a01b03169287516001600160a01b03169460808a015163ffffffff16925115156040519561486b87612781565b8652602086019687526040860193845260608601916001600160401b03169586835260808101936001600160401b03169788855260a0820192835260c08201938d5f86526020019687515f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0360205260405f2093516001600160a01b03166001600160a01b031684546001600160a01b0319161784556001840192516001600160a01b03166001600160a01b031683546001600160a01b03191617835551908254905160c01b7fffffffffffffffff000000000000000000000000000000000000000000000000169160a01b77ffffffff000000000000000000000000000000000000000016906001600160a01b03161717905560020192516001600160401b03166001600160401b03166001600160401b03198454161783555115156149d490839068ff0000000000000000825491151560401b169068ff00000000000000001916179055565b51151581549060481b69ff000000000000000000169069ff00000000000000000019161790555194516001600160a01b031695516001600160a01b03169651935160405194855260208501526001600160401b031660408401526060830152608082015260a07f550576b2f9e0ac12dfd5dd2d5743b5b7f11f34302b5f6bec6ad60db81bd6a91891a4608001516001600160a01b03169283614a7592613229565b516001600160401b0316935160e001515f0b93813b1561238e57604051639c45c34b60e01b81526001600160a01b039490941660048501526001600160401b0316602484015260448301919091525f92830b60648301529091908290608490829084905af1801561238357614ae75750565b5f61372a9161279c565b505050505094509550509250508161372a947f8d61555dcf69ba745e97fdea78e2652d9cdd464ca521faad482fe796f6d5841c602080870151926001600160401b0360405191168152a352614fb3565b999c5099509c50505050509450809650602091500151906001600160a01b0384511692818101809111612891575f1981019081116128915781156136cd5761372a977fc8f90125c6a36c77a571201afc10310420481ab4895fadabb596d0ba71c22e3e92604092049082519182526020820152a352613938565b6305f5e0ff19016001600160401b03811161289157614bf5614bea6001600160401b036305f5e10093166136e1565b6305f5e0ff906128a5565b04614794565b6305f5e100811115614c0e57505f614794565b6305f5e100036001600160401b03811161289157614bf5614bea6001600160401b036305f5e10093166136e1565b90509161477f565b63ffffffff614c588160608d0151166153ee565b16620f42400390620f424082116128915761476d620f4240916147166001600160401b039463ffffffff8f6040015116906136b6565b9050510151166136a5565b635cffc5fb60e11b5f5260045ffd5b8161271003612710811161289157612710614ccd6001600160401b03928387166136fb565b04169291614696565b60a085015160028110156142405715908180614d78575b614d5b578115614d51575b50614d03575f61463f565b5094509450955050925061372a94507f31604f5790fbed7a37471cea010a8f08483441a6e1235ac48bb59337439a630d60206001600160a01b0381870151935116604051908152a252614fb3565b905051155f614cf8565b6001600160a01b038451166320a2097d60e11b5f5260045260245ffd5b5060c08601511515614ced565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019401920184929391614535565b5090845f5260205f20905f915b818310614dfc57505090602061451592820101614509565b6020919350806001915483858801015201910190918392614de4565b6020925061451594915060ff191682840152151560051b820101614509565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c60608201520194019201849293916143b7565b5090855f5260205f20905f915b818310614eae5750509060206143979282010161438b565b6020919350806001915483858801015201910190918392614e96565b6020925061439794915060ff191682840152151560051b82010161438b565b9190805f0b9081155f14614f15575050815b6001600160401b03811161238e576001600160401b031690565b5f821315614f4d57614f2a915060ff166136a5565b9182156136cd57614f418184614f489306906136b6565b92836136c3565b614efb565b505f0380805f0b0361289157614f68614f489160ff166136a5565b836136fb565b630100000d60e01b8152815160049290919082906020018483015e01015f815290565b6280000360e11b8152815160049290919082906020018483015e01015f815290565b8051612710614fd6614fcb60e08501938451906128a5565b60c0850151906136fb565b0481518181115f146151955750905b8190602084019161500883519460608701956001600160a01b038751169061530b565b1561518e575b806150d8575b7f4755f239bb1b047245415cb917deced72a3ca8baebcef109c396ff332ea6f50f91613c6f6001600160a01b038061504d858a516128a5565b96615065828a51169860408c0199848b511690613229565b6150a2828a51166001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b6150ad8782546128a5565b9055519651169651169651915192604051938493846040919493926060820195825260208201520152565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0385511692803b1561238e5760405163f3fef3a360e01b81526001600160a01b03949094166004850152602484018390525f908490604490829084905af1928315612383577f4755f239bb1b047245415cb917deced72a3ca8baebcef109c396ff332ea6f50f9361517e575b509150615014565b5f6151889161279c565b5f615176565b505f61500e565b905090614fe5565b6001600160401b03166001609d1b01806001609d1b11612891576001600160a01b031690565b60405163a9059cbb60e01b60208201526001600160a01b0392909216602483015260448083019390935291815261372a916151ff60648361279c565b615409565b9060405190602082019063095ea7b360e01b8252736b9e773128f453f5c2c60935ee2de2cbc5390a24602484015260448301526044825261524660648361279c565b5f806001600160a01b0385169284519082855af190615263612ce3565b826152d1575b50816152c6575b501561527a575050565b61372a916151ff60405163095ea7b360e01b6020820152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248201525f6044820152604481526152c060648261279c565b82615409565b90503b15155f615270565b805191925081159182156152e9575b5050905f615269565b819250906020918101031261238e5760206153049101613131565b5f806152e0565b6040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811660048301529092169392909190602082602481885afa918215612383575f926153ba575b508082109485159561537b575b50505050565b7f5180f0ad9e9bd2296de2ee38c85d11c56613fa73f8ee66792f26ac318f1274749260609260405192835260208301526040820152a25f808080615375565b9091506020813d6020116153e6575b816153d66020938361279c565b8101031261238e5751905f615368565b3d91506153c9565b63ffffffff60649116029063ffffffff821691820361289157565b906001600160a01b0361546a92165f806040519361542860408661279c565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1615464612ce3565b91615537565b8051908115918215615480575b50501561238e57565b819250906020918101031261238e57602061549b9101613131565b5f80615477565b51906001600160a01b038216820361238e57565b519060ff8216820361238e57565b9060ff8091169116039060ff821161289157565b9160ff811660ff83168181145f146154f1575050505090565b6001600160401b03949291111561551f576155186155136137ac9486936154c4565b6136a5565b91166136fb565b61553061551385926137ac956154c4565b91166136c3565b919250156155535781511561554a575090565b3b1561238e5790565b50805190811561238e57602001fdfe60a080604052346100455733608052610bd9908161004a8239608051818181607b01528181610187015281816103590152818161065a0152818161070101526108d20152f35b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c8063435354d3146108905780637bdae32e1461069b57806390a0827b146106365780639c45c34b1461030d578063de1a324a146100a25763eba61c0e1461005c575f80fd5b3461009f578060031936011261009f5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b503461009f57366003190161010081126102f55760a01361009f5760405160a0810181811067ffffffffffffffff8211176102f9576040526100e2610961565b918282526024359182151583036102f5576020810192835260443563ffffffff811681036102f1576040820152610117610974565b6060820152608435906001600160a01b03821682036102f1576080015260a43567ffffffffffffffff81168091036102f55760c4359067ffffffffffffffff82168092036102f15760e435946fffffffffffffffffffffffffffffffff86168096036102ed576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102ed5763ffffffff6101bc91166109d3565b935115159281156102de5782156102cf57916102509391600493506040519263ffffffff60208501971687526040840152606083015260808201525f945f60a0830152600260c083015260e082015260e0815261021b6101008261099d565b6020604051948592630100000160e01b83850152518091602485015e8201018281015f8152500301601f19810183528261099d565b7333333333333333333333333333333333333333333b156102cb575f61028a91604051809381926317938e1360e01b835260048301610a00565b0381837333333333333333333333333333333333333333335af180156102c0576102b2575080f35b6102be91505f9061099d565b005b6040513d5f823e3d90fd5b5f80fd5b6313c0a8df60e01b8152600490fd5b63017461b760e71b8152600490fd5b8380fd5b8280fd5b5080fd5b634e487b7160e01b83526041600452602483fd5b503461009f57608036600319011261009f57610327610987565b6024359067ffffffffffffffff82168092036102f1576044359060643580850b90818103610632576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361063257816105b4575050815b67ffffffffffffffff81116105b05767ffffffffffffffff169283156105a15790829185936103c0575b836103bc86610b0c565b5080f35b8061055857506001600160a01b031660405183806020830163095ea7b360e01b8152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248501528560448501526044845261041160648561099d565b83519082865af1610420610b28565b81610529575b508061051f575b156104c7575b5050736b9e773128f453f5c2c60935ee2de2cbc5390a243b156102f55760405190630acb7f4b60e21b8252600482015263ffffffff6024820152818160448183736b9e773128f453f5c2c60935ee2de2cbc5390a245af180156104bc576104a7575b50506103bc905b9050815f80806103b2565b816104b19161099d565b6102f557815f610495565b6040513d84823e3d90fd5b6105189161051360405163095ea7b360e01b6020820152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248201528660448201526044815261050d60648261099d565b82610a7b565b610a7b565b5f80610433565b50813b151561042d565b805180159250821561053e575b50505f610426565b6105519250602080918301019101610a63565b5f80610536565b909192506001609d1b01806001609d1b1161058d5791610588916001600160a01b03806103bc9695169116610a2a565b61049c565b634e487b7160e01b85526011600452602485fd5b6306506d5560e11b8552600485fd5b8480fd5b858213156105f6576105c9915060ff16610b67565b80156105e257808306830392831161058d578204610388565b634e487b7160e01b85526012600452602485fd5b5084038080860b0361058d5761060e9060ff16610b67565b82818102918183041490151761038857634e487b7160e01b85526011600452602485fd5b8580fd5b503461009f57604036600319011261009f57610650610987565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102f55761069890602435906001600160a01b03339116610a2a565b80f35b503461009f57608036600319011261009f578060043567ffffffffffffffff811680910361080d57602435906001600160a01b03821680920361088c576044359167ffffffffffffffff831680930361088a576106f6610974565b926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036105b05763ffffffff602094169263ffffffff841480610882575b156108105761079b93506040519285840152604083015260608201526060815261076960808261099d565b6004604051938492818401906280000360e11b82528051928391018483015e01015f815203601f19810183528261099d565b7333333333333333333333333333333333333333333b1561080d57816107d591604051809381926317938e1360e01b835260048301610a00565b0381837333333333333333333333333333333333333333335af180156104bc576107fc5750f35b816108069161099d565b61009f5780f35b50fd5b61087d93604051938685015286604085015263ffffffff6060850152608084015260a083015260c082015260c0815261084a60e08261099d565b600460405193849281840190630100000d60e01b82528051928391018483015e01015f815203601f19810183528261099d565b61079b565b50600161073e565b505b5050fd5b50346102cb5760403660031901126102cb576108aa610961565b602435906fffffffffffffffffffffffffffffffff82168092036102cb576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102cb576004610906610250926109d3565b926040519063ffffffff602083019516855260408201526040815261092c60608261099d565b6020604051948592630100000b60e01b83850152518091602485015e8201018281015f8152500301601f19810183528261099d565b6004359063ffffffff821682036102cb57565b6064359063ffffffff821682036102cb57565b600435906001600160a01b03821682036102cb57565b90601f8019910116810190811067ffffffffffffffff8211176109bf57604052565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff6127109116019063ffffffff82116109ec57565b634e487b7160e01b5f52601160045260245ffd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b610a61926001600160a01b036040519363a9059cbb60e01b602086015216602484015260448301526044825261051360648361099d565b565b908160209103126102cb575180151581036102cb5790565b906001600160a01b03610adc92165f8060405193610a9a60408661099d565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1610ad6610b28565b91610b78565b8051908115918215610af2575b5050156102cb57565b610b059250602080918301019101610a63565b5f80610ae9565b67ffffffffffffffff169067ffffffffffffffff82116109ec57565b3d15610b62573d9067ffffffffffffffff82116109bf5760405191610b57601f8201601f19166020018461099d565b82523d5f602084013e565b606090565b60ff16604d81116109ec57600a0a90565b91925015610b9457815115610b8b575090565b3b156102cb5790565b5080519081156102cb57602001fdfea2646970667358221220957eb92bf34977f1dbc400ded4a4688729e475d059af2473160b1dcd76c46a2064736f6c634300081e00336c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220b56f4a53d59578206a94ce74308306388bc2e012cfdab9326bc08a23f28b503f64736f6c634300081e0033bd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ffb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800"}
@@ -1 +1 @@
1
- {"abi":[{"type":"event","name":"EmergencyReceiveMessage","inputs":[{"name":"nonce","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"finalRecipent","type":"address","indexed":false,"internalType":"address"},{"name":"finalToken","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SponsoredCCTPDirectExecution","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"SponsoredDepositForBurn","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"CCTPMessageTransmitterFailed","inputs":[]},{"type":"error","name":"InvalidBurnToken","inputs":[]},{"type":"error","name":"InvalidDeadline","inputs":[]},{"type":"error","name":"InvalidDirectHandler","inputs":[]},{"type":"error","name":"InvalidNonce","inputs":[]},{"type":"error","name":"InvalidSignature","inputs":[]},{"type":"error","name":"InvalidSourceDomain","inputs":[]}],"bytecode":"0x"}
1
+ {"abi":[{"type":"event","name":"EmergencyReceiveMessage","inputs":[{"name":"nonce","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"finalRecipent","type":"address","indexed":false,"internalType":"address"},{"name":"finalToken","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SponsoredCCTPDirectExecution","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"SponsoredDepositForBurn","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"CCTPMessageTransmitterFailed","inputs":[]},{"type":"error","name":"InvalidBurnToken","inputs":[]},{"type":"error","name":"InvalidDeadline","inputs":[]},{"type":"error","name":"InvalidDirectHandler","inputs":[]},{"type":"error","name":"InvalidMintedAmount","inputs":[]},{"type":"error","name":"InvalidMintedToken","inputs":[]},{"type":"error","name":"InvalidNonce","inputs":[]},{"type":"error","name":"InvalidRecipient","inputs":[]},{"type":"error","name":"InvalidSignature","inputs":[]},{"type":"error","name":"InvalidSourceDomain","inputs":[]}],"bytecode":"0x"}
@@ -1 +1 @@
1
- {"abi":[{"type":"constructor","inputs":[{"name":"_cctpTokenMessenger","type":"address","internalType":"address"},{"name":"_sourceDomain","type":"uint32","internalType":"uint32"},{"name":"_signer","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"cctpTokenMessenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ITokenMessengerV2"}],"stateMutability":"view"},{"type":"function","name":"depositForBurn","inputs":[{"name":"quote","type":"tuple","internalType":"struct SponsoredCCTPInterface.SponsoredCCTPQuote","components":[{"name":"sourceDomain","type":"uint32","internalType":"uint32"},{"name":"destinationDomain","type":"uint32","internalType":"uint32"},{"name":"mintRecipient","type":"bytes32","internalType":"bytes32"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"burnToken","type":"bytes32","internalType":"bytes32"},{"name":"destinationCaller","type":"bytes32","internalType":"bytes32"},{"name":"maxFee","type":"uint256","internalType":"uint256"},{"name":"minFinalityThreshold","type":"uint32","internalType":"uint32"},{"name":"nonce","type":"bytes32","internalType":"bytes32"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","internalType":"uint256"},{"name":"finalRecipient","type":"bytes32","internalType":"bytes32"},{"name":"finalToken","type":"bytes32","internalType":"bytes32"},{"name":"destinationDex","type":"uint32","internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","internalType":"uint8"},{"name":"executionMode","type":"uint8","internalType":"uint8"},{"name":"actionData","type":"bytes","internalType":"bytes"}]},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSigner","inputs":[{"name":"_signer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sourceDomain","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"usedNonces","inputs":[{"name":"nonce","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"EmergencyReceiveMessage","inputs":[{"name":"nonce","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"finalRecipent","type":"address","indexed":false,"internalType":"address"},{"name":"finalToken","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SponsoredCCTPDirectExecution","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"SponsoredDepositForBurn","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"CCTPMessageTransmitterFailed","inputs":[]},{"type":"error","name":"InvalidBurnToken","inputs":[]},{"type":"error","name":"InvalidBytes32","inputs":[]},{"type":"error","name":"InvalidDeadline","inputs":[]},{"type":"error","name":"InvalidDirectHandler","inputs":[]},{"type":"error","name":"InvalidNonce","inputs":[]},{"type":"error","name":"InvalidSignature","inputs":[]},{"type":"error","name":"InvalidSourceDomain","inputs":[]}],"bytecode":"0x60c03461012957601f61120238819003918201601f19168301916001600160401b0383118484101761012d578084926060946040528339810103126101295761004781610141565b9060208101519063ffffffff821682036101295760406100679101610141565b5f8054336001600160a01b0319821681178355604051959394939290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a01b0390811660805260a0919091527ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b20080546001600160a01b031916929091169190911790556110ac908161015682396080518181816108600152610b81015260a0518181816104d50152610bc10152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101295756fe6080806040526004361015610012575f80fd5b5f905f3560e01c908163238ac93314610cfb575080636c19e78314610c6e578063715018a614610c0a5780638da5cb5b14610be55780638ddb4a8914610ba55780639748cf7c14610b62578063b9051e8614610157578063f2fde38b146100d15763feb6172414610081575f80fd5b346100ce5760203660031901126100ce5760ff604060209260043581527ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b20184522054166040519015158152f35b80fd5b50346100ce5760203660031901126100ce576004356001600160a01b038116809103610153576100ff610e45565b8015610153576001600160a01b0382548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b5080fd5b50346109d75760403660031901126109d75767ffffffffffffffff600435116109d757610240600435360360031901126109d757604051610240810181811067ffffffffffffffff821117610b4e576040526101b7600435600401610d5f565b81526101c7602460043501610d5f565b602082015260043560448101356040830152606481013560608301526084810135608083015260a481013560a083015260c481013560c083015261020d9060e401610d5f565b60e08201526004356101048101356101008301526101248101356101208301526101448101356101408301526101648101356101608301526101848101356101808301526101a48101356101a083015261026a906101c401610d5f565b6101c082015261027f6101e460043501610d70565b6101e082015261029461020460043501610d70565b610200820152610224600435013567ffffffffffffffff81116109d7576102c2906004369181350101610d9a565b61022082015260243567ffffffffffffffff81116109d7576102e8903690600401610d9a565b6001600160a01b037ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b200541663ffffffff83511663ffffffff60208501511660408501516060860151608087015160a08801519060c08901519263ffffffff60e08b01511694604051966020880198895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815261038d61012082610d3d565b5190206101008401516101208501516101408601516101608701516101808801516101a089015163ffffffff6101c08b0151169060ff6101e08c0151169260ff6102008d015116946102208d015160208151910120966040519860208a019a8b5260408a01526060890152608088015260a087015260c086015260e0850152610100840152610120830152610140820152610140815261042f61016082610d3d565b5190206040519060208201928352604082015260408152610451606082610d3d565b5190209061045f8383610f9b565b6005819492941015610b3a57159283610b27575b508215610a94575b505015610a85576101008201515f527ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b20160205260ff60405f205416610a76576101208201514211610a675763ffffffff82511663ffffffff7f000000000000000000000000000000000000000000000000000000000000000016809103610a58576101008301515f527ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b20160205260405f20600160ff1982541617905563ffffffff6020840151169081145f1461076c57506105596040830151610ea0565b803b1561075d5783906105896001600160a01b0361057a6080870151610ea0565b16826060870151913390610e58565b6001600160a01b0381163b15610153578160405180926301a8b88960e51b82526020600483015263ffffffff875116602483015263ffffffff60208801511660448301526040870151606483015260608701516084830152608087015160a483015260a087015160c483015260c087015160e483015263ffffffff60e0880151166101048301526101008701516101248301526101208701516101448301526101408701516101648301526101608701516101848301526101808701516101a48301526101a08701516101c483015263ffffffff6101c0880151166101e483015260ff6101e08801511661020483015260ff6102008801511661022483015281836001600160a01b03826106b06102208c0151610240610244840152610264830190610de0565b0393165af1801561075257610739575b50506101008201517f30caf30c7bf558ab873e29965daab68f7fa9eb6d015511b92e2a414419546eb6610180840151936101208101519361073361014083015191610160840151936101a08101519060ff6101e063ffffffff6101c0840151169201511691604051968796339b88610e04565b0390a480f35b8161074391610d3d565b61074e57825f6106c0565b8280fd5b6040513d84823e3d90fd5b630695ceed60e01b8452600484fd5b60608301516040840151608085015161078490610ea0565b60a08601519360c087015160e088015163ffffffff1694610100890151936101208a0151946101408b01518b6101608101516101808201516101a08301516101c084015163ffffffff16916101e085015160ff169361020086015160ff16956102200151966040519d8e9960208b015260408a01526060890152608088015260a087015260c086015260e085015261010084015261012083015261014082016101409052610160820161083691610de0565b03601f19810186526108489086610d3d565b6001600160a01b03169661085e8230338b610e58565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316946040516020810163095ea7b360e01b8152876024830152846044830152604482526108b5606483610d3d565b8a82515a925f8094938194f16108c9610f6c565b81610a29575b5080610a1f575b156109db575b50853b156109d7575f978894610936936040519b8c9a8b998a9863779b432d60e01b8a5260048a0152602489015260448801526064870152608486015260a485015260c484015261010060e4840152610104830190610de0565b03925af180156109cc576109b7575b506101008201517fea13ffabfd15f5cd4925423116c7a022f5173777ce2b2e8f0dfc6802effe2bba610180840151936101208101519361073361014083015191610160840151936101a08101519060ff6101e063ffffffff6101c0840151169201511691604051968796339b88610e04565b6109c49193505f90610d3d565b5f915f610945565b6040513d5f823e3d90fd5b5f80fd5b610a1990610a1360405163095ea7b360e01b60208201528960248201525f604482015260448152610a0d606482610d3d565b8c610edb565b8a610edb565b5f6108dc565b50893b15156108d6565b8051801592508215610a3e575b50505f6108cf565b610a519250602080918301019101610ec3565b5f80610a36565b631b91204960e01b5f5260045ffd5b631da7447960e21b5f5260045ffd5b633ab3447f60e11b5f5260045ffd5b638baa579f60e01b5f5260045ffd5b5f92509082916040516020810191630b135d3f60e11b8352602482015260406044820152610ad781610ac96064820189610de0565b03601f198101835282610d3d565b51915afa610ae3610f6c565b81610b19575b81610af7575b505f8061047b565b90506020818051810103126109d75760200151630b135d3f60e11b145f610aef565b905060208151101590610ae9565b6001600160a01b0316821492505f610473565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b346109d7575f3660031901126109d75760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346109d7575f3660031901126109d757602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346109d7575f3660031901126109d75760206001600160a01b035f5416604051908152f35b346109d7575f3660031901126109d757610c22610e45565b5f6001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346109d75760203660031901126109d7576004356001600160a01b0381168091036109d757610c9b610e45565b73ffffffffffffffffffffffffffffffffffffffff197ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b2005416177ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b200555f80f35b346109d7575f3660031901126109d7576020906001600160a01b037ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b20054168152f35b90601f8019910116810190811067ffffffffffffffff821117610b4e57604052565b359063ffffffff821682036109d757565b359060ff821682036109d757565b67ffffffffffffffff8111610b4e57601f01601f191660200190565b81601f820112156109d757803590610db182610d7e565b92610dbf6040519485610d3d565b828452602083830101116109d757815f926020809301838601378301015290565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b939460e09560ff94610e4299989463ffffffff9488526020880152604087015260608601521660808401521660a08201528160c08201520190610de0565b90565b6001600160a01b035f541633036109d757565b9091926001600160a01b03610e9e9481604051956323b872dd60e01b6020880152166024860152166044840152606483015260648252610e99608483610d3d565b610edb565b565b8060a01c610eb4576001600160a01b031690565b6379ec0ed760e11b5f5260045ffd5b908160209103126109d7575180151581036109d75790565b906001600160a01b03610f3c92165f8060405193610efa604086610d3d565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1610f36610f6c565b9161104b565b8051908115918215610f52575b5050156109d757565b610f659250602080918301019101610ec3565b5f80610f49565b3d15610f96573d90610f7d82610d7e565b91610f8b6040519384610d3d565b82523d5f602084013e565b606090565b9060418151145f14610fc757610fc391602082015190606060408401519301515f1a90610fd0565b9091565b50505f90600290565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611040576020935f9360ff60809460405194855216868401526040830152606082015282805260015afa156109cc575f516001600160a01b0381161561103857905f90565b505f90600190565b505050505f90600390565b919250156110675781511561105e575090565b3b156109d75790565b5080519081156109d757602001fdfea264697066735822122029592460dc299886fabf46dbec9fe401ef86d53322722c8b5a4f91b37b54ee9564736f6c634300081e0033"}
1
+ {"abi":[{"type":"constructor","inputs":[{"name":"_cctpTokenMessenger","type":"address","internalType":"address"},{"name":"_sourceDomain","type":"uint32","internalType":"uint32"},{"name":"_signer","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"cctpTokenMessenger","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ITokenMessengerV2"}],"stateMutability":"view"},{"type":"function","name":"depositForBurn","inputs":[{"name":"quote","type":"tuple","internalType":"struct SponsoredCCTPInterface.SponsoredCCTPQuote","components":[{"name":"sourceDomain","type":"uint32","internalType":"uint32"},{"name":"destinationDomain","type":"uint32","internalType":"uint32"},{"name":"mintRecipient","type":"bytes32","internalType":"bytes32"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"burnToken","type":"bytes32","internalType":"bytes32"},{"name":"destinationCaller","type":"bytes32","internalType":"bytes32"},{"name":"maxFee","type":"uint256","internalType":"uint256"},{"name":"minFinalityThreshold","type":"uint32","internalType":"uint32"},{"name":"nonce","type":"bytes32","internalType":"bytes32"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","internalType":"uint256"},{"name":"finalRecipient","type":"bytes32","internalType":"bytes32"},{"name":"finalToken","type":"bytes32","internalType":"bytes32"},{"name":"destinationDex","type":"uint32","internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","internalType":"uint8"},{"name":"executionMode","type":"uint8","internalType":"uint8"},{"name":"actionData","type":"bytes","internalType":"bytes"}]},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setSigner","inputs":[{"name":"_signer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"sourceDomain","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"usedNonces","inputs":[{"name":"nonce","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"EmergencyReceiveMessage","inputs":[{"name":"nonce","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"finalRecipent","type":"address","indexed":false,"internalType":"address"},{"name":"finalToken","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SponsoredCCTPDirectExecution","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"SponsoredDepositForBurn","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"originSender","type":"address","indexed":true,"internalType":"address"},{"name":"finalRecipient","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"quoteDeadline","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxBpsToSponsor","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"maxUserSlippageBps","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"destinationDex","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"accountCreationMode","type":"uint8","indexed":false,"internalType":"uint8"},{"name":"signature","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"CCTPMessageTransmitterFailed","inputs":[]},{"type":"error","name":"InvalidBurnToken","inputs":[]},{"type":"error","name":"InvalidBytes32","inputs":[]},{"type":"error","name":"InvalidDeadline","inputs":[]},{"type":"error","name":"InvalidDirectHandler","inputs":[]},{"type":"error","name":"InvalidMintedAmount","inputs":[]},{"type":"error","name":"InvalidMintedToken","inputs":[]},{"type":"error","name":"InvalidNonce","inputs":[]},{"type":"error","name":"InvalidRecipient","inputs":[]},{"type":"error","name":"InvalidSignature","inputs":[]},{"type":"error","name":"InvalidSourceDomain","inputs":[]}],"bytecode":"0x60c03461012957601f61120238819003918201601f19168301916001600160401b0383118484101761012d578084926060946040528339810103126101295761004781610141565b9060208101519063ffffffff821682036101295760406100679101610141565b5f8054336001600160a01b0319821681178355604051959394939290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a01b0390811660805260a0919091527ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b20080546001600160a01b031916929091169190911790556110ac908161015682396080518181816108600152610b81015260a0518181816104d50152610bc10152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101295756fe6080806040526004361015610012575f80fd5b5f905f3560e01c908163238ac93314610cfb575080636c19e78314610c6e578063715018a614610c0a5780638da5cb5b14610be55780638ddb4a8914610ba55780639748cf7c14610b62578063b9051e8614610157578063f2fde38b146100d15763feb6172414610081575f80fd5b346100ce5760203660031901126100ce5760ff604060209260043581527ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b20184522054166040519015158152f35b80fd5b50346100ce5760203660031901126100ce576004356001600160a01b038116809103610153576100ff610e45565b8015610153576001600160a01b0382548273ffffffffffffffffffffffffffffffffffffffff198216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b5080fd5b50346109d75760403660031901126109d75767ffffffffffffffff600435116109d757610240600435360360031901126109d757604051610240810181811067ffffffffffffffff821117610b4e576040526101b7600435600401610d5f565b81526101c7602460043501610d5f565b602082015260043560448101356040830152606481013560608301526084810135608083015260a481013560a083015260c481013560c083015261020d9060e401610d5f565b60e08201526004356101048101356101008301526101248101356101208301526101448101356101408301526101648101356101608301526101848101356101808301526101a48101356101a083015261026a906101c401610d5f565b6101c082015261027f6101e460043501610d70565b6101e082015261029461020460043501610d70565b610200820152610224600435013567ffffffffffffffff81116109d7576102c2906004369181350101610d9a565b61022082015260243567ffffffffffffffff81116109d7576102e8903690600401610d9a565b6001600160a01b037ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b200541663ffffffff83511663ffffffff60208501511660408501516060860151608087015160a08801519060c08901519263ffffffff60e08b01511694604051966020880198895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815261038d61012082610d3d565b5190206101008401516101208501516101408601516101608701516101808801516101a089015163ffffffff6101c08b0151169060ff6101e08c0151169260ff6102008d015116946102208d015160208151910120966040519860208a019a8b5260408a01526060890152608088015260a087015260c086015260e0850152610100840152610120830152610140820152610140815261042f61016082610d3d565b5190206040519060208201928352604082015260408152610451606082610d3d565b5190209061045f8383610f9b565b6005819492941015610b3a57159283610b27575b508215610a94575b505015610a85576101008201515f527ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b20160205260ff60405f205416610a76576101208201514211610a675763ffffffff82511663ffffffff7f000000000000000000000000000000000000000000000000000000000000000016809103610a58576101008301515f527ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b20160205260405f20600160ff1982541617905563ffffffff6020840151169081145f1461076c57506105596040830151610ea0565b803b1561075d5783906105896001600160a01b0361057a6080870151610ea0565b16826060870151913390610e58565b6001600160a01b0381163b15610153578160405180926301a8b88960e51b82526020600483015263ffffffff875116602483015263ffffffff60208801511660448301526040870151606483015260608701516084830152608087015160a483015260a087015160c483015260c087015160e483015263ffffffff60e0880151166101048301526101008701516101248301526101208701516101448301526101408701516101648301526101608701516101848301526101808701516101a48301526101a08701516101c483015263ffffffff6101c0880151166101e483015260ff6101e08801511661020483015260ff6102008801511661022483015281836001600160a01b03826106b06102208c0151610240610244840152610264830190610de0565b0393165af1801561075257610739575b50506101008201517f30caf30c7bf558ab873e29965daab68f7fa9eb6d015511b92e2a414419546eb6610180840151936101208101519361073361014083015191610160840151936101a08101519060ff6101e063ffffffff6101c0840151169201511691604051968796339b88610e04565b0390a480f35b8161074391610d3d565b61074e57825f6106c0565b8280fd5b6040513d84823e3d90fd5b630695ceed60e01b8452600484fd5b60608301516040840151608085015161078490610ea0565b60a08601519360c087015160e088015163ffffffff1694610100890151936101208a0151946101408b01518b6101608101516101808201516101a08301516101c084015163ffffffff16916101e085015160ff169361020086015160ff16956102200151966040519d8e9960208b015260408a01526060890152608088015260a087015260c086015260e085015261010084015261012083015261014082016101409052610160820161083691610de0565b03601f19810186526108489086610d3d565b6001600160a01b03169661085e8230338b610e58565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316946040516020810163095ea7b360e01b8152876024830152846044830152604482526108b5606483610d3d565b8a82515a925f8094938194f16108c9610f6c565b81610a29575b5080610a1f575b156109db575b50853b156109d7575f978894610936936040519b8c9a8b998a9863779b432d60e01b8a5260048a0152602489015260448801526064870152608486015260a485015260c484015261010060e4840152610104830190610de0565b03925af180156109cc576109b7575b506101008201517fea13ffabfd15f5cd4925423116c7a022f5173777ce2b2e8f0dfc6802effe2bba610180840151936101208101519361073361014083015191610160840151936101a08101519060ff6101e063ffffffff6101c0840151169201511691604051968796339b88610e04565b6109c49193505f90610d3d565b5f915f610945565b6040513d5f823e3d90fd5b5f80fd5b610a1990610a1360405163095ea7b360e01b60208201528960248201525f604482015260448152610a0d606482610d3d565b8c610edb565b8a610edb565b5f6108dc565b50893b15156108d6565b8051801592508215610a3e575b50505f6108cf565b610a519250602080918301019101610ec3565b5f80610a36565b631b91204960e01b5f5260045ffd5b631da7447960e21b5f5260045ffd5b633ab3447f60e11b5f5260045ffd5b638baa579f60e01b5f5260045ffd5b5f92509082916040516020810191630b135d3f60e11b8352602482015260406044820152610ad781610ac96064820189610de0565b03601f198101835282610d3d565b51915afa610ae3610f6c565b81610b19575b81610af7575b505f8061047b565b90506020818051810103126109d75760200151630b135d3f60e11b145f610aef565b905060208151101590610ae9565b6001600160a01b0316821492505f610473565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b346109d7575f3660031901126109d75760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346109d7575f3660031901126109d757602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346109d7575f3660031901126109d75760206001600160a01b035f5416604051908152f35b346109d7575f3660031901126109d757610c22610e45565b5f6001600160a01b03815473ffffffffffffffffffffffffffffffffffffffff1981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346109d75760203660031901126109d7576004356001600160a01b0381168091036109d757610c9b610e45565b73ffffffffffffffffffffffffffffffffffffffff197ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b2005416177ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b200555f80f35b346109d7575f3660031901126109d7576020906001600160a01b037ff0a1b42b86a218bb35dbc2254545839ce4b1bf1d3780b5099e3e0abfc7a5b20054168152f35b90601f8019910116810190811067ffffffffffffffff821117610b4e57604052565b359063ffffffff821682036109d757565b359060ff821682036109d757565b67ffffffffffffffff8111610b4e57601f01601f191660200190565b81601f820112156109d757803590610db182610d7e565b92610dbf6040519485610d3d565b828452602083830101116109d757815f926020809301838601378301015290565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b939460e09560ff94610e4299989463ffffffff9488526020880152604087015260608601521660808401521660a08201528160c08201520190610de0565b90565b6001600160a01b035f541633036109d757565b9091926001600160a01b03610e9e9481604051956323b872dd60e01b6020880152166024860152166044840152606483015260648252610e99608483610d3d565b610edb565b565b8060a01c610eb4576001600160a01b031690565b6379ec0ed760e11b5f5260045ffd5b908160209103126109d7575180151581036109d75790565b906001600160a01b03610f3c92165f8060405193610efa604086610d3d565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1610f36610f6c565b9161104b565b8051908115918215610f52575b5050156109d757565b610f659250602080918301019101610ec3565b5f80610f49565b3d15610f96573d90610f7d82610d7e565b91610f8b6040519384610d3d565b82523d5f602084013e565b606090565b9060418151145f14610fc757610fc391602082015190606060408401519301515f1a90610fd0565b9091565b50505f90600290565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611040576020935f9360ff60809460405194855216868401526040830152606082015282805260015afa156109cc575f516001600160a01b0381161561103857905f90565b505f90600190565b505050505f90600390565b919250156110675781511561105e575090565b3b156109d75790565b5080519081156109d757602001fdfea264697066735822122054c187f3eec68a0677276d53cee704886f5e43f33c110a188b3765f7c681e78964736f6c634300081e0033"}