@keep-network/tbtc-v2 1.8.0 → 1.8.2
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.
- package/artifacts/Bridge.json +1998 -1972
- package/artifacts/Bridge_v2_Implementation.json +2817 -0
- package/artifacts/Deposit.json +7 -7
- package/artifacts/Redemption.json +95 -171
- package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
- package/build/contracts/Timelock.sol/Timelock.dbg.json +1 -1
- package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
- package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.dbg.json +1 -1
- package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
- package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.json +2 -2
- package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
- package/build/contracts/bridge/Bridge.sol/Bridge.json +74 -48
- package/build/contracts/bridge/BridgeGovernance.sol/BridgeGovernance.dbg.json +1 -1
- package/build/contracts/bridge/BridgeGovernance.sol/BridgeGovernance.json +2 -2
- package/build/contracts/bridge/BridgeGovernanceParameters.sol/BridgeGovernanceParameters.dbg.json +1 -1
- package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
- package/build/contracts/bridge/BridgeState.sol/BridgeState.json +2 -2
- package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
- package/build/contracts/bridge/Deposit.sol/Deposit.json +2 -2
- package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
- package/build/contracts/bridge/DepositSweep.sol/DepositSweep.json +2 -2
- package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
- package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
- package/build/contracts/bridge/Fraud.sol/Fraud.json +2 -2
- package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
- package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.json +2 -2
- package/build/contracts/bridge/Redemption.sol/IRedemptionWatchtower.dbg.json +1 -1
- package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
- package/build/contracts/bridge/Redemption.sol/OutboundTx.json +2 -2
- package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
- package/build/contracts/bridge/Redemption.sol/Redemption.json +2 -2
- package/build/contracts/bridge/RedemptionWatchtower.sol/RedemptionWatchtower.dbg.json +1 -1
- package/build/contracts/bridge/RedemptionWatchtower.sol/RedemptionWatchtower.json +2 -2
- package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
- package/build/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.dbg.json +1 -1
- package/build/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.dbg.json +1 -1
- package/build/contracts/bridge/WalletProposalValidator.sol/WalletProposalValidator.dbg.json +1 -1
- package/build/contracts/bridge/WalletProposalValidator.sol/WalletProposalValidator.json +2 -2
- package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
- package/build/contracts/bridge/Wallets.sol/Wallets.json +2 -2
- package/build/contracts/cross-chain/AbstractL1BTCDepositor.sol/AbstractL1BTCDepositor.dbg.json +1 -1
- package/build/contracts/cross-chain/L2TBTC.sol/L2TBTC.dbg.json +1 -1
- package/build/contracts/cross-chain/starknet/StarkNetBitcoinDepositor.sol/StarkNetBitcoinDepositor.dbg.json +1 -1
- package/build/contracts/cross-chain/starknet/interfaces/IStarkGateBridge.sol/IStarkGateBridge.dbg.json +1 -1
- package/build/contracts/cross-chain/utils/Crosschain.sol/CrosschainUtils.dbg.json +1 -1
- package/build/contracts/cross-chain/wormhole/BTCDepositorWormhole.sol/BTCDepositorWormhole.dbg.json +1 -1
- package/build/contracts/cross-chain/wormhole/L1BTCDepositorWormhole.sol/L1BTCDepositorWormhole.dbg.json +1 -1
- package/build/contracts/cross-chain/wormhole/L2BTCDepositorWormhole.sol/L2BTCDepositorWormhole.dbg.json +1 -1
- package/build/contracts/cross-chain/wormhole/L2WormholeGateway.sol/L2WormholeGateway.dbg.json +1 -1
- package/build/contracts/cross-chain/wormhole/Wormhole.sol/IWormhole.dbg.json +1 -1
- package/build/contracts/cross-chain/wormhole/Wormhole.sol/IWormholeGateway.dbg.json +1 -1
- package/build/contracts/cross-chain/wormhole/Wormhole.sol/IWormholeReceiver.dbg.json +1 -1
- package/build/contracts/cross-chain/wormhole/Wormhole.sol/IWormholeRelayer.dbg.json +1 -1
- package/build/contracts/cross-chain/wormhole/Wormhole.sol/IWormholeTokenBridge.dbg.json +1 -1
- package/build/contracts/cross-chain/wormhole/Wormhole.sol/WormholeTypes.dbg.json +1 -1
- package/build/contracts/cross-chain/wormhole/Wormhole.sol/WormholeUtils.dbg.json +1 -1
- package/build/contracts/integrator/AbstractBTCDepositor.sol/AbstractBTCDepositor.dbg.json +1 -1
- package/build/contracts/integrator/IBridge.sol/IBridge.dbg.json +1 -1
- package/build/contracts/integrator/IBridge.sol/IBridgeTypes.dbg.json +1 -1
- package/build/contracts/integrator/ITBTCVault.sol/ITBTCVault.dbg.json +1 -1
- package/build/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.dbg.json +1 -1
- package/build/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.json +2 -2
- package/build/contracts/relay/LightRelay.sol/ILightRelay.dbg.json +1 -1
- package/build/contracts/relay/LightRelay.sol/LightRelay.dbg.json +1 -1
- package/build/contracts/relay/LightRelay.sol/RelayUtils.dbg.json +1 -1
- package/build/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.dbg.json +1 -1
- package/build/contracts/test/BankStub.sol/BankStub.dbg.json +1 -1
- package/build/contracts/test/BridgeStub.sol/BridgeStub.dbg.json +1 -1
- package/build/contracts/test/BridgeStub.sol/BridgeStub.json +74 -48
- package/build/contracts/test/HeartbeatStub.sol/HeartbeatStub.dbg.json +1 -1
- package/build/contracts/test/LightRelayStub.sol/LightRelayStub.dbg.json +1 -1
- package/build/contracts/test/MockBridgeForStarkNet.sol/MockBridgeForStarkNet.dbg.json +1 -1
- package/build/contracts/test/MockStarkGateBridge.sol/MockStarkGateBridge.dbg.json +1 -1
- package/build/contracts/test/MockTBTCBridge.sol/MockTBTCBridge.dbg.json +1 -1
- package/build/contracts/test/MockTBTCBridgeWithSweep.sol/MockTBTCBridgeWithSweep.dbg.json +1 -1
- package/build/contracts/test/MockTBTCToken.sol/MockTBTCToken.dbg.json +1 -1
- package/build/contracts/test/MockTBTCVault.sol/MockTBTCVault.dbg.json +1 -1
- package/build/contracts/test/ReceiveApprovalStub.sol/ReceiveApprovalStub.dbg.json +1 -1
- package/build/contracts/test/ReentrancyAttacker.sol/ReentrancyAttacker.dbg.json +1 -1
- package/build/contracts/test/SepoliaLightRelay.sol/SepoliaLightRelay.dbg.json +1 -1
- package/build/contracts/test/SystemTestRelay.sol/SystemTestRelay.dbg.json +1 -1
- package/build/contracts/test/SystemTestRelay.sol/SystemTestRelay.json +2 -2
- package/build/contracts/test/TestBTCDepositor.sol/MockBridge.dbg.json +1 -1
- package/build/contracts/test/TestBTCDepositor.sol/MockTBTCVault.dbg.json +1 -1
- package/build/contracts/test/TestBTCDepositor.sol/TestBTCDepositor.dbg.json +1 -1
- package/build/contracts/test/TestBitcoinTx.sol/TestBitcoinTx.dbg.json +1 -1
- package/build/contracts/test/TestBitcoinTx.sol/TestBitcoinTx.json +2 -2
- package/build/contracts/test/TestERC20.sol/TestERC20.dbg.json +1 -1
- package/build/contracts/test/TestERC721.sol/TestERC721.dbg.json +1 -1
- package/build/contracts/test/TestEcdsaLib.sol/TestEcdsaLib.dbg.json +1 -1
- package/build/contracts/test/WormholeBridgeStub.sol/WormholeBridgeStub.dbg.json +1 -1
- package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
- package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +1 -1
- package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
- package/build/contracts/vault/TBTCOptimisticMinting.sol/TBTCOptimisticMinting.dbg.json +1 -1
- package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
- package/build/contracts/vault/TBTCVault.sol/TBTCVault.json +2 -2
- package/contracts/bridge/Bridge.sol +34 -0
- package/contracts/bridge/Deposit.sol +7 -5
- package/deploy/80_upgrade_bridge_v2.ts +107 -54
- package/deploy/81_upgrade_bridge_v2_vault_fix.ts +160 -0
- package/export/artifacts/contracts/bridge/Bridge.sol/Bridge.json +4891 -4170
- package/export/artifacts/contracts/bridge/BridgeGovernance.sol/BridgeGovernance.json +207 -207
- package/export/artifacts/contracts/bridge/RedemptionWatchtower.sol/RedemptionWatchtower.json +104 -104
- package/export/artifacts/contracts/bridge/VendingMachine.sol/VendingMachine.json +67 -67
- package/export/artifacts/contracts/bridge/VendingMachineV2.sol/VendingMachineV2.json +24 -24
- package/export/artifacts/contracts/bridge/VendingMachineV3.sol/VendingMachineV3.json +26 -26
- package/export/artifacts/contracts/bridge/WalletProposalValidator.sol/WalletProposalValidator.json +72 -72
- package/export/artifacts/contracts/cross-chain/L2TBTC.sol/L2TBTC.json +40 -40
- package/export/artifacts/contracts/cross-chain/starknet/StarkNetBitcoinDepositor.sol/StarkNetBitcoinDepositor.json +3360 -3360
- package/export/artifacts/contracts/cross-chain/wormhole/BTCDepositorWormhole.sol/BTCDepositorWormhole.json +117 -117
- package/export/artifacts/contracts/cross-chain/wormhole/L1BTCDepositorWormhole.sol/L1BTCDepositorWormhole.json +140 -140
- package/export/artifacts/contracts/cross-chain/wormhole/L2BTCDepositorWormhole.sol/L2BTCDepositorWormhole.json +37 -37
- package/export/artifacts/contracts/cross-chain/wormhole/L2WormholeGateway.sol/L2WormholeGateway.json +51 -51
- package/export/artifacts/contracts/maintainer/MaintainerProxy.sol/MaintainerProxy.json +103 -103
- package/export/artifacts/contracts/relay/LightRelay.sol/LightRelay.json +57 -57
- package/export/artifacts/contracts/relay/LightRelayMaintainerProxy.sol/LightRelayMaintainerProxy.json +31 -31
- package/export/artifacts/contracts/test/BankStub.sol/BankStub.json +2 -2
- package/export/artifacts/contracts/test/BridgeStub.sol/BridgeStub.json +5130 -4414
- package/export/artifacts/contracts/test/HeartbeatStub.sol/HeartbeatStub.json +4 -4
- package/export/artifacts/contracts/test/LightRelayStub.sol/LightRelayStub.json +59 -59
- package/export/artifacts/contracts/test/MockBridgeForStarkNet.sol/MockBridgeForStarkNet.json +730 -730
- package/export/artifacts/contracts/test/MockStarkGateBridge.sol/MockStarkGateBridge.json +956 -956
- package/export/artifacts/contracts/test/MockTBTCBridge.sol/MockTBTCBridge.json +781 -781
- package/export/artifacts/contracts/test/MockTBTCBridgeWithSweep.sol/MockTBTCBridgeWithSweep.json +458 -458
- package/export/artifacts/contracts/test/MockTBTCToken.sol/MockTBTCToken.json +1273 -1273
- package/export/artifacts/contracts/test/MockTBTCVault.sol/MockTBTCVault.json +305 -305
- package/export/artifacts/contracts/test/ReceiveApprovalStub.sol/ReceiveApprovalStub.json +7 -7
- package/export/artifacts/contracts/test/ReentrancyAttacker.sol/ReentrancyAttacker.json +204 -204
- package/export/artifacts/contracts/test/SepoliaLightRelay.sol/SepoliaLightRelay.json +59 -59
- package/export/artifacts/contracts/test/SystemTestRelay.sol/SystemTestRelay.json +19 -19
- package/export/artifacts/contracts/test/TestBTCDepositor.sol/MockBridge.json +34 -34
- package/export/artifacts/contracts/test/TestBTCDepositor.sol/MockTBTCVault.json +20 -20
- package/export/artifacts/contracts/test/TestBTCDepositor.sol/TestBTCDepositor.json +52 -52
- package/export/artifacts/contracts/test/TestBitcoinTx.sol/TestBitcoinTx.json +124 -124
- package/export/artifacts/contracts/test/TestERC20.sol/TestERC20.json +6 -6
- package/export/artifacts/contracts/test/TestERC721.sol/TestERC721.json +8 -8
- package/export/artifacts/contracts/test/TestEcdsaLib.sol/TestEcdsaLib.json +4 -4
- package/export/artifacts/contracts/test/WormholeBridgeStub.sol/WormholeBridgeStub.json +37 -37
- package/export/artifacts/contracts/token/TBTC.sol/TBTC.json +2 -2
- package/export/artifacts/contracts/vault/DonationVault.sol/DonationVault.json +11 -11
- package/export/artifacts/contracts/vault/TBTCVault.sol/TBTCVault.json +144 -144
- package/export/deploy/80_upgrade_bridge_v2.js +127 -90
- package/export/deploy/81_upgrade_bridge_v2_vault_fix.js +211 -0
- package/export/typechain/AbstractBTCRedeemer.js +2 -0
- package/export/typechain/IBank.js +2 -0
- package/export/typechain/IL2WormholeGateway.js +2 -0
- package/export/typechain/INttManager.js +2 -0
- package/export/typechain/INttManagerWithExecutor.js +2 -0
- package/export/typechain/L1BTCDepositorNtt.js +2 -0
- package/export/typechain/L1BTCDepositorNttWithExecutor.js +2 -0
- package/export/typechain/L1BTCRedeemerWormhole.js +2 -0
- package/export/typechain/L2BTCRedeemerWormhole.js +2 -0
- package/export/typechain/MockBank.js +2 -0
- package/export/typechain/MockBridgeWithRebateStaking.js +2 -0
- package/export/typechain/MockL1BTCRedeemerWormhole.js +2 -0
- package/export/typechain/MockNttManager.js +2 -0
- package/export/typechain/MockNttManagerWithExecutor.js +2 -0
- package/export/typechain/NativeBTCDepositor.js +2 -0
- package/export/typechain/RebateStaking.js +2 -0
- package/export/typechain/TestBTCRedeemer.js +2 -0
- package/export/typechain/TestBTCUtilsHelper.js +2 -0
- package/export/typechain/TransceiverStructs.js +2 -0
- package/export/typechain/factories/AbstractBTCRedeemer__factory.js +204 -0
- package/export/typechain/factories/BridgeGovernance__factory.js +1 -1
- package/export/typechain/factories/BridgeState__factory.js +1 -1
- package/export/typechain/factories/BridgeStub__factory.js +27 -1
- package/export/typechain/factories/Bridge__factory.js +27 -1
- package/export/typechain/factories/DepositSweep__factory.js +1 -1
- package/export/typechain/factories/Deposit__factory.js +1 -1
- package/export/typechain/factories/Fraud__factory.js +1 -1
- package/export/typechain/factories/IBank__factory.js +138 -0
- package/export/typechain/factories/IL2WormholeGateway__factory.js +61 -0
- package/export/typechain/factories/INttManagerWithExecutor__factory.js +183 -0
- package/export/typechain/factories/INttManager__factory.js +51 -0
- package/export/typechain/factories/L1BTCDepositorNttWithExecutor__factory.js +1454 -0
- package/export/typechain/factories/L1BTCDepositorNtt__factory.js +920 -0
- package/export/typechain/factories/L1BTCRedeemerWormhole__factory.js +622 -0
- package/export/typechain/factories/L2BTCRedeemerWormhole__factory.js +348 -0
- package/export/typechain/factories/MaintainerProxy__factory.js +1 -1
- package/export/typechain/factories/MockBank__factory.js +248 -0
- package/export/typechain/factories/MockBridgeWithRebateStaking__factory.js +129 -0
- package/export/typechain/factories/MockL1BTCRedeemerWormhole__factory.js +638 -0
- package/export/typechain/factories/MockNttManagerWithExecutor__factory.js +423 -0
- package/export/typechain/factories/MockNttManager__factory.js +211 -0
- package/export/typechain/factories/MovingFunds__factory.js +1 -1
- package/export/typechain/factories/NativeBTCDepositor__factory.js +635 -0
- package/export/typechain/factories/RebateStaking__factory.js +720 -0
- package/export/typechain/factories/RedemptionWatchtower__factory.js +1 -1
- package/export/typechain/factories/Redemption__factory.js +1 -1
- package/export/typechain/factories/SystemTestRelay__factory.js +1 -1
- package/export/typechain/factories/TBTCVault__factory.js +1 -1
- package/export/typechain/factories/TestBTCRedeemer__factory.js +425 -0
- package/export/typechain/factories/TestBTCUtilsHelper__factory.js +109 -0
- package/export/typechain/factories/TestBitcoinTx__factory.js +1 -1
- package/export/typechain/factories/TransceiverStructs__factory.js +853 -0
- package/export/typechain/factories/WalletProposalValidator__factory.js +1 -1
- package/export/typechain/factories/Wallets__factory.js +1 -1
- package/export/typechain/index.js +40 -2
- package/export.json +40910 -0
- package/package.json +1 -1
|
@@ -1118,8 +1118,8 @@
|
|
|
1118
1118
|
"type": "function"
|
|
1119
1119
|
}
|
|
1120
1120
|
],
|
|
1121
|
-
"bytecode": "0x60e060405260008054600160a81b600160e81b031916650a8c0000007d60aa1b1790553480156200002f57600080fd5b5060405162003a4a38038062003a4a83398101604081905262000052916200020c565b806200005e33620001a3565b6001600160a01b038116620000c55760405162461bcd60e51b815260206004820152602260248201527f4272696467652063616e206e6f7420626520746865207a65726f206164647265604482015261737360f01b60648201526084015b60405180910390fd5b6001600160a01b039081166080528316620001235760405162461bcd60e51b815260206004820181905260248201527f42616e6b2063616e206e6f7420626520746865207a65726f20616464726573736044820152606401620000bc565b6001600160a01b0382166200018a5760405162461bcd60e51b815260206004820152602660248201527f5442544320746f6b656e2063616e206e6f7420626520746865207a65726f206160448201526564647265737360d01b6064820152608401620000bc565b506001600160a01b0391821660a0521660c05262000260565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200020957600080fd5b50565b6000806000606084860312156200022257600080fd5b83516200022f81620001f3565b60208501519093506200024281620001f3565b60408501519092506200025581620001f3565b809150509250925092565b60805160a05160c05161372e6200031c60003960008181610733015281816108bb01528181610bf401528181611db0015281816120f10152818161298701528181612af20152612c3901526000818161057901528181610c6101528181610dbc01528181610e4a01528181610f4f0152818161216d015281816122a50152818161239601528181612b500152612c9701526000818161075a015281816113f20152818161158e01528181611b620152612b7f015261372e6000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c80638532c511116101b2578063a410d29b116100f9578063c36b32b7116100a2578063e5d3d7141161007c578063e5d3d7141461072e578063e78cea9214610755578063f2fde38b1461077c578063fc4e51f61461078f57600080fd5b8063c36b32b7146106ff578063c7ba034714610712578063d0ff65b51461071e57600080fd5b8063b0b54895116100d3578063b0b54895146106cd578063b9f78798146106d7578063bc7b6b99146106f757600080fd5b8063a410d29b1461068f578063a526d83b14610697578063aa271e1a146106aa57600080fd5b8063951315261161015b5780639a508c8e116101355780639a508c8e1461066b578063a0712d6814610673578063a0cceb951461068657600080fd5b80639513152614610647578063983b2d56146106505780639a4e36d51461066357600080fd5b8063897f712c1161018c578063897f712c1461060f5780638da5cb5b146106235780638f4ffcb11461063457600080fd5b80638532c511146105d95780638623ec7b146105e957806388aaf0c8146105fc57600080fd5b806347c1ffdb116102815780636c626aa41161022a5780637445a5a0116102045780637445a5a01461054657806376cdb03b1461057457806380df5ed2146105b3578063820b5513146105c657600080fd5b80636c626aa4146104d0578063714041561461052b578063715018a61461053e57600080fd5b806364e779b11161025b57806364e779b1146104955780636abe3a6c146104a85780636b32810b146104bb57600080fd5b806347c1ffdb1461046357806353dce4df1461046b5780635ae2da461461047e57600080fd5b80633092afd5116102e3578063461c6373116102bd578063461c63731461042a578063475d05701461043d578063479aa9271461045057600080fd5b80633092afd5146103fb578063317dfa761461040e57806341906ab71461042157600080fd5b80631171bda9116103145780631171bda9146103b4578063124f65bd146103c75780632e73e398146103e857600080fd5b806309b53f511461033b5780630c68ba211461036c5780630f3425731461039f575b600080fd5b60005461035290600160a81b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61038f61037a366004613010565b60036020526000908152604090205460ff1681565b6040519015158152602001610363565b6103b26103ad366004613046565b6107a2565b005b6103b26103c2366004613063565b6107fd565b6103da6103d53660046130a4565b61081e565b604051908152602001610363565b6103b26103f636600461311d565b610883565b6103b2610409366004613010565b610931565b6103b261041c366004613063565b610ba5565b6103da60095481565b6103b26104383660046131d5565b610c56565b6103b261044b366004613241565b610db1565b6103b261045e366004613010565b610fb2565b6103b2611077565b6103b2610479366004613291565b611115565b60005461035290600160c81b900463ffffffff1681565b6103b26104a33660046132dd565b611136565b6103b26104b63660046130a4565b611153565b6104c36116a0565b60405161036391906132f6565b61050a6104de3660046132dd565b60046020526000908152604090205467ffffffffffffffff808216916801000000000000000090041682565b6040805167ffffffffffffffff938416815292909116602083015201610363565b6103b2610539366004613010565b611702565b6103b26117bb565b6105596105543660046132dd565b6117cf565b60408051938452602084019290925290820152606001610363565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610363565b6103b26105c13660046130a4565b611807565b6103b26105d43660046130a4565b6119f3565b6006546103529063ffffffff1681565b61059b6105f73660046132dd565b611d84565b600a5461059b906001600160a01b031681565b60005461038f90600160a01b900460ff1681565b6000546001600160a01b031661059b565b6103b2610642366004613343565b611dae565b6103da600b5481565b6103b261065e366004613010565b611ec3565b6103b2611fc0565b6103b261205e565b6103b26106813660046132dd565b612275565b6103da60075481565b6103b26123cd565b6103b26106a5366004613010565b612475565b61038f6106b8366004613010565b60016020526000908152604090205460ff1681565b6103da6201518081565b6103da6106e5366004613010565b60056020526000908152604090205481565b6103b2612558565b6103b261070d366004613046565b6125ef565b6103da6402540be40081565b6008546103529063ffffffff1681565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b6103b261078a366004613010565b612643565b6103b261079d36600461311d565b6126d3565b6107aa612728565b426009556008805463ffffffff191663ffffffff83169081179091556040519081527f682bc0fb7e0d6bcb974cf556b95f68533cafc411d83d9f33ac192ccf45dda605906020015b60405180910390a150565b610805612728565b6108196001600160a01b0384168383612782565b505050565b6000828260405160200161086192919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c90505b92915050565b61088b612728565b6040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fc4e51f6906108f890889088908890889088906004016133c2565b600060405180830381600087803b15801561091257600080fd5b505af1158015610926573d6000803e3d6000fd5b505050505050505050565b336109446000546001600160a01b031690565b6001600160a01b0316148061096857503360009081526003602052604090205460ff165b6109df5760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865206f776e6572206f7220677561726460448201527f69616e000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16610a475760405162461bcd60e51b815260206004820152601c60248201527f546869732061646472657373206973206e6f742061206d696e7465720000000060448201526064016109d6565b6001600160a01b0381166000908152600160205260408120805460ff191690555b600254811015610b6d57816001600160a01b031660028281548110610a8f57610a8f6133f5565b6000918252602090912001546001600160a01b031603610b5b5760028054610ab990600190613421565b81548110610ac957610ac96133f5565b600091825260209091200154600280546001600160a01b039092169183908110610af557610af56133f5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506002805480610b3457610b34613434565b600082815260209020810160001990810180546001600160a01b0319169055019055610b6d565b80610b658161344a565b915050610a68565b506040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b610bad612728565b6040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631171bda9906064015b600060405180830381600087803b158015610c3957600080fd5b505af1158015610c4d573d6000803e3d6000fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cce5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016109d6565b6000839003610d1f5760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f72732073706563696669656400000000000000000060448201526064016109d6565b60005b83811015610daa576000858583818110610d3e57610d3e6133f5565b9050602002016020810190610d539190613010565b90506000848484818110610d6957610d696133f5565b905060200201359050610d9582610d90846402540be40085610d8b9190613463565b612802565b612905565b50508080610da29061344a565b915050610d22565b5050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e295760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016109d6565b6040516370a0823160e01b81526001600160a01b03858116600483015284917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb7919061347a565b1015610f105760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016109d6565b610f2384610d906402540be40086613463565b604051631f1b6d2760e21b81526001600160a01b038581166004830152306024830152604482018590527f00000000000000000000000000000000000000000000000000000000000000001690637c6db49c906064015b600060405180830381600087803b158015610f9457600080fd5b505af1158015610fa8573d6000803e3d6000fd5b5050505050505050565b610fba612728565b6001600160a01b0381166110105760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f60448201526064016109d6565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a142600b55600a80546001600160a01b0319166001600160a01b0392909216919091179055565b61107f612728565b60075461108f81620151806129e0565b600654600080547fffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffff1663ffffffff909216600160a81b81029290921790556040519081527fa7f4ce7c3586e2000cdec6b25c5e7d0b20f9b4f435aa22d9c1feb32dbb506f779060200160405180910390a1506006805463ffffffff191690556000600755565b6000611120846117cf565b5050905061113033828585612a89565b50505050565b6000611141826117cf565b5050905061114f3382612bd0565b5050565b3360009081526001602052604090205460ff166111b25760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e7465720000000000000000000060448201526064016109d6565b600054600160a01b900460ff161561120c5760405162461bcd60e51b815260206004820152601960248201527f4f7074696d6973746963206d696e74696e67207061757365640000000000000060448201526064016109d6565b6000611218838361081e565b600081815260046020526040812080549293509167ffffffffffffffff1690036112aa5760405162461bcd60e51b815260206004820152603060248201527f4f7074696d6973746963206d696e74696e67206e6f742072657175657374656460448201527f20666f7220746865206465706f7369740000000000000000000000000000000060648201526084016109d6565b805468010000000000000000900467ffffffffffffffff16156113355760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c72656164792066696e616c60448201527f697a656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b600054815461135b91600160c81b900463ffffffff169067ffffffffffffffff16613493565b67ffffffffffffffff1642116113d95760405162461bcd60e51b815260206004820152602b60248201527f4f7074696d6973746963206d696e74696e672064656c617920686173206e6f7460448201527f207061737365642079657400000000000000000000000000000000000000000060648201526084016109d6565b604051630b02c43d60e41b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160e060405180830381865afa158015611441573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146591906134e7565b90508060a0015163ffffffff166000146114c15760405162461bcd60e51b815260206004820152601c60248201527f546865206465706f73697420697320616c72656164792073776570740000000060448201526064016109d6565b60006402540be400826080015183602001516114dd91906135a1565b67ffffffffffffffff166114f19190613463565b6000805491925090600160a81b900463ffffffff1661151157600061152b565b60005461152b90600160a81b900463ffffffff16836135d8565b83516001600160a01b0316600090815260056020526040812054919250906115549084906135ec565b84516001600160a01b03166000908152600560205260409020819055845190915061158390610d908486613421565b8115611614576116147f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160e91906135ff565b83612905565b84547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff160217855583516040518281526001600160a01b0390911690879033907f2cffebf26d639426e79514d100febae8b2c63e700e5dc0fa6c88a129633506369060200160405180910390a45050505050505050565b606060028054806020026020016040519081016040528092919081815260200182805480156116f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116da575b5050505050905090565b61170a612728565b6001600160a01b03811660009081526003602052604090205460ff166117725760405162461bcd60e51b815260206004820152601e60248201527f546869732061646472657373206973206e6f74206120677561726469616e000060448201526064016109d6565b6001600160a01b038116600081815260036020526040808220805460ff19169055517fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c529190a250565b6117c3612728565b6117cd6000612d1f565b565b600080806117e26402540be4008561361c565b91506117ee8285613421565b92506117ff6402540be400846135d8565b929491935050565b3360009081526003602052604090205460ff166118665760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206e6f74206120677561726469616e000000000000000060448201526064016109d6565b6000611872838361081e565b600081815260046020526040812080549293509167ffffffffffffffff1690036119045760405162461bcd60e51b815260206004820152603060248201527f4f7074696d6973746963206d696e74696e67206e6f742072657175657374656460448201527f20666f7220746865206465706f7369740000000000000000000000000000000060648201526084016109d6565b805468010000000000000000900467ffffffffffffffff161561198f5760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c72656164792066696e616c60448201527f697a656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b60008281526004602052604080822080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905551839133917f1256b41d4b18d922811c358ab80cb0375aae28f45373de35cfda580662193fcd9190a350505050565b3360009081526001602052604090205460ff16611a525760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e7465720000000000000000000060448201526064016109d6565b600054600160a01b900460ff1615611aac5760405162461bcd60e51b815260206004820152601960248201527f4f7074696d6973746963206d696e74696e67207061757365640000000000000060448201526064016109d6565b6000611ab8838361081e565b600081815260046020526040902080549192509067ffffffffffffffff1615611b495760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c726561647920726571756560448201527f7374656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b604051630b02c43d60e41b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160e060405180830381865afa158015611bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd591906134e7565b9050806040015163ffffffff16600003611c3b5760405162461bcd60e51b815260206004820152602160248201527f546865206465706f73697420686173206e6f74206265656e2072657665616c656044820152601960fa1b60648201526084016109d6565b60a081015163ffffffff1615611c935760405162461bcd60e51b815260206004820152601c60248201527f546865206465706f73697420697320616c72656164792073776570740000000060448201526064016109d6565b60608101516001600160a01b03163014611cef5760405162461bcd60e51b815260206004820152601860248201527f556e6578706563746564207661756c742061646472657373000000000000000060448201526064016109d6565b815467ffffffffffffffff19164267ffffffffffffffff908116919091178355815160208301516001600160a01b0390911691859133917f36f39c606d55d7dd2a05b8c4e41e9a6ca8c501cea10009c1762f6826a146e05591611d59916402540be4009116613463565b60408051918252602082018b905263ffffffff8a169082015260600160405180910390a45050505050565b60028181548110611d9457600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611e2f5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f74205442544300000000000000000000000000000060448201526064016109d6565b336001600160a01b03841614611e875760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f776564000000000000000060448201526064016109d6565b6000611e92856117cf565b50909150506000829003611eaf57611eaa8682612bd0565b611ebb565b611ebb86828585612a89565b505050505050565b611ecb612728565b6001600160a01b03811660009081526001602052604090205460ff1615611f345760405162461bcd60e51b815260206004820181905260248201527f54686973206164647265737320697320616c72656164792061206d696e74657260448201526064016109d6565b6001600160a01b0381166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b03191684179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b611fc8612728565b600954611fd881620151806129e0565b600854600080547fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff1663ffffffff909216600160c81b81029290921790556040519081527ff52de3377e3ae270d1e38f99b9b8d587814643811516ea55ba4d597f9950d4ec9060200160405180910390a1506008805463ffffffff191690556000600955565b612066612728565b600b5461207681620151806129e0565b600a546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a1600a546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063f2fde38b90602401600060405180830381600087803b15801561213757600080fd5b505af115801561214b573d6000803e3d6000fd5b5050600a546040516370a0823160e01b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811694506356a6d9ef93509091169083906370a0823190602401602060405180830381865afa1580156121c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e7919061347a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561224557600080fd5b505af1158015612259573d6000803e3d6000fd5b5050600a80546001600160a01b031916905550506000600b5550565b600080612281836117cf565b6040516370a0823160e01b8152336004820152929450925082916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691506370a0823190602401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612311919061347a565b101561236a5760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016109d6565b6123743383612905565b604051631f1b6d2760e21b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637c6db49c90606401610c1f565b6123d5612728565b600054600160a01b900460ff16156124395760405162461bcd60e51b815260206004820152602160248201527f4f7074696d6973746963206d696e74696e6720616c72656164792070617573656044820152601960fa1b60648201526084016109d6565b6000805460ff60a01b1916600160a01b1781556040517f23a83c8aeda8c831401c17b5bfb8b2ead79fcfe9c027fe34a4f8576e2c7c74cc9190a1565b61247d612728565b6001600160a01b03811660009081526003602052604090205460ff161561250c5760405162461bcd60e51b815260206004820152602260248201527f54686973206164647265737320697320616c726561647920612067756172646960448201527f616e00000000000000000000000000000000000000000000000000000000000060648201526084016109d6565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f9699190a250565b612560612728565b600054600160a01b900460ff166125b95760405162461bcd60e51b815260206004820181905260248201527f4f7074696d6973746963206d696e74696e67206973206e6f742070617573656460448201526064016109d6565b6000805460ff60a01b191681556040517fcb27470ed9568d9eeb8939707bafc19404d908a26ce5f468a6aa781024fd6a839190a1565b6125f7612728565b426007556006805463ffffffff191663ffffffff83169081179091556040519081527f0dbfec7f12acffbb5cec595ac4370907eaf84caa7025dd71f4021433be79eba9906020016107f2565b61264b612728565b6001600160a01b0381166126c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109d6565b6126d081612d1f565b50565b6126db612728565b6040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b88d4fde906108f890309088908890889088906004016133c2565b6000546001600160a01b031633146117cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109d6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610819908490612d6f565b6001600160a01b03821660009081526005602052604081205480820361282b578291505061087d565b80831115612892576001600160a01b0384166000818152600560209081526040808320839055519182527fb30abd1b9e3d58cd8525b3d5c5aa002db1e43a150af5b172a8d16efcc7a141f8910160405180910390a261288a8184613421565b91505061087d565b61289c8382613421565b6001600160a01b0385166000818152600560205260409020919091557fb30abd1b9e3d58cd8525b3d5c5aa002db1e43a150af5b172a8d16efcc7a141f86128e38584613421565b60405190815260200160405180910390a2600091505061087d565b5092915050565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8260405161294091815260200190565b60405180910390a26040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015b600060405180830381600087803b1580156129cc57600080fd5b505af1158015611ebb573d6000803e3d6000fd5b60008211612a305760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e6974696174656400000000000000000000000060448201526064016109d6565b80612a3b8342613421565b101561114f5760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c617073656460448201526064016109d6565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051612ac491815260200190565b60405180910390a260405163079cc67960e41b81526001600160a01b038581166004830152602482018590527f000000000000000000000000000000000000000000000000000000000000000016906379cc679090604401600060405180830381600087803b158015612b3657600080fd5b505af1158015612b4a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634a38757e7f00000000000000000000000000000000000000000000000000000000000000006402540be40086612baf91906135d8565b85856040518563ffffffff1660e01b8152600401610f7a9493929190613630565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b882604051612c0b91815260200190565b60405180910390a260405163079cc67960e41b81526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906379cc679090604401600060405180830381600087803b158015612c7d57600080fd5b505af1158015612c91573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356a6d9ef836402540be40084612cd691906135d8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016129b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000612dc4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612e549092919063ffffffff16565b8051909150156108195780806020019051810190612de29190613663565b6108195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109d6565b6060612e638484600085612e6b565b949350505050565b606082471015612ee35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109d6565b600080866001600160a01b03168587604051612eff91906136a9565b60006040518083038185875af1925050503d8060008114612f3c576040519150601f19603f3d011682016040523d82523d6000602084013e612f41565b606091505b5091509150612f5287838387612f5d565b979650505050505050565b60608315612fcc578251600003612fc5576001600160a01b0385163b612fc55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109d6565b5081612e63565b612e638383815115612fe15781518083602001fd5b8060405162461bcd60e51b81526004016109d691906136c5565b6001600160a01b03811681146126d057600080fd5b60006020828403121561302257600080fd5b813561302d81612ffb565b9392505050565b63ffffffff811681146126d057600080fd5b60006020828403121561305857600080fd5b813561302d81613034565b60008060006060848603121561307857600080fd5b833561308381612ffb565b9250602084013561309381612ffb565b929592945050506040919091013590565b600080604083850312156130b757600080fd5b8235915060208301356130c981613034565b809150509250929050565b60008083601f8401126130e657600080fd5b50813567ffffffffffffffff8111156130fe57600080fd5b60208301915083602082850101111561311657600080fd5b9250929050565b60008060008060006080868803121561313557600080fd5b853561314081612ffb565b9450602086013561315081612ffb565b935060408601359250606086013567ffffffffffffffff81111561317357600080fd5b61317f888289016130d4565b969995985093965092949392505050565b60008083601f8401126131a257600080fd5b50813567ffffffffffffffff8111156131ba57600080fd5b6020830191508360208260051b850101111561311657600080fd5b600080600080604085870312156131eb57600080fd5b843567ffffffffffffffff8082111561320357600080fd5b61320f88838901613190565b9096509450602087013591508082111561322857600080fd5b5061323587828801613190565b95989497509550505050565b6000806000806060858703121561325757600080fd5b843561326281612ffb565b935060208501359250604085013567ffffffffffffffff81111561328557600080fd5b613235878288016130d4565b6000806000604084860312156132a657600080fd5b83359250602084013567ffffffffffffffff8111156132c457600080fd5b6132d0868287016130d4565b9497909650939450505050565b6000602082840312156132ef57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156133375783516001600160a01b031683529284019291840191600101613312565b50909695505050505050565b60008060008060006080868803121561335b57600080fd5b853561336681612ffb565b945060208601359350604086013561337d81612ffb565b9250606086013567ffffffffffffffff81111561317357600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b03808816835280871660208401525084604083015260806060830152612f52608083018486613399565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561087d5761087d61340b565b634e487b7160e01b600052603160045260246000fd5b60006001820161345c5761345c61340b565b5060010190565b808202811582820484141761087d5761087d61340b565b60006020828403121561348c57600080fd5b5051919050565b67ffffffffffffffff8181168382160190808211156128fe576128fe61340b565b80516134bf81612ffb565b919050565b805167ffffffffffffffff811681146134bf57600080fd5b80516134bf81613034565b600060e082840312156134f957600080fd5b60405160e0810181811067ffffffffffffffff8211171561352a57634e487b7160e01b600052604160045260246000fd5b604052613536836134b4565b8152613544602084016134c4565b6020820152613555604084016134dc565b6040820152613566606084016134b4565b6060820152613577608084016134c4565b608082015261358860a084016134dc565b60a082015260c083015160c08201528091505092915050565b67ffffffffffffffff8281168282160390808211156128fe576128fe61340b565b634e487b7160e01b600052601260045260246000fd5b6000826135e7576135e76135c2565b500490565b8082018082111561087d5761087d61340b565b60006020828403121561361157600080fd5b815161302d81612ffb565b60008261362b5761362b6135c2565b500690565b6001600160a01b0385168152836020820152606060408201526000613659606083018486613399565b9695505050505050565b60006020828403121561367557600080fd5b8151801515811461302d57600080fd5b60005b838110156136a0578181015183820152602001613688565b50506000910152565b600082516136bb818460208701613685565b9190910192915050565b60208152600082518060208401526136e4816040850160208701613685565b601f01601f1916919091016040019291505056fea264697066735822122096f3c5aa9034e76be31911fe56250e678f8a0e9cb1ded1db9bc00345a94d656364736f6c63430008110033",
|
|
1122
|
-
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103365760003560e01c80638532c511116101b2578063a410d29b116100f9578063c36b32b7116100a2578063e5d3d7141161007c578063e5d3d7141461072e578063e78cea9214610755578063f2fde38b1461077c578063fc4e51f61461078f57600080fd5b8063c36b32b7146106ff578063c7ba034714610712578063d0ff65b51461071e57600080fd5b8063b0b54895116100d3578063b0b54895146106cd578063b9f78798146106d7578063bc7b6b99146106f757600080fd5b8063a410d29b1461068f578063a526d83b14610697578063aa271e1a146106aa57600080fd5b8063951315261161015b5780639a508c8e116101355780639a508c8e1461066b578063a0712d6814610673578063a0cceb951461068657600080fd5b80639513152614610647578063983b2d56146106505780639a4e36d51461066357600080fd5b8063897f712c1161018c578063897f712c1461060f5780638da5cb5b146106235780638f4ffcb11461063457600080fd5b80638532c511146105d95780638623ec7b146105e957806388aaf0c8146105fc57600080fd5b806347c1ffdb116102815780636c626aa41161022a5780637445a5a0116102045780637445a5a01461054657806376cdb03b1461057457806380df5ed2146105b3578063820b5513146105c657600080fd5b80636c626aa4146104d0578063714041561461052b578063715018a61461053e57600080fd5b806364e779b11161025b57806364e779b1146104955780636abe3a6c146104a85780636b32810b146104bb57600080fd5b806347c1ffdb1461046357806353dce4df1461046b5780635ae2da461461047e57600080fd5b80633092afd5116102e3578063461c6373116102bd578063461c63731461042a578063475d05701461043d578063479aa9271461045057600080fd5b80633092afd5146103fb578063317dfa761461040e57806341906ab71461042157600080fd5b80631171bda9116103145780631171bda9146103b4578063124f65bd146103c75780632e73e398146103e857600080fd5b806309b53f511461033b5780630c68ba211461036c5780630f3425731461039f575b600080fd5b60005461035290600160a81b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61038f61037a366004613010565b60036020526000908152604090205460ff1681565b6040519015158152602001610363565b6103b26103ad366004613046565b6107a2565b005b6103b26103c2366004613063565b6107fd565b6103da6103d53660046130a4565b61081e565b604051908152602001610363565b6103b26103f636600461311d565b610883565b6103b2610409366004613010565b610931565b6103b261041c366004613063565b610ba5565b6103da60095481565b6103b26104383660046131d5565b610c56565b6103b261044b366004613241565b610db1565b6103b261045e366004613010565b610fb2565b6103b2611077565b6103b2610479366004613291565b611115565b60005461035290600160c81b900463ffffffff1681565b6103b26104a33660046132dd565b611136565b6103b26104b63660046130a4565b611153565b6104c36116a0565b60405161036391906132f6565b61050a6104de3660046132dd565b60046020526000908152604090205467ffffffffffffffff808216916801000000000000000090041682565b6040805167ffffffffffffffff938416815292909116602083015201610363565b6103b2610539366004613010565b611702565b6103b26117bb565b6105596105543660046132dd565b6117cf565b60408051938452602084019290925290820152606001610363565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610363565b6103b26105c13660046130a4565b611807565b6103b26105d43660046130a4565b6119f3565b6006546103529063ffffffff1681565b61059b6105f73660046132dd565b611d84565b600a5461059b906001600160a01b031681565b60005461038f90600160a01b900460ff1681565b6000546001600160a01b031661059b565b6103b2610642366004613343565b611dae565b6103da600b5481565b6103b261065e366004613010565b611ec3565b6103b2611fc0565b6103b261205e565b6103b26106813660046132dd565b612275565b6103da60075481565b6103b26123cd565b6103b26106a5366004613010565b612475565b61038f6106b8366004613010565b60016020526000908152604090205460ff1681565b6103da6201518081565b6103da6106e5366004613010565b60056020526000908152604090205481565b6103b2612558565b6103b261070d366004613046565b6125ef565b6103da6402540be40081565b6008546103529063ffffffff1681565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b6103b261078a366004613010565b612643565b6103b261079d36600461311d565b6126d3565b6107aa612728565b426009556008805463ffffffff191663ffffffff83169081179091556040519081527f682bc0fb7e0d6bcb974cf556b95f68533cafc411d83d9f33ac192ccf45dda605906020015b60405180910390a150565b610805612728565b6108196001600160a01b0384168383612782565b505050565b6000828260405160200161086192919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c90505b92915050565b61088b612728565b6040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fc4e51f6906108f890889088908890889088906004016133c2565b600060405180830381600087803b15801561091257600080fd5b505af1158015610926573d6000803e3d6000fd5b505050505050505050565b336109446000546001600160a01b031690565b6001600160a01b0316148061096857503360009081526003602052604090205460ff165b6109df5760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865206f776e6572206f7220677561726460448201527f69616e000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16610a475760405162461bcd60e51b815260206004820152601c60248201527f546869732061646472657373206973206e6f742061206d696e7465720000000060448201526064016109d6565b6001600160a01b0381166000908152600160205260408120805460ff191690555b600254811015610b6d57816001600160a01b031660028281548110610a8f57610a8f6133f5565b6000918252602090912001546001600160a01b031603610b5b5760028054610ab990600190613421565b81548110610ac957610ac96133f5565b600091825260209091200154600280546001600160a01b039092169183908110610af557610af56133f5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506002805480610b3457610b34613434565b600082815260209020810160001990810180546001600160a01b0319169055019055610b6d565b80610b658161344a565b915050610a68565b506040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b610bad612728565b6040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631171bda9906064015b600060405180830381600087803b158015610c3957600080fd5b505af1158015610c4d573d6000803e3d6000fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cce5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016109d6565b6000839003610d1f5760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f72732073706563696669656400000000000000000060448201526064016109d6565b60005b83811015610daa576000858583818110610d3e57610d3e6133f5565b9050602002016020810190610d539190613010565b90506000848484818110610d6957610d696133f5565b905060200201359050610d9582610d90846402540be40085610d8b9190613463565b612802565b612905565b50508080610da29061344a565b915050610d22565b5050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e295760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016109d6565b6040516370a0823160e01b81526001600160a01b03858116600483015284917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb7919061347a565b1015610f105760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016109d6565b610f2384610d906402540be40086613463565b604051631f1b6d2760e21b81526001600160a01b038581166004830152306024830152604482018590527f00000000000000000000000000000000000000000000000000000000000000001690637c6db49c906064015b600060405180830381600087803b158015610f9457600080fd5b505af1158015610fa8573d6000803e3d6000fd5b5050505050505050565b610fba612728565b6001600160a01b0381166110105760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f60448201526064016109d6565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a142600b55600a80546001600160a01b0319166001600160a01b0392909216919091179055565b61107f612728565b60075461108f81620151806129e0565b600654600080547fffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffff1663ffffffff909216600160a81b81029290921790556040519081527fa7f4ce7c3586e2000cdec6b25c5e7d0b20f9b4f435aa22d9c1feb32dbb506f779060200160405180910390a1506006805463ffffffff191690556000600755565b6000611120846117cf565b5050905061113033828585612a89565b50505050565b6000611141826117cf565b5050905061114f3382612bd0565b5050565b3360009081526001602052604090205460ff166111b25760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e7465720000000000000000000060448201526064016109d6565b600054600160a01b900460ff161561120c5760405162461bcd60e51b815260206004820152601960248201527f4f7074696d6973746963206d696e74696e67207061757365640000000000000060448201526064016109d6565b6000611218838361081e565b600081815260046020526040812080549293509167ffffffffffffffff1690036112aa5760405162461bcd60e51b815260206004820152603060248201527f4f7074696d6973746963206d696e74696e67206e6f742072657175657374656460448201527f20666f7220746865206465706f7369740000000000000000000000000000000060648201526084016109d6565b805468010000000000000000900467ffffffffffffffff16156113355760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c72656164792066696e616c60448201527f697a656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b600054815461135b91600160c81b900463ffffffff169067ffffffffffffffff16613493565b67ffffffffffffffff1642116113d95760405162461bcd60e51b815260206004820152602b60248201527f4f7074696d6973746963206d696e74696e672064656c617920686173206e6f7460448201527f207061737365642079657400000000000000000000000000000000000000000060648201526084016109d6565b604051630b02c43d60e41b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160e060405180830381865afa158015611441573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146591906134e7565b90508060a0015163ffffffff166000146114c15760405162461bcd60e51b815260206004820152601c60248201527f546865206465706f73697420697320616c72656164792073776570740000000060448201526064016109d6565b60006402540be400826080015183602001516114dd91906135a1565b67ffffffffffffffff166114f19190613463565b6000805491925090600160a81b900463ffffffff1661151157600061152b565b60005461152b90600160a81b900463ffffffff16836135d8565b83516001600160a01b0316600090815260056020526040812054919250906115549084906135ec565b84516001600160a01b03166000908152600560205260409020819055845190915061158390610d908486613421565b8115611614576116147f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160e91906135ff565b83612905565b84547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff160217855583516040518281526001600160a01b0390911690879033907f2cffebf26d639426e79514d100febae8b2c63e700e5dc0fa6c88a129633506369060200160405180910390a45050505050505050565b606060028054806020026020016040519081016040528092919081815260200182805480156116f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116da575b5050505050905090565b61170a612728565b6001600160a01b03811660009081526003602052604090205460ff166117725760405162461bcd60e51b815260206004820152601e60248201527f546869732061646472657373206973206e6f74206120677561726469616e000060448201526064016109d6565b6001600160a01b038116600081815260036020526040808220805460ff19169055517fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c529190a250565b6117c3612728565b6117cd6000612d1f565b565b600080806117e26402540be4008561361c565b91506117ee8285613421565b92506117ff6402540be400846135d8565b929491935050565b3360009081526003602052604090205460ff166118665760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206e6f74206120677561726469616e000000000000000060448201526064016109d6565b6000611872838361081e565b600081815260046020526040812080549293509167ffffffffffffffff1690036119045760405162461bcd60e51b815260206004820152603060248201527f4f7074696d6973746963206d696e74696e67206e6f742072657175657374656460448201527f20666f7220746865206465706f7369740000000000000000000000000000000060648201526084016109d6565b805468010000000000000000900467ffffffffffffffff161561198f5760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c72656164792066696e616c60448201527f697a656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b60008281526004602052604080822080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905551839133917f1256b41d4b18d922811c358ab80cb0375aae28f45373de35cfda580662193fcd9190a350505050565b3360009081526001602052604090205460ff16611a525760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e7465720000000000000000000060448201526064016109d6565b600054600160a01b900460ff1615611aac5760405162461bcd60e51b815260206004820152601960248201527f4f7074696d6973746963206d696e74696e67207061757365640000000000000060448201526064016109d6565b6000611ab8838361081e565b600081815260046020526040902080549192509067ffffffffffffffff1615611b495760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c726561647920726571756560448201527f7374656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b604051630b02c43d60e41b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160e060405180830381865afa158015611bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd591906134e7565b9050806040015163ffffffff16600003611c3b5760405162461bcd60e51b815260206004820152602160248201527f546865206465706f73697420686173206e6f74206265656e2072657665616c656044820152601960fa1b60648201526084016109d6565b60a081015163ffffffff1615611c935760405162461bcd60e51b815260206004820152601c60248201527f546865206465706f73697420697320616c72656164792073776570740000000060448201526064016109d6565b60608101516001600160a01b03163014611cef5760405162461bcd60e51b815260206004820152601860248201527f556e6578706563746564207661756c742061646472657373000000000000000060448201526064016109d6565b815467ffffffffffffffff19164267ffffffffffffffff908116919091178355815160208301516001600160a01b0390911691859133917f36f39c606d55d7dd2a05b8c4e41e9a6ca8c501cea10009c1762f6826a146e05591611d59916402540be4009116613463565b60408051918252602082018b905263ffffffff8a169082015260600160405180910390a45050505050565b60028181548110611d9457600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611e2f5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f74205442544300000000000000000000000000000060448201526064016109d6565b336001600160a01b03841614611e875760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f776564000000000000000060448201526064016109d6565b6000611e92856117cf565b50909150506000829003611eaf57611eaa8682612bd0565b611ebb565b611ebb86828585612a89565b505050505050565b611ecb612728565b6001600160a01b03811660009081526001602052604090205460ff1615611f345760405162461bcd60e51b815260206004820181905260248201527f54686973206164647265737320697320616c72656164792061206d696e74657260448201526064016109d6565b6001600160a01b0381166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b03191684179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b611fc8612728565b600954611fd881620151806129e0565b600854600080547fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff1663ffffffff909216600160c81b81029290921790556040519081527ff52de3377e3ae270d1e38f99b9b8d587814643811516ea55ba4d597f9950d4ec9060200160405180910390a1506008805463ffffffff191690556000600955565b612066612728565b600b5461207681620151806129e0565b600a546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a1600a546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063f2fde38b90602401600060405180830381600087803b15801561213757600080fd5b505af115801561214b573d6000803e3d6000fd5b5050600a546040516370a0823160e01b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811694506356a6d9ef93509091169083906370a0823190602401602060405180830381865afa1580156121c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e7919061347a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561224557600080fd5b505af1158015612259573d6000803e3d6000fd5b5050600a80546001600160a01b031916905550506000600b5550565b600080612281836117cf565b6040516370a0823160e01b8152336004820152929450925082916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691506370a0823190602401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612311919061347a565b101561236a5760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016109d6565b6123743383612905565b604051631f1b6d2760e21b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637c6db49c90606401610c1f565b6123d5612728565b600054600160a01b900460ff16156124395760405162461bcd60e51b815260206004820152602160248201527f4f7074696d6973746963206d696e74696e6720616c72656164792070617573656044820152601960fa1b60648201526084016109d6565b6000805460ff60a01b1916600160a01b1781556040517f23a83c8aeda8c831401c17b5bfb8b2ead79fcfe9c027fe34a4f8576e2c7c74cc9190a1565b61247d612728565b6001600160a01b03811660009081526003602052604090205460ff161561250c5760405162461bcd60e51b815260206004820152602260248201527f54686973206164647265737320697320616c726561647920612067756172646960448201527f616e00000000000000000000000000000000000000000000000000000000000060648201526084016109d6565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f9699190a250565b612560612728565b600054600160a01b900460ff166125b95760405162461bcd60e51b815260206004820181905260248201527f4f7074696d6973746963206d696e74696e67206973206e6f742070617573656460448201526064016109d6565b6000805460ff60a01b191681556040517fcb27470ed9568d9eeb8939707bafc19404d908a26ce5f468a6aa781024fd6a839190a1565b6125f7612728565b426007556006805463ffffffff191663ffffffff83169081179091556040519081527f0dbfec7f12acffbb5cec595ac4370907eaf84caa7025dd71f4021433be79eba9906020016107f2565b61264b612728565b6001600160a01b0381166126c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109d6565b6126d081612d1f565b50565b6126db612728565b6040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b88d4fde906108f890309088908890889088906004016133c2565b6000546001600160a01b031633146117cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109d6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610819908490612d6f565b6001600160a01b03821660009081526005602052604081205480820361282b578291505061087d565b80831115612892576001600160a01b0384166000818152600560209081526040808320839055519182527fb30abd1b9e3d58cd8525b3d5c5aa002db1e43a150af5b172a8d16efcc7a141f8910160405180910390a261288a8184613421565b91505061087d565b61289c8382613421565b6001600160a01b0385166000818152600560205260409020919091557fb30abd1b9e3d58cd8525b3d5c5aa002db1e43a150af5b172a8d16efcc7a141f86128e38584613421565b60405190815260200160405180910390a2600091505061087d565b5092915050565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8260405161294091815260200190565b60405180910390a26040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015b600060405180830381600087803b1580156129cc57600080fd5b505af1158015611ebb573d6000803e3d6000fd5b60008211612a305760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e6974696174656400000000000000000000000060448201526064016109d6565b80612a3b8342613421565b101561114f5760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c617073656460448201526064016109d6565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051612ac491815260200190565b60405180910390a260405163079cc67960e41b81526001600160a01b038581166004830152602482018590527f000000000000000000000000000000000000000000000000000000000000000016906379cc679090604401600060405180830381600087803b158015612b3657600080fd5b505af1158015612b4a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634a38757e7f00000000000000000000000000000000000000000000000000000000000000006402540be40086612baf91906135d8565b85856040518563ffffffff1660e01b8152600401610f7a9493929190613630565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b882604051612c0b91815260200190565b60405180910390a260405163079cc67960e41b81526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906379cc679090604401600060405180830381600087803b158015612c7d57600080fd5b505af1158015612c91573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356a6d9ef836402540be40084612cd691906135d8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016129b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000612dc4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612e549092919063ffffffff16565b8051909150156108195780806020019051810190612de29190613663565b6108195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109d6565b6060612e638484600085612e6b565b949350505050565b606082471015612ee35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109d6565b600080866001600160a01b03168587604051612eff91906136a9565b60006040518083038185875af1925050503d8060008114612f3c576040519150601f19603f3d011682016040523d82523d6000602084013e612f41565b606091505b5091509150612f5287838387612f5d565b979650505050505050565b60608315612fcc578251600003612fc5576001600160a01b0385163b612fc55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109d6565b5081612e63565b612e638383815115612fe15781518083602001fd5b8060405162461bcd60e51b81526004016109d691906136c5565b6001600160a01b03811681146126d057600080fd5b60006020828403121561302257600080fd5b813561302d81612ffb565b9392505050565b63ffffffff811681146126d057600080fd5b60006020828403121561305857600080fd5b813561302d81613034565b60008060006060848603121561307857600080fd5b833561308381612ffb565b9250602084013561309381612ffb565b929592945050506040919091013590565b600080604083850312156130b757600080fd5b8235915060208301356130c981613034565b809150509250929050565b60008083601f8401126130e657600080fd5b50813567ffffffffffffffff8111156130fe57600080fd5b60208301915083602082850101111561311657600080fd5b9250929050565b60008060008060006080868803121561313557600080fd5b853561314081612ffb565b9450602086013561315081612ffb565b935060408601359250606086013567ffffffffffffffff81111561317357600080fd5b61317f888289016130d4565b969995985093965092949392505050565b60008083601f8401126131a257600080fd5b50813567ffffffffffffffff8111156131ba57600080fd5b6020830191508360208260051b850101111561311657600080fd5b600080600080604085870312156131eb57600080fd5b843567ffffffffffffffff8082111561320357600080fd5b61320f88838901613190565b9096509450602087013591508082111561322857600080fd5b5061323587828801613190565b95989497509550505050565b6000806000806060858703121561325757600080fd5b843561326281612ffb565b935060208501359250604085013567ffffffffffffffff81111561328557600080fd5b613235878288016130d4565b6000806000604084860312156132a657600080fd5b83359250602084013567ffffffffffffffff8111156132c457600080fd5b6132d0868287016130d4565b9497909650939450505050565b6000602082840312156132ef57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156133375783516001600160a01b031683529284019291840191600101613312565b50909695505050505050565b60008060008060006080868803121561335b57600080fd5b853561336681612ffb565b945060208601359350604086013561337d81612ffb565b9250606086013567ffffffffffffffff81111561317357600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b03808816835280871660208401525084604083015260806060830152612f52608083018486613399565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561087d5761087d61340b565b634e487b7160e01b600052603160045260246000fd5b60006001820161345c5761345c61340b565b5060010190565b808202811582820484141761087d5761087d61340b565b60006020828403121561348c57600080fd5b5051919050565b67ffffffffffffffff8181168382160190808211156128fe576128fe61340b565b80516134bf81612ffb565b919050565b805167ffffffffffffffff811681146134bf57600080fd5b80516134bf81613034565b600060e082840312156134f957600080fd5b60405160e0810181811067ffffffffffffffff8211171561352a57634e487b7160e01b600052604160045260246000fd5b604052613536836134b4565b8152613544602084016134c4565b6020820152613555604084016134dc565b6040820152613566606084016134b4565b6060820152613577608084016134c4565b608082015261358860a084016134dc565b60a082015260c083015160c08201528091505092915050565b67ffffffffffffffff8281168282160390808211156128fe576128fe61340b565b634e487b7160e01b600052601260045260246000fd5b6000826135e7576135e76135c2565b500490565b8082018082111561087d5761087d61340b565b60006020828403121561361157600080fd5b815161302d81612ffb565b60008261362b5761362b6135c2565b500690565b6001600160a01b0385168152836020820152606060408201526000613659606083018486613399565b9695505050505050565b60006020828403121561367557600080fd5b8151801515811461302d57600080fd5b60005b838110156136a0578181015183820152602001613688565b50506000910152565b600082516136bb818460208701613685565b9190910192915050565b60208152600082518060208401526136e4816040850160208701613685565b601f01601f1916919091016040019291505056fea264697066735822122096f3c5aa9034e76be31911fe56250e678f8a0e9cb1ded1db9bc00345a94d656364736f6c63430008110033",
|
|
1121
|
+
"bytecode": "0x60e060405260008054600160a81b600160e81b031916650a8c0000007d60aa1b1790553480156200002f57600080fd5b5060405162003a4a38038062003a4a83398101604081905262000052916200020c565b806200005e33620001a3565b6001600160a01b038116620000c55760405162461bcd60e51b815260206004820152602260248201527f4272696467652063616e206e6f7420626520746865207a65726f206164647265604482015261737360f01b60648201526084015b60405180910390fd5b6001600160a01b039081166080528316620001235760405162461bcd60e51b815260206004820181905260248201527f42616e6b2063616e206e6f7420626520746865207a65726f20616464726573736044820152606401620000bc565b6001600160a01b0382166200018a5760405162461bcd60e51b815260206004820152602660248201527f5442544320746f6b656e2063616e206e6f7420626520746865207a65726f206160448201526564647265737360d01b6064820152608401620000bc565b506001600160a01b0391821660a0521660c05262000260565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200020957600080fd5b50565b6000806000606084860312156200022257600080fd5b83516200022f81620001f3565b60208501519093506200024281620001f3565b60408501519092506200025581620001f3565b809150509250925092565b60805160a05160c05161372e6200031c60003960008181610733015281816108bb01528181610bf401528181611db0015281816120f10152818161298701528181612af20152612c3901526000818161057901528181610c6101528181610dbc01528181610e4a01528181610f4f0152818161216d015281816122a50152818161239601528181612b500152612c9701526000818161075a015281816113f20152818161158e01528181611b620152612b7f015261372e6000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c80638532c511116101b2578063a410d29b116100f9578063c36b32b7116100a2578063e5d3d7141161007c578063e5d3d7141461072e578063e78cea9214610755578063f2fde38b1461077c578063fc4e51f61461078f57600080fd5b8063c36b32b7146106ff578063c7ba034714610712578063d0ff65b51461071e57600080fd5b8063b0b54895116100d3578063b0b54895146106cd578063b9f78798146106d7578063bc7b6b99146106f757600080fd5b8063a410d29b1461068f578063a526d83b14610697578063aa271e1a146106aa57600080fd5b8063951315261161015b5780639a508c8e116101355780639a508c8e1461066b578063a0712d6814610673578063a0cceb951461068657600080fd5b80639513152614610647578063983b2d56146106505780639a4e36d51461066357600080fd5b8063897f712c1161018c578063897f712c1461060f5780638da5cb5b146106235780638f4ffcb11461063457600080fd5b80638532c511146105d95780638623ec7b146105e957806388aaf0c8146105fc57600080fd5b806347c1ffdb116102815780636c626aa41161022a5780637445a5a0116102045780637445a5a01461054657806376cdb03b1461057457806380df5ed2146105b3578063820b5513146105c657600080fd5b80636c626aa4146104d0578063714041561461052b578063715018a61461053e57600080fd5b806364e779b11161025b57806364e779b1146104955780636abe3a6c146104a85780636b32810b146104bb57600080fd5b806347c1ffdb1461046357806353dce4df1461046b5780635ae2da461461047e57600080fd5b80633092afd5116102e3578063461c6373116102bd578063461c63731461042a578063475d05701461043d578063479aa9271461045057600080fd5b80633092afd5146103fb578063317dfa761461040e57806341906ab71461042157600080fd5b80631171bda9116103145780631171bda9146103b4578063124f65bd146103c75780632e73e398146103e857600080fd5b806309b53f511461033b5780630c68ba211461036c5780630f3425731461039f575b600080fd5b60005461035290600160a81b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61038f61037a366004613010565b60036020526000908152604090205460ff1681565b6040519015158152602001610363565b6103b26103ad366004613046565b6107a2565b005b6103b26103c2366004613063565b6107fd565b6103da6103d53660046130a4565b61081e565b604051908152602001610363565b6103b26103f636600461311d565b610883565b6103b2610409366004613010565b610931565b6103b261041c366004613063565b610ba5565b6103da60095481565b6103b26104383660046131d5565b610c56565b6103b261044b366004613241565b610db1565b6103b261045e366004613010565b610fb2565b6103b2611077565b6103b2610479366004613291565b611115565b60005461035290600160c81b900463ffffffff1681565b6103b26104a33660046132dd565b611136565b6103b26104b63660046130a4565b611153565b6104c36116a0565b60405161036391906132f6565b61050a6104de3660046132dd565b60046020526000908152604090205467ffffffffffffffff808216916801000000000000000090041682565b6040805167ffffffffffffffff938416815292909116602083015201610363565b6103b2610539366004613010565b611702565b6103b26117bb565b6105596105543660046132dd565b6117cf565b60408051938452602084019290925290820152606001610363565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610363565b6103b26105c13660046130a4565b611807565b6103b26105d43660046130a4565b6119f3565b6006546103529063ffffffff1681565b61059b6105f73660046132dd565b611d84565b600a5461059b906001600160a01b031681565b60005461038f90600160a01b900460ff1681565b6000546001600160a01b031661059b565b6103b2610642366004613343565b611dae565b6103da600b5481565b6103b261065e366004613010565b611ec3565b6103b2611fc0565b6103b261205e565b6103b26106813660046132dd565b612275565b6103da60075481565b6103b26123cd565b6103b26106a5366004613010565b612475565b61038f6106b8366004613010565b60016020526000908152604090205460ff1681565b6103da6201518081565b6103da6106e5366004613010565b60056020526000908152604090205481565b6103b2612558565b6103b261070d366004613046565b6125ef565b6103da6402540be40081565b6008546103529063ffffffff1681565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b6103b261078a366004613010565b612643565b6103b261079d36600461311d565b6126d3565b6107aa612728565b426009556008805463ffffffff191663ffffffff83169081179091556040519081527f682bc0fb7e0d6bcb974cf556b95f68533cafc411d83d9f33ac192ccf45dda605906020015b60405180910390a150565b610805612728565b6108196001600160a01b0384168383612782565b505050565b6000828260405160200161086192919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c90505b92915050565b61088b612728565b6040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fc4e51f6906108f890889088908890889088906004016133c2565b600060405180830381600087803b15801561091257600080fd5b505af1158015610926573d6000803e3d6000fd5b505050505050505050565b336109446000546001600160a01b031690565b6001600160a01b0316148061096857503360009081526003602052604090205460ff165b6109df5760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865206f776e6572206f7220677561726460448201527f69616e000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16610a475760405162461bcd60e51b815260206004820152601c60248201527f546869732061646472657373206973206e6f742061206d696e7465720000000060448201526064016109d6565b6001600160a01b0381166000908152600160205260408120805460ff191690555b600254811015610b6d57816001600160a01b031660028281548110610a8f57610a8f6133f5565b6000918252602090912001546001600160a01b031603610b5b5760028054610ab990600190613421565b81548110610ac957610ac96133f5565b600091825260209091200154600280546001600160a01b039092169183908110610af557610af56133f5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506002805480610b3457610b34613434565b600082815260209020810160001990810180546001600160a01b0319169055019055610b6d565b80610b658161344a565b915050610a68565b506040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b610bad612728565b6040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631171bda9906064015b600060405180830381600087803b158015610c3957600080fd5b505af1158015610c4d573d6000803e3d6000fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cce5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016109d6565b6000839003610d1f5760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f72732073706563696669656400000000000000000060448201526064016109d6565b60005b83811015610daa576000858583818110610d3e57610d3e6133f5565b9050602002016020810190610d539190613010565b90506000848484818110610d6957610d696133f5565b905060200201359050610d9582610d90846402540be40085610d8b9190613463565b612802565b612905565b50508080610da29061344a565b915050610d22565b5050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e295760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016109d6565b6040516370a0823160e01b81526001600160a01b03858116600483015284917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb7919061347a565b1015610f105760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016109d6565b610f2384610d906402540be40086613463565b604051631f1b6d2760e21b81526001600160a01b038581166004830152306024830152604482018590527f00000000000000000000000000000000000000000000000000000000000000001690637c6db49c906064015b600060405180830381600087803b158015610f9457600080fd5b505af1158015610fa8573d6000803e3d6000fd5b5050505050505050565b610fba612728565b6001600160a01b0381166110105760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f60448201526064016109d6565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a142600b55600a80546001600160a01b0319166001600160a01b0392909216919091179055565b61107f612728565b60075461108f81620151806129e0565b600654600080547fffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffff1663ffffffff909216600160a81b81029290921790556040519081527fa7f4ce7c3586e2000cdec6b25c5e7d0b20f9b4f435aa22d9c1feb32dbb506f779060200160405180910390a1506006805463ffffffff191690556000600755565b6000611120846117cf565b5050905061113033828585612a89565b50505050565b6000611141826117cf565b5050905061114f3382612bd0565b5050565b3360009081526001602052604090205460ff166111b25760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e7465720000000000000000000060448201526064016109d6565b600054600160a01b900460ff161561120c5760405162461bcd60e51b815260206004820152601960248201527f4f7074696d6973746963206d696e74696e67207061757365640000000000000060448201526064016109d6565b6000611218838361081e565b600081815260046020526040812080549293509167ffffffffffffffff1690036112aa5760405162461bcd60e51b815260206004820152603060248201527f4f7074696d6973746963206d696e74696e67206e6f742072657175657374656460448201527f20666f7220746865206465706f7369740000000000000000000000000000000060648201526084016109d6565b805468010000000000000000900467ffffffffffffffff16156113355760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c72656164792066696e616c60448201527f697a656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b600054815461135b91600160c81b900463ffffffff169067ffffffffffffffff16613493565b67ffffffffffffffff1642116113d95760405162461bcd60e51b815260206004820152602b60248201527f4f7074696d6973746963206d696e74696e672064656c617920686173206e6f7460448201527f207061737365642079657400000000000000000000000000000000000000000060648201526084016109d6565b604051630b02c43d60e41b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160e060405180830381865afa158015611441573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146591906134e7565b90508060a0015163ffffffff166000146114c15760405162461bcd60e51b815260206004820152601c60248201527f546865206465706f73697420697320616c72656164792073776570740000000060448201526064016109d6565b60006402540be400826080015183602001516114dd91906135a1565b67ffffffffffffffff166114f19190613463565b6000805491925090600160a81b900463ffffffff1661151157600061152b565b60005461152b90600160a81b900463ffffffff16836135d8565b83516001600160a01b0316600090815260056020526040812054919250906115549084906135ec565b84516001600160a01b03166000908152600560205260409020819055845190915061158390610d908486613421565b8115611614576116147f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160e91906135ff565b83612905565b84547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff160217855583516040518281526001600160a01b0390911690879033907f2cffebf26d639426e79514d100febae8b2c63e700e5dc0fa6c88a129633506369060200160405180910390a45050505050505050565b606060028054806020026020016040519081016040528092919081815260200182805480156116f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116da575b5050505050905090565b61170a612728565b6001600160a01b03811660009081526003602052604090205460ff166117725760405162461bcd60e51b815260206004820152601e60248201527f546869732061646472657373206973206e6f74206120677561726469616e000060448201526064016109d6565b6001600160a01b038116600081815260036020526040808220805460ff19169055517fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c529190a250565b6117c3612728565b6117cd6000612d1f565b565b600080806117e26402540be4008561361c565b91506117ee8285613421565b92506117ff6402540be400846135d8565b929491935050565b3360009081526003602052604090205460ff166118665760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206e6f74206120677561726469616e000000000000000060448201526064016109d6565b6000611872838361081e565b600081815260046020526040812080549293509167ffffffffffffffff1690036119045760405162461bcd60e51b815260206004820152603060248201527f4f7074696d6973746963206d696e74696e67206e6f742072657175657374656460448201527f20666f7220746865206465706f7369740000000000000000000000000000000060648201526084016109d6565b805468010000000000000000900467ffffffffffffffff161561198f5760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c72656164792066696e616c60448201527f697a656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b60008281526004602052604080822080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905551839133917f1256b41d4b18d922811c358ab80cb0375aae28f45373de35cfda580662193fcd9190a350505050565b3360009081526001602052604090205460ff16611a525760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e7465720000000000000000000060448201526064016109d6565b600054600160a01b900460ff1615611aac5760405162461bcd60e51b815260206004820152601960248201527f4f7074696d6973746963206d696e74696e67207061757365640000000000000060448201526064016109d6565b6000611ab8838361081e565b600081815260046020526040902080549192509067ffffffffffffffff1615611b495760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c726561647920726571756560448201527f7374656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b604051630b02c43d60e41b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160e060405180830381865afa158015611bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd591906134e7565b9050806040015163ffffffff16600003611c3b5760405162461bcd60e51b815260206004820152602160248201527f546865206465706f73697420686173206e6f74206265656e2072657665616c656044820152601960fa1b60648201526084016109d6565b60a081015163ffffffff1615611c935760405162461bcd60e51b815260206004820152601c60248201527f546865206465706f73697420697320616c72656164792073776570740000000060448201526064016109d6565b60608101516001600160a01b03163014611cef5760405162461bcd60e51b815260206004820152601860248201527f556e6578706563746564207661756c742061646472657373000000000000000060448201526064016109d6565b815467ffffffffffffffff19164267ffffffffffffffff908116919091178355815160208301516001600160a01b0390911691859133917f36f39c606d55d7dd2a05b8c4e41e9a6ca8c501cea10009c1762f6826a146e05591611d59916402540be4009116613463565b60408051918252602082018b905263ffffffff8a169082015260600160405180910390a45050505050565b60028181548110611d9457600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611e2f5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f74205442544300000000000000000000000000000060448201526064016109d6565b336001600160a01b03841614611e875760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f776564000000000000000060448201526064016109d6565b6000611e92856117cf565b50909150506000829003611eaf57611eaa8682612bd0565b611ebb565b611ebb86828585612a89565b505050505050565b611ecb612728565b6001600160a01b03811660009081526001602052604090205460ff1615611f345760405162461bcd60e51b815260206004820181905260248201527f54686973206164647265737320697320616c72656164792061206d696e74657260448201526064016109d6565b6001600160a01b0381166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b03191684179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b611fc8612728565b600954611fd881620151806129e0565b600854600080547fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff1663ffffffff909216600160c81b81029290921790556040519081527ff52de3377e3ae270d1e38f99b9b8d587814643811516ea55ba4d597f9950d4ec9060200160405180910390a1506008805463ffffffff191690556000600955565b612066612728565b600b5461207681620151806129e0565b600a546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a1600a546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063f2fde38b90602401600060405180830381600087803b15801561213757600080fd5b505af115801561214b573d6000803e3d6000fd5b5050600a546040516370a0823160e01b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811694506356a6d9ef93509091169083906370a0823190602401602060405180830381865afa1580156121c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e7919061347a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561224557600080fd5b505af1158015612259573d6000803e3d6000fd5b5050600a80546001600160a01b031916905550506000600b5550565b600080612281836117cf565b6040516370a0823160e01b8152336004820152929450925082916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691506370a0823190602401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612311919061347a565b101561236a5760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016109d6565b6123743383612905565b604051631f1b6d2760e21b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637c6db49c90606401610c1f565b6123d5612728565b600054600160a01b900460ff16156124395760405162461bcd60e51b815260206004820152602160248201527f4f7074696d6973746963206d696e74696e6720616c72656164792070617573656044820152601960fa1b60648201526084016109d6565b6000805460ff60a01b1916600160a01b1781556040517f23a83c8aeda8c831401c17b5bfb8b2ead79fcfe9c027fe34a4f8576e2c7c74cc9190a1565b61247d612728565b6001600160a01b03811660009081526003602052604090205460ff161561250c5760405162461bcd60e51b815260206004820152602260248201527f54686973206164647265737320697320616c726561647920612067756172646960448201527f616e00000000000000000000000000000000000000000000000000000000000060648201526084016109d6565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f9699190a250565b612560612728565b600054600160a01b900460ff166125b95760405162461bcd60e51b815260206004820181905260248201527f4f7074696d6973746963206d696e74696e67206973206e6f742070617573656460448201526064016109d6565b6000805460ff60a01b191681556040517fcb27470ed9568d9eeb8939707bafc19404d908a26ce5f468a6aa781024fd6a839190a1565b6125f7612728565b426007556006805463ffffffff191663ffffffff83169081179091556040519081527f0dbfec7f12acffbb5cec595ac4370907eaf84caa7025dd71f4021433be79eba9906020016107f2565b61264b612728565b6001600160a01b0381166126c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109d6565b6126d081612d1f565b50565b6126db612728565b6040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b88d4fde906108f890309088908890889088906004016133c2565b6000546001600160a01b031633146117cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109d6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610819908490612d6f565b6001600160a01b03821660009081526005602052604081205480820361282b578291505061087d565b80831115612892576001600160a01b0384166000818152600560209081526040808320839055519182527fb30abd1b9e3d58cd8525b3d5c5aa002db1e43a150af5b172a8d16efcc7a141f8910160405180910390a261288a8184613421565b91505061087d565b61289c8382613421565b6001600160a01b0385166000818152600560205260409020919091557fb30abd1b9e3d58cd8525b3d5c5aa002db1e43a150af5b172a8d16efcc7a141f86128e38584613421565b60405190815260200160405180910390a2600091505061087d565b5092915050565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8260405161294091815260200190565b60405180910390a26040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015b600060405180830381600087803b1580156129cc57600080fd5b505af1158015611ebb573d6000803e3d6000fd5b60008211612a305760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e6974696174656400000000000000000000000060448201526064016109d6565b80612a3b8342613421565b101561114f5760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c617073656460448201526064016109d6565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051612ac491815260200190565b60405180910390a260405163079cc67960e41b81526001600160a01b038581166004830152602482018590527f000000000000000000000000000000000000000000000000000000000000000016906379cc679090604401600060405180830381600087803b158015612b3657600080fd5b505af1158015612b4a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634a38757e7f00000000000000000000000000000000000000000000000000000000000000006402540be40086612baf91906135d8565b85856040518563ffffffff1660e01b8152600401610f7a9493929190613630565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b882604051612c0b91815260200190565b60405180910390a260405163079cc67960e41b81526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906379cc679090604401600060405180830381600087803b158015612c7d57600080fd5b505af1158015612c91573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356a6d9ef836402540be40084612cd691906135d8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016129b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000612dc4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612e549092919063ffffffff16565b8051909150156108195780806020019051810190612de29190613663565b6108195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109d6565b6060612e638484600085612e6b565b949350505050565b606082471015612ee35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109d6565b600080866001600160a01b03168587604051612eff91906136a9565b60006040518083038185875af1925050503d8060008114612f3c576040519150601f19603f3d011682016040523d82523d6000602084013e612f41565b606091505b5091509150612f5287838387612f5d565b979650505050505050565b60608315612fcc578251600003612fc5576001600160a01b0385163b612fc55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109d6565b5081612e63565b612e638383815115612fe15781518083602001fd5b8060405162461bcd60e51b81526004016109d691906136c5565b6001600160a01b03811681146126d057600080fd5b60006020828403121561302257600080fd5b813561302d81612ffb565b9392505050565b63ffffffff811681146126d057600080fd5b60006020828403121561305857600080fd5b813561302d81613034565b60008060006060848603121561307857600080fd5b833561308381612ffb565b9250602084013561309381612ffb565b929592945050506040919091013590565b600080604083850312156130b757600080fd5b8235915060208301356130c981613034565b809150509250929050565b60008083601f8401126130e657600080fd5b50813567ffffffffffffffff8111156130fe57600080fd5b60208301915083602082850101111561311657600080fd5b9250929050565b60008060008060006080868803121561313557600080fd5b853561314081612ffb565b9450602086013561315081612ffb565b935060408601359250606086013567ffffffffffffffff81111561317357600080fd5b61317f888289016130d4565b969995985093965092949392505050565b60008083601f8401126131a257600080fd5b50813567ffffffffffffffff8111156131ba57600080fd5b6020830191508360208260051b850101111561311657600080fd5b600080600080604085870312156131eb57600080fd5b843567ffffffffffffffff8082111561320357600080fd5b61320f88838901613190565b9096509450602087013591508082111561322857600080fd5b5061323587828801613190565b95989497509550505050565b6000806000806060858703121561325757600080fd5b843561326281612ffb565b935060208501359250604085013567ffffffffffffffff81111561328557600080fd5b613235878288016130d4565b6000806000604084860312156132a657600080fd5b83359250602084013567ffffffffffffffff8111156132c457600080fd5b6132d0868287016130d4565b9497909650939450505050565b6000602082840312156132ef57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156133375783516001600160a01b031683529284019291840191600101613312565b50909695505050505050565b60008060008060006080868803121561335b57600080fd5b853561336681612ffb565b945060208601359350604086013561337d81612ffb565b9250606086013567ffffffffffffffff81111561317357600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b03808816835280871660208401525084604083015260806060830152612f52608083018486613399565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561087d5761087d61340b565b634e487b7160e01b600052603160045260246000fd5b60006001820161345c5761345c61340b565b5060010190565b808202811582820484141761087d5761087d61340b565b60006020828403121561348c57600080fd5b5051919050565b67ffffffffffffffff8181168382160190808211156128fe576128fe61340b565b80516134bf81612ffb565b919050565b805167ffffffffffffffff811681146134bf57600080fd5b80516134bf81613034565b600060e082840312156134f957600080fd5b60405160e0810181811067ffffffffffffffff8211171561352a57634e487b7160e01b600052604160045260246000fd5b604052613536836134b4565b8152613544602084016134c4565b6020820152613555604084016134dc565b6040820152613566606084016134b4565b6060820152613577608084016134c4565b608082015261358860a084016134dc565b60a082015260c083015160c08201528091505092915050565b67ffffffffffffffff8281168282160390808211156128fe576128fe61340b565b634e487b7160e01b600052601260045260246000fd5b6000826135e7576135e76135c2565b500490565b8082018082111561087d5761087d61340b565b60006020828403121561361157600080fd5b815161302d81612ffb565b60008261362b5761362b6135c2565b500690565b6001600160a01b0385168152836020820152606060408201526000613659606083018486613399565b9695505050505050565b60006020828403121561367557600080fd5b8151801515811461302d57600080fd5b60005b838110156136a0578181015183820152602001613688565b50506000910152565b600082516136bb818460208701613685565b9190910192915050565b60208152600082518060208401526136e4816040850160208701613685565b601f01601f1916919091016040019291505056fea26469706673582212205cfa0e3c059114b59182c0ff6a595c5ed0ead73dde175a16155df451100c53a964736f6c63430008110033",
|
|
1122
|
+
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103365760003560e01c80638532c511116101b2578063a410d29b116100f9578063c36b32b7116100a2578063e5d3d7141161007c578063e5d3d7141461072e578063e78cea9214610755578063f2fde38b1461077c578063fc4e51f61461078f57600080fd5b8063c36b32b7146106ff578063c7ba034714610712578063d0ff65b51461071e57600080fd5b8063b0b54895116100d3578063b0b54895146106cd578063b9f78798146106d7578063bc7b6b99146106f757600080fd5b8063a410d29b1461068f578063a526d83b14610697578063aa271e1a146106aa57600080fd5b8063951315261161015b5780639a508c8e116101355780639a508c8e1461066b578063a0712d6814610673578063a0cceb951461068657600080fd5b80639513152614610647578063983b2d56146106505780639a4e36d51461066357600080fd5b8063897f712c1161018c578063897f712c1461060f5780638da5cb5b146106235780638f4ffcb11461063457600080fd5b80638532c511146105d95780638623ec7b146105e957806388aaf0c8146105fc57600080fd5b806347c1ffdb116102815780636c626aa41161022a5780637445a5a0116102045780637445a5a01461054657806376cdb03b1461057457806380df5ed2146105b3578063820b5513146105c657600080fd5b80636c626aa4146104d0578063714041561461052b578063715018a61461053e57600080fd5b806364e779b11161025b57806364e779b1146104955780636abe3a6c146104a85780636b32810b146104bb57600080fd5b806347c1ffdb1461046357806353dce4df1461046b5780635ae2da461461047e57600080fd5b80633092afd5116102e3578063461c6373116102bd578063461c63731461042a578063475d05701461043d578063479aa9271461045057600080fd5b80633092afd5146103fb578063317dfa761461040e57806341906ab71461042157600080fd5b80631171bda9116103145780631171bda9146103b4578063124f65bd146103c75780632e73e398146103e857600080fd5b806309b53f511461033b5780630c68ba211461036c5780630f3425731461039f575b600080fd5b60005461035290600160a81b900463ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b61038f61037a366004613010565b60036020526000908152604090205460ff1681565b6040519015158152602001610363565b6103b26103ad366004613046565b6107a2565b005b6103b26103c2366004613063565b6107fd565b6103da6103d53660046130a4565b61081e565b604051908152602001610363565b6103b26103f636600461311d565b610883565b6103b2610409366004613010565b610931565b6103b261041c366004613063565b610ba5565b6103da60095481565b6103b26104383660046131d5565b610c56565b6103b261044b366004613241565b610db1565b6103b261045e366004613010565b610fb2565b6103b2611077565b6103b2610479366004613291565b611115565b60005461035290600160c81b900463ffffffff1681565b6103b26104a33660046132dd565b611136565b6103b26104b63660046130a4565b611153565b6104c36116a0565b60405161036391906132f6565b61050a6104de3660046132dd565b60046020526000908152604090205467ffffffffffffffff808216916801000000000000000090041682565b6040805167ffffffffffffffff938416815292909116602083015201610363565b6103b2610539366004613010565b611702565b6103b26117bb565b6105596105543660046132dd565b6117cf565b60408051938452602084019290925290820152606001610363565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610363565b6103b26105c13660046130a4565b611807565b6103b26105d43660046130a4565b6119f3565b6006546103529063ffffffff1681565b61059b6105f73660046132dd565b611d84565b600a5461059b906001600160a01b031681565b60005461038f90600160a01b900460ff1681565b6000546001600160a01b031661059b565b6103b2610642366004613343565b611dae565b6103da600b5481565b6103b261065e366004613010565b611ec3565b6103b2611fc0565b6103b261205e565b6103b26106813660046132dd565b612275565b6103da60075481565b6103b26123cd565b6103b26106a5366004613010565b612475565b61038f6106b8366004613010565b60016020526000908152604090205460ff1681565b6103da6201518081565b6103da6106e5366004613010565b60056020526000908152604090205481565b6103b2612558565b6103b261070d366004613046565b6125ef565b6103da6402540be40081565b6008546103529063ffffffff1681565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b61059b7f000000000000000000000000000000000000000000000000000000000000000081565b6103b261078a366004613010565b612643565b6103b261079d36600461311d565b6126d3565b6107aa612728565b426009556008805463ffffffff191663ffffffff83169081179091556040519081527f682bc0fb7e0d6bcb974cf556b95f68533cafc411d83d9f33ac192ccf45dda605906020015b60405180910390a150565b610805612728565b6108196001600160a01b0384168383612782565b505050565b6000828260405160200161086192919091825260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6040516020818303038152906040528051906020012060001c90505b92915050565b61088b612728565b6040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fc4e51f6906108f890889088908890889088906004016133c2565b600060405180830381600087803b15801561091257600080fd5b505af1158015610926573d6000803e3d6000fd5b505050505050505050565b336109446000546001600160a01b031690565b6001600160a01b0316148061096857503360009081526003602052604090205460ff165b6109df5760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865206f776e6572206f7220677561726460448201527f69616e000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16610a475760405162461bcd60e51b815260206004820152601c60248201527f546869732061646472657373206973206e6f742061206d696e7465720000000060448201526064016109d6565b6001600160a01b0381166000908152600160205260408120805460ff191690555b600254811015610b6d57816001600160a01b031660028281548110610a8f57610a8f6133f5565b6000918252602090912001546001600160a01b031603610b5b5760028054610ab990600190613421565b81548110610ac957610ac96133f5565b600091825260209091200154600280546001600160a01b039092169183908110610af557610af56133f5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506002805480610b3457610b34613434565b600082815260209020810160001990810180546001600160a01b0319169055019055610b6d565b80610b658161344a565b915050610a68565b506040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b610bad612728565b6040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690631171bda9906064015b600060405180830381600087803b158015610c3957600080fd5b505af1158015610c4d573d6000803e3d6000fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cce5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016109d6565b6000839003610d1f5760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f72732073706563696669656400000000000000000060448201526064016109d6565b60005b83811015610daa576000858583818110610d3e57610d3e6133f5565b9050602002016020810190610d539190613010565b90506000848484818110610d6957610d696133f5565b905060200201359050610d9582610d90846402540be40085610d8b9190613463565b612802565b612905565b50508080610da29061344a565b915050610d22565b5050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e295760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016109d6565b6040516370a0823160e01b81526001600160a01b03858116600483015284917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb7919061347a565b1015610f105760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016109d6565b610f2384610d906402540be40086613463565b604051631f1b6d2760e21b81526001600160a01b038581166004830152306024830152604482018590527f00000000000000000000000000000000000000000000000000000000000000001690637c6db49c906064015b600060405180830381600087803b158015610f9457600080fd5b505af1158015610fa8573d6000803e3d6000fd5b5050505050505050565b610fba612728565b6001600160a01b0381166110105760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f60448201526064016109d6565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a142600b55600a80546001600160a01b0319166001600160a01b0392909216919091179055565b61107f612728565b60075461108f81620151806129e0565b600654600080547fffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffff1663ffffffff909216600160a81b81029290921790556040519081527fa7f4ce7c3586e2000cdec6b25c5e7d0b20f9b4f435aa22d9c1feb32dbb506f779060200160405180910390a1506006805463ffffffff191690556000600755565b6000611120846117cf565b5050905061113033828585612a89565b50505050565b6000611141826117cf565b5050905061114f3382612bd0565b5050565b3360009081526001602052604090205460ff166111b25760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e7465720000000000000000000060448201526064016109d6565b600054600160a01b900460ff161561120c5760405162461bcd60e51b815260206004820152601960248201527f4f7074696d6973746963206d696e74696e67207061757365640000000000000060448201526064016109d6565b6000611218838361081e565b600081815260046020526040812080549293509167ffffffffffffffff1690036112aa5760405162461bcd60e51b815260206004820152603060248201527f4f7074696d6973746963206d696e74696e67206e6f742072657175657374656460448201527f20666f7220746865206465706f7369740000000000000000000000000000000060648201526084016109d6565b805468010000000000000000900467ffffffffffffffff16156113355760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c72656164792066696e616c60448201527f697a656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b600054815461135b91600160c81b900463ffffffff169067ffffffffffffffff16613493565b67ffffffffffffffff1642116113d95760405162461bcd60e51b815260206004820152602b60248201527f4f7074696d6973746963206d696e74696e672064656c617920686173206e6f7460448201527f207061737365642079657400000000000000000000000000000000000000000060648201526084016109d6565b604051630b02c43d60e41b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160e060405180830381865afa158015611441573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146591906134e7565b90508060a0015163ffffffff166000146114c15760405162461bcd60e51b815260206004820152601c60248201527f546865206465706f73697420697320616c72656164792073776570740000000060448201526064016109d6565b60006402540be400826080015183602001516114dd91906135a1565b67ffffffffffffffff166114f19190613463565b6000805491925090600160a81b900463ffffffff1661151157600061152b565b60005461152b90600160a81b900463ffffffff16836135d8565b83516001600160a01b0316600090815260056020526040812054919250906115549084906135ec565b84516001600160a01b03166000908152600560205260409020819055845190915061158390610d908486613421565b8115611614576116147f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160e91906135ff565b83612905565b84547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff160217855583516040518281526001600160a01b0390911690879033907f2cffebf26d639426e79514d100febae8b2c63e700e5dc0fa6c88a129633506369060200160405180910390a45050505050505050565b606060028054806020026020016040519081016040528092919081815260200182805480156116f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116116da575b5050505050905090565b61170a612728565b6001600160a01b03811660009081526003602052604090205460ff166117725760405162461bcd60e51b815260206004820152601e60248201527f546869732061646472657373206973206e6f74206120677561726469616e000060448201526064016109d6565b6001600160a01b038116600081815260036020526040808220805460ff19169055517fb8107d0c6b40be480ce3172ee66ba6d64b71f6b1685a851340036e6e2e3e3c529190a250565b6117c3612728565b6117cd6000612d1f565b565b600080806117e26402540be4008561361c565b91506117ee8285613421565b92506117ff6402540be400846135d8565b929491935050565b3360009081526003602052604090205460ff166118665760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206e6f74206120677561726469616e000000000000000060448201526064016109d6565b6000611872838361081e565b600081815260046020526040812080549293509167ffffffffffffffff1690036119045760405162461bcd60e51b815260206004820152603060248201527f4f7074696d6973746963206d696e74696e67206e6f742072657175657374656460448201527f20666f7220746865206465706f7369740000000000000000000000000000000060648201526084016109d6565b805468010000000000000000900467ffffffffffffffff161561198f5760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c72656164792066696e616c60448201527f697a656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b60008281526004602052604080822080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905551839133917f1256b41d4b18d922811c358ab80cb0375aae28f45373de35cfda580662193fcd9190a350505050565b3360009081526001602052604090205460ff16611a525760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e7465720000000000000000000060448201526064016109d6565b600054600160a01b900460ff1615611aac5760405162461bcd60e51b815260206004820152601960248201527f4f7074696d6973746963206d696e74696e67207061757365640000000000000060448201526064016109d6565b6000611ab8838361081e565b600081815260046020526040902080549192509067ffffffffffffffff1615611b495760405162461bcd60e51b815260206004820152603460248201527f4f7074696d6973746963206d696e74696e6720616c726561647920726571756560448201527f7374656420666f7220746865206465706f73697400000000000000000000000060648201526084016109d6565b604051630b02c43d60e41b8152600481018390526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b02c43d09060240160e060405180830381865afa158015611bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd591906134e7565b9050806040015163ffffffff16600003611c3b5760405162461bcd60e51b815260206004820152602160248201527f546865206465706f73697420686173206e6f74206265656e2072657665616c656044820152601960fa1b60648201526084016109d6565b60a081015163ffffffff1615611c935760405162461bcd60e51b815260206004820152601c60248201527f546865206465706f73697420697320616c72656164792073776570740000000060448201526064016109d6565b60608101516001600160a01b03163014611cef5760405162461bcd60e51b815260206004820152601860248201527f556e6578706563746564207661756c742061646472657373000000000000000060448201526064016109d6565b815467ffffffffffffffff19164267ffffffffffffffff908116919091178355815160208301516001600160a01b0390911691859133917f36f39c606d55d7dd2a05b8c4e41e9a6ca8c501cea10009c1762f6826a146e05591611d59916402540be4009116613463565b60408051918252602082018b905263ffffffff8a169082015260600160405180910390a45050505050565b60028181548110611d9457600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614611e2f5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f74205442544300000000000000000000000000000060448201526064016109d6565b336001600160a01b03841614611e875760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f776564000000000000000060448201526064016109d6565b6000611e92856117cf565b50909150506000829003611eaf57611eaa8682612bd0565b611ebb565b611ebb86828585612a89565b505050505050565b611ecb612728565b6001600160a01b03811660009081526001602052604090205460ff1615611f345760405162461bcd60e51b815260206004820181905260248201527f54686973206164647265737320697320616c72656164792061206d696e74657260448201526064016109d6565b6001600160a01b0381166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b03191684179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b611fc8612728565b600954611fd881620151806129e0565b600854600080547fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff1663ffffffff909216600160c81b81029290921790556040519081527ff52de3377e3ae270d1e38f99b9b8d587814643811516ea55ba4d597f9950d4ec9060200160405180910390a1506008805463ffffffff191690556000600955565b612066612728565b600b5461207681620151806129e0565b600a546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a1600a546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201527f00000000000000000000000000000000000000000000000000000000000000009091169063f2fde38b90602401600060405180830381600087803b15801561213757600080fd5b505af115801561214b573d6000803e3d6000fd5b5050600a546040516370a0823160e01b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811694506356a6d9ef93509091169083906370a0823190602401602060405180830381865afa1580156121c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e7919061347a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561224557600080fd5b505af1158015612259573d6000803e3d6000fd5b5050600a80546001600160a01b031916905550506000600b5550565b600080612281836117cf565b6040516370a0823160e01b8152336004820152929450925082916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691506370a0823190602401602060405180830381865afa1580156122ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612311919061347a565b101561236a5760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016109d6565b6123743383612905565b604051631f1b6d2760e21b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637c6db49c90606401610c1f565b6123d5612728565b600054600160a01b900460ff16156124395760405162461bcd60e51b815260206004820152602160248201527f4f7074696d6973746963206d696e74696e6720616c72656164792070617573656044820152601960fa1b60648201526084016109d6565b6000805460ff60a01b1916600160a01b1781556040517f23a83c8aeda8c831401c17b5bfb8b2ead79fcfe9c027fe34a4f8576e2c7c74cc9190a1565b61247d612728565b6001600160a01b03811660009081526003602052604090205460ff161561250c5760405162461bcd60e51b815260206004820152602260248201527f54686973206164647265737320697320616c726561647920612067756172646960448201527f616e00000000000000000000000000000000000000000000000000000000000060648201526084016109d6565b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517f038596bb31e2e7d3d9f184d4c98b310103f6d7f5830e5eec32bffe6f1728f9699190a250565b612560612728565b600054600160a01b900460ff166125b95760405162461bcd60e51b815260206004820181905260248201527f4f7074696d6973746963206d696e74696e67206973206e6f742070617573656460448201526064016109d6565b6000805460ff60a01b191681556040517fcb27470ed9568d9eeb8939707bafc19404d908a26ce5f468a6aa781024fd6a839190a1565b6125f7612728565b426007556006805463ffffffff191663ffffffff83169081179091556040519081527f0dbfec7f12acffbb5cec595ac4370907eaf84caa7025dd71f4021433be79eba9906020016107f2565b61264b612728565b6001600160a01b0381166126c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109d6565b6126d081612d1f565b50565b6126db612728565b6040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b88d4fde906108f890309088908890889088906004016133c2565b6000546001600160a01b031633146117cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109d6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610819908490612d6f565b6001600160a01b03821660009081526005602052604081205480820361282b578291505061087d565b80831115612892576001600160a01b0384166000818152600560209081526040808320839055519182527fb30abd1b9e3d58cd8525b3d5c5aa002db1e43a150af5b172a8d16efcc7a141f8910160405180910390a261288a8184613421565b91505061087d565b61289c8382613421565b6001600160a01b0385166000818152600560205260409020919091557fb30abd1b9e3d58cd8525b3d5c5aa002db1e43a150af5b172a8d16efcc7a141f86128e38584613421565b60405190815260200160405180910390a2600091505061087d565b5092915050565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8260405161294091815260200190565b60405180910390a26040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f19906044015b600060405180830381600087803b1580156129cc57600080fd5b505af1158015611ebb573d6000803e3d6000fd5b60008211612a305760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e6974696174656400000000000000000000000060448201526064016109d6565b80612a3b8342613421565b101561114f5760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c617073656460448201526064016109d6565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051612ac491815260200190565b60405180910390a260405163079cc67960e41b81526001600160a01b038581166004830152602482018590527f000000000000000000000000000000000000000000000000000000000000000016906379cc679090604401600060405180830381600087803b158015612b3657600080fd5b505af1158015612b4a573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634a38757e7f00000000000000000000000000000000000000000000000000000000000000006402540be40086612baf91906135d8565b85856040518563ffffffff1660e01b8152600401610f7a9493929190613630565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b882604051612c0b91815260200190565b60405180910390a260405163079cc67960e41b81526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906379cc679090604401600060405180830381600087803b158015612c7d57600080fd5b505af1158015612c91573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356a6d9ef836402540be40084612cd691906135d8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016129b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000612dc4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612e549092919063ffffffff16565b8051909150156108195780806020019051810190612de29190613663565b6108195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016109d6565b6060612e638484600085612e6b565b949350505050565b606082471015612ee35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016109d6565b600080866001600160a01b03168587604051612eff91906136a9565b60006040518083038185875af1925050503d8060008114612f3c576040519150601f19603f3d011682016040523d82523d6000602084013e612f41565b606091505b5091509150612f5287838387612f5d565b979650505050505050565b60608315612fcc578251600003612fc5576001600160a01b0385163b612fc55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016109d6565b5081612e63565b612e638383815115612fe15781518083602001fd5b8060405162461bcd60e51b81526004016109d691906136c5565b6001600160a01b03811681146126d057600080fd5b60006020828403121561302257600080fd5b813561302d81612ffb565b9392505050565b63ffffffff811681146126d057600080fd5b60006020828403121561305857600080fd5b813561302d81613034565b60008060006060848603121561307857600080fd5b833561308381612ffb565b9250602084013561309381612ffb565b929592945050506040919091013590565b600080604083850312156130b757600080fd5b8235915060208301356130c981613034565b809150509250929050565b60008083601f8401126130e657600080fd5b50813567ffffffffffffffff8111156130fe57600080fd5b60208301915083602082850101111561311657600080fd5b9250929050565b60008060008060006080868803121561313557600080fd5b853561314081612ffb565b9450602086013561315081612ffb565b935060408601359250606086013567ffffffffffffffff81111561317357600080fd5b61317f888289016130d4565b969995985093965092949392505050565b60008083601f8401126131a257600080fd5b50813567ffffffffffffffff8111156131ba57600080fd5b6020830191508360208260051b850101111561311657600080fd5b600080600080604085870312156131eb57600080fd5b843567ffffffffffffffff8082111561320357600080fd5b61320f88838901613190565b9096509450602087013591508082111561322857600080fd5b5061323587828801613190565b95989497509550505050565b6000806000806060858703121561325757600080fd5b843561326281612ffb565b935060208501359250604085013567ffffffffffffffff81111561328557600080fd5b613235878288016130d4565b6000806000604084860312156132a657600080fd5b83359250602084013567ffffffffffffffff8111156132c457600080fd5b6132d0868287016130d4565b9497909650939450505050565b6000602082840312156132ef57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156133375783516001600160a01b031683529284019291840191600101613312565b50909695505050505050565b60008060008060006080868803121561335b57600080fd5b853561336681612ffb565b945060208601359350604086013561337d81612ffb565b9250606086013567ffffffffffffffff81111561317357600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b03808816835280871660208401525084604083015260806060830152612f52608083018486613399565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561087d5761087d61340b565b634e487b7160e01b600052603160045260246000fd5b60006001820161345c5761345c61340b565b5060010190565b808202811582820484141761087d5761087d61340b565b60006020828403121561348c57600080fd5b5051919050565b67ffffffffffffffff8181168382160190808211156128fe576128fe61340b565b80516134bf81612ffb565b919050565b805167ffffffffffffffff811681146134bf57600080fd5b80516134bf81613034565b600060e082840312156134f957600080fd5b60405160e0810181811067ffffffffffffffff8211171561352a57634e487b7160e01b600052604160045260246000fd5b604052613536836134b4565b8152613544602084016134c4565b6020820152613555604084016134dc565b6040820152613566606084016134b4565b6060820152613577608084016134c4565b608082015261358860a084016134dc565b60a082015260c083015160c08201528091505092915050565b67ffffffffffffffff8281168282160390808211156128fe576128fe61340b565b634e487b7160e01b600052601260045260246000fd5b6000826135e7576135e76135c2565b500490565b8082018082111561087d5761087d61340b565b60006020828403121561361157600080fd5b815161302d81612ffb565b60008261362b5761362b6135c2565b500690565b6001600160a01b0385168152836020820152606060408201526000613659606083018486613399565b9695505050505050565b60006020828403121561367557600080fd5b8151801515811461302d57600080fd5b60005b838110156136a0578181015183820152602001613688565b50506000910152565b600082516136bb818460208701613685565b9190910192915050565b60208152600082518060208401526136e4816040850160208701613685565b601f01601f1916919091016040019291505056fea26469706673582212205cfa0e3c059114b59182c0ff6a595c5ed0ead73dde175a16155df451100c53a964736f6c63430008110033",
|
|
1123
1123
|
"linkReferences": {},
|
|
1124
1124
|
"deployedLinkReferences": {}
|
|
1125
1125
|
}
|
|
@@ -238,6 +238,11 @@ contract Bridge is
|
|
|
238
238
|
|
|
239
239
|
event RedemptionWatchtowerSet(address redemptionWatchtower);
|
|
240
240
|
|
|
241
|
+
/// @notice Emitted when a deposit's vault field is corrected via governance.
|
|
242
|
+
/// @dev This event is used for transparency when fixing deposits that were
|
|
243
|
+
/// revealed with incorrect vault targets.
|
|
244
|
+
event DepositVaultFixed(uint256 indexed depositKey, address newVault);
|
|
245
|
+
|
|
241
246
|
modifier onlySpvMaintainer() {
|
|
242
247
|
require(
|
|
243
248
|
self.isSpvMaintainer[msg.sender],
|
|
@@ -337,6 +342,35 @@ contract Bridge is
|
|
|
337
342
|
_transferGovernance(msg.sender);
|
|
338
343
|
}
|
|
339
344
|
|
|
345
|
+
/// @notice Fixes the vault=0x0 deposit that is blocking sweeps for wallet
|
|
346
|
+
/// 71bfad9a. This deposit was revealed on 2026-01-08 by depositor
|
|
347
|
+
/// 0xe7c9a5298A2d2e48B5df3F9D361BA1469B0f436B with an incorrect
|
|
348
|
+
/// vault target. This function runs once during the upgrade to v2,
|
|
349
|
+
/// directly modifying the deposit's vault field in storage.
|
|
350
|
+
/// @dev The deposit key is computed as:
|
|
351
|
+
/// keccak256(fundingTxHash || fundingOutputIndex) where:
|
|
352
|
+
/// - fundingTxHash (little-endian): 0x7ee3fcd03309745af5f35f07572b68affb3f551d8de70b194773644a47c9bb9c
|
|
353
|
+
/// - fundingOutputIndex: 1
|
|
354
|
+
function initializeV2_FixVaultZeroDeposit() external reinitializer(2) {
|
|
355
|
+
// Deposit key: keccak256(fundingTxHash || fundingOutputIndex)
|
|
356
|
+
uint256 depositKey = 0xf3bc9cd6f46f4c206bc8711e40bb5692e8fe5f0ac4d4da0a709dc71bb751c98a;
|
|
357
|
+
|
|
358
|
+
// Target vault: TBTCVault on mainnet
|
|
359
|
+
address tbtcVault = 0x9C070027cdC9dc8F82416B2e5314E11DFb4FE3CD;
|
|
360
|
+
|
|
361
|
+
// Safety checks
|
|
362
|
+
Deposit.DepositRequest storage deposit = self.deposits[depositKey];
|
|
363
|
+
require(deposit.revealedAt != 0, "Deposit not revealed");
|
|
364
|
+
require(deposit.vault == address(0), "Vault already set");
|
|
365
|
+
require(deposit.sweptAt == 0, "Deposit already swept");
|
|
366
|
+
|
|
367
|
+
// Fix the vault
|
|
368
|
+
deposit.vault = tbtcVault;
|
|
369
|
+
|
|
370
|
+
// Emit event for transparency
|
|
371
|
+
emit DepositVaultFixed(depositKey, tbtcVault);
|
|
372
|
+
}
|
|
373
|
+
|
|
340
374
|
/// @notice Used by the depositor to reveal information about their P2(W)SH
|
|
341
375
|
/// Bitcoin deposit to the Bridge on Ethereum chain. The off-chain
|
|
342
376
|
/// wallet listens for revealed deposit events and may decide to
|
|
@@ -284,11 +284,13 @@ library Deposit {
|
|
|
284
284
|
// A 20-byte output hash is used by P2SH. That hash is constructed
|
|
285
285
|
// by applying OP_HASH160 on the locking script. A 20-byte output
|
|
286
286
|
// hash is used as well by P2PKH and P2WPKH (OP_HASH160 on the
|
|
287
|
-
// public key).
|
|
288
|
-
//
|
|
289
|
-
//
|
|
290
|
-
//
|
|
291
|
-
|
|
287
|
+
// public key). That said, we need to additionally check
|
|
288
|
+
// whether the hash prefix corresponds to P2SH. To do so,
|
|
289
|
+
// we need to omit the 8 value bytes from the output and compare
|
|
290
|
+
// the 3 prefix bytes of the hash with the expected P2SH prefix.
|
|
291
|
+
bool isP2SH = fundingOutput.slice3(8) == hex"17a914";
|
|
292
|
+
require(isP2SH, "Output must be P2SH");
|
|
293
|
+
|
|
292
294
|
require(
|
|
293
295
|
fundingOutputHash.slice20(0) == expectedScript.hash160View(),
|
|
294
296
|
"Wrong 20-byte script hash"
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { HardhatRuntimeEnvironment } from "hardhat/types"
|
|
2
2
|
import { DeployFunction } from "hardhat-deploy/types"
|
|
3
|
+
import fs from "fs"
|
|
4
|
+
import path from "path"
|
|
3
5
|
|
|
4
6
|
const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
|
|
5
|
-
const { ethers,
|
|
7
|
+
const { ethers, deployments, getNamedAccounts } = hre
|
|
6
8
|
const { get } = deployments
|
|
7
9
|
const { deployer, treasury } = await getNamedAccounts()
|
|
8
10
|
|
|
@@ -13,73 +15,124 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
|
|
|
13
15
|
|
|
14
16
|
const txProofDifficultyFactor = 6
|
|
15
17
|
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
// Deploy the Deposit library. hardhat-deploy detects bytecode changes
|
|
19
|
+
// and deploys a new version if the compiled artifact differs from the
|
|
20
|
+
// on-chain code at the address recorded in Deposit.json.
|
|
21
|
+
const Deposit = await deployments.deploy("Deposit", {
|
|
22
|
+
from: deployer,
|
|
23
|
+
log: true,
|
|
24
|
+
waitConfirmations: 1,
|
|
25
|
+
})
|
|
26
|
+
if (Deposit.newlyDeployed) {
|
|
27
|
+
console.log(`New Deposit library deployed at: ${Deposit.address}`)
|
|
28
|
+
}
|
|
29
|
+
|
|
21
30
|
const DepositSweep = await get("DepositSweep")
|
|
22
31
|
const Redemption = await get("Redemption")
|
|
23
32
|
const Wallets = await get("Wallets")
|
|
24
33
|
const Fraud = await get("Fraud")
|
|
25
34
|
const MovingFunds = await get("MovingFunds")
|
|
26
35
|
|
|
27
|
-
const
|
|
28
|
-
"Bridge",
|
|
29
|
-
"Bridge",
|
|
30
|
-
{
|
|
31
|
-
contractName: "Bridge",
|
|
32
|
-
initializerArgs: [
|
|
33
|
-
Bank.address,
|
|
34
|
-
LightRelay.address,
|
|
35
|
-
treasury,
|
|
36
|
-
WalletRegistry.address,
|
|
37
|
-
ReimbursementPool.address,
|
|
38
|
-
txProofDifficultyFactor,
|
|
39
|
-
],
|
|
40
|
-
factoryOpts: {
|
|
41
|
-
signer: await ethers.getSigner(deployer),
|
|
42
|
-
libraries: {
|
|
43
|
-
Deposit: Deposit.address,
|
|
44
|
-
DepositSweep: DepositSweep.address,
|
|
45
|
-
Redemption: Redemption.address,
|
|
46
|
-
Wallets: Wallets.address,
|
|
47
|
-
Fraud: Fraud.address,
|
|
48
|
-
MovingFunds: MovingFunds.address,
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
proxyOpts: {
|
|
52
|
-
kind: "transparent",
|
|
53
|
-
// Allow external libraries linking. We need to ensure manually that the
|
|
54
|
-
// external libraries we link are upgrade safe, as the OpenZeppelin plugin
|
|
55
|
-
// doesn't perform such a validation yet.
|
|
56
|
-
// See: https://docs.openzeppelin.com/upgrades-plugins/1.x/faq#why-cant-i-use-external-libraries
|
|
57
|
-
unsafeAllow: ["external-library-linking"],
|
|
58
|
-
},
|
|
59
|
-
}
|
|
60
|
-
)
|
|
36
|
+
const Bridge = await deployments.get("Bridge")
|
|
61
37
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
})
|
|
38
|
+
const bridgeLibraries = {
|
|
39
|
+
Deposit: Deposit.address,
|
|
40
|
+
DepositSweep: DepositSweep.address,
|
|
41
|
+
Redemption: Redemption.address,
|
|
42
|
+
Wallets: Wallets.address,
|
|
43
|
+
Fraud: Fraud.address,
|
|
44
|
+
MovingFunds: MovingFunds.address,
|
|
70
45
|
}
|
|
71
46
|
|
|
72
|
-
|
|
73
|
-
await
|
|
74
|
-
|
|
75
|
-
|
|
47
|
+
const bridgeFactory = await ethers.getContractFactory("Bridge", {
|
|
48
|
+
signer: await ethers.getSigner(deployer),
|
|
49
|
+
libraries: bridgeLibraries,
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
const deployBridgeImplementation = async (): Promise<string> => {
|
|
53
|
+
const implementationDeployment = await deployments.deploy(
|
|
54
|
+
"BridgeImplementation",
|
|
55
|
+
{
|
|
56
|
+
contract: "Bridge",
|
|
57
|
+
from: deployer,
|
|
58
|
+
log: true,
|
|
59
|
+
waitConfirmations: 1,
|
|
60
|
+
skipIfAlreadyDeployed: false,
|
|
61
|
+
libraries: bridgeLibraries,
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
return implementationDeployment.address
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
let isProxyRegistered = false
|
|
68
|
+
const ozNetworkFile = path.join(
|
|
69
|
+
__dirname,
|
|
70
|
+
`../.openzeppelin/${hre.network.name}.json`
|
|
71
|
+
)
|
|
72
|
+
if (fs.existsSync(ozNetworkFile)) {
|
|
73
|
+
const ozData = JSON.parse(fs.readFileSync(ozNetworkFile, "utf8"))
|
|
74
|
+
isProxyRegistered = (ozData.proxies || []).some(
|
|
75
|
+
(proxy: { address?: string }) =>
|
|
76
|
+
proxy.address?.toLowerCase() === Bridge.address.toLowerCase()
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
if (!isProxyRegistered) {
|
|
80
|
+
await hre.upgrades.forceImport(Bridge.address, bridgeFactory, {
|
|
81
|
+
kind: "transparent",
|
|
76
82
|
})
|
|
77
83
|
}
|
|
84
|
+
|
|
85
|
+
const adminSlot =
|
|
86
|
+
"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"
|
|
87
|
+
const adminData = await ethers.provider.getStorageAt(
|
|
88
|
+
Bridge.address,
|
|
89
|
+
adminSlot
|
|
90
|
+
)
|
|
91
|
+
const proxyAdminAddress = ethers.utils.getAddress(`0x${adminData.slice(26)}`)
|
|
92
|
+
const proxyAdmin = await ethers.getContractAt(
|
|
93
|
+
["function owner() view returns (address)"],
|
|
94
|
+
proxyAdminAddress
|
|
95
|
+
)
|
|
96
|
+
const proxyAdminOwner = await proxyAdmin.owner()
|
|
97
|
+
const deployerSigner = await ethers.getSigner(deployer)
|
|
98
|
+
const deployerAddress = await deployerSigner.getAddress()
|
|
99
|
+
|
|
100
|
+
const implementationAddress = await deployBridgeImplementation()
|
|
101
|
+
const proxyAdminInterface = new ethers.utils.Interface([
|
|
102
|
+
"function upgrade(address proxy, address implementation)",
|
|
103
|
+
])
|
|
104
|
+
const upgradeCalldata = proxyAdminInterface.encodeFunctionData("upgrade", [
|
|
105
|
+
Bridge.address,
|
|
106
|
+
implementationAddress,
|
|
107
|
+
])
|
|
108
|
+
|
|
109
|
+
if (proxyAdminOwner.toLowerCase() !== deployerAddress.toLowerCase()) {
|
|
110
|
+
console.log("ProxyAdmin owner:", proxyAdminOwner)
|
|
111
|
+
console.log("ProxyAdmin address:", proxyAdminAddress)
|
|
112
|
+
console.log("Bridge implementation:", implementationAddress)
|
|
113
|
+
console.log("Upgrade calldata:", upgradeCalldata)
|
|
114
|
+
return
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const proxyAdminWithUpgrade = await ethers.getContractAt(
|
|
118
|
+
["function upgrade(address proxy, address implementation)"],
|
|
119
|
+
proxyAdminAddress
|
|
120
|
+
)
|
|
121
|
+
const upgradeTx = await proxyAdminWithUpgrade.upgrade(
|
|
122
|
+
Bridge.address,
|
|
123
|
+
implementationAddress
|
|
124
|
+
)
|
|
125
|
+
await upgradeTx.wait(1)
|
|
126
|
+
console.log("ProxyAdmin owner:", proxyAdminOwner)
|
|
127
|
+
console.log("ProxyAdmin address:", proxyAdminAddress)
|
|
128
|
+
console.log("Bridge implementation:", implementationAddress)
|
|
129
|
+
console.log("Upgrade tx:", upgradeTx.hash)
|
|
130
|
+
console.log("Upgrade calldata:", upgradeCalldata)
|
|
78
131
|
}
|
|
79
132
|
|
|
80
133
|
export default func
|
|
81
134
|
|
|
82
135
|
func.tags = ["UpgradeBridge"]
|
|
83
|
-
//
|
|
136
|
+
// Set UPGRADE_BRIDGE=true when running an upgrade.
|
|
84
137
|
// yarn deploy --tags UpgradeBridge --network <NETWORK>
|
|
85
|
-
func.skip = async () => true
|
|
138
|
+
func.skip = async () => process.env.UPGRADE_BRIDGE !== "true"
|