@gooddollar/goodprotocol 1.0.0-beta.25 → 1.0.0-beta.33
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/contracts/DAOStackInterfaces.sol/Avatar.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/Controller.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/GlobalConstraintInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/IntVoteInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/ReputationInterface.dbg.json +1 -1
- package/artifacts/contracts/DAOStackInterfaces.sol/SchemeRegistrar.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/AggregatorV3Interface.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ERC20.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IAaveIncentivesController.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IDonationStaking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IERC2917.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IFirstClaimPool.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IGoodDollar.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IGoodStaking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IIdentity.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ILendingPool.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/INameService.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/IUBIScheme.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/ProxyAdmin.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Reserve.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/Uniswap.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/UniswapFactory.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/UniswapPair.dbg.json +1 -1
- package/artifacts/contracts/Interfaces.sol/cERC20.dbg.json +1 -1
- package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.dbg.json +1 -1
- package/artifacts/contracts/governance/ClaimersDistribution.sol/ClaimersDistribution.json +2 -2
- package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.dbg.json +1 -1
- package/artifacts/contracts/governance/CompoundVotingMachine.sol/CompoundVotingMachine.json +2 -2
- package/artifacts/contracts/governance/GReputation.sol/GReputation.dbg.json +1 -1
- package/artifacts/contracts/governance/GReputation.sol/GReputation.json +41 -2
- package/artifacts/contracts/governance/GovarnanceStaking.sol/GovernanceStaking.dbg.json +1 -1
- package/artifacts/contracts/governance/GovarnanceStaking.sol/GovernanceStaking.json +2 -2
- package/artifacts/contracts/governance/MultiBaseGovernanceShareField.sol/MultiBaseGovernanceShareField.dbg.json +1 -1
- package/artifacts/contracts/governance/Reputation.sol/Reputation.dbg.json +1 -1
- package/artifacts/contracts/governance/Reputation.sol/Reputation.json +2 -2
- package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.dbg.json +1 -1
- package/artifacts/contracts/governance/StakersDistribution.sol/StakersDistribution.json +2 -2
- package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/AaveMock.sol/AaveMock.json +2 -2
- package/artifacts/contracts/mocks/AaveUSDMockOracle.sol/AaveUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/BatUSDMockOracle.sol/BatUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/CompUsdMockOracle.sol/CompUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DAIMock.sol/DAIMock.json +2 -2
- package/artifacts/contracts/mocks/DaiEthPriceMockOracle.sol/DaiEthPriceMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/DecimalsMock.sol/DecimalsMock.json +2 -2
- package/artifacts/contracts/mocks/EthUSDMockOracle.sol/EthUSDMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/GasPriceMockOracle.sol/GasPriceMockOracle.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodCompoundStakingTest.sol/GoodCompoundStakingTest.json +4 -4
- package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/GoodFundManagerTest.sol/GoodFundManagerTest.json +37 -11
- package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/IncentiveControllerMock.sol/IncentiveControllerMock.json +2 -2
- package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/LendingPoolMock.sol/LendingPoolMock.json +2 -2
- package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTester.sol/OverMintTester.json +2 -2
- package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.dbg.json +1 -1
- package/artifacts/contracts/mocks/OverMintTesterRegularStake.sol/OverMintTesterRegularStake.json +2 -2
- package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/SixteenDecimalsTokenMock.sol/SixteenDecimalsTokenMock.json +2 -2
- package/artifacts/contracts/mocks/SwapHelperTest.sol/SwapHelperTest.dbg.json +1 -1
- package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/TwentyDecimalsTokenMock.sol/TwentyDecimalsTokenMock.json +2 -2
- package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/UsdcMock.sol/USDCMock.json +2 -2
- package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cBATMock.sol/cBATMock.json +2 -2
- package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAILowWorthMock.sol/cDAILowWorthMock.json +2 -2
- package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAIMock.sol/cDAIMock.json +2 -2
- package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDAINonMintableMock.sol/cDAINonMintableMock.json +2 -2
- package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cDecimalsMock.sol/cDecimalsMock.json +2 -2
- package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cSDTMock.sol/cSDTMock.json +2 -2
- package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.dbg.json +1 -1
- package/artifacts/contracts/mocks/cUSDCMock.sol/cUSDCMock.json +2 -2
- package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.dbg.json +1 -1
- package/artifacts/contracts/reserve/ExchangeHelper.sol/ExchangeHelper.json +2 -2
- package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodMarketMaker.sol/GoodMarketMaker.json +2 -2
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/ContributionCalc.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.dbg.json +1 -1
- package/artifacts/contracts/reserve/GoodReserveCDai.sol/GoodReserveCDai.json +2 -2
- package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.dbg.json +1 -1
- package/artifacts/contracts/staking/BaseShareField.sol/BaseShareField.json +2 -2
- package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/DonationsStaking.sol/DonationsStaking.json +2 -2
- package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.dbg.json +1 -1
- package/artifacts/contracts/staking/GoodFundManager.sol/GoodFundManager.json +37 -11
- package/artifacts/contracts/staking/SimpleStaking.sol/SimpleStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.dbg.json +1 -1
- package/artifacts/contracts/staking/UniswapV2SwapHelper.sol/UniswapV2SwapHelper.json +2 -2
- package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/AaveStakingFactory.sol/AaveStakingFactory.json +3 -3
- package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/aave/GoodAaveStaking.sol/GoodAaveStaking.json +4 -4
- package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/CompoundStakingFactory.sol/CompoundStakingFactory.json +4 -4
- package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/compound/GoodCompoundStaking.sol/GoodCompoundStaking.json +6 -6
- package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.dbg.json +1 -1
- package/artifacts/contracts/ubi/UBIScheme.sol/UBIScheme.json +2 -2
- package/artifacts/contracts/utils/BancorFormula.sol/BancorFormula.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOContract.sol/DAOContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOContract.sol/DAOContract.json +2 -2
- package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.dbg.json +1 -1
- package/artifacts/contracts/utils/DAOUpgradeableContract.sol/DAOUpgradeableContract.json +2 -2
- package/artifacts/contracts/utils/DSMath.sol/DSMath.dbg.json +1 -1
- package/artifacts/contracts/utils/DataTypes.sol/DataTypes.dbg.json +1 -1
- package/artifacts/contracts/utils/NameService.sol/NameService.dbg.json +1 -1
- package/artifacts/contracts/utils/NameService.sol/NameService.json +2 -2
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/OldMarketMaker.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgrade.sol/ProtocolUpgrade.json +2 -2
- package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.dbg.json +1 -1
- package/artifacts/contracts/utils/ProtocolUpgradeFuse.sol/ProtocolUpgradeFuse.json +2 -2
- package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.dbg.json +1 -1
- package/artifacts/contracts/utils/ReputationTestHelper.sol/ReputationTestHelper.json +2 -2
- package/contracts/governance/GReputation.sol +70 -40
- package/contracts/staking/GoodFundManager.sol +41 -40
- package/contracts/utils/ProtocolUpgrade.sol +10 -0
- package/contracts/utils/ProtocolUpgradeFuse.sol +10 -0
- package/package.json +4 -3
- package/releases/deploy-settings.json +10 -0
- package/releases/deployment.json +1 -1
- package/releases/olddao.json +1 -1
- package/scripts/gdx/gdxAirdropCalculation.ts +11 -10
- package/scripts/governance/README.md +70 -0
- package/scripts/governance/airdropCalculation.ts +463 -98
- package/scripts/upgradeToV2/upgradeToV2.ts +118 -124
- package/test/governance/GReputation.test.ts +145 -86
- package/test/staking/DifferentStakingTokens.test.ts +11 -10
- package/test/staking/SimpleDAIStaking.test.ts +37 -40
- package/test/staking/StakingRewards.test.ts +57 -65
- package/test/staking/SwapHelper.test.ts +17 -21
- package/test/staking/UsdcAaveStaking.test.ts +12 -12
- package/yarn.lock +16 -9
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
"type": "function"
|
|
90
90
|
}
|
|
91
91
|
],
|
|
92
|
-
"bytecode": "0x60806040523480156200001157600080fd5b50604051620038d9380380620038d983398181016040528101906200003791906200036a565b6200006b7f8c42f5e355865ee700fb4f5f64f3c0a68ca7a8423e71d04ddf2437abac3ee7d660001b6200030d60201b60201c565b6200009f7f377d321c6ef0a25d17af4a5d304dac012ab801233fbd5a1f07051c779d90dd8260001b6200030d60201b60201c565b620000d37fbc3b16e057120003a6d2666bca3ae611f6eb4b50ff73418724e166edc1baa01460001b6200030d60201b60201c565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001477f59bf6103067e9fd432d140fcdcbddf4b71c525bd45362006ec09d74b6be4aa2c60001b6200030d60201b60201c565b6200017b7f6c40c2b95c31660d37c4b34c046b80defcdc1f312c19f30dfeccf1fb70c6a4aa60001b6200030d60201b60201c565b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001f07f322b4a5f14757189c9e8b9f88d63dc6ea237d9ea62cd9a8ec365477824f10cd560001b6200030d60201b60201c565b620002247f6b37c4ad3598c12ce7193b6712e66a6a638297da896ae9d6b8750836ae4b108460001b6200030d60201b60201c565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aef7de66040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028b57600080fd5b505afa158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c691906200033e565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000412565b50565b6000815190506200032181620003de565b92915050565b6000815190506200033881620003f8565b92915050565b6000602082840312156200035157600080fd5b6000620003618482850162000310565b91505092915050565b6000602082840312156200037d57600080fd5b60006200038d8482850162000327565b91505092915050565b6000620003a382620003be565b9050919050565b6000620003b78262000396565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620003e98162000396565b8114620003f557600080fd5b50565b6200040381620003aa565b81146200040f57600080fd5b50565b6134b780620004226000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80634eb70b39146100465780635c0d087b1461006257806375a2d2431461007e575b600080fd5b610060600480360381019061005b91906125d1565b61009a565b005b61007c60048036038101906100779190612505565b61009d565b005b610098600480360381019061009391906125fa565b61099d565b005b50565b6100c97f6f99860b838b0dfe59db29d8dc8be062744270ec3220b9bc644dd17e972bd73860001b61009a565b6100f57f504317b5368544e0229fbd0b940d757122448f9c7d4b72cd1d4aea1eb80181c660001b61009a565b6101217f41decebe2e3ae2efc30b410103950a3b5c22adec5d8c19592598ec496bb7008860001b61009a565b61014d7f32a3a1183016d95e4daee6a1c1db5fb54d34a101350e413ac106a4a5eaca2c2860001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d490612d8d565b60405180910390fd5b6102097fa4cbd9e7d4aaab96c961b0742ffc6d3f4ec38a616fa56a4bc1eeb0b6eaa7359560001b61009a565b6102357fddbf5fa5c047f2c4f0cc826a68932c385dcd84d72a35008a145e0780b7c6300860001b61009a565b6102617f5d88a7b571c175ec8e6c873c5f61bb68de4609784bed21892694b8fb263451ee60001b61009a565b61028d7fa3ebe0b4b2b33d02e5a9ecf19a69663ff1f1e08291cc047fc5f9e550c5cb15c560001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d84600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161030a929190612ad7565b602060405180830381600087803b15801561032457600080fd5b505af1158015610338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035c9190612554565b61039b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039290612c4d565b60405180910390fd5b6103c77f75a4da7c3d83af405517463444c5412bd9db2b0ff9eca74c65e300b2b974b4de60001b61009a565b6103f37fbc8b5b7a0cce2fd87ab790738e374f9f65b1341d8c491c032d62ed9251365c6560001b61009a565b61041f7f828f970e0b04686ee47a2eccfbddfb7c202bbfc660fe437d28293a7ddcba233b60001b61009a565b61044b7f173576014d1464b88d10d1f87e745c950dcc103addb74b693920bb6003e122d360001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d83600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016104c8929190612ad7565b602060405180830381600087803b1580156104e257600080fd5b505af11580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a9190612554565b610559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055090612cad565b60405180910390fd5b6105857f2517a3b1271006bd27c20aeb410887b459d432bfd0e7d64b20fdd7707a1c13a160001b61009a565b6105b17fa4a83039dcca433c0178409d585b9aec32729fe7b33500b5121d56dd46179bf460001b61009a565b6105dd7fbe58ee543ca6ebc77d4f18789917e098219a99e7a2c724d83148fa4ce3242cdd60001b61009a565b6106097f201575b15d41ecd6e0244e7551408dd8f74b76eef4512c1b0fc591d9dc995f5360001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e869d45f826000801b601f60e01b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b81526004016106919493929190612b45565b602060405180830381600087803b1580156106ab57600080fd5b505af11580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e39190612554565b610722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071990612d2d565b60405180910390fd5b61074e7fd2f47bf21669fa85ab0bba9c4e049ebd73e9645548fec9c9dc0df9f559a3cf4060001b61009a565b61077a7fb9eac905e8a7c2f1bae65ac256a02d362534f04efe8d871a5dc93a1a42f12f3760001b61009a565b6107a67f730d4461029406ad2e08de23bcd8246ea25f0b42411ca4ac01423bee7be4a83060001b61009a565b6107d27f5fe0fafddd644c69ac16bb9f8c4266cc158c7b32792fd0758259f3a3b6fa152f60001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c525b13600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161084d9190612abc565b602060405180830381600087803b15801561086757600080fd5b505af115801561087b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089f9190612554565b6108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590612dcd565b60405180910390fd5b61090a7fee0de9ebf44d4cc435496fe2ca1ae8cd328160118a8645054d3faafe0ccfa08360001b61009a565b6109367f643b6c01e7e5992f435b87fea2e59e181e6094a313ab0c577fc531811253e27d60001b61009a565b6109627fac73d7202d0b00903ae1854afc29062c1c80ab510563530b85f664899da798e160001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6109c97fc2825fd9763c86bdfc63de52102d4c0912d1eef522dc8ffbad2bf87863b52a2060001b61009a565b6109f57f36746936312f76142c7b4a056fd3ec9d8fe2f252b0b0b6296286adbd7f501c5060001b61009a565b610a217fb23b9587b78f39f0d394d6347efe7e758baa24b85b3440c55d41b8112d3e11f060001b61009a565b610a4d7f8fb52f82ea275f35b88b1e88a9a435688896d586682604de07e4835d9f5a103e60001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad490612d8d565b60405180910390fd5b610b097f76f924a90660ffd781afaca761178270cc62a762af5d208f6cdbe3f24d89824e60001b61009a565b610b357f6a0a050fb7c18f35bc82a57f5f023e4c627a130602c5012f515ee9b3dd80cceb60001b61009a565b610b617f5287a839d2eb54d51ae95dfc6d0e9091b4f5160e192dde8e9355e1f336a6ff9460001b61009a565b610b8d7f4bdcda6de1ec3c7611ff34da6910c18b1bf790630c08a1c12c905cfc0958ab5260001b61009a565b818190508484905014610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90612c0d565b60405180910390fd5b610c017f840cc7cddc926f229f0eb993890c7f113929b07dbe7de7683de26cd0035ab1b160001b61009a565b610c2d7fda471798f0b7e33c47552540ca3ad99096390cb259aeab25ad3d5d0274e6bef660001b61009a565b610c597f40d98f1e3bd30fdf9eb0046e66e1b131d26126ba7097319e5e764395e35922b760001b61009a565b610c857fc72d4032d3b486d19984d226568ce4224392e65e0babc0a9ac24b066069b23db60001b61009a565b6004875114610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090612d6d565b60405180910390fd5b610cf57fa0e3a7728322302ead4ee50bda6f840bc844651c0fbac3598801463b538914f160001b61009a565b610d217fbcb53111df07d65716f7d37ed853349255f4303041714b3144b41fd8fa4f618a60001b61009a565b610d4d7f906b7b33fb9991687c8989e27701dd46341cf7355ab8cab37e73b2b2faa2c02e60001b61009a565b610dda87600281518110610d8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518689600381518110610dcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516113d9565b610e067f08bd47c89ae48cba9655c4b3049a989e5a9be7b4165010dc21d3b55e4c773ada60001b61009a565b610e327f5c104ab8f8ab57b2e9d3c0b38766a7b387906e98862cd67987300ccd97c25aaf60001b61009a565b610ebf88858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611fe4565b610eeb7ff0d321d1b7dd2c118a4ee6611e18955fc9f3adc46400a3f7a3edf1f606580d7660001b61009a565b610f177f827879f8ebbd0e918c254f258e4b72a596a37005e00bac85ce30b41089283dca60001b61009a565b610f437fbd9de88a28aa423253c2e8c63b72b1fe6e846709af1dca03235b94bee1cc628660001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e869d45f8973ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff1660e01b8152600401610fb690612c8d565b60206040518083038186803b158015610fce57600080fd5b505afa158015610fe2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100691906124dc565b6000801b600160e01b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b81526004016110519493929190612b45565b602060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a39190612554565b6110e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d990612c6d565b60405180910390fd5b61110e7f326789d0b63d4edc88ee00ab696bdefa6d855ff7a8ae93e6a280336fa6760f7560001b61009a565b61113a7fc98ae6a1243cd38cec67850a0e3eef8824fbe35dd4a3bc2db5341085ec6d71a860001b61009a565b6111667f54e940803a43fbb0a56659116d1bbdf89b77ef2bce448fdd8f68ebd1e94be25260001b61009a565b6111927f90f82887e95664784667f2d5513d40bf67533e5cf2d38a789e7e4f0753c1c91660001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d8973ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff1660e01b815260040161120590612d0d565b60206040518083038186803b15801561121d57600080fd5b505afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125591906124dc565b73ffffffffffffffffffffffffffffffffffffffff16634b75f54f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561129a57600080fd5b505afa1580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d291906124dc565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611312929190612ad7565b602060405180830381600087803b15801561132c57600080fd5b505af1158015611340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113649190612554565b6113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90612ccd565b60405180910390fd5b6113cf7f1b942dbfce2b6c69e5493d952a55086fbb133c33d8578e807c160317cac8bd5360001b61009a565b5050505050505050565b6114057fc9bbb0c1b25ec09bec0a632a2608c7f69804d5ac52ce5a50c937e81e8edd124b60001b61009a565b6114317f8a5d15b0b3df417400e4e3280462aa1e91dd6b5791ebf7fc3e99cb67a65d75f860001b61009a565b61145d7f59d7e2d9a2f3b431ddb48f817ad77f61304e68aa255bd67776e4d3022623004b60001b61009a565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c757600080fd5b505afa1580156114db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ff91906124dc565b905061152d7fc4436dcc3f9fa87627a62e75d90fbae12deecb15bff72762b8447f96ceb90ad060001b61009a565b6115597fdc4fbff900ec126c1f2f47549f397b14b143204d6e2d7ada4d5eaf39c59e7b2160001b61009a565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016115949190612abc565b60206040518083038186803b1580156115ac57600080fd5b505afa1580156115c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e491906126d5565b90506116127f7700d23f9ac835d2a386639a5303daeb50af4bca30c67cb510cb31602182584860001b61009a565b61163e7f888e9bafaed318462a8ef7729902043058e273f1290f7f2e517b0d70afa70f3660001b61009a565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a858760405160240161168f9190612abc565b6040516020818303038152906040527f2c336822000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b81526004016117509493929190612b8a565b600060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906117a7919061257d565b5090506117d67f2e2670c3e97f77a29a34632d22d9a04b0b4b05c7132575eba99659081a56c5b360001b61009a565b6118027ff3f17106ff1277cc35937f30fb5e1f4f952c92b6810e17d6477eac6426e9438c60001b61009a565b61182e7fd223089d169c6bdb0cb795964457449827371183fc80cad0c2c90fb88b94bcb560001b61009a565b8061186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590612ced565b60405180910390fd5b61189a7fd0b9bf288479c895e544d90058fbf95bde0012fc4da4657ceec56bbeb07f07a760001b61009a565b6118c67fd9707e0ca237c838d2acf7ea9e2fe2a684f878529d0a59f2c472c4196db4fc3460001b61009a565b6118f27f07af66a7809c16f837d6174ed0778435e2d64b5209e8ca6c4eabae7ecdf8a24f60001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a876040516024016040516020818303038152906040527fefbe1c1c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b81526004016119f69493929190612b8a565b600060405180830381600087803b158015611a1057600080fd5b505af1158015611a24573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611a4d919061257d565b5080915050611a7e7f50c7f62b48327224bc4b6dec9eb18c03f2ceb88abb00bbb19612165cbd95a97160001b61009a565b611aaa7f4e42537547564dbc40411c8f94bcb2810ca005cebe21d5fd079887cb90ddfbcf60001b61009a565b611ad67f8e639255616509529c1d3d618ec4b6f65f00120fbff1a154c3822f71ddade9b560001b61009a565b80611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d90612c2d565b60405180910390fd5b611b427f5749f8b0985695721a3bcdddfba40694cc25b5f4b6a6e98f489ecc195177cb0760001b61009a565b611b6e7f309342aeef7bc73123bf6b8f1def6eb6557575bc2afb20c47c8e17b1a9903afb60001b61009a565b611b9a7f1afef01c7d5e47f77e99e03281c8246041338f49d5d638f8c2ccde06f316f08e60001b61009a565b611bc67fd13b2b4a932275dd11d6e1ae063fc161d92d6044a68cb2f529be646c56cb58c560001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d87600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611c43929190612ad7565b602060405180830381600087803b158015611c5d57600080fd5b505af1158015611c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c959190612554565b611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb90612d4d565b60405180910390fd5b611d007f8b2822f4b530221f117ae5e75aeccadeb9be6c0eb908c43ba7271b2816b0eb3060001b61009a565b611d2c7f959cc9f4f009a7619f80f3ae5db35a3f92b24dd918b659c2625a1d21a2e1257e60001b61009a565b611d587fcd700c9215ecb350510713a2bbbf9c3c17e22eabec00eb36ca06bb5f419185da60001b61009a565b6000821115611faf57611d8d7f1dec6e22581505b1fb6e910e158193433ba5ceff8ae539f89d565525e522691460001b61009a565b611db97f5e61662526c99ed38ca992b9a8790755544dd379742720593ac92b8f53ec482760001b61009a565b611de57f2d8cb3925fe11b1ad70770935097552bffc3edfc341df2362798fabc2ca6505560001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9a04cdd848785600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b8152600401611e669493929190612b00565b602060405180830381600087803b158015611e8057600080fd5b505af1158015611e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb89190612554565b9050611ee67fcaa51136be1db5064f4c944c7b178d1c401afe76f244c03f5d5d23cfea33baa560001b61009a565b611f127f0ad30f12bffad3ef0c26114541e0e8e4b7d086de8c4914bdaf13004c0482548a60001b61009a565b611f3e7f68bb2363df6e19e67e2dea37179a0b92fbb9e3381bcd4cbe54cc457cf741aaf360001b61009a565b80611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7590612ded565b60405180910390fd5b611faa7fa4063197ef21012d5447aff84e86ab304ac1b93e2e0e1ef45f484ea49a2039a460001b61009a565b611fdc565b611fdb7fb42f941166466241fba7666f12a94289e892b4f99191066da1ae971b5310091760001b61009a565b5b505050505050565b6120107fcd5587172520f7a61a9dfad8a8b89adb8920d346720d652b0857d6c0c5326a4760001b61009a565b61203c7fcb479892d9b23bbd77ccbbef5c44dabd5e251ad04de434740cb853e35424dc5160001b61009a565b6120687fd2bd89b720b5b86dbc700680f4a11333bb3616a2d0c51754c944a623577572ca60001b61009a565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a8585856040516024016120bb929190612bd6565b6040516020818303038152906040527f4ab01f5b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b815260040161217c9493929190612b8a565b600060405180830381600087803b15801561219657600080fd5b505af11580156121aa573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906121d3919061257d565b5090506122027ff0b480e995e483a27b1f9260f435b61d6f20666a73da9e0d7a910913ebdeae0560001b61009a565b61222e7f88f0c68c8111b1cc2e6c0d5852a0e0b6a386ac822a86737ca5caa2a4f819f1fd60001b61009a565b61225a7f1baa686bae970f6953c8b0c9d18565bcd6ddf74319e4cb3493a42b1ed1ec44b560001b61009a565b8061229a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229190612dad565b60405180910390fd5b6122c67f2d1acba28a153ff4a16d64efa5b6e015e6c8734d596a97a54a051eca6b433d7d60001b61009a565b50505050565b60006122df6122da84612e32565b612e0d565b905080838252602082019050828560208602820111156122fe57600080fd5b60005b8581101561232e57816123148882612376565b845260208401935060208301925050600181019050612301565b5050509392505050565b600061234b61234684612e5e565b612e0d565b90508281526020810184848401111561236357600080fd5b61236e848285612fd0565b509392505050565b6000813590506123858161340e565b92915050565b60008151905061239a8161340e565b92915050565b60008083601f8401126123b257600080fd5b8235905067ffffffffffffffff8111156123cb57600080fd5b6020830191508360208202830111156123e357600080fd5b9250929050565b600082601f8301126123fb57600080fd5b813561240b8482602086016122cc565b91505092915050565b60008083601f84011261242657600080fd5b8235905067ffffffffffffffff81111561243f57600080fd5b60208301915083602082028301111561245757600080fd5b9250929050565b60008151905061246d81613425565b92915050565b6000813590506124828161343c565b92915050565b600082601f83011261249957600080fd5b81516124a9848260208601612338565b91505092915050565b6000813590506124c181613453565b92915050565b6000815190506124d68161346a565b92915050565b6000602082840312156124ee57600080fd5b60006124fc8482850161238b565b91505092915050565b60008060006060848603121561251a57600080fd5b600061252886828701612376565b935050602061253986828701612376565b925050604061254a86828701612376565b9150509250925092565b60006020828403121561256657600080fd5b60006125748482850161245e565b91505092915050565b6000806040838503121561259057600080fd5b600061259e8582860161245e565b925050602083015167ffffffffffffffff8111156125bb57600080fd5b6125c785828601612488565b9150509250929050565b6000602082840312156125e357600080fd5b60006125f184828501612473565b91505092915050565b60008060008060008060008060c0898b03121561261657600080fd5b60006126248b828c016124b2565b985050602089013567ffffffffffffffff81111561264157600080fd5b61264d8b828c016123ea565b975050604061265e8b828c01612376565b965050606061266f8b828c01612376565b955050608089013567ffffffffffffffff81111561268c57600080fd5b6126988b828c01612414565b945094505060a089013567ffffffffffffffff8111156126b757600080fd5b6126c38b828c016123a0565b92509250509295985092959890939650565b6000602082840312156126e757600080fd5b60006126f5848285016124c7565b91505092915050565b600061270a838361272e565b60208301905092915050565b60006127228383612808565b60208301905092915050565b61273781612f2e565b82525050565b61274681612f2e565b82525050565b600061275782612eaf565b6127618185612eea565b935061276c83612e8f565b8060005b8381101561279d57815161278488826126fe565b975061278f83612ed0565b925050600181019050612770565b5085935050505092915050565b60006127b582612eba565b6127bf8185612efb565b93506127ca83612e9f565b8060005b838110156127fb5781516127e28882612716565b97506127ed83612edd565b9250506001810190506127ce565b5085935050505092915050565b61281181612f4c565b82525050565b61282081612f4c565b82525050565b61282f81612f56565b82525050565b600061284082612ec5565b61284a8185612f0c565b935061285a818560208601612fd0565b61286381613063565b840191505092915050565b61287781612fbe565b82525050565b600061288a600f83612f1d565b915061289582613074565b602082019050919050565b60006128ad601883612f1d565b91506128b88261309d565b602082019050919050565b60006128d0602483612f1d565b91506128db826130c6565b604082019050919050565b60006128f3601b83612f1d565b91506128fe82613115565b602082019050919050565b6000612916600883612f1d565b91506129218261313e565b602082019050919050565b6000612939602283612f1d565b915061294482613167565b604082019050919050565b600061295c601c83612f1d565b9150612967826131b6565b602082019050919050565b600061297f601383612f1d565b915061298a826131df565b602082019050919050565b60006129a2600a83612f1d565b91506129ad82613208565b602082019050919050565b60006129c5602883612f1d565b91506129d082613231565b604082019050919050565b60006129e8602283612f1d565b91506129f382613280565b604082019050919050565b6000612a0b601b83612f1d565b9150612a16826132cf565b602082019050919050565b6000612a2e600a83612f1d565b9150612a39826132f8565b602082019050919050565b6000612a51602683612f1d565b9150612a5c82613321565b604082019050919050565b6000612a74602883612f1d565b9150612a7f82613370565b604082019050919050565b6000612a97602683612f1d565b9150612aa2826133bf565b604082019050919050565b612ab681612fb4565b82525050565b6000602082019050612ad1600083018461273d565b92915050565b6000604082019050612aec600083018561273d565b612af9602083018461273d565b9392505050565b6000608082019050612b15600083018761273d565b612b22602083018661273d565b612b2f6040830185612aad565b612b3c606083018461273d565b95945050505050565b6000608082019050612b5a600083018761273d565b612b676020830186612817565b612b746040830185612826565b612b81606083018461273d565b95945050505050565b6000608082019050612b9f600083018761273d565b8181036020830152612bb18186612835565b9050612bc0604083018561273d565b612bcd606083018461286e565b95945050505050565b60006040820190508181036000830152612bf081856127aa565b90508181036020830152612c04818461274c565b90509392505050565b60006020820190508181036000830152612c268161287d565b9050919050565b60006020820190508181036000830152612c46816128a0565b9050919050565b60006020820190508181036000830152612c66816128c3565b9050919050565b60006020820190508181036000830152612c86816128e6565b9050919050565b60006020820190508181036000830152612ca681612909565b9050919050565b60006020820190508181036000830152612cc68161292c565b9050919050565b60006020820190508181036000830152612ce68161294f565b9050919050565b60006020820190508181036000830152612d0681612972565b9050919050565b60006020820190508181036000830152612d2681612995565b9050919050565b60006020820190508181036000830152612d46816129b8565b9050919050565b60006020820190508181036000830152612d66816129db565b9050919050565b60006020820190508181036000830152612d86816129fe565b9050919050565b60006020820190508181036000830152612da681612a21565b9050919050565b60006020820190508181036000830152612dc681612a44565b9050919050565b60006020820190508181036000830152612de681612a67565b9050919050565b60006020820190508181036000830152612e0681612a8a565b9050919050565b6000612e17612e28565b9050612e238282613003565b919050565b6000604051905090565b600067ffffffffffffffff821115612e4d57612e4c613034565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612e7957612e78613034565b5b612e8282613063565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612f3982612f94565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000612f8d82612f2e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612fc982612fb4565b9050919050565b60005b83811015612fee578082015181840152602081019050612fd3565b83811115612ffd576000848401525b50505050565b61300c82613063565b810181811067ffffffffffffffff8211171561302b5761302a613034565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f6c656e677468206d69736d617463680000000000000000000000000000000000600082015250565b7f6f6c6420756269736368656d6520656e64206661696c65640000000000000000600082015250565b7f756e7265676973746572696e6720736368656d6552656769737472617220666160008201527f696c656400000000000000000000000000000000000000000000000000000000602082015250565b7f7265676973746572696e67204964656e74697479206661696c65640000000000600082015250565b7f4944454e54495459000000000000000000000000000000000000000000000000600082015250565b7f756e7265676973746572696e672075706772616465536368656d65206661696c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e6720666f726d756c61206661696c656400000000600082015250565b7f736574554249536368656d65206661696c656400000000000000000000000000600082015250565b7f474f4f44444f4c4c415200000000000000000000000000000000000000000000600082015250565b7f7265676973746572696e6720636f6d706f756e64566f74696e674d616368696e60008201527f65206661696c6564000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e67206f6c6420554249536368656d65206661696c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f6f6c6420636f6e7472616374732073697a65206d69736d617463680000000000600082015250565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b7f43616c6c696e67207365744e616d6553657276696365436f6e7472616374732060008201527f6661696c65640000000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e672050726f746f636f6c5570677261646546757360008201527f65206661696c6564000000000000000000000000000000000000000000000000602082015250565b7f66756e6473207472616e7366657220746f206e657720756269736368656d652060008201527f6661696c65640000000000000000000000000000000000000000000000000000602082015250565b61341781612f2e565b811461342257600080fd5b50565b61342e81612f40565b811461343957600080fd5b50565b61344581612f4c565b811461345057600080fd5b50565b61345c81612f82565b811461346757600080fd5b50565b61347381612fb4565b811461347e57600080fd5b5056fea2646970667358221220fc649130ec1aee92c2d3a541d61f8486dfcb587b417e3aba9796aa04f61f09a864736f6c63430008030033",
|
|
93
|
-
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80634eb70b39146100465780635c0d087b1461006257806375a2d2431461007e575b600080fd5b610060600480360381019061005b91906125d1565b61009a565b005b61007c60048036038101906100779190612505565b61009d565b005b610098600480360381019061009391906125fa565b61099d565b005b50565b6100c97f6f99860b838b0dfe59db29d8dc8be062744270ec3220b9bc644dd17e972bd73860001b61009a565b6100f57f504317b5368544e0229fbd0b940d757122448f9c7d4b72cd1d4aea1eb80181c660001b61009a565b6101217f41decebe2e3ae2efc30b410103950a3b5c22adec5d8c19592598ec496bb7008860001b61009a565b61014d7f32a3a1183016d95e4daee6a1c1db5fb54d34a101350e413ac106a4a5eaca2c2860001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d490612d8d565b60405180910390fd5b6102097fa4cbd9e7d4aaab96c961b0742ffc6d3f4ec38a616fa56a4bc1eeb0b6eaa7359560001b61009a565b6102357fddbf5fa5c047f2c4f0cc826a68932c385dcd84d72a35008a145e0780b7c6300860001b61009a565b6102617f5d88a7b571c175ec8e6c873c5f61bb68de4609784bed21892694b8fb263451ee60001b61009a565b61028d7fa3ebe0b4b2b33d02e5a9ecf19a69663ff1f1e08291cc047fc5f9e550c5cb15c560001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d84600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161030a929190612ad7565b602060405180830381600087803b15801561032457600080fd5b505af1158015610338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035c9190612554565b61039b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039290612c4d565b60405180910390fd5b6103c77f75a4da7c3d83af405517463444c5412bd9db2b0ff9eca74c65e300b2b974b4de60001b61009a565b6103f37fbc8b5b7a0cce2fd87ab790738e374f9f65b1341d8c491c032d62ed9251365c6560001b61009a565b61041f7f828f970e0b04686ee47a2eccfbddfb7c202bbfc660fe437d28293a7ddcba233b60001b61009a565b61044b7f173576014d1464b88d10d1f87e745c950dcc103addb74b693920bb6003e122d360001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d83600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016104c8929190612ad7565b602060405180830381600087803b1580156104e257600080fd5b505af11580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a9190612554565b610559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055090612cad565b60405180910390fd5b6105857f2517a3b1271006bd27c20aeb410887b459d432bfd0e7d64b20fdd7707a1c13a160001b61009a565b6105b17fa4a83039dcca433c0178409d585b9aec32729fe7b33500b5121d56dd46179bf460001b61009a565b6105dd7fbe58ee543ca6ebc77d4f18789917e098219a99e7a2c724d83148fa4ce3242cdd60001b61009a565b6106097f201575b15d41ecd6e0244e7551408dd8f74b76eef4512c1b0fc591d9dc995f5360001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e869d45f826000801b601f60e01b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b81526004016106919493929190612b45565b602060405180830381600087803b1580156106ab57600080fd5b505af11580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e39190612554565b610722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071990612d2d565b60405180910390fd5b61074e7fd2f47bf21669fa85ab0bba9c4e049ebd73e9645548fec9c9dc0df9f559a3cf4060001b61009a565b61077a7fb9eac905e8a7c2f1bae65ac256a02d362534f04efe8d871a5dc93a1a42f12f3760001b61009a565b6107a67f730d4461029406ad2e08de23bcd8246ea25f0b42411ca4ac01423bee7be4a83060001b61009a565b6107d27f5fe0fafddd644c69ac16bb9f8c4266cc158c7b32792fd0758259f3a3b6fa152f60001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c525b13600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161084d9190612abc565b602060405180830381600087803b15801561086757600080fd5b505af115801561087b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089f9190612554565b6108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590612dcd565b60405180910390fd5b61090a7fee0de9ebf44d4cc435496fe2ca1ae8cd328160118a8645054d3faafe0ccfa08360001b61009a565b6109367f643b6c01e7e5992f435b87fea2e59e181e6094a313ab0c577fc531811253e27d60001b61009a565b6109627fac73d7202d0b00903ae1854afc29062c1c80ab510563530b85f664899da798e160001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6109c97fc2825fd9763c86bdfc63de52102d4c0912d1eef522dc8ffbad2bf87863b52a2060001b61009a565b6109f57f36746936312f76142c7b4a056fd3ec9d8fe2f252b0b0b6296286adbd7f501c5060001b61009a565b610a217fb23b9587b78f39f0d394d6347efe7e758baa24b85b3440c55d41b8112d3e11f060001b61009a565b610a4d7f8fb52f82ea275f35b88b1e88a9a435688896d586682604de07e4835d9f5a103e60001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad490612d8d565b60405180910390fd5b610b097f76f924a90660ffd781afaca761178270cc62a762af5d208f6cdbe3f24d89824e60001b61009a565b610b357f6a0a050fb7c18f35bc82a57f5f023e4c627a130602c5012f515ee9b3dd80cceb60001b61009a565b610b617f5287a839d2eb54d51ae95dfc6d0e9091b4f5160e192dde8e9355e1f336a6ff9460001b61009a565b610b8d7f4bdcda6de1ec3c7611ff34da6910c18b1bf790630c08a1c12c905cfc0958ab5260001b61009a565b818190508484905014610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90612c0d565b60405180910390fd5b610c017f840cc7cddc926f229f0eb993890c7f113929b07dbe7de7683de26cd0035ab1b160001b61009a565b610c2d7fda471798f0b7e33c47552540ca3ad99096390cb259aeab25ad3d5d0274e6bef660001b61009a565b610c597f40d98f1e3bd30fdf9eb0046e66e1b131d26126ba7097319e5e764395e35922b760001b61009a565b610c857fc72d4032d3b486d19984d226568ce4224392e65e0babc0a9ac24b066069b23db60001b61009a565b6004875114610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc090612d6d565b60405180910390fd5b610cf57fa0e3a7728322302ead4ee50bda6f840bc844651c0fbac3598801463b538914f160001b61009a565b610d217fbcb53111df07d65716f7d37ed853349255f4303041714b3144b41fd8fa4f618a60001b61009a565b610d4d7f906b7b33fb9991687c8989e27701dd46341cf7355ab8cab37e73b2b2faa2c02e60001b61009a565b610dda87600281518110610d8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518689600381518110610dcd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516113d9565b610e067f08bd47c89ae48cba9655c4b3049a989e5a9be7b4165010dc21d3b55e4c773ada60001b61009a565b610e327f5c104ab8f8ab57b2e9d3c0b38766a7b387906e98862cd67987300ccd97c25aaf60001b61009a565b610ebf88858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611fe4565b610eeb7ff0d321d1b7dd2c118a4ee6611e18955fc9f3adc46400a3f7a3edf1f606580d7660001b61009a565b610f177f827879f8ebbd0e918c254f258e4b72a596a37005e00bac85ce30b41089283dca60001b61009a565b610f437fbd9de88a28aa423253c2e8c63b72b1fe6e846709af1dca03235b94bee1cc628660001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e869d45f8973ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff1660e01b8152600401610fb690612c8d565b60206040518083038186803b158015610fce57600080fd5b505afa158015610fe2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100691906124dc565b6000801b600160e01b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b81526004016110519493929190612b45565b602060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a39190612554565b6110e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d990612c6d565b60405180910390fd5b61110e7f326789d0b63d4edc88ee00ab696bdefa6d855ff7a8ae93e6a280336fa6760f7560001b61009a565b61113a7fc98ae6a1243cd38cec67850a0e3eef8824fbe35dd4a3bc2db5341085ec6d71a860001b61009a565b6111667f54e940803a43fbb0a56659116d1bbdf89b77ef2bce448fdd8f68ebd1e94be25260001b61009a565b6111927f90f82887e95664784667f2d5513d40bf67533e5cf2d38a789e7e4f0753c1c91660001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d8973ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff1660e01b815260040161120590612d0d565b60206040518083038186803b15801561121d57600080fd5b505afa158015611231573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125591906124dc565b73ffffffffffffffffffffffffffffffffffffffff16634b75f54f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561129a57600080fd5b505afa1580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d291906124dc565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611312929190612ad7565b602060405180830381600087803b15801561132c57600080fd5b505af1158015611340573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113649190612554565b6113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90612ccd565b60405180910390fd5b6113cf7f1b942dbfce2b6c69e5493d952a55086fbb133c33d8578e807c160317cac8bd5360001b61009a565b5050505050505050565b6114057fc9bbb0c1b25ec09bec0a632a2608c7f69804d5ac52ce5a50c937e81e8edd124b60001b61009a565b6114317f8a5d15b0b3df417400e4e3280462aa1e91dd6b5791ebf7fc3e99cb67a65d75f860001b61009a565b61145d7f59d7e2d9a2f3b431ddb48f817ad77f61304e68aa255bd67776e4d3022623004b60001b61009a565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c757600080fd5b505afa1580156114db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ff91906124dc565b905061152d7fc4436dcc3f9fa87627a62e75d90fbae12deecb15bff72762b8447f96ceb90ad060001b61009a565b6115597fdc4fbff900ec126c1f2f47549f397b14b143204d6e2d7ada4d5eaf39c59e7b2160001b61009a565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b81526004016115949190612abc565b60206040518083038186803b1580156115ac57600080fd5b505afa1580156115c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e491906126d5565b90506116127f7700d23f9ac835d2a386639a5303daeb50af4bca30c67cb510cb31602182584860001b61009a565b61163e7f888e9bafaed318462a8ef7729902043058e273f1290f7f2e517b0d70afa70f3660001b61009a565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a858760405160240161168f9190612abc565b6040516020818303038152906040527f2c336822000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b81526004016117509493929190612b8a565b600060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906117a7919061257d565b5090506117d67f2e2670c3e97f77a29a34632d22d9a04b0b4b05c7132575eba99659081a56c5b360001b61009a565b6118027ff3f17106ff1277cc35937f30fb5e1f4f952c92b6810e17d6477eac6426e9438c60001b61009a565b61182e7fd223089d169c6bdb0cb795964457449827371183fc80cad0c2c90fb88b94bcb560001b61009a565b8061186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590612ced565b60405180910390fd5b61189a7fd0b9bf288479c895e544d90058fbf95bde0012fc4da4657ceec56bbeb07f07a760001b61009a565b6118c67fd9707e0ca237c838d2acf7ea9e2fe2a684f878529d0a59f2c472c4196db4fc3460001b61009a565b6118f27f07af66a7809c16f837d6174ed0778435e2d64b5209e8ca6c4eabae7ecdf8a24f60001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a876040516024016040516020818303038152906040527fefbe1c1c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b81526004016119f69493929190612b8a565b600060405180830381600087803b158015611a1057600080fd5b505af1158015611a24573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611a4d919061257d565b5080915050611a7e7f50c7f62b48327224bc4b6dec9eb18c03f2ceb88abb00bbb19612165cbd95a97160001b61009a565b611aaa7f4e42537547564dbc40411c8f94bcb2810ca005cebe21d5fd079887cb90ddfbcf60001b61009a565b611ad67f8e639255616509529c1d3d618ec4b6f65f00120fbff1a154c3822f71ddade9b560001b61009a565b80611b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0d90612c2d565b60405180910390fd5b611b427f5749f8b0985695721a3bcdddfba40694cc25b5f4b6a6e98f489ecc195177cb0760001b61009a565b611b6e7f309342aeef7bc73123bf6b8f1def6eb6557575bc2afb20c47c8e17b1a9903afb60001b61009a565b611b9a7f1afef01c7d5e47f77e99e03281c8246041338f49d5d638f8c2ccde06f316f08e60001b61009a565b611bc67fd13b2b4a932275dd11d6e1ae063fc161d92d6044a68cb2f529be646c56cb58c560001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d87600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611c43929190612ad7565b602060405180830381600087803b158015611c5d57600080fd5b505af1158015611c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c959190612554565b611cd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccb90612d4d565b60405180910390fd5b611d007f8b2822f4b530221f117ae5e75aeccadeb9be6c0eb908c43ba7271b2816b0eb3060001b61009a565b611d2c7f959cc9f4f009a7619f80f3ae5db35a3f92b24dd918b659c2625a1d21a2e1257e60001b61009a565b611d587fcd700c9215ecb350510713a2bbbf9c3c17e22eabec00eb36ca06bb5f419185da60001b61009a565b6000821115611faf57611d8d7f1dec6e22581505b1fb6e910e158193433ba5ceff8ae539f89d565525e522691460001b61009a565b611db97f5e61662526c99ed38ca992b9a8790755544dd379742720593ac92b8f53ec482760001b61009a565b611de57f2d8cb3925fe11b1ad70770935097552bffc3edfc341df2362798fabc2ca6505560001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9a04cdd848785600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b8152600401611e669493929190612b00565b602060405180830381600087803b158015611e8057600080fd5b505af1158015611e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb89190612554565b9050611ee67fcaa51136be1db5064f4c944c7b178d1c401afe76f244c03f5d5d23cfea33baa560001b61009a565b611f127f0ad30f12bffad3ef0c26114541e0e8e4b7d086de8c4914bdaf13004c0482548a60001b61009a565b611f3e7f68bb2363df6e19e67e2dea37179a0b92fbb9e3381bcd4cbe54cc457cf741aaf360001b61009a565b80611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7590612ded565b60405180910390fd5b611faa7fa4063197ef21012d5447aff84e86ab304ac1b93e2e0e1ef45f484ea49a2039a460001b61009a565b611fdc565b611fdb7fb42f941166466241fba7666f12a94289e892b4f99191066da1ae971b5310091760001b61009a565b5b505050505050565b6120107fcd5587172520f7a61a9dfad8a8b89adb8920d346720d652b0857d6c0c5326a4760001b61009a565b61203c7fcb479892d9b23bbd77ccbbef5c44dabd5e251ad04de434740cb853e35424dc5160001b61009a565b6120687fd2bd89b720b5b86dbc700680f4a11333bb3616a2d0c51754c944a623577572ca60001b61009a565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a8585856040516024016120bb929190612bd6565b6040516020818303038152906040527f4ab01f5b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b815260040161217c9493929190612b8a565b600060405180830381600087803b15801561219657600080fd5b505af11580156121aa573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906121d3919061257d565b5090506122027ff0b480e995e483a27b1f9260f435b61d6f20666a73da9e0d7a910913ebdeae0560001b61009a565b61222e7f88f0c68c8111b1cc2e6c0d5852a0e0b6a386ac822a86737ca5caa2a4f819f1fd60001b61009a565b61225a7f1baa686bae970f6953c8b0c9d18565bcd6ddf74319e4cb3493a42b1ed1ec44b560001b61009a565b8061229a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229190612dad565b60405180910390fd5b6122c67f2d1acba28a153ff4a16d64efa5b6e015e6c8734d596a97a54a051eca6b433d7d60001b61009a565b50505050565b60006122df6122da84612e32565b612e0d565b905080838252602082019050828560208602820111156122fe57600080fd5b60005b8581101561232e57816123148882612376565b845260208401935060208301925050600181019050612301565b5050509392505050565b600061234b61234684612e5e565b612e0d565b90508281526020810184848401111561236357600080fd5b61236e848285612fd0565b509392505050565b6000813590506123858161340e565b92915050565b60008151905061239a8161340e565b92915050565b60008083601f8401126123b257600080fd5b8235905067ffffffffffffffff8111156123cb57600080fd5b6020830191508360208202830111156123e357600080fd5b9250929050565b600082601f8301126123fb57600080fd5b813561240b8482602086016122cc565b91505092915050565b60008083601f84011261242657600080fd5b8235905067ffffffffffffffff81111561243f57600080fd5b60208301915083602082028301111561245757600080fd5b9250929050565b60008151905061246d81613425565b92915050565b6000813590506124828161343c565b92915050565b600082601f83011261249957600080fd5b81516124a9848260208601612338565b91505092915050565b6000813590506124c181613453565b92915050565b6000815190506124d68161346a565b92915050565b6000602082840312156124ee57600080fd5b60006124fc8482850161238b565b91505092915050565b60008060006060848603121561251a57600080fd5b600061252886828701612376565b935050602061253986828701612376565b925050604061254a86828701612376565b9150509250925092565b60006020828403121561256657600080fd5b60006125748482850161245e565b91505092915050565b6000806040838503121561259057600080fd5b600061259e8582860161245e565b925050602083015167ffffffffffffffff8111156125bb57600080fd5b6125c785828601612488565b9150509250929050565b6000602082840312156125e357600080fd5b60006125f184828501612473565b91505092915050565b60008060008060008060008060c0898b03121561261657600080fd5b60006126248b828c016124b2565b985050602089013567ffffffffffffffff81111561264157600080fd5b61264d8b828c016123ea565b975050604061265e8b828c01612376565b965050606061266f8b828c01612376565b955050608089013567ffffffffffffffff81111561268c57600080fd5b6126988b828c01612414565b945094505060a089013567ffffffffffffffff8111156126b757600080fd5b6126c38b828c016123a0565b92509250509295985092959890939650565b6000602082840312156126e757600080fd5b60006126f5848285016124c7565b91505092915050565b600061270a838361272e565b60208301905092915050565b60006127228383612808565b60208301905092915050565b61273781612f2e565b82525050565b61274681612f2e565b82525050565b600061275782612eaf565b6127618185612eea565b935061276c83612e8f565b8060005b8381101561279d57815161278488826126fe565b975061278f83612ed0565b925050600181019050612770565b5085935050505092915050565b60006127b582612eba565b6127bf8185612efb565b93506127ca83612e9f565b8060005b838110156127fb5781516127e28882612716565b97506127ed83612edd565b9250506001810190506127ce565b5085935050505092915050565b61281181612f4c565b82525050565b61282081612f4c565b82525050565b61282f81612f56565b82525050565b600061284082612ec5565b61284a8185612f0c565b935061285a818560208601612fd0565b61286381613063565b840191505092915050565b61287781612fbe565b82525050565b600061288a600f83612f1d565b915061289582613074565b602082019050919050565b60006128ad601883612f1d565b91506128b88261309d565b602082019050919050565b60006128d0602483612f1d565b91506128db826130c6565b604082019050919050565b60006128f3601b83612f1d565b91506128fe82613115565b602082019050919050565b6000612916600883612f1d565b91506129218261313e565b602082019050919050565b6000612939602283612f1d565b915061294482613167565b604082019050919050565b600061295c601c83612f1d565b9150612967826131b6565b602082019050919050565b600061297f601383612f1d565b915061298a826131df565b602082019050919050565b60006129a2600a83612f1d565b91506129ad82613208565b602082019050919050565b60006129c5602883612f1d565b91506129d082613231565b604082019050919050565b60006129e8602283612f1d565b91506129f382613280565b604082019050919050565b6000612a0b601b83612f1d565b9150612a16826132cf565b602082019050919050565b6000612a2e600a83612f1d565b9150612a39826132f8565b602082019050919050565b6000612a51602683612f1d565b9150612a5c82613321565b604082019050919050565b6000612a74602883612f1d565b9150612a7f82613370565b604082019050919050565b6000612a97602683612f1d565b9150612aa2826133bf565b604082019050919050565b612ab681612fb4565b82525050565b6000602082019050612ad1600083018461273d565b92915050565b6000604082019050612aec600083018561273d565b612af9602083018461273d565b9392505050565b6000608082019050612b15600083018761273d565b612b22602083018661273d565b612b2f6040830185612aad565b612b3c606083018461273d565b95945050505050565b6000608082019050612b5a600083018761273d565b612b676020830186612817565b612b746040830185612826565b612b81606083018461273d565b95945050505050565b6000608082019050612b9f600083018761273d565b8181036020830152612bb18186612835565b9050612bc0604083018561273d565b612bcd606083018461286e565b95945050505050565b60006040820190508181036000830152612bf081856127aa565b90508181036020830152612c04818461274c565b90509392505050565b60006020820190508181036000830152612c268161287d565b9050919050565b60006020820190508181036000830152612c46816128a0565b9050919050565b60006020820190508181036000830152612c66816128c3565b9050919050565b60006020820190508181036000830152612c86816128e6565b9050919050565b60006020820190508181036000830152612ca681612909565b9050919050565b60006020820190508181036000830152612cc68161292c565b9050919050565b60006020820190508181036000830152612ce68161294f565b9050919050565b60006020820190508181036000830152612d0681612972565b9050919050565b60006020820190508181036000830152612d2681612995565b9050919050565b60006020820190508181036000830152612d46816129b8565b9050919050565b60006020820190508181036000830152612d66816129db565b9050919050565b60006020820190508181036000830152612d86816129fe565b9050919050565b60006020820190508181036000830152612da681612a21565b9050919050565b60006020820190508181036000830152612dc681612a44565b9050919050565b60006020820190508181036000830152612de681612a67565b9050919050565b60006020820190508181036000830152612e0681612a8a565b9050919050565b6000612e17612e28565b9050612e238282613003565b919050565b6000604051905090565b600067ffffffffffffffff821115612e4d57612e4c613034565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612e7957612e78613034565b5b612e8282613063565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612f3982612f94565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000612f8d82612f2e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612fc982612fb4565b9050919050565b60005b83811015612fee578082015181840152602081019050612fd3565b83811115612ffd576000848401525b50505050565b61300c82613063565b810181811067ffffffffffffffff8211171561302b5761302a613034565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f6c656e677468206d69736d617463680000000000000000000000000000000000600082015250565b7f6f6c6420756269736368656d6520656e64206661696c65640000000000000000600082015250565b7f756e7265676973746572696e6720736368656d6552656769737472617220666160008201527f696c656400000000000000000000000000000000000000000000000000000000602082015250565b7f7265676973746572696e67204964656e74697479206661696c65640000000000600082015250565b7f4944454e54495459000000000000000000000000000000000000000000000000600082015250565b7f756e7265676973746572696e672075706772616465536368656d65206661696c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e6720666f726d756c61206661696c656400000000600082015250565b7f736574554249536368656d65206661696c656400000000000000000000000000600082015250565b7f474f4f44444f4c4c415200000000000000000000000000000000000000000000600082015250565b7f7265676973746572696e6720636f6d706f756e64566f74696e674d616368696e60008201527f65206661696c6564000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e67206f6c6420554249536368656d65206661696c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f6f6c6420636f6e7472616374732073697a65206d69736d617463680000000000600082015250565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b7f43616c6c696e67207365744e616d6553657276696365436f6e7472616374732060008201527f6661696c65640000000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e672050726f746f636f6c5570677261646546757360008201527f65206661696c6564000000000000000000000000000000000000000000000000602082015250565b7f66756e6473207472616e7366657220746f206e657720756269736368656d652060008201527f6661696c65640000000000000000000000000000000000000000000000000000602082015250565b61341781612f2e565b811461342257600080fd5b50565b61342e81612f40565b811461343957600080fd5b50565b61344581612f4c565b811461345057600080fd5b50565b61345c81612f82565b811461346757600080fd5b50565b61347381612fb4565b811461347e57600080fd5b5056fea2646970667358221220fc649130ec1aee92c2d3a541d61f8486dfcb587b417e3aba9796aa04f61f09a864736f6c63430008030033",
|
|
92
|
+
"bytecode": "0x60806040523480156200001157600080fd5b5060405162003b3038038062003b3083398181016040528101906200003791906200036a565b6200006b7f5aca5fbc38f97deffe5b568666b75ae0cca436b09f19a47fd0af39c092bcca2260001b6200030d60201b60201c565b6200009f7f127c7111204f5dac07b9455059da289f5c99a5927847fc74517e4d5a546f193460001b6200030d60201b60201c565b620000d37f9f3c86bdb895d68a7dcb806e3a2a9f49634f224ccce615c59eff41d92565153460001b6200030d60201b60201c565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001477f9e41da728359fdca4d06771742bf17a95fa737dd26347c0285f7a0b02c3e134e60001b6200030d60201b60201c565b6200017b7f8b80e7f48cfcc6ad7d88307edecfdcdb5e1592fb0aaec7899f14b34f2e009e9060001b6200030d60201b60201c565b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001f07ff7c22efe342b6e585ec0c5a60c305932e15ecc7f5fae850546fce4e96980be0160001b6200030d60201b60201c565b620002247f8bfc5924e872ee103467b92cd92000a65dd6aa13edb61837b8ec2b9c397e6f2960001b6200030d60201b60201c565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635aef7de66040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028b57600080fd5b505afa158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c691906200033e565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000412565b50565b6000815190506200032181620003de565b92915050565b6000815190506200033881620003f8565b92915050565b6000602082840312156200035157600080fd5b6000620003618482850162000310565b91505092915050565b6000602082840312156200037d57600080fd5b60006200038d8482850162000327565b91505092915050565b6000620003a382620003be565b9050919050565b6000620003b78262000396565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620003e98162000396565b8114620003f557600080fd5b50565b6200040381620003aa565b81146200040f57600080fd5b50565b61370e80620004226000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80634eb70b39146100465780635c0d087b1461006257806375a2d2431461007e575b600080fd5b610060600480360381019061005b91906127bc565b61009a565b005b61007c600480360381019061007791906126f0565b61009d565b005b610098600480360381019061009391906127e5565b610b88565b005b50565b6100c97f309342aeef7bc73123bf6b8f1def6eb6557575bc2afb20c47c8e17b1a9903afb60001b61009a565b6100f57f1afef01c7d5e47f77e99e03281c8246041338f49d5d638f8c2ccde06f316f08e60001b61009a565b6101217fd13b2b4a932275dd11d6e1ae063fc161d92d6044a68cb2f529be646c56cb58c560001b61009a565b61014d7f8b2822f4b530221f117ae5e75aeccadeb9be6c0eb908c43ba7271b2816b0eb3060001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d490612f9b565b60405180910390fd5b6102097f959cc9f4f009a7619f80f3ae5db35a3f92b24dd918b659c2625a1d21a2e1257e60001b61009a565b6102357fcd700c9215ecb350510713a2bbbf9c3c17e22eabec00eb36ca06bb5f419185da60001b61009a565b6102617f1dec6e22581505b1fb6e910e158193433ba5ceff8ae539f89d565525e522691460001b61009a565b61028d7f5e61662526c99ed38ca992b9a8790755544dd379742720593ac92b8f53ec482760001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d84600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161030a929190612ce5565b602060405180830381600087803b15801561032457600080fd5b505af1158015610338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035c919061273f565b61039b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039290612e5b565b60405180910390fd5b6103c77f2d8cb3925fe11b1ad70770935097552bffc3edfc341df2362798fabc2ca6505560001b61009a565b6103f37fcaa51136be1db5064f4c944c7b178d1c401afe76f244c03f5d5d23cfea33baa560001b61009a565b61041f7f0ad30f12bffad3ef0c26114541e0e8e4b7d086de8c4914bdaf13004c0482548a60001b61009a565b61044b7f68bb2363df6e19e67e2dea37179a0b92fbb9e3381bcd4cbe54cc457cf741aaf360001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d83600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016104c8929190612ce5565b602060405180830381600087803b1580156104e257600080fd5b505af11580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a919061273f565b610559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055090612ebb565b60405180910390fd5b6105857fa4063197ef21012d5447aff84e86ab304ac1b93e2e0e1ef45f484ea49a2039a460001b61009a565b6105b17fb42f941166466241fba7666f12a94289e892b4f99191066da1ae971b5310091760001b61009a565b6105dd7f6f99860b838b0dfe59db29d8dc8be062744270ec3220b9bc644dd17e972bd73860001b61009a565b6106097f504317b5368544e0229fbd0b940d757122448f9c7d4b72cd1d4aea1eb80181c660001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e869d45f826000801b601f60e01b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b81526004016106919493929190612d53565b602060405180830381600087803b1580156106ab57600080fd5b505af11580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e3919061273f565b610722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071990612f3b565b60405180910390fd5b61074e7f41decebe2e3ae2efc30b410103950a3b5c22adec5d8c19592598ec496bb7008860001b61009a565b61077a7f32a3a1183016d95e4daee6a1c1db5fb54d34a101350e413ac106a4a5eaca2c2860001b61009a565b6107a67fa4cbd9e7d4aaab96c961b0742ffc6d3f4ec38a616fa56a4bc1eeb0b6eaa7359560001b61009a565b6107d27fddbf5fa5c047f2c4f0cc826a68932c385dcd84d72a35008a145e0780b7c6300860001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e869d45f600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000801b601f60e01b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b815260040161087c9493929190612d53565b602060405180830381600087803b15801561089657600080fd5b505af11580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce919061273f565b61090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090490612fbb565b60405180910390fd5b6109397f5d88a7b571c175ec8e6c873c5f61bb68de4609784bed21892694b8fb263451ee60001b61009a565b6109657fa3ebe0b4b2b33d02e5a9ecf19a69663ff1f1e08291cc047fc5f9e550c5cb15c560001b61009a565b6109917f75a4da7c3d83af405517463444c5412bd9db2b0ff9eca74c65e300b2b974b4de60001b61009a565b6109bd7fbc8b5b7a0cce2fd87ab790738e374f9f65b1341d8c491c032d62ed9251365c6560001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c525b13600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a389190612cca565b602060405180830381600087803b158015610a5257600080fd5b505af1158015610a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8a919061273f565b610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090612ffb565b60405180910390fd5b610af57f828f970e0b04686ee47a2eccfbddfb7c202bbfc660fe437d28293a7ddcba233b60001b61009a565b610b217f173576014d1464b88d10d1f87e745c950dcc103addb74b693920bb6003e122d360001b61009a565b610b4d7f2517a3b1271006bd27c20aeb410887b459d432bfd0e7d64b20fdd7707a1c13a160001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b610bb47f10fbdfe920ab2b62c3740117afce7c546df302476cf20bbdf993c779b6e4420760001b61009a565b610be07f81790c8c4fe01b9c7d78166f32b933ec8110c1896d498ea8fe2c14667dc4768060001b61009a565b610c0c7f1f06256a89afab52e569770119b7455723d150201dd4288a1755ad47fff9b50960001b61009a565b610c387fc7dd0304c7cb41d46447e2260f68593d1a7d13163dbb3048836052649bfdd22560001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90612f9b565b60405180910390fd5b610cf47ffcf94c7ce210fb757d7658b8b95990ede5448edfd6dceed516a81261522656c360001b61009a565b610d207f03bd12088888a9074ba6efb18277d1d3c379afc6628a7476666d74785118b9d260001b61009a565b610d4c7fef15df308fe03da9affbec511c33b38439b6ef1cccbcd93d6f5021ed02171a3a60001b61009a565b610d787f8c42f5e355865ee700fb4f5f64f3c0a68ca7a8423e71d04ddf2437abac3ee7d660001b61009a565b818190508484905014610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790612e1b565b60405180910390fd5b610dec7f377d321c6ef0a25d17af4a5d304dac012ab801233fbd5a1f07051c779d90dd8260001b61009a565b610e187fbc3b16e057120003a6d2666bca3ae611f6eb4b50ff73418724e166edc1baa01460001b61009a565b610e447f59bf6103067e9fd432d140fcdcbddf4b71c525bd45362006ec09d74b6be4aa2c60001b61009a565b610e707f6c40c2b95c31660d37c4b34c046b80defcdc1f312c19f30dfeccf1fb70c6a4aa60001b61009a565b6004875114610eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eab90612f7b565b60405180910390fd5b610ee07f322b4a5f14757189c9e8b9f88d63dc6ea237d9ea62cd9a8ec365477824f10cd560001b61009a565b610f0c7f6b37c4ad3598c12ce7193b6712e66a6a638297da896ae9d6b8750836ae4b108460001b61009a565b610f387fc2825fd9763c86bdfc63de52102d4c0912d1eef522dc8ffbad2bf87863b52a2060001b61009a565b610fc587600281518110610f75577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518689600381518110610fb8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516115c4565b610ff17f36746936312f76142c7b4a056fd3ec9d8fe2f252b0b0b6296286adbd7f501c5060001b61009a565b61101d7fb23b9587b78f39f0d394d6347efe7e758baa24b85b3440c55d41b8112d3e11f060001b61009a565b6110aa88858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506121cf565b6110d67f8fb52f82ea275f35b88b1e88a9a435688896d586682604de07e4835d9f5a103e60001b61009a565b6111027f76f924a90660ffd781afaca761178270cc62a762af5d208f6cdbe3f24d89824e60001b61009a565b61112e7f6a0a050fb7c18f35bc82a57f5f023e4c627a130602c5012f515ee9b3dd80cceb60001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e869d45f8973ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff1660e01b81526004016111a190612e9b565b60206040518083038186803b1580156111b957600080fd5b505afa1580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f191906126c7565b6000801b600160e01b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b815260040161123c9493929190612d53565b602060405180830381600087803b15801561125657600080fd5b505af115801561126a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128e919061273f565b6112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490612e7b565b60405180910390fd5b6112f97f5287a839d2eb54d51ae95dfc6d0e9091b4f5160e192dde8e9355e1f336a6ff9460001b61009a565b6113257f4bdcda6de1ec3c7611ff34da6910c18b1bf790630c08a1c12c905cfc0958ab5260001b61009a565b6113517f840cc7cddc926f229f0eb993890c7f113929b07dbe7de7683de26cd0035ab1b160001b61009a565b61137d7fda471798f0b7e33c47552540ca3ad99096390cb259aeab25ad3d5d0274e6bef660001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d8973ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff1660e01b81526004016113f090612f1b565b60206040518083038186803b15801561140857600080fd5b505afa15801561141c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144091906126c7565b73ffffffffffffffffffffffffffffffffffffffff16634b75f54f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561148557600080fd5b505afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd91906126c7565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016114fd929190612ce5565b602060405180830381600087803b15801561151757600080fd5b505af115801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061273f565b61158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158590612edb565b60405180910390fd5b6115ba7f40d98f1e3bd30fdf9eb0046e66e1b131d26126ba7097319e5e764395e35922b760001b61009a565b5050505050505050565b6115f07fc72d4032d3b486d19984d226568ce4224392e65e0babc0a9ac24b066069b23db60001b61009a565b61161c7fa0e3a7728322302ead4ee50bda6f840bc844651c0fbac3598801463b538914f160001b61009a565b6116487fbcb53111df07d65716f7d37ed853349255f4303041714b3144b41fd8fa4f618a60001b61009a565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b1580156116b257600080fd5b505afa1580156116c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ea91906126c7565b90506117187f906b7b33fb9991687c8989e27701dd46341cf7355ab8cab37e73b2b2faa2c02e60001b61009a565b6117447f08bd47c89ae48cba9655c4b3049a989e5a9be7b4165010dc21d3b55e4c773ada60001b61009a565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b815260040161177f9190612cca565b60206040518083038186803b15801561179757600080fd5b505afa1580156117ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cf91906128c0565b90506117fd7f5c104ab8f8ab57b2e9d3c0b38766a7b387906e98862cd67987300ccd97c25aaf60001b61009a565b6118297ff0d321d1b7dd2c118a4ee6611e18955fc9f3adc46400a3f7a3edf1f606580d7660001b61009a565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a858760405160240161187a9190612cca565b6040516020818303038152906040527f2c336822000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b815260040161193b9493929190612d98565b600060405180830381600087803b15801561195557600080fd5b505af1158015611969573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906119929190612768565b5090506119c17f827879f8ebbd0e918c254f258e4b72a596a37005e00bac85ce30b41089283dca60001b61009a565b6119ed7fbd9de88a28aa423253c2e8c63b72b1fe6e846709af1dca03235b94bee1cc628660001b61009a565b611a197f326789d0b63d4edc88ee00ab696bdefa6d855ff7a8ae93e6a280336fa6760f7560001b61009a565b80611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5090612efb565b60405180910390fd5b611a857fc98ae6a1243cd38cec67850a0e3eef8824fbe35dd4a3bc2db5341085ec6d71a860001b61009a565b611ab17f54e940803a43fbb0a56659116d1bbdf89b77ef2bce448fdd8f68ebd1e94be25260001b61009a565b611add7f90f82887e95664784667f2d5513d40bf67533e5cf2d38a789e7e4f0753c1c91660001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a876040516024016040516020818303038152906040527fefbe1c1c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b8152600401611be19493929190612d98565b600060405180830381600087803b158015611bfb57600080fd5b505af1158015611c0f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611c389190612768565b5080915050611c697f1b942dbfce2b6c69e5493d952a55086fbb133c33d8578e807c160317cac8bd5360001b61009a565b611c957fc9bbb0c1b25ec09bec0a632a2608c7f69804d5ac52ce5a50c937e81e8edd124b60001b61009a565b611cc17f8a5d15b0b3df417400e4e3280462aa1e91dd6b5791ebf7fc3e99cb67a65d75f860001b61009a565b80611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890612e3b565b60405180910390fd5b611d2d7f59d7e2d9a2f3b431ddb48f817ad77f61304e68aa255bd67776e4d3022623004b60001b61009a565b611d597fc4436dcc3f9fa87627a62e75d90fbae12deecb15bff72762b8447f96ceb90ad060001b61009a565b611d857fdc4fbff900ec126c1f2f47549f397b14b143204d6e2d7ada4d5eaf39c59e7b2160001b61009a565b611db17f7700d23f9ac835d2a386639a5303daeb50af4bca30c67cb510cb31602182584860001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d87600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611e2e929190612ce5565b602060405180830381600087803b158015611e4857600080fd5b505af1158015611e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e80919061273f565b611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690612f5b565b60405180910390fd5b611eeb7f888e9bafaed318462a8ef7729902043058e273f1290f7f2e517b0d70afa70f3660001b61009a565b611f177f2e2670c3e97f77a29a34632d22d9a04b0b4b05c7132575eba99659081a56c5b360001b61009a565b611f437ff3f17106ff1277cc35937f30fb5e1f4f952c92b6810e17d6477eac6426e9438c60001b61009a565b600082111561219a57611f787fd223089d169c6bdb0cb795964457449827371183fc80cad0c2c90fb88b94bcb560001b61009a565b611fa47fd0b9bf288479c895e544d90058fbf95bde0012fc4da4657ceec56bbeb07f07a760001b61009a565b611fd07fd9707e0ca237c838d2acf7ea9e2fe2a684f878529d0a59f2c472c4196db4fc3460001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9a04cdd848785600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b81526004016120519493929190612d0e565b602060405180830381600087803b15801561206b57600080fd5b505af115801561207f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a3919061273f565b90506120d17f07af66a7809c16f837d6174ed0778435e2d64b5209e8ca6c4eabae7ecdf8a24f60001b61009a565b6120fd7f50c7f62b48327224bc4b6dec9eb18c03f2ceb88abb00bbb19612165cbd95a97160001b61009a565b6121297f4e42537547564dbc40411c8f94bcb2810ca005cebe21d5fd079887cb90ddfbcf60001b61009a565b80612169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121609061301b565b60405180910390fd5b6121957f8e639255616509529c1d3d618ec4b6f65f00120fbff1a154c3822f71ddade9b560001b61009a565b6121c7565b6121c67f5749f8b0985695721a3bcdddfba40694cc25b5f4b6a6e98f489ecc195177cb0760001b61009a565b5b505050505050565b6121fb7fa4a83039dcca433c0178409d585b9aec32729fe7b33500b5121d56dd46179bf460001b61009a565b6122277fbe58ee543ca6ebc77d4f18789917e098219a99e7a2c724d83148fa4ce3242cdd60001b61009a565b6122537f201575b15d41ecd6e0244e7551408dd8f74b76eef4512c1b0fc591d9dc995f5360001b61009a565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a8585856040516024016122a6929190612de4565b6040516020818303038152906040527f4ab01f5b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b81526004016123679493929190612d98565b600060405180830381600087803b15801561238157600080fd5b505af1158015612395573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906123be9190612768565b5090506123ed7fd2f47bf21669fa85ab0bba9c4e049ebd73e9645548fec9c9dc0df9f559a3cf4060001b61009a565b6124197fb9eac905e8a7c2f1bae65ac256a02d362534f04efe8d871a5dc93a1a42f12f3760001b61009a565b6124457f730d4461029406ad2e08de23bcd8246ea25f0b42411ca4ac01423bee7be4a83060001b61009a565b80612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90612fdb565b60405180910390fd5b6124b17f5fe0fafddd644c69ac16bb9f8c4266cc158c7b32792fd0758259f3a3b6fa152f60001b61009a565b50505050565b60006124ca6124c584613060565b61303b565b905080838252602082019050828560208602820111156124e957600080fd5b60005b8581101561251957816124ff8882612561565b8452602084019350602083019250506001810190506124ec565b5050509392505050565b60006125366125318461308c565b61303b565b90508281526020810184848401111561254e57600080fd5b6125598482856131fe565b509392505050565b60008135905061257081613665565b92915050565b60008151905061258581613665565b92915050565b60008083601f84011261259d57600080fd5b8235905067ffffffffffffffff8111156125b657600080fd5b6020830191508360208202830111156125ce57600080fd5b9250929050565b600082601f8301126125e657600080fd5b81356125f68482602086016124b7565b91505092915050565b60008083601f84011261261157600080fd5b8235905067ffffffffffffffff81111561262a57600080fd5b60208301915083602082028301111561264257600080fd5b9250929050565b6000815190506126588161367c565b92915050565b60008135905061266d81613693565b92915050565b600082601f83011261268457600080fd5b8151612694848260208601612523565b91505092915050565b6000813590506126ac816136aa565b92915050565b6000815190506126c1816136c1565b92915050565b6000602082840312156126d957600080fd5b60006126e784828501612576565b91505092915050565b60008060006060848603121561270557600080fd5b600061271386828701612561565b935050602061272486828701612561565b925050604061273586828701612561565b9150509250925092565b60006020828403121561275157600080fd5b600061275f84828501612649565b91505092915050565b6000806040838503121561277b57600080fd5b600061278985828601612649565b925050602083015167ffffffffffffffff8111156127a657600080fd5b6127b285828601612673565b9150509250929050565b6000602082840312156127ce57600080fd5b60006127dc8482850161265e565b91505092915050565b60008060008060008060008060c0898b03121561280157600080fd5b600061280f8b828c0161269d565b985050602089013567ffffffffffffffff81111561282c57600080fd5b6128388b828c016125d5565b97505060406128498b828c01612561565b965050606061285a8b828c01612561565b955050608089013567ffffffffffffffff81111561287757600080fd5b6128838b828c016125ff565b945094505060a089013567ffffffffffffffff8111156128a257600080fd5b6128ae8b828c0161258b565b92509250509295985092959890939650565b6000602082840312156128d257600080fd5b60006128e0848285016126b2565b91505092915050565b60006128f58383612919565b60208301905092915050565b600061290d83836129f3565b60208301905092915050565b6129228161315c565b82525050565b6129318161315c565b82525050565b6000612942826130dd565b61294c8185613118565b9350612957836130bd565b8060005b8381101561298857815161296f88826128e9565b975061297a836130fe565b92505060018101905061295b565b5085935050505092915050565b60006129a0826130e8565b6129aa8185613129565b93506129b5836130cd565b8060005b838110156129e65781516129cd8882612901565b97506129d88361310b565b9250506001810190506129b9565b5085935050505092915050565b6129fc8161317a565b82525050565b612a0b8161317a565b82525050565b612a1a81613184565b82525050565b6000612a2b826130f3565b612a35818561313a565b9350612a458185602086016131fe565b612a4e81613291565b840191505092915050565b612a62816131ec565b82525050565b6000612a75600f8361314b565b9150612a80826132a2565b602082019050919050565b6000612a9860188361314b565b9150612aa3826132cb565b602082019050919050565b6000612abb60248361314b565b9150612ac6826132f4565b604082019050919050565b6000612ade601b8361314b565b9150612ae982613343565b602082019050919050565b6000612b0160088361314b565b9150612b0c8261336c565b602082019050919050565b6000612b2460228361314b565b9150612b2f82613395565b604082019050919050565b6000612b47601c8361314b565b9150612b52826133e4565b602082019050919050565b6000612b6a60138361314b565b9150612b758261340d565b602082019050919050565b6000612b8d600a8361314b565b9150612b9882613436565b602082019050919050565b6000612bb060288361314b565b9150612bbb8261345f565b604082019050919050565b6000612bd360228361314b565b9150612bde826134ae565b604082019050919050565b6000612bf6601b8361314b565b9150612c01826134fd565b602082019050919050565b6000612c19600a8361314b565b9150612c2482613526565b602082019050919050565b6000612c3c601f8361314b565b9150612c478261354f565b602082019050919050565b6000612c5f60268361314b565b9150612c6a82613578565b604082019050919050565b6000612c8260288361314b565b9150612c8d826135c7565b604082019050919050565b6000612ca560268361314b565b9150612cb082613616565b604082019050919050565b612cc4816131e2565b82525050565b6000602082019050612cdf6000830184612928565b92915050565b6000604082019050612cfa6000830185612928565b612d076020830184612928565b9392505050565b6000608082019050612d236000830187612928565b612d306020830186612928565b612d3d6040830185612cbb565b612d4a6060830184612928565b95945050505050565b6000608082019050612d686000830187612928565b612d756020830186612a02565b612d826040830185612a11565b612d8f6060830184612928565b95945050505050565b6000608082019050612dad6000830187612928565b8181036020830152612dbf8186612a20565b9050612dce6040830185612928565b612ddb6060830184612a59565b95945050505050565b60006040820190508181036000830152612dfe8185612995565b90508181036020830152612e128184612937565b90509392505050565b60006020820190508181036000830152612e3481612a68565b9050919050565b60006020820190508181036000830152612e5481612a8b565b9050919050565b60006020820190508181036000830152612e7481612aae565b9050919050565b60006020820190508181036000830152612e9481612ad1565b9050919050565b60006020820190508181036000830152612eb481612af4565b9050919050565b60006020820190508181036000830152612ed481612b17565b9050919050565b60006020820190508181036000830152612ef481612b3a565b9050919050565b60006020820190508181036000830152612f1481612b5d565b9050919050565b60006020820190508181036000830152612f3481612b80565b9050919050565b60006020820190508181036000830152612f5481612ba3565b9050919050565b60006020820190508181036000830152612f7481612bc6565b9050919050565b60006020820190508181036000830152612f9481612be9565b9050919050565b60006020820190508181036000830152612fb481612c0c565b9050919050565b60006020820190508181036000830152612fd481612c2f565b9050919050565b60006020820190508181036000830152612ff481612c52565b9050919050565b6000602082019050818103600083015261301481612c75565b9050919050565b6000602082019050818103600083015261303481612c98565b9050919050565b6000613045613056565b90506130518282613231565b919050565b6000604051905090565b600067ffffffffffffffff82111561307b5761307a613262565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156130a7576130a6613262565b5b6130b082613291565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613167826131c2565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006131bb8261315c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006131f7826131e2565b9050919050565b60005b8381101561321c578082015181840152602081019050613201565b8381111561322b576000848401525b50505050565b61323a82613291565b810181811067ffffffffffffffff8211171561325957613258613262565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f6c656e677468206d69736d617463680000000000000000000000000000000000600082015250565b7f6f6c6420756269736368656d6520656e64206661696c65640000000000000000600082015250565b7f756e7265676973746572696e6720736368656d6552656769737472617220666160008201527f696c656400000000000000000000000000000000000000000000000000000000602082015250565b7f7265676973746572696e67204964656e74697479206661696c65640000000000600082015250565b7f4944454e54495459000000000000000000000000000000000000000000000000600082015250565b7f756e7265676973746572696e672075706772616465536368656d65206661696c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e6720666f726d756c61206661696c656400000000600082015250565b7f736574554249536368656d65206661696c656400000000000000000000000000600082015250565b7f474f4f44444f4c4c415200000000000000000000000000000000000000000000600082015250565b7f7265676973746572696e6720636f6d706f756e64566f74696e674d616368696e60008201527f65206661696c6564000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e67206f6c6420554249536368656d65206661696c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f6f6c6420636f6e7472616374732073697a65206d69736d617463680000000000600082015250565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b7f7265676973746572696e6720676f76206661696c73616665206661696c656400600082015250565b7f43616c6c696e67207365744e616d6553657276696365436f6e7472616374732060008201527f6661696c65640000000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e672050726f746f636f6c5570677261646546757360008201527f65206661696c6564000000000000000000000000000000000000000000000000602082015250565b7f66756e6473207472616e7366657220746f206e657720756269736368656d652060008201527f6661696c65640000000000000000000000000000000000000000000000000000602082015250565b61366e8161315c565b811461367957600080fd5b50565b6136858161316e565b811461369057600080fd5b50565b61369c8161317a565b81146136a757600080fd5b50565b6136b3816131b0565b81146136be57600080fd5b50565b6136ca816131e2565b81146136d557600080fd5b5056fea26469706673582212201da54a01c51cf43598d05f6d048604ea3a26ce72d6ea9a77b0bd3fb9e1af37e764736f6c63430008030033",
|
|
93
|
+
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80634eb70b39146100465780635c0d087b1461006257806375a2d2431461007e575b600080fd5b610060600480360381019061005b91906127bc565b61009a565b005b61007c600480360381019061007791906126f0565b61009d565b005b610098600480360381019061009391906127e5565b610b88565b005b50565b6100c97f309342aeef7bc73123bf6b8f1def6eb6557575bc2afb20c47c8e17b1a9903afb60001b61009a565b6100f57f1afef01c7d5e47f77e99e03281c8246041338f49d5d638f8c2ccde06f316f08e60001b61009a565b6101217fd13b2b4a932275dd11d6e1ae063fc161d92d6044a68cb2f529be646c56cb58c560001b61009a565b61014d7f8b2822f4b530221f117ae5e75aeccadeb9be6c0eb908c43ba7271b2816b0eb3060001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d490612f9b565b60405180910390fd5b6102097f959cc9f4f009a7619f80f3ae5db35a3f92b24dd918b659c2625a1d21a2e1257e60001b61009a565b6102357fcd700c9215ecb350510713a2bbbf9c3c17e22eabec00eb36ca06bb5f419185da60001b61009a565b6102617f1dec6e22581505b1fb6e910e158193433ba5ceff8ae539f89d565525e522691460001b61009a565b61028d7f5e61662526c99ed38ca992b9a8790755544dd379742720593ac92b8f53ec482760001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d84600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161030a929190612ce5565b602060405180830381600087803b15801561032457600080fd5b505af1158015610338573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035c919061273f565b61039b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039290612e5b565b60405180910390fd5b6103c77f2d8cb3925fe11b1ad70770935097552bffc3edfc341df2362798fabc2ca6505560001b61009a565b6103f37fcaa51136be1db5064f4c944c7b178d1c401afe76f244c03f5d5d23cfea33baa560001b61009a565b61041f7f0ad30f12bffad3ef0c26114541e0e8e4b7d086de8c4914bdaf13004c0482548a60001b61009a565b61044b7f68bb2363df6e19e67e2dea37179a0b92fbb9e3381bcd4cbe54cc457cf741aaf360001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d83600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016104c8929190612ce5565b602060405180830381600087803b1580156104e257600080fd5b505af11580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a919061273f565b610559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055090612ebb565b60405180910390fd5b6105857fa4063197ef21012d5447aff84e86ab304ac1b93e2e0e1ef45f484ea49a2039a460001b61009a565b6105b17fb42f941166466241fba7666f12a94289e892b4f99191066da1ae971b5310091760001b61009a565b6105dd7f6f99860b838b0dfe59db29d8dc8be062744270ec3220b9bc644dd17e972bd73860001b61009a565b6106097f504317b5368544e0229fbd0b940d757122448f9c7d4b72cd1d4aea1eb80181c660001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e869d45f826000801b601f60e01b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b81526004016106919493929190612d53565b602060405180830381600087803b1580156106ab57600080fd5b505af11580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e3919061273f565b610722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071990612f3b565b60405180910390fd5b61074e7f41decebe2e3ae2efc30b410103950a3b5c22adec5d8c19592598ec496bb7008860001b61009a565b61077a7f32a3a1183016d95e4daee6a1c1db5fb54d34a101350e413ac106a4a5eaca2c2860001b61009a565b6107a67fa4cbd9e7d4aaab96c961b0742ffc6d3f4ec38a616fa56a4bc1eeb0b6eaa7359560001b61009a565b6107d27fddbf5fa5c047f2c4f0cc826a68932c385dcd84d72a35008a145e0780b7c6300860001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e869d45f600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000801b601f60e01b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b815260040161087c9493929190612d53565b602060405180830381600087803b15801561089657600080fd5b505af11580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce919061273f565b61090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090490612fbb565b60405180910390fd5b6109397f5d88a7b571c175ec8e6c873c5f61bb68de4609784bed21892694b8fb263451ee60001b61009a565b6109657fa3ebe0b4b2b33d02e5a9ecf19a69663ff1f1e08291cc047fc5f9e550c5cb15c560001b61009a565b6109917f75a4da7c3d83af405517463444c5412bd9db2b0ff9eca74c65e300b2b974b4de60001b61009a565b6109bd7fbc8b5b7a0cce2fd87ab790738e374f9f65b1341d8c491c032d62ed9251365c6560001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c525b13600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610a389190612cca565b602060405180830381600087803b158015610a5257600080fd5b505af1158015610a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8a919061273f565b610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac090612ffb565b60405180910390fd5b610af57f828f970e0b04686ee47a2eccfbddfb7c202bbfc660fe437d28293a7ddcba233b60001b61009a565b610b217f173576014d1464b88d10d1f87e745c950dcc103addb74b693920bb6003e122d360001b61009a565b610b4d7f2517a3b1271006bd27c20aeb410887b459d432bfd0e7d64b20fdd7707a1c13a160001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b610bb47f10fbdfe920ab2b62c3740117afce7c546df302476cf20bbdf993c779b6e4420760001b61009a565b610be07f81790c8c4fe01b9c7d78166f32b933ec8110c1896d498ea8fe2c14667dc4768060001b61009a565b610c0c7f1f06256a89afab52e569770119b7455723d150201dd4288a1755ad47fff9b50960001b61009a565b610c387fc7dd0304c7cb41d46447e2260f68593d1a7d13163dbb3048836052649bfdd22560001b61009a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90612f9b565b60405180910390fd5b610cf47ffcf94c7ce210fb757d7658b8b95990ede5448edfd6dceed516a81261522656c360001b61009a565b610d207f03bd12088888a9074ba6efb18277d1d3c379afc6628a7476666d74785118b9d260001b61009a565b610d4c7fef15df308fe03da9affbec511c33b38439b6ef1cccbcd93d6f5021ed02171a3a60001b61009a565b610d787f8c42f5e355865ee700fb4f5f64f3c0a68ca7a8423e71d04ddf2437abac3ee7d660001b61009a565b818190508484905014610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790612e1b565b60405180910390fd5b610dec7f377d321c6ef0a25d17af4a5d304dac012ab801233fbd5a1f07051c779d90dd8260001b61009a565b610e187fbc3b16e057120003a6d2666bca3ae611f6eb4b50ff73418724e166edc1baa01460001b61009a565b610e447f59bf6103067e9fd432d140fcdcbddf4b71c525bd45362006ec09d74b6be4aa2c60001b61009a565b610e707f6c40c2b95c31660d37c4b34c046b80defcdc1f312c19f30dfeccf1fb70c6a4aa60001b61009a565b6004875114610eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eab90612f7b565b60405180910390fd5b610ee07f322b4a5f14757189c9e8b9f88d63dc6ea237d9ea62cd9a8ec365477824f10cd560001b61009a565b610f0c7f6b37c4ad3598c12ce7193b6712e66a6a638297da896ae9d6b8750836ae4b108460001b61009a565b610f387fc2825fd9763c86bdfc63de52102d4c0912d1eef522dc8ffbad2bf87863b52a2060001b61009a565b610fc587600281518110610f75577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518689600381518110610fb8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516115c4565b610ff17f36746936312f76142c7b4a056fd3ec9d8fe2f252b0b0b6296286adbd7f501c5060001b61009a565b61101d7fb23b9587b78f39f0d394d6347efe7e758baa24b85b3440c55d41b8112d3e11f060001b61009a565b6110aa88858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506121cf565b6110d67f8fb52f82ea275f35b88b1e88a9a435688896d586682604de07e4835d9f5a103e60001b61009a565b6111027f76f924a90660ffd781afaca761178270cc62a762af5d208f6cdbe3f24d89824e60001b61009a565b61112e7f6a0a050fb7c18f35bc82a57f5f023e4c627a130602c5012f515ee9b3dd80cceb60001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e869d45f8973ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff1660e01b81526004016111a190612e9b565b60206040518083038186803b1580156111b957600080fd5b505afa1580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f191906126c7565b6000801b600160e01b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b815260040161123c9493929190612d53565b602060405180830381600087803b15801561125657600080fd5b505af115801561126a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128e919061273f565b6112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490612e7b565b60405180910390fd5b6112f97f5287a839d2eb54d51ae95dfc6d0e9091b4f5160e192dde8e9355e1f336a6ff9460001b61009a565b6113257f4bdcda6de1ec3c7611ff34da6910c18b1bf790630c08a1c12c905cfc0958ab5260001b61009a565b6113517f840cc7cddc926f229f0eb993890c7f113929b07dbe7de7683de26cd0035ab1b160001b61009a565b61137d7fda471798f0b7e33c47552540ca3ad99096390cb259aeab25ad3d5d0274e6bef660001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d8973ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff1660e01b81526004016113f090612f1b565b60206040518083038186803b15801561140857600080fd5b505afa15801561141c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144091906126c7565b73ffffffffffffffffffffffffffffffffffffffff16634b75f54f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561148557600080fd5b505afa158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd91906126c7565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016114fd929190612ce5565b602060405180830381600087803b15801561151757600080fd5b505af115801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061273f565b61158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158590612edb565b60405180910390fd5b6115ba7f40d98f1e3bd30fdf9eb0046e66e1b131d26126ba7097319e5e764395e35922b760001b61009a565b5050505050505050565b6115f07fc72d4032d3b486d19984d226568ce4224392e65e0babc0a9ac24b066069b23db60001b61009a565b61161c7fa0e3a7728322302ead4ee50bda6f840bc844651c0fbac3598801463b538914f160001b61009a565b6116487fbcb53111df07d65716f7d37ed853349255f4303041714b3144b41fd8fa4f618a60001b61009a565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b815260040160206040518083038186803b1580156116b257600080fd5b505afa1580156116c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ea91906126c7565b90506117187f906b7b33fb9991687c8989e27701dd46341cf7355ab8cab37e73b2b2faa2c02e60001b61009a565b6117447f08bd47c89ae48cba9655c4b3049a989e5a9be7b4165010dc21d3b55e4c773ada60001b61009a565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b815260040161177f9190612cca565b60206040518083038186803b15801561179757600080fd5b505afa1580156117ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cf91906128c0565b90506117fd7f5c104ab8f8ab57b2e9d3c0b38766a7b387906e98862cd67987300ccd97c25aaf60001b61009a565b6118297ff0d321d1b7dd2c118a4ee6611e18955fc9f3adc46400a3f7a3edf1f606580d7660001b61009a565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a858760405160240161187a9190612cca565b6040516020818303038152906040527f2c336822000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b815260040161193b9493929190612d98565b600060405180830381600087803b15801561195557600080fd5b505af1158015611969573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906119929190612768565b5090506119c17f827879f8ebbd0e918c254f258e4b72a596a37005e00bac85ce30b41089283dca60001b61009a565b6119ed7fbd9de88a28aa423253c2e8c63b72b1fe6e846709af1dca03235b94bee1cc628660001b61009a565b611a197f326789d0b63d4edc88ee00ab696bdefa6d855ff7a8ae93e6a280336fa6760f7560001b61009a565b80611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5090612efb565b60405180910390fd5b611a857fc98ae6a1243cd38cec67850a0e3eef8824fbe35dd4a3bc2db5341085ec6d71a860001b61009a565b611ab17f54e940803a43fbb0a56659116d1bbdf89b77ef2bce448fdd8f68ebd1e94be25260001b61009a565b611add7f90f82887e95664784667f2d5513d40bf67533e5cf2d38a789e7e4f0753c1c91660001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a876040516024016040516020818303038152906040527fefbe1c1c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b8152600401611be19493929190612d98565b600060405180830381600087803b158015611bfb57600080fd5b505af1158015611c0f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611c389190612768565b5080915050611c697f1b942dbfce2b6c69e5493d952a55086fbb133c33d8578e807c160317cac8bd5360001b61009a565b611c957fc9bbb0c1b25ec09bec0a632a2608c7f69804d5ac52ce5a50c937e81e8edd124b60001b61009a565b611cc17f8a5d15b0b3df417400e4e3280462aa1e91dd6b5791ebf7fc3e99cb67a65d75f860001b61009a565b80611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890612e3b565b60405180910390fd5b611d2d7f59d7e2d9a2f3b431ddb48f817ad77f61304e68aa255bd67776e4d3022623004b60001b61009a565b611d597fc4436dcc3f9fa87627a62e75d90fbae12deecb15bff72762b8447f96ceb90ad060001b61009a565b611d857fdc4fbff900ec126c1f2f47549f397b14b143204d6e2d7ada4d5eaf39c59e7b2160001b61009a565b611db17f7700d23f9ac835d2a386639a5303daeb50af4bca30c67cb510cb31602182584860001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663039de01d87600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611e2e929190612ce5565b602060405180830381600087803b158015611e4857600080fd5b505af1158015611e5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e80919061273f565b611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690612f5b565b60405180910390fd5b611eeb7f888e9bafaed318462a8ef7729902043058e273f1290f7f2e517b0d70afa70f3660001b61009a565b611f177f2e2670c3e97f77a29a34632d22d9a04b0b4b05c7132575eba99659081a56c5b360001b61009a565b611f437ff3f17106ff1277cc35937f30fb5e1f4f952c92b6810e17d6477eac6426e9438c60001b61009a565b600082111561219a57611f787fd223089d169c6bdb0cb795964457449827371183fc80cad0c2c90fb88b94bcb560001b61009a565b611fa47fd0b9bf288479c895e544d90058fbf95bde0012fc4da4657ceec56bbeb07f07a760001b61009a565b611fd07fd9707e0ca237c838d2acf7ea9e2fe2a684f878529d0a59f2c472c4196db4fc3460001b61009a565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b9a04cdd848785600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b81526004016120519493929190612d0e565b602060405180830381600087803b15801561206b57600080fd5b505af115801561207f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a3919061273f565b90506120d17f07af66a7809c16f837d6174ed0778435e2d64b5209e8ca6c4eabae7ecdf8a24f60001b61009a565b6120fd7f50c7f62b48327224bc4b6dec9eb18c03f2ceb88abb00bbb19612165cbd95a97160001b61009a565b6121297f4e42537547564dbc40411c8f94bcb2810ca005cebe21d5fd079887cb90ddfbcf60001b61009a565b80612169576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121609061301b565b60405180910390fd5b6121957f8e639255616509529c1d3d618ec4b6f65f00120fbff1a154c3822f71ddade9b560001b61009a565b6121c7565b6121c67f5749f8b0985695721a3bcdddfba40694cc25b5f4b6a6e98f489ecc195177cb0760001b61009a565b5b505050505050565b6121fb7fa4a83039dcca433c0178409d585b9aec32729fe7b33500b5121d56dd46179bf460001b61009a565b6122277fbe58ee543ca6ebc77d4f18789917e098219a99e7a2c724d83148fa4ce3242cdd60001b61009a565b6122537f201575b15d41ecd6e0244e7551408dd8f74b76eef4512c1b0fc591d9dc995f5360001b61009a565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1b7089a8585856040516024016122a6929190612de4565b6040516020818303038152906040527f4ab01f5b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006040518563ffffffff1660e01b81526004016123679493929190612d98565b600060405180830381600087803b15801561238157600080fd5b505af1158015612395573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906123be9190612768565b5090506123ed7fd2f47bf21669fa85ab0bba9c4e049ebd73e9645548fec9c9dc0df9f559a3cf4060001b61009a565b6124197fb9eac905e8a7c2f1bae65ac256a02d362534f04efe8d871a5dc93a1a42f12f3760001b61009a565b6124457f730d4461029406ad2e08de23bcd8246ea25f0b42411ca4ac01423bee7be4a83060001b61009a565b80612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90612fdb565b60405180910390fd5b6124b17f5fe0fafddd644c69ac16bb9f8c4266cc158c7b32792fd0758259f3a3b6fa152f60001b61009a565b50505050565b60006124ca6124c584613060565b61303b565b905080838252602082019050828560208602820111156124e957600080fd5b60005b8581101561251957816124ff8882612561565b8452602084019350602083019250506001810190506124ec565b5050509392505050565b60006125366125318461308c565b61303b565b90508281526020810184848401111561254e57600080fd5b6125598482856131fe565b509392505050565b60008135905061257081613665565b92915050565b60008151905061258581613665565b92915050565b60008083601f84011261259d57600080fd5b8235905067ffffffffffffffff8111156125b657600080fd5b6020830191508360208202830111156125ce57600080fd5b9250929050565b600082601f8301126125e657600080fd5b81356125f68482602086016124b7565b91505092915050565b60008083601f84011261261157600080fd5b8235905067ffffffffffffffff81111561262a57600080fd5b60208301915083602082028301111561264257600080fd5b9250929050565b6000815190506126588161367c565b92915050565b60008135905061266d81613693565b92915050565b600082601f83011261268457600080fd5b8151612694848260208601612523565b91505092915050565b6000813590506126ac816136aa565b92915050565b6000815190506126c1816136c1565b92915050565b6000602082840312156126d957600080fd5b60006126e784828501612576565b91505092915050565b60008060006060848603121561270557600080fd5b600061271386828701612561565b935050602061272486828701612561565b925050604061273586828701612561565b9150509250925092565b60006020828403121561275157600080fd5b600061275f84828501612649565b91505092915050565b6000806040838503121561277b57600080fd5b600061278985828601612649565b925050602083015167ffffffffffffffff8111156127a657600080fd5b6127b285828601612673565b9150509250929050565b6000602082840312156127ce57600080fd5b60006127dc8482850161265e565b91505092915050565b60008060008060008060008060c0898b03121561280157600080fd5b600061280f8b828c0161269d565b985050602089013567ffffffffffffffff81111561282c57600080fd5b6128388b828c016125d5565b97505060406128498b828c01612561565b965050606061285a8b828c01612561565b955050608089013567ffffffffffffffff81111561287757600080fd5b6128838b828c016125ff565b945094505060a089013567ffffffffffffffff8111156128a257600080fd5b6128ae8b828c0161258b565b92509250509295985092959890939650565b6000602082840312156128d257600080fd5b60006128e0848285016126b2565b91505092915050565b60006128f58383612919565b60208301905092915050565b600061290d83836129f3565b60208301905092915050565b6129228161315c565b82525050565b6129318161315c565b82525050565b6000612942826130dd565b61294c8185613118565b9350612957836130bd565b8060005b8381101561298857815161296f88826128e9565b975061297a836130fe565b92505060018101905061295b565b5085935050505092915050565b60006129a0826130e8565b6129aa8185613129565b93506129b5836130cd565b8060005b838110156129e65781516129cd8882612901565b97506129d88361310b565b9250506001810190506129b9565b5085935050505092915050565b6129fc8161317a565b82525050565b612a0b8161317a565b82525050565b612a1a81613184565b82525050565b6000612a2b826130f3565b612a35818561313a565b9350612a458185602086016131fe565b612a4e81613291565b840191505092915050565b612a62816131ec565b82525050565b6000612a75600f8361314b565b9150612a80826132a2565b602082019050919050565b6000612a9860188361314b565b9150612aa3826132cb565b602082019050919050565b6000612abb60248361314b565b9150612ac6826132f4565b604082019050919050565b6000612ade601b8361314b565b9150612ae982613343565b602082019050919050565b6000612b0160088361314b565b9150612b0c8261336c565b602082019050919050565b6000612b2460228361314b565b9150612b2f82613395565b604082019050919050565b6000612b47601c8361314b565b9150612b52826133e4565b602082019050919050565b6000612b6a60138361314b565b9150612b758261340d565b602082019050919050565b6000612b8d600a8361314b565b9150612b9882613436565b602082019050919050565b6000612bb060288361314b565b9150612bbb8261345f565b604082019050919050565b6000612bd360228361314b565b9150612bde826134ae565b604082019050919050565b6000612bf6601b8361314b565b9150612c01826134fd565b602082019050919050565b6000612c19600a8361314b565b9150612c2482613526565b602082019050919050565b6000612c3c601f8361314b565b9150612c478261354f565b602082019050919050565b6000612c5f60268361314b565b9150612c6a82613578565b604082019050919050565b6000612c8260288361314b565b9150612c8d826135c7565b604082019050919050565b6000612ca560268361314b565b9150612cb082613616565b604082019050919050565b612cc4816131e2565b82525050565b6000602082019050612cdf6000830184612928565b92915050565b6000604082019050612cfa6000830185612928565b612d076020830184612928565b9392505050565b6000608082019050612d236000830187612928565b612d306020830186612928565b612d3d6040830185612cbb565b612d4a6060830184612928565b95945050505050565b6000608082019050612d686000830187612928565b612d756020830186612a02565b612d826040830185612a11565b612d8f6060830184612928565b95945050505050565b6000608082019050612dad6000830187612928565b8181036020830152612dbf8186612a20565b9050612dce6040830185612928565b612ddb6060830184612a59565b95945050505050565b60006040820190508181036000830152612dfe8185612995565b90508181036020830152612e128184612937565b90509392505050565b60006020820190508181036000830152612e3481612a68565b9050919050565b60006020820190508181036000830152612e5481612a8b565b9050919050565b60006020820190508181036000830152612e7481612aae565b9050919050565b60006020820190508181036000830152612e9481612ad1565b9050919050565b60006020820190508181036000830152612eb481612af4565b9050919050565b60006020820190508181036000830152612ed481612b17565b9050919050565b60006020820190508181036000830152612ef481612b3a565b9050919050565b60006020820190508181036000830152612f1481612b5d565b9050919050565b60006020820190508181036000830152612f3481612b80565b9050919050565b60006020820190508181036000830152612f5481612ba3565b9050919050565b60006020820190508181036000830152612f7481612bc6565b9050919050565b60006020820190508181036000830152612f9481612be9565b9050919050565b60006020820190508181036000830152612fb481612c0c565b9050919050565b60006020820190508181036000830152612fd481612c2f565b9050919050565b60006020820190508181036000830152612ff481612c52565b9050919050565b6000602082019050818103600083015261301481612c75565b9050919050565b6000602082019050818103600083015261303481612c98565b9050919050565b6000613045613056565b90506130518282613231565b919050565b6000604051905090565b600067ffffffffffffffff82111561307b5761307a613262565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156130a7576130a6613262565b5b6130b082613291565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613167826131c2565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006131bb8261315c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006131f7826131e2565b9050919050565b60005b8381101561321c578082015181840152602081019050613201565b8381111561322b576000848401525b50505050565b61323a82613291565b810181811067ffffffffffffffff8211171561325957613258613262565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f6c656e677468206d69736d617463680000000000000000000000000000000000600082015250565b7f6f6c6420756269736368656d6520656e64206661696c65640000000000000000600082015250565b7f756e7265676973746572696e6720736368656d6552656769737472617220666160008201527f696c656400000000000000000000000000000000000000000000000000000000602082015250565b7f7265676973746572696e67204964656e74697479206661696c65640000000000600082015250565b7f4944454e54495459000000000000000000000000000000000000000000000000600082015250565b7f756e7265676973746572696e672075706772616465536368656d65206661696c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e6720666f726d756c61206661696c656400000000600082015250565b7f736574554249536368656d65206661696c656400000000000000000000000000600082015250565b7f474f4f44444f4c4c415200000000000000000000000000000000000000000000600082015250565b7f7265676973746572696e6720636f6d706f756e64566f74696e674d616368696e60008201527f65206661696c6564000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e67206f6c6420554249536368656d65206661696c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b7f6f6c6420636f6e7472616374732073697a65206d69736d617463680000000000600082015250565b7f6f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b7f7265676973746572696e6720676f76206661696c73616665206661696c656400600082015250565b7f43616c6c696e67207365744e616d6553657276696365436f6e7472616374732060008201527f6661696c65640000000000000000000000000000000000000000000000000000602082015250565b7f756e7265676973746572696e672050726f746f636f6c5570677261646546757360008201527f65206661696c6564000000000000000000000000000000000000000000000000602082015250565b7f66756e6473207472616e7366657220746f206e657720756269736368656d652060008201527f6661696c65640000000000000000000000000000000000000000000000000000602082015250565b61366e8161315c565b811461367957600080fd5b50565b6136858161316e565b811461369057600080fd5b50565b61369c8161317a565b81146136a757600080fd5b50565b6136b3816131b0565b81146136be57600080fd5b50565b6136ca816131e2565b81146136d557600080fd5b5056fea26469706673582212201da54a01c51cf43598d05f6d048604ea3a26ce72d6ea9a77b0bd3fb9e1af37e764736f6c63430008030033",
|
|
94
94
|
"linkReferences": {},
|
|
95
95
|
"deployedLinkReferences": {}
|
|
96
96
|
}
|
|
@@ -74,8 +74,8 @@
|
|
|
74
74
|
"type": "function"
|
|
75
75
|
}
|
|
76
76
|
],
|
|
77
|
-
"bytecode": "
|
|
78
|
-
"deployedBytecode": "
|
|
77
|
+
"bytecode": "0x608060405234801561001057600080fd5b5060405161060b38038061060b8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610111565b600081519050610087816100fa565b92915050565b60006020828403121561009f57600080fd5b60006100ad84828501610078565b91505092915050565b60006100c1826100da565b9050919050565b60006100d3826100b6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610103816100c8565b811461010e57600080fd5b50565b6104eb806101206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80635653eeeb1461004657806391d61f3e14610062578063c52164c61461007e575b600080fd5b610060600480360381019061005b91906102a3565b61009c565b005b61007c600480360381019061007791906102a3565b61016e565b005b610086610240565b6040516100939190610371565b60405180910390f35b60005b818110156101685760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1985856040518363ffffffff1660e01b8152600401610102929190610348565b602060405180830381600087803b15801561011c57600080fd5b505af1158015610130573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015491906102f2565b508080610160906103f8565b91505061009f565b50505050565b60005b8181101561023a5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac85856040518363ffffffff1660e01b81526004016101d4929190610348565b602060405180830381600087803b1580156101ee57600080fd5b505af1158015610202573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061022691906102f2565b508080610232906103f8565b915050610171565b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008135905061027381610470565b92915050565b60008151905061028881610487565b92915050565b60008135905061029d8161049e565b92915050565b6000806000606084860312156102b857600080fd5b60006102c686828701610264565b93505060206102d78682870161028e565b92505060406102e88682870161028e565b9150509250925092565b60006020828403121561030457600080fd5b600061031284828501610279565b91505092915050565b6103248161038c565b82525050565b610333816103d4565b82525050565b610342816103ca565b82525050565b600060408201905061035d600083018561031b565b61036a6020830184610339565b9392505050565b6000602082019050610386600083018461032a565b92915050565b6000610397826103aa565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006103df826103e6565b9050919050565b60006103f1826103aa565b9050919050565b6000610403826103ca565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561043657610435610441565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6104798161038c565b811461048457600080fd5b50565b6104908161039e565b811461049b57600080fd5b50565b6104a7816103ca565b81146104b257600080fd5b5056fea2646970667358221220269fa9feedabaea7a6adbee6647a07ed32d0f7fbdc7cbbb482b34c93503ed4f264736f6c63430008030033",
|
|
78
|
+
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80635653eeeb1461004657806391d61f3e14610062578063c52164c61461007e575b600080fd5b610060600480360381019061005b91906102a3565b61009c565b005b61007c600480360381019061007791906102a3565b61016e565b005b610086610240565b6040516100939190610371565b60405180910390f35b60005b818110156101685760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1985856040518363ffffffff1660e01b8152600401610102929190610348565b602060405180830381600087803b15801561011c57600080fd5b505af1158015610130573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015491906102f2565b508080610160906103f8565b91505061009f565b50505050565b60005b8181101561023a5760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac85856040518363ffffffff1660e01b81526004016101d4929190610348565b602060405180830381600087803b1580156101ee57600080fd5b505af1158015610202573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061022691906102f2565b508080610232906103f8565b915050610171565b50505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008135905061027381610470565b92915050565b60008151905061028881610487565b92915050565b60008135905061029d8161049e565b92915050565b6000806000606084860312156102b857600080fd5b60006102c686828701610264565b93505060206102d78682870161028e565b92505060406102e88682870161028e565b9150509250925092565b60006020828403121561030457600080fd5b600061031284828501610279565b91505092915050565b6103248161038c565b82525050565b610333816103d4565b82525050565b610342816103ca565b82525050565b600060408201905061035d600083018561031b565b61036a6020830184610339565b9392505050565b6000602082019050610386600083018461032a565b92915050565b6000610397826103aa565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006103df826103e6565b9050919050565b60006103f1826103aa565b9050919050565b6000610403826103ca565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561043657610435610441565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6104798161038c565b811461048457600080fd5b50565b6104908161039e565b811461049b57600080fd5b50565b6104a7816103ca565b81146104b257600080fd5b5056fea2646970667358221220269fa9feedabaea7a6adbee6647a07ed32d0f7fbdc7cbbb482b34c93503ed4f264736f6c63430008030033",
|
|
79
79
|
"linkReferences": {},
|
|
80
80
|
"deployedLinkReferences": {}
|
|
81
81
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
pragma solidity >=0.8.0;
|
|
3
3
|
|
|
4
|
-
import "@openzeppelin/contracts-upgradeable/utils/cryptography/MerkleProofUpgradeable.sol";
|
|
5
|
-
|
|
6
4
|
import "./Reputation.sol";
|
|
7
5
|
import "../Interfaces.sol";
|
|
8
6
|
|
|
@@ -333,26 +331,30 @@ contract GReputation is Reputation {
|
|
|
333
331
|
/**
|
|
334
332
|
* @notice prove user balance in a specific blockchain state hash
|
|
335
333
|
* @dev "rootState" is a special state that can be supplied once, and actually mints reputation on the current blockchain
|
|
334
|
+
* we use non sorted merkle tree, as sorting while preparing merkle tree is heavy
|
|
336
335
|
* @param _id the string id of the blockchain we supply proof for
|
|
337
336
|
* @param _user the user to prove his balance
|
|
338
337
|
* @param _balance the balance we are prooving
|
|
339
338
|
* @param _proof array of byte32 with proof data (currently merkle tree path)
|
|
339
|
+
* @param _nodeIndex index of node in the tree (for unsorted merkle tree proof)
|
|
340
|
+
|
|
340
341
|
* @return true if proof is valid
|
|
341
342
|
*/
|
|
342
343
|
function proveBalanceOfAtBlockchain(
|
|
343
344
|
string memory _id,
|
|
344
345
|
address _user,
|
|
345
346
|
uint256 _balance,
|
|
346
|
-
bytes32[] memory _proof
|
|
347
|
+
bytes32[] memory _proof,
|
|
348
|
+
uint256 _nodeIndex
|
|
347
349
|
) public returns (bool) {
|
|
348
350
|
bytes32 idHash = keccak256(bytes(_id));
|
|
349
351
|
require(
|
|
350
352
|
blockchainStates[idHash].length > 0,
|
|
351
353
|
"no state found for given _id"
|
|
352
354
|
);
|
|
353
|
-
bytes32 stateHash =
|
|
354
|
-
blockchainStates[idHash]
|
|
355
|
-
|
|
355
|
+
bytes32 stateHash = blockchainStates[idHash][
|
|
356
|
+
blockchainStates[idHash].length - 1
|
|
357
|
+
].stateHash;
|
|
356
358
|
|
|
357
359
|
//this is specifically important for rootState that should update real balance only once
|
|
358
360
|
require(
|
|
@@ -360,8 +362,14 @@ contract GReputation is Reputation {
|
|
|
360
362
|
"stateHash already proved"
|
|
361
363
|
);
|
|
362
364
|
|
|
363
|
-
(,
|
|
364
|
-
|
|
365
|
+
bytes32 leafHash = keccak256(abi.encode(_user, _balance));
|
|
366
|
+
bool isProofValid = checkProofOrdered(
|
|
367
|
+
_proof,
|
|
368
|
+
stateHash,
|
|
369
|
+
leafHash,
|
|
370
|
+
_nodeIndex
|
|
371
|
+
);
|
|
372
|
+
|
|
365
373
|
require(isProofValid, "invalid merkle proof");
|
|
366
374
|
|
|
367
375
|
//if initiial state then set real balance
|
|
@@ -412,23 +420,20 @@ contract GReputation is Reputation {
|
|
|
412
420
|
bytes32 _r,
|
|
413
421
|
bytes32 _s
|
|
414
422
|
) public {
|
|
415
|
-
bytes32 domainSeparator =
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
)
|
|
428
|
-
|
|
429
|
-
keccak256(
|
|
430
|
-
abi.encodePacked("\x19\x01", domainSeparator, structHash)
|
|
431
|
-
);
|
|
423
|
+
bytes32 domainSeparator = keccak256(
|
|
424
|
+
abi.encode(
|
|
425
|
+
DOMAIN_TYPEHASH,
|
|
426
|
+
keccak256(bytes(name)),
|
|
427
|
+
getChainId(),
|
|
428
|
+
address(this)
|
|
429
|
+
)
|
|
430
|
+
);
|
|
431
|
+
bytes32 structHash = keccak256(
|
|
432
|
+
abi.encode(DELEGATION_TYPEHASH, _delegate, _nonce, _expiry)
|
|
433
|
+
);
|
|
434
|
+
bytes32 digest = keccak256(
|
|
435
|
+
abi.encodePacked("\x19\x01", domainSeparator, structHash)
|
|
436
|
+
);
|
|
432
437
|
address signatory = ecrecover(digest, _v, _r, _s);
|
|
433
438
|
require(
|
|
434
439
|
signatory != address(0),
|
|
@@ -474,12 +479,7 @@ contract GReputation is Reputation {
|
|
|
474
479
|
|
|
475
480
|
//move votes to new delegator
|
|
476
481
|
uint256 addVotes = getVotesAt(_delegate, false, block.number);
|
|
477
|
-
_updateDelegateVotes(
|
|
478
|
-
_delegate,
|
|
479
|
-
_user,
|
|
480
|
-
addVotes,
|
|
481
|
-
addVotes + coreBalance
|
|
482
|
-
);
|
|
482
|
+
_updateDelegateVotes(_delegate, _user, addVotes, addVotes + coreBalance);
|
|
483
483
|
}
|
|
484
484
|
|
|
485
485
|
/// @notice internal function to update delegated votes, emits event with changes
|
|
@@ -497,16 +497,46 @@ contract GReputation is Reputation {
|
|
|
497
497
|
emit DelegateVotesChanged(_delegate, _delegator, _oldVotes, _newVotes);
|
|
498
498
|
}
|
|
499
499
|
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
500
|
+
// from StorJ -- https://github.com/nginnever/storj-audit-verifier/blob/master/contracts/MerkleVerifyv3.sol
|
|
501
|
+
/**
|
|
502
|
+
* @dev non sorted merkle tree proof check
|
|
503
|
+
*/
|
|
504
|
+
function checkProofOrdered(
|
|
505
|
+
bytes32[] memory _proof,
|
|
505
506
|
bytes32 _root,
|
|
506
|
-
bytes32
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
507
|
+
bytes32 _hash,
|
|
508
|
+
uint256 _index
|
|
509
|
+
) public pure returns (bool) {
|
|
510
|
+
// use the index to determine the node ordering
|
|
511
|
+
// index ranges 1 to n
|
|
512
|
+
|
|
513
|
+
bytes32 proofElement;
|
|
514
|
+
bytes32 computedHash = _hash;
|
|
515
|
+
uint256 remaining;
|
|
516
|
+
|
|
517
|
+
for (uint256 j = 0; j < _proof.length; j++) {
|
|
518
|
+
proofElement = _proof[j];
|
|
519
|
+
|
|
520
|
+
// calculate remaining elements in proof
|
|
521
|
+
remaining = _proof.length - j;
|
|
522
|
+
|
|
523
|
+
// we don't assume that the tree is padded to a power of 2
|
|
524
|
+
// if the index is odd then the proof will start with a hash at a higher
|
|
525
|
+
// layer, so we have to adjust the index to be the index at that layer
|
|
526
|
+
while (remaining > 0 && _index % 2 == 1 && _index > 2**remaining) {
|
|
527
|
+
_index = _index / 2 + 1;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
if (_index % 2 == 0) {
|
|
531
|
+
computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
|
|
532
|
+
_index = _index / 2;
|
|
533
|
+
} else {
|
|
534
|
+
computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
|
|
535
|
+
_index = _index / 2 + 1;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
return computedHash == _root;
|
|
510
540
|
}
|
|
511
541
|
|
|
512
542
|
/// @notice helper function to get current chain id
|
|
@@ -51,6 +51,14 @@ contract GoodFundManager is DAOUpgradeableContract, DSMath {
|
|
|
51
51
|
uint64 blockEnd; // # of the end block to distribute rewards
|
|
52
52
|
bool isBlackListed; // If staking contract is blacklisted or not
|
|
53
53
|
}
|
|
54
|
+
struct InterestInfo {
|
|
55
|
+
address contractAddress; // staking contract address which interest will be collected
|
|
56
|
+
uint256 interestBalance; // Interest amount that staking contract has
|
|
57
|
+
uint256 collectedInterestSoFar; // Collected interest amount so far including this contract
|
|
58
|
+
uint256 gasCostSoFar; // Spent gas amount so far including this contract
|
|
59
|
+
uint256 maxGasAmountSoFar; // Max gas amount that can spend to collect this interest according to interest amount
|
|
60
|
+
bool maxGasLargerOrEqualRequired; // Bool that indicates if max gas amount larger or equal to actual gas needed
|
|
61
|
+
}
|
|
54
62
|
// Rewards per block for particular Staking contract
|
|
55
63
|
mapping(address => Reward) public rewardsForStakingContract;
|
|
56
64
|
// Emits when `transferInterest` transfers
|
|
@@ -288,22 +296,18 @@ contract GoodFundManager is DAOUpgradeableContract, DSMath {
|
|
|
288
296
|
}
|
|
289
297
|
|
|
290
298
|
/**
|
|
291
|
-
* @dev Function that get
|
|
292
|
-
*
|
|
293
|
-
* @param _maxGasAmount The maximum amount of the gas that keeper willing to spend collect interests
|
|
294
|
-
* @return addresses of the staking contracts to the collect interests
|
|
299
|
+
* @dev Function that get interest informations of staking contracts in the sorted array by highest interest to lowest interest amount
|
|
300
|
+
* @return array of interestInfo struct
|
|
295
301
|
*/
|
|
296
|
-
function calcSortedContracts(
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
address[] memory addresses = new address[](activeContractsLength);
|
|
303
|
-
uint256[] memory balances = new uint256[](activeContractsLength);
|
|
302
|
+
function calcSortedContracts() public view returns (InterestInfo[] memory) {
|
|
303
|
+
address[] memory addresses = new address[](activeContracts.length);
|
|
304
|
+
uint256[] memory balances = new uint256[](activeContracts.length);
|
|
305
|
+
InterestInfo[] memory interestInfos = new InterestInfo[](
|
|
306
|
+
activeContracts.length
|
|
307
|
+
);
|
|
304
308
|
uint256 tempInterest;
|
|
305
309
|
int256 i;
|
|
306
|
-
for (i = 0; i < int256(
|
|
310
|
+
for (i = 0; i < int256(activeContracts.length); i++) {
|
|
307
311
|
(, , , , tempInterest) = IGoodStaking(activeContracts[uint256(i)])
|
|
308
312
|
.currentGains(false, true);
|
|
309
313
|
if (tempInterest != 0) {
|
|
@@ -311,45 +315,42 @@ contract GoodFundManager is DAOUpgradeableContract, DSMath {
|
|
|
311
315
|
balances[uint256(i)] = tempInterest;
|
|
312
316
|
}
|
|
313
317
|
}
|
|
314
|
-
uint256
|
|
315
|
-
address[] memory emptyArray = new address[](0);
|
|
316
|
-
|
|
318
|
+
uint256 usedGasAmount = gasCostExceptInterestCollect;
|
|
317
319
|
quick(balances, addresses); // sort the values according to interest balance
|
|
318
320
|
uint256 gasCost;
|
|
319
321
|
uint256 possibleCollected;
|
|
320
|
-
|
|
322
|
+
uint256 maxGasAmount;
|
|
323
|
+
for (i = int256(activeContracts.length) - 1; i >= 0; i--) {
|
|
321
324
|
// elements are sorted by balances from lowest to highest
|
|
322
325
|
|
|
323
326
|
if (addresses[uint256(i)] != address(0x0)) {
|
|
324
327
|
gasCost = IGoodStaking(addresses[uint256(i)])
|
|
325
328
|
.getGasCostForInterestTransfer();
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
329
|
+
|
|
330
|
+
// collects the interest from the staking contract and transfer it directly to the reserve contract
|
|
331
|
+
//`collectUBIInterest` returns (iTokengains, tokengains, precission loss, donation ratio)
|
|
332
|
+
possibleCollected += balances[uint256(i)];
|
|
333
|
+
usedGasAmount += gasCost;
|
|
334
|
+
maxGasAmount = block.timestamp >=
|
|
335
|
+
lastCollectedInterest + collectInterestTimeThreshold
|
|
336
|
+
? (possibleCollected * 1e10) /
|
|
337
|
+
getGasPriceIncDAIorDAI(1, true)
|
|
338
|
+
: (possibleCollected * 1e10) /
|
|
339
|
+
(interestMultiplier * getGasPriceIncDAIorDAI(1, true));
|
|
340
|
+
interestInfos[uint256(i)] = InterestInfo({
|
|
341
|
+
contractAddress: addresses[uint256(i)],
|
|
342
|
+
interestBalance: balances[uint256(i)],
|
|
343
|
+
collectedInterestSoFar: possibleCollected,
|
|
344
|
+
gasCostSoFar: usedGasAmount,
|
|
345
|
+
maxGasAmountSoFar: maxGasAmount,
|
|
346
|
+
maxGasLargerOrEqualRequired: maxGasAmount >= usedGasAmount
|
|
347
|
+
});
|
|
334
348
|
} else {
|
|
335
349
|
break; // if addresses are null after this element then break because we initialize array in size activecontracts but if their interest balance is zero then we dont put it in this array
|
|
336
350
|
}
|
|
337
351
|
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
i -= 1;
|
|
341
|
-
}
|
|
342
|
-
if (
|
|
343
|
-
block.timestamp >=
|
|
344
|
-
lastCollectedInterest + collectInterestTimeThreshold
|
|
345
|
-
) {
|
|
346
|
-
if (possibleCollected * 1e10 < gasCostInDAI) return emptyArray; // multiply possiblecollected by 1e10 so it will be on the 18decimals
|
|
347
|
-
} else {
|
|
348
|
-
// multiply possiblecollected by 1e10 so it will be on the 18decimals
|
|
349
|
-
if (possibleCollected * 1e10 < interestMultiplier * gasCostInDAI)
|
|
350
|
-
return emptyArray;
|
|
351
|
-
}
|
|
352
|
-
return addresses;
|
|
352
|
+
|
|
353
|
+
return interestInfos;
|
|
353
354
|
}
|
|
354
355
|
|
|
355
356
|
/**
|
|
@@ -189,6 +189,16 @@ contract ProtocolUpgrade {
|
|
|
189
189
|
"registering compoundVotingMachine failed"
|
|
190
190
|
);
|
|
191
191
|
|
|
192
|
+
require(
|
|
193
|
+
controller.registerScheme(
|
|
194
|
+
owner,
|
|
195
|
+
bytes32(0x0),
|
|
196
|
+
bytes4(0x0000001F),
|
|
197
|
+
avatar
|
|
198
|
+
),
|
|
199
|
+
"registering governance failsafe failed"
|
|
200
|
+
);
|
|
201
|
+
|
|
192
202
|
require(
|
|
193
203
|
controller.unregisterSelf(avatar),
|
|
194
204
|
"unregistering protocolupgrade failed"
|