@gearbox-protocol/sdk 0.0.108 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/lib/apy/convexAPY.d.ts +9 -5
- package/lib/apy/convexAPY.js +35 -75
- package/lib/apy/curveAPY.d.ts +4 -0
- package/lib/apy/curveAPY.js +94 -0
- package/lib/apy/index.d.ts +6 -0
- package/lib/apy/index.js +20 -0
- package/lib/apy/lidoAPY.d.ts +1 -1
- package/lib/apy/lidoAPY.js +10 -10
- package/lib/apy/yearnAPY.d.ts +4 -0
- package/lib/apy/yearnAPY.js +90 -0
- package/lib/contracts/adapters.js +1 -1
- package/lib/contracts/contracts.d.ts +5 -5
- package/lib/contracts/contracts.js +66 -71
- package/lib/contracts/contractsRegister.js +3 -2
- package/lib/contracts/protocols.js +6 -6
- package/lib/core/constants.d.ts +3 -2
- package/lib/core/constants.js +6 -5
- package/lib/core/creditAccount.d.ts +4 -3
- package/lib/core/creditAccount.js +19 -12
- package/lib/core/creditManager.d.ts +3 -1
- package/lib/core/creditManager.js +28 -12
- package/lib/core/creditSession.d.ts +1 -1
- package/lib/core/creditSession.js +1 -1
- package/lib/core/errors.d.ts +1 -1
- package/lib/core/eventOrTx.d.ts +2 -2
- package/lib/core/eventOrTx.js +1 -1
- package/lib/core/events.d.ts +1 -1
- package/lib/core/events.js +32 -31
- package/lib/core/history.d.ts +2 -2
- package/lib/core/pool.js +5 -5
- package/lib/core/strategy.d.ts +5 -3
- package/lib/core/strategy.js +6 -4
- package/lib/core/tokenDistributor.js +1 -1
- package/lib/core/transactions.js +22 -22
- package/lib/index.d.ts +30 -30
- package/lib/index.js +38 -37
- package/lib/oracles/oracles.d.ts +5 -6
- package/lib/oracles/priceFeeds.d.ts +1 -1
- package/lib/oracles/priceFeeds.js +292 -194
- package/lib/pathfinder/contracts.js +4 -4
- package/lib/pathfinder/curveLP.d.ts +2 -2
- package/lib/pathfinder/curveLP.js +4 -4
- package/lib/pathfinder/path.d.ts +3 -3
- package/lib/pathfinder/path.js +7 -7
- package/lib/pathfinder/tradeTypes.d.ts +2 -2
- package/lib/pathfinder/yVault.d.ts +3 -3
- package/lib/pathfinder/yVault.js +5 -5
- package/lib/strategies/convex.js +13 -13
- package/lib/strategies/creditFacade.js +6 -6
- package/lib/strategies/curve.js +17 -19
- package/lib/strategies/lido.d.ts +1 -1
- package/lib/strategies/lido.js +3 -3
- package/lib/strategies/uniswapV2.js +3 -3
- package/lib/strategies/uniswapV3.js +6 -6
- package/lib/strategies/yearn.js +11 -7
- package/lib/tokens/connectors.js +1 -1
- package/lib/tokens/convex.d.ts +5 -2
- package/lib/tokens/convex.js +92 -66
- package/lib/tokens/curveLP.d.ts +2 -1
- package/lib/tokens/curveLP.js +41 -37
- package/lib/tokens/gear.d.ts +1 -1
- package/lib/tokens/gear.js +6 -6
- package/lib/tokens/normal.d.ts +1 -0
- package/lib/tokens/normal.js +181 -177
- package/lib/tokens/token.d.ts +10 -5
- package/lib/tokens/token.js +74 -65
- package/lib/tokens/tokenData.d.ts +1 -1
- package/lib/tokens/tokenData.js +6 -7
- package/lib/tokens/yearn.d.ts +2 -1
- package/lib/tokens/yearn.js +30 -26
- package/lib/utils/extracter.d.ts +11 -0
- package/lib/utils/extracter.js +19 -0
- package/lib/utils/formatter.js +19 -12
- package/lib/utils/mappers.d.ts +3 -3
- package/lib/utils/mappers.js +1 -1
- package/lib/utils/multicall.js +2 -2
- package/lib/utils/network.js +3 -3
- package/lib/utils/price.d.ts +8 -0
- package/lib/utils/price.js +26 -0
- package/lib/utils/repeater.js +6 -6
- package/package.json +30 -23
- package/.eslintignore +0 -5
- package/.eslintrc.js +0 -52
- package/.husky/pre-push +0 -4
- package/.idea/gearbox-sdk.iml +0 -12
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
- package/.prettierrc +0 -10
- package/lib/core/price.d.ts +0 -2
- package/lib/core/price.js +0 -14
- package/lib/types/@chainlink/contracts/src/v0.6/index.d.ts +0 -2
- package/lib/types/@chainlink/contracts/src/v0.6/index.js +0 -2
- package/lib/types/@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.d.ts +0 -146
- package/lib/types/@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.js +0 -2
- package/lib/types/@chainlink/contracts/src/v0.6/interfaces/index.d.ts +0 -1
- package/lib/types/@chainlink/contracts/src/v0.6/interfaces/index.js +0 -2
- package/lib/types/contracts/integrations/lido/IstETH.d.ts +0 -154
- package/lib/types/contracts/integrations/lido/IstETH.js +0 -2
- package/lib/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeBalanceChecker.d.ts +0 -50
- package/lib/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeBalanceChecker.js +0 -2
- package/lib/types/contracts/pathfinder/Balances.sol/BalanceOps.d.ts +0 -27
- package/lib/types/contracts/pathfinder/Balances.sol/BalanceOps.js +0 -2
- package/lib/types/contracts/pathfinder/Balances.sol/index.d.ts +0 -1
- package/lib/types/contracts/pathfinder/Balances.sol/index.js +0 -2
- package/lib/types/contracts/pathfinder/NormalTokenPathFinder.sol/PathFinder.d.ts +0 -269
- package/lib/types/contracts/pathfinder/NormalTokenPathFinder.sol/PathFinder.js +0 -2
- package/lib/types/contracts/pathfinder/NormalTokenPathFinder.sol/index.d.ts +0 -1
- package/lib/types/contracts/pathfinder/NormalTokenPathFinder.sol/index.js +0 -2
- package/lib/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/VirtualBalanceWrapper.d.ts +0 -58
- package/lib/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/VirtualBalanceWrapper.js +0 -2
- package/lib/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderAdapterTest.d.ts +0 -528
- package/lib/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderAdapterTest.js +0 -2
- package/lib/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderAdapterTest.d.ts +0 -528
- package/lib/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderAdapterTest.js +0 -2
- package/lib/types/factories/@chainlink/contracts/src/v0.6/index.d.ts +0 -1
- package/lib/types/factories/@chainlink/contracts/src/v0.6/index.js +0 -30
- package/lib/types/factories/@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface__factory.d.ts +0 -22
- package/lib/types/factories/@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface__factory.js +0 -133
- package/lib/types/factories/@chainlink/contracts/src/v0.6/interfaces/index.d.ts +0 -1
- package/lib/types/factories/@chainlink/contracts/src/v0.6/interfaces/index.js +0 -8
- package/lib/types/factories/contracts/integrations/lido/IstETH__factory.d.ts +0 -35
- package/lib/types/factories/contracts/integrations/lido/IstETH__factory.js +0 -224
- package/lib/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeBalanceChecker__factory.d.ts +0 -18
- package/lib/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeBalanceChecker__factory.js +0 -40
- package/lib/types/factories/contracts/pathfinder/Balances.sol/BalanceOps__factory.d.ts +0 -28
- package/lib/types/factories/contracts/pathfinder/Balances.sol/BalanceOps__factory.js +0 -76
- package/lib/types/factories/contracts/pathfinder/Balances.sol/index.d.ts +0 -1
- package/lib/types/factories/contracts/pathfinder/Balances.sol/index.js +0 -8
- package/lib/types/factories/contracts/pathfinder/NormalTokenPathFinder.sol/PathFinder__factory.d.ts +0 -144
- package/lib/types/factories/contracts/pathfinder/NormalTokenPathFinder.sol/PathFinder__factory.js +0 -522
- package/lib/types/factories/contracts/pathfinder/NormalTokenPathFinder.sol/index.d.ts +0 -1
- package/lib/types/factories/contracts/pathfinder/NormalTokenPathFinder.sol/index.js +0 -8
- package/lib/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/VirtualBalanceWrapper__factory.d.ts +0 -34
- package/lib/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/VirtualBalanceWrapper__factory.js +0 -110
- package/lib/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderAdapterTest__factory.d.ts +0 -65
- package/lib/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderAdapterTest__factory.js +0 -775
- package/lib/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderAdapterTest__factory.d.ts +0 -65
- package/lib/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderAdapterTest__factory.js +0 -775
- package/lib/types/hardhat.d.ts +0 -2715
- package/src/abi/adapters/YearnV2.sol/YearnAdapter.dbg.json +0 -4
- package/src/abi/adapters/YearnV2.sol/YearnAdapter.json +0 -455
- package/src/abi/core/ACL.sol/ACL.dbg.json +0 -4
- package/src/abi/core/ACL.sol/ACL.json +0 -262
- package/src/abi/core/ACLTrait.sol/ACLTrait.dbg.json +0 -4
- package/src/abi/core/ACLTrait.sol/ACLTrait.json +0 -64
- package/src/abi/core/AccountMining.sol/AccountMining.dbg.json +0 -4
- package/src/abi/core/AccountMining.sol/AccountMining.json +0 -150
- package/src/abi/core/AddressProvider.sol/AddressProvider.dbg.json +0 -4
- package/src/abi/core/AddressProvider.sol/AddressProvider.json +0 -496
- package/src/abi/core/ContractsRegister.sol/ContractsRegister.dbg.json +0 -4
- package/src/abi/core/ContractsRegister.sol/ContractsRegister.json +0 -255
- package/src/abi/credit/LeverageActions.sol/LeveragedActions.dbg.json +0 -4
- package/src/abi/credit/LeverageActions.sol/LeveragedActions.json +0 -514
- package/src/abi/deployer/AdaptersDeployer.sol/AdaptersDeployer.dbg.json +0 -4
- package/src/abi/deployer/AdaptersDeployer.sol/AdaptersDeployer.json +0 -160
- package/src/abi/deployer/GenesisDeployer.sol/GenesisDeployer.dbg.json +0 -4
- package/src/abi/deployer/GenesisDeployer.sol/GenesisDeployer.json +0 -189
- package/src/abi/deployer/PoolDeployer.sol/PoolDeployer.dbg.json +0 -4
- package/src/abi/deployer/PoolDeployer.sol/PoolDeployer.json +0 -215
- package/src/abi/fuzzing/FuzzHarness.sol/FuzzHarness.dbg.json +0 -4
- package/src/abi/fuzzing/FuzzHarness.sol/FuzzHarness.json +0 -50
- package/src/abi/integrations/yearn/IYVault.sol/IYVault.dbg.json +0 -4
- package/src/abi/integrations/yearn/IYVault.sol/IYVault.json +0 -400
- package/src/abi/interfaces/IGearToken.sol/IGearToken.dbg.json +0 -4
- package/src/abi/interfaces/IGearToken.sol/IGearToken.json +0 -331
- package/src/abi/interfaces/IMerkleDistributor.sol/IMerkleDistributor.dbg.json +0 -4
- package/src/abi/interfaces/IMerkleDistributor.sol/IMerkleDistributor.json +0 -98
- package/src/abi/mocks/core/ACLTraitTest.sol/ACLTraitTest.dbg.json +0 -4
- package/src/abi/mocks/core/ACLTraitTest.sol/ACLTraitTest.json +0 -96
- package/src/abi/mocks/credit/ExecutorMock.sol/ExecutorMock.dbg.json +0 -4
- package/src/abi/mocks/credit/ExecutorMock.sol/ExecutorMock.json +0 -61
- package/src/abi/mocks/integrations/CurveMock.sol/CurveMock.dbg.json +0 -4
- package/src/abi/mocks/integrations/CurveMock.sol/CurveMock.json +0 -168
- package/src/abi/mocks/integrations/YearnMock.sol/YearnMock.dbg.json +0 -4
- package/src/abi/mocks/integrations/YearnMock.sol/YearnMock.json +0 -556
- package/src/abi/mocks/oracles/ChainlinkPriceFeedMock.sol/ChainlinkPriceFeedMock.dbg.json +0 -4
- package/src/abi/mocks/oracles/ChainlinkPriceFeedMock.sol/ChainlinkPriceFeedMock.json +0 -151
- package/src/abi/mocks/pool/CreditManagerMockForPoolTest.sol/CreditManagerMockForPoolTest.dbg.json +0 -4
- package/src/abi/mocks/pool/CreditManagerMockForPoolTest.sol/CreditManagerMockForPoolTest.json +0 -89
- package/src/abi/mocks/tokens/ERC20Blocking.sol/ERC20BlockingMock.dbg.json +0 -4
- package/src/abi/mocks/tokens/ERC20Blocking.sol/ERC20BlockingMock.json +0 -387
- package/src/abi/mocks/tokens/ERC20Fee.sol/TokenFeeMock.dbg.json +0 -4
- package/src/abi/mocks/tokens/ERC20Fee.sol/TokenFeeMock.json +0 -385
- package/src/abi/oracles/YearnPriceFeed.sol/YearnPriceFeed.dbg.json +0 -4
- package/src/abi/oracles/YearnPriceFeed.sol/YearnPriceFeed.json +0 -321
- package/src/abi/support/PathFinder.sol/PathFinder.dbg.json +0 -4
- package/src/abi/support/PathFinder.sol/PathFinder.json +0 -189
- package/src/abi/tokens/GearNFT.sol/GearBeta.dbg.json +0 -4
- package/src/abi/tokens/GearNFT.sol/GearBeta.json +0 -485
- package/src/abi/tokens/TokenDistributor.sol/TokenDistributor.dbg.json +0 -4
- package/src/abi/tokens/TokenDistributor.sol/TokenDistributor.json +0 -439
- package/src/abi/tokens/Vesting.sol/StepVesting.dbg.json +0 -4
- package/src/abi/tokens/Vesting.sol/StepVesting.json +0 -254
- package/src/apy/convexAPY.ts +0 -250
- package/src/apy/lidoAPY.ts +0 -89
- package/src/config.ts +0 -2
- package/src/contracts/adapters.ts +0 -18
- package/src/contracts/contracts.ts +0 -438
- package/src/contracts/contractsRegister.ts +0 -67
- package/src/contracts/protocols.ts +0 -40
- package/src/core/constants.ts +0 -51
- package/src/core/creditAccount.ts +0 -152
- package/src/core/creditManager.ts +0 -282
- package/src/core/creditOperation.ts +0 -9
- package/src/core/creditSession.ts +0 -87
- package/src/core/errors.ts +0 -70
- package/src/core/eventOrTx.ts +0 -97
- package/src/core/events.ts +0 -1259
- package/src/core/history.ts +0 -55
- package/src/core/multicall.ts +0 -6
- package/src/core/operations.ts +0 -41
- package/src/core/pool.ts +0 -81
- package/src/core/price.ts +0 -13
- package/src/core/strategy.ts +0 -134
- package/src/core/tokenDistributor.ts +0 -14
- package/src/core/transactions.ts +0 -492
- package/src/index.ts +0 -64
- package/src/oracles/oracles.ts +0 -48
- package/src/oracles/priceFeeds.ts +0 -546
- package/src/pathfinder/contracts.ts +0 -19
- package/src/pathfinder/convexLP.ts +0 -37
- package/src/pathfinder/curveLP.ts +0 -75
- package/src/pathfinder/path.ts +0 -174
- package/src/pathfinder/priority.ts +0 -14
- package/src/pathfinder/trade.ts +0 -90
- package/src/pathfinder/tradeTypes.ts +0 -105
- package/src/pathfinder/yVault.ts +0 -90
- package/src/payload/creditAccount.ts +0 -7
- package/src/payload/creditManager.ts +0 -24
- package/src/payload/creditSession.ts +0 -24
- package/src/payload/graphPayload.ts +0 -10
- package/src/payload/pool.ts +0 -3
- package/src/payload/token.ts +0 -5
- package/src/strategies/convex.ts +0 -408
- package/src/strategies/creditFacade.ts +0 -119
- package/src/strategies/curve.ts +0 -470
- package/src/strategies/lido.ts +0 -84
- package/src/strategies/uniswapV2.ts +0 -109
- package/src/strategies/uniswapV3.ts +0 -127
- package/src/strategies/yearn.ts +0 -208
- package/src/tokens/connectors.ts +0 -8
- package/src/tokens/convex.ts +0 -335
- package/src/tokens/curveLP.ts +0 -188
- package/src/tokens/gear.ts +0 -58
- package/src/tokens/normal.ts +0 -809
- package/src/tokens/token.ts +0 -238
- package/src/tokens/tokenData.ts +0 -87
- package/src/tokens/tokenType.ts +0 -12
- package/src/tokens/yearn.ts +0 -143
- package/src/types/@chainlink/contracts/index.ts +0 -5
- package/src/types/@chainlink/contracts/src/index.ts +0 -5
- package/src/types/@chainlink/contracts/src/v0.8/index.ts +0 -5
- package/src/types/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.ts +0 -228
- package/src/types/@chainlink/contracts/src/v0.8/interfaces/index.ts +0 -4
- package/src/types/@chainlink/index.ts +0 -5
- package/src/types/@openzeppelin/contracts/access/Ownable.ts +0 -175
- package/src/types/@openzeppelin/contracts/access/index.ts +0 -4
- package/src/types/@openzeppelin/contracts/index.ts +0 -11
- package/src/types/@openzeppelin/contracts/security/Pausable.ts +0 -111
- package/src/types/@openzeppelin/contracts/security/index.ts +0 -4
- package/src/types/@openzeppelin/contracts/token/ERC20/ERC20.ts +0 -444
- package/src/types/@openzeppelin/contracts/token/ERC20/IERC20.ts +0 -322
- package/src/types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +0 -364
- package/src/types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +0 -4
- package/src/types/@openzeppelin/contracts/token/ERC20/index.ts +0 -7
- package/src/types/@openzeppelin/contracts/token/ERC721/ERC721.ts +0 -578
- package/src/types/@openzeppelin/contracts/token/ERC721/IERC721.ts +0 -527
- package/src/types/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts +0 -120
- package/src/types/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.ts +0 -581
- package/src/types/@openzeppelin/contracts/token/ERC721/extensions/index.ts +0 -4
- package/src/types/@openzeppelin/contracts/token/ERC721/index.ts +0 -8
- package/src/types/@openzeppelin/contracts/token/index.ts +0 -7
- package/src/types/@openzeppelin/contracts/utils/index.ts +0 -5
- package/src/types/@openzeppelin/contracts/utils/introspection/ERC165.ts +0 -102
- package/src/types/@openzeppelin/contracts/utils/introspection/IERC165.ts +0 -102
- package/src/types/@openzeppelin/contracts/utils/introspection/index.ts +0 -5
- package/src/types/@openzeppelin/index.ts +0 -5
- package/src/types/common.ts +0 -44
- package/src/types/contracts/adapters/AbstractAdapter.ts +0 -174
- package/src/types/contracts/adapters/UniversalAdapter.ts +0 -258
- package/src/types/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter.ts +0 -1079
- package/src/types/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/index.ts +0 -4
- package/src/types/contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter.ts +0 -676
- package/src/types/contracts/adapters/convex/ConvexV1_Booster.sol/index.ts +0 -4
- package/src/types/contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter.ts +0 -290
- package/src/types/contracts/adapters/convex/ConvexV1_ClaimZap.sol/index.ts +0 -4
- package/src/types/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken.ts +0 -393
- package/src/types/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/index.ts +0 -4
- package/src/types/contracts/adapters/convex/index.ts +0 -11
- package/src/types/contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets.ts +0 -1679
- package/src/types/contracts/adapters/curve/CurveV1_2.sol/index.ts +0 -4
- package/src/types/contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets.ts +0 -1685
- package/src/types/contracts/adapters/curve/CurveV1_3.sol/index.ts +0 -4
- package/src/types/contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets.ts +0 -1694
- package/src/types/contracts/adapters/curve/CurveV1_4.sol/index.ts +0 -4
- package/src/types/contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase.ts +0 -1394
- package/src/types/contracts/adapters/curve/CurveV1_Base.sol/index.ts +0 -4
- package/src/types/contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit.ts +0 -1394
- package/src/types/contracts/adapters/curve/CurveV1_DepositZap.sol/index.ts +0 -4
- package/src/types/contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH.ts +0 -1679
- package/src/types/contracts/adapters/curve/CurveV1_stETH.sol/index.ts +0 -4
- package/src/types/contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway.ts +0 -1232
- package/src/types/contracts/adapters/curve/CurveV1_stETHGateway.sol/index.ts +0 -4
- package/src/types/contracts/adapters/curve/index.ts +0 -17
- package/src/types/contracts/adapters/index.ts +0 -15
- package/src/types/contracts/adapters/lido/LidoV1.sol/LidoV1Adapter.ts +0 -689
- package/src/types/contracts/adapters/lido/LidoV1.sol/index.ts +0 -4
- package/src/types/contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway.ts +0 -400
- package/src/types/contracts/adapters/lido/LidoV1_WETHGateway.sol/index.ts +0 -4
- package/src/types/contracts/adapters/lido/index.ts +0 -7
- package/src/types/contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter.ts +0 -1575
- package/src/types/contracts/adapters/uniswap/UniswapV2.sol/index.ts +0 -4
- package/src/types/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter.ts +0 -532
- package/src/types/contracts/adapters/uniswap/UniswapV3.sol/index.ts +0 -4
- package/src/types/contracts/adapters/uniswap/index.ts +0 -7
- package/src/types/contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter.ts +0 -744
- package/src/types/contracts/adapters/yearn/YearnV2.sol/index.ts +0 -4
- package/src/types/contracts/adapters/yearn/index.ts +0 -5
- package/src/types/contracts/core/ACL.ts +0 -564
- package/src/types/contracts/core/ACLTrait.ts +0 -170
- package/src/types/contracts/core/AccountFactory.ts +0 -680
- package/src/types/contracts/core/AddressProvider.ts +0 -706
- package/src/types/contracts/core/ContractsRegister.ts +0 -456
- package/src/types/contracts/core/DataCompressor.ts +0 -625
- package/src/types/contracts/core/WETHGateway.ts +0 -263
- package/src/types/contracts/core/index.ts +0 -10
- package/src/types/contracts/credit/CreditAccount.ts +0 -406
- package/src/types/contracts/credit/CreditConfigurator.ts +0 -1297
- package/src/types/contracts/credit/CreditFacade.ts +0 -1654
- package/src/types/contracts/credit/CreditManager.ts +0 -1834
- package/src/types/contracts/credit/index.ts +0 -7
- package/src/types/contracts/factories/CreditManagerFactory.ts +0 -539
- package/src/types/contracts/factories/GenesisFactory.ts +0 -274
- package/src/types/contracts/factories/PoolFactory.ts +0 -350
- package/src/types/contracts/factories/index.ts +0 -6
- package/src/types/contracts/index.ts +0 -29
- package/src/types/contracts/integrations/convex/IBaseRewardPool.ts +0 -856
- package/src/types/contracts/integrations/convex/IBooster.ts +0 -407
- package/src/types/contracts/integrations/convex/IClaimZap.ts +0 -183
- package/src/types/contracts/integrations/convex/IConvexToken.ts +0 -407
- package/src/types/contracts/integrations/convex/IRewards.sol/IBasicRewards.ts +0 -225
- package/src/types/contracts/integrations/convex/IRewards.sol/IRewards.ts +0 -395
- package/src/types/contracts/integrations/convex/IRewards.sol/index.ts +0 -5
- package/src/types/contracts/integrations/convex/Interfaces.sol/ICrvDeposit.ts +0 -128
- package/src/types/contracts/integrations/convex/Interfaces.sol/ICurveGauge.ts +0 -242
- package/src/types/contracts/integrations/convex/Interfaces.sol/ICurveVoteEscrow.ts +0 -227
- package/src/types/contracts/integrations/convex/Interfaces.sol/IDeposit.ts +0 -371
- package/src/types/contracts/integrations/convex/Interfaces.sol/IFeeDistro.ts +0 -104
- package/src/types/contracts/integrations/convex/Interfaces.sol/IMinter.ts +0 -95
- package/src/types/contracts/integrations/convex/Interfaces.sol/IPools.ts +0 -290
- package/src/types/contracts/integrations/convex/Interfaces.sol/IRegistry.ts +0 -189
- package/src/types/contracts/integrations/convex/Interfaces.sol/IRewardFactory.ts +0 -310
- package/src/types/contracts/integrations/convex/Interfaces.sol/IRewards.ts +0 -395
- package/src/types/contracts/integrations/convex/Interfaces.sol/IStaker.ts +0 -652
- package/src/types/contracts/integrations/convex/Interfaces.sol/IStash.ts +0 -209
- package/src/types/contracts/integrations/convex/Interfaces.sol/IStashFactory.ts +0 -120
- package/src/types/contracts/integrations/convex/Interfaces.sol/ITokenFactory.ts +0 -104
- package/src/types/contracts/integrations/convex/Interfaces.sol/ITokenMinter.ts +0 -143
- package/src/types/contracts/integrations/convex/Interfaces.sol/IVestedEscrow.ts +0 -107
- package/src/types/contracts/integrations/convex/Interfaces.sol/IVoting.ts +0 -220
- package/src/types/contracts/integrations/convex/Interfaces.sol/IWalletChecker.ts +0 -84
- package/src/types/contracts/integrations/convex/Interfaces.sol/index.ts +0 -21
- package/src/types/contracts/integrations/convex/index.ts +0 -11
- package/src/types/contracts/integrations/curve/ICRVToken.ts +0 -422
- package/src/types/contracts/integrations/curve/ICurvePool.ts +0 -894
- package/src/types/contracts/integrations/curve/ICurvePoolStETH.ts +0 -772
- package/src/types/contracts/integrations/curve/ICurvePool_2.sol/ICurvePool2Assets.ts +0 -1179
- package/src/types/contracts/integrations/curve/ICurvePool_2.sol/index.ts +0 -4
- package/src/types/contracts/integrations/curve/ICurvePool_3.sol/ICurvePool3Assets.ts +0 -1185
- package/src/types/contracts/integrations/curve/ICurvePool_3.sol/index.ts +0 -4
- package/src/types/contracts/integrations/curve/ICurvePool_4.sol/ICurvePool4Assets.ts +0 -1194
- package/src/types/contracts/integrations/curve/ICurvePool_4.sol/index.ts +0 -4
- package/src/types/contracts/integrations/curve/ICurveRegistry.ts +0 -148
- package/src/types/contracts/integrations/curve/index.ts +0 -13
- package/src/types/contracts/integrations/index.ts +0 -13
- package/src/types/contracts/integrations/lido/ILidoOracle.ts +0 -115
- package/src/types/contracts/integrations/lido/IstETH.sol/IstETH.ts +0 -534
- package/src/types/contracts/integrations/lido/IstETH.sol/IstETHGetters.ts +0 -507
- package/src/types/contracts/integrations/lido/IstETH.sol/index.ts +0 -5
- package/src/types/contracts/integrations/lido/index.ts +0 -6
- package/src/types/contracts/integrations/uniswap/IQuoter.ts +0 -263
- package/src/types/contracts/integrations/uniswap/IUniswapV2Router01.ts +0 -1128
- package/src/types/contracts/integrations/uniswap/IUniswapV2Router02.ts +0 -1446
- package/src/types/contracts/integrations/uniswap/IUniswapV3.sol/ISwapRouter.ts +0 -318
- package/src/types/contracts/integrations/uniswap/IUniswapV3.sol/index.ts +0 -4
- package/src/types/contracts/integrations/uniswap/IUniswapV3SwapCallback.ts +0 -117
- package/src/types/contracts/integrations/uniswap/index.ts +0 -9
- package/src/types/contracts/integrations/yearn/IYVault.ts +0 -640
- package/src/types/contracts/integrations/yearn/index.ts +0 -4
- package/src/types/contracts/interfaces/IACL.sol/IACL.ts +0 -261
- package/src/types/contracts/interfaces/IACL.sol/IACLEvents.ts +0 -135
- package/src/types/contracts/interfaces/IACL.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/IAccountFactory.sol/IAccountFactory.ts +0 -396
- package/src/types/contracts/interfaces/IAccountFactory.sol/IAccountFactoryEvents.ts +0 -158
- package/src/types/contracts/interfaces/IAccountFactory.sol/IAccountFactoryGetters.ts +0 -198
- package/src/types/contracts/interfaces/IAccountFactory.sol/index.ts +0 -6
- package/src/types/contracts/interfaces/IAddressProvider.sol/IAddressProvider.ts +0 -290
- package/src/types/contracts/interfaces/IAddressProvider.sol/IAddressProviderEvents.ts +0 -79
- package/src/types/contracts/interfaces/IAddressProvider.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/IContractsRegister.sol/IContractsRegister.ts +0 -305
- package/src/types/contracts/interfaces/IContractsRegister.sol/IContractsRegisterEvents.ts +0 -89
- package/src/types/contracts/interfaces/IContractsRegister.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/ICreditAccount.sol/ICrediAccountExceptions.ts +0 -55
- package/src/types/contracts/interfaces/ICreditAccount.sol/ICreditAccount.ts +0 -406
- package/src/types/contracts/interfaces/ICreditAccount.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator.ts +0 -666
- package/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents.ts +0 -384
- package/src/types/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorExceptions.ts +0 -56
- package/src/types/contracts/interfaces/ICreditConfigurator.sol/index.ts +0 -6
- package/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacade.ts +0 -1236
- package/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeEvents.ts +0 -358
- package/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExceptions.ts +0 -55
- package/src/types/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended.ts +0 -143
- package/src/types/contracts/interfaces/ICreditFacade.sol/index.ts +0 -7
- package/src/types/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2.ts +0 -1534
- package/src/types/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Events.ts +0 -98
- package/src/types/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Exceptions.ts +0 -55
- package/src/types/contracts/interfaces/ICreditManagerV2.sol/index.ts +0 -6
- package/src/types/contracts/interfaces/IDataCompressor.sol/IDataCompressor.ts +0 -516
- package/src/types/contracts/interfaces/IDataCompressor.sol/IDataCompressorExceptions.ts +0 -55
- package/src/types/contracts/interfaces/IDataCompressor.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/IDegenNFT.sol/IDegenNFT.ts +0 -209
- package/src/types/contracts/interfaces/IDegenNFT.sol/IDegenNFTExceptions.ts +0 -55
- package/src/types/contracts/interfaces/IDegenNFT.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/IGearToken.ts +0 -560
- package/src/types/contracts/interfaces/IInterestRateModel.ts +0 -123
- package/src/types/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeed.ts +0 -379
- package/src/types/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedEvents.ts +0 -80
- package/src/types/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedExceptions.ts +0 -55
- package/src/types/contracts/interfaces/ILPPriceFeed.sol/index.ts +0 -6
- package/src/types/contracts/interfaces/IMerkleDistributor.ts +0 -200
- package/src/types/contracts/interfaces/IPhantomERC20.ts +0 -381
- package/src/types/contracts/interfaces/IPoolService.sol/IPoolService.ts +0 -901
- package/src/types/contracts/interfaces/IPoolService.sol/IPoolServiceEvents.ts +0 -277
- package/src/types/contracts/interfaces/IPoolService.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/IPriceFeedAddress.ts +0 -177
- package/src/types/contracts/interfaces/IPriceFeedType.ts +0 -108
- package/src/types/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2.ts +0 -387
- package/src/types/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Events.ts +0 -79
- package/src/types/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Exceptions.ts +0 -55
- package/src/types/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Ext.ts +0 -429
- package/src/types/contracts/interfaces/IPriceOracle.sol/index.ts +0 -7
- package/src/types/contracts/interfaces/IVersion.ts +0 -81
- package/src/types/contracts/interfaces/IWETHGateway.ts +0 -201
- package/src/types/contracts/interfaces/V1/ICreditFilter.ts +0 -1288
- package/src/types/contracts/interfaces/V1/ICreditManager.ts +0 -1194
- package/src/types/contracts/interfaces/V1/IPriceOracle.sol/IPriceOracleV2.ts +0 -220
- package/src/types/contracts/interfaces/V1/IPriceOracle.sol/index.ts +0 -4
- package/src/types/contracts/interfaces/V1/index.ts +0 -7
- package/src/types/contracts/interfaces/adapters/IAdapter.sol/IAdapter.ts +0 -174
- package/src/types/contracts/interfaces/adapters/IAdapter.sol/IAdapterExceptions.ts +0 -55
- package/src/types/contracts/interfaces/adapters/IAdapter.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/adapters/IUniversalAdapter.sol/IUniversalAdapter.ts +0 -258
- package/src/types/contracts/interfaces/adapters/IUniversalAdapter.sol/IUniversalAdapterExceptions.ts +0 -55
- package/src/types/contracts/interfaces/adapters/IUniversalAdapter.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter.ts +0 -1088
- package/src/types/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapterErrors.ts +0 -56
- package/src/types/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/adapters/convex/IConvexV1BoosterAdapter.ts +0 -553
- package/src/types/contracts/interfaces/adapters/convex/index.ts +0 -6
- package/src/types/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter.ts +0 -1397
- package/src/types/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1AdapterExceptions.ts +0 -55
- package/src/types/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/adapters/curve/index.ts +0 -5
- package/src/types/contracts/interfaces/adapters/index.ts +0 -15
- package/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter.ts +0 -486
- package/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1AdapterEvents.ts +0 -69
- package/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1AdapterExceptions.ts +0 -55
- package/src/types/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/index.ts +0 -6
- package/src/types/contracts/interfaces/adapters/lido/index.ts +0 -5
- package/src/types/contracts/interfaces/adapters/uniswap/IUniswapV2Adapter.ts +0 -1595
- package/src/types/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/IUniswapV3Adapter.ts +0 -532
- package/src/types/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/IUniswapV3AdapterExceptions.ts +0 -55
- package/src/types/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/index.ts +0 -5
- package/src/types/contracts/interfaces/adapters/uniswap/index.ts +0 -6
- package/src/types/contracts/interfaces/external/IWETH.ts +0 -159
- package/src/types/contracts/interfaces/external/index.ts +0 -4
- package/src/types/contracts/interfaces/index.ts +0 -43
- package/src/types/contracts/libraries/Errors.ts +0 -894
- package/src/types/contracts/libraries/index.ts +0 -4
- package/src/types/contracts/oracles/LPPriceFeed.ts +0 -451
- package/src/types/contracts/oracles/PriceFeedChecker.ts +0 -55
- package/src/types/contracts/oracles/PriceOracle.ts +0 -535
- package/src/types/contracts/oracles/ZeroPriceFeed.ts +0 -244
- package/src/types/contracts/oracles/curve/AbstractCurveLPPriceFeed.ts +0 -485
- package/src/types/contracts/oracles/curve/CurveLP2PriceFeed.ts +0 -519
- package/src/types/contracts/oracles/curve/CurveLP3PriceFeed.ts +0 -536
- package/src/types/contracts/oracles/curve/CurveLP4PriceFeed.ts +0 -553
- package/src/types/contracts/oracles/curve/index.ts +0 -7
- package/src/types/contracts/oracles/index.ts +0 -11
- package/src/types/contracts/oracles/yearn/YearnPriceFeed.ts +0 -499
- package/src/types/contracts/oracles/yearn/index.ts +0 -4
- package/src/types/contracts/pathfinder/ConvexPathFinder.ts +0 -211
- package/src/types/contracts/pathfinder/CurveLPPathFinder.ts +0 -335
- package/src/types/contracts/pathfinder/CurvePathFinder.ts +0 -514
- package/src/types/contracts/pathfinder/ISwapper.ts +0 -208
- package/src/types/contracts/pathfinder/NormalTokenPathFinder.ts +0 -526
- package/src/types/contracts/pathfinder/SwapPathFinder.ts +0 -424
- package/src/types/contracts/pathfinder/UniswapV2PathFinder.ts +0 -422
- package/src/types/contracts/pathfinder/UniswapV3PathFinder.ts +0 -559
- package/src/types/contracts/pathfinder/YearnPathFinder.ts +0 -200
- package/src/types/contracts/pathfinder/data/Balances.sol/BalanceOps.ts +0 -55
- package/src/types/contracts/pathfinder/data/Balances.sol/index.ts +0 -4
- package/src/types/contracts/pathfinder/data/index.ts +0 -5
- package/src/types/contracts/pathfinder/index.ts +0 -14
- package/src/types/contracts/pool/LinearInterestRateModel.ts +0 -276
- package/src/types/contracts/pool/PoolService.ts +0 -1314
- package/src/types/contracts/pool/index.ts +0 -5
- package/src/types/contracts/support/ContractUpgrader.ts +0 -284
- package/src/types/contracts/support/MerkleDistributor.ts +0 -200
- package/src/types/contracts/support/MultiCall.sol/Multicall2.ts +0 -451
- package/src/types/contracts/support/MultiCall.sol/index.ts +0 -4
- package/src/types/contracts/support/PauseMulticall.ts +0 -286
- package/src/types/contracts/support/index.ts +0 -8
- package/src/types/contracts/test/Playground.t.sol/PlaygroundTest.ts +0 -425
- package/src/types/contracts/test/Playground.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest.ts +0 -1196
- package/src/types/contracts/test/adapters/AbstractAdapter.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/AdapterTestHelper.ts +0 -814
- package/src/types/contracts/test/adapters/ConvexAdapterHelper.ts +0 -1351
- package/src/types/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest.ts +0 -1701
- package/src/types/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest.ts +0 -1583
- package/src/types/contracts/test/adapters/ConvexV1_Booster.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest.ts +0 -1551
- package/src/types/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest.ts +0 -1021
- package/src/types/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest.ts +0 -1325
- package/src/types/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/CurveV1AdapterHelper.ts +0 -814
- package/src/types/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest.ts +0 -1080
- package/src/types/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest.ts +0 -1080
- package/src/types/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest.ts +0 -1110
- package/src/types/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest.ts +0 -1100
- package/src/types/contracts/test/adapters/CurveV1StETHTest.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest.ts +0 -1146
- package/src/types/contracts/test/adapters/LidoV1Adapter.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest.ts +0 -1210
- package/src/types/contracts/test/adapters/UniswapV2Adapter.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest.ts +0 -1124
- package/src/types/contracts/test/adapters/UniswapV3Adapter.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest.ts +0 -1408
- package/src/types/contracts/test/adapters/YearnV2Adapter.t.sol/index.ts +0 -4
- package/src/types/contracts/test/adapters/index.ts +0 -34
- package/src/types/contracts/test/core/ACL.t.sol/ACLTest.ts +0 -659
- package/src/types/contracts/test/core/ACL.t.sol/index.ts +0 -4
- package/src/types/contracts/test/core/AddressProvider.t.sol/AddressProviderTest.ts +0 -783
- package/src/types/contracts/test/core/AddressProvider.t.sol/index.ts +0 -4
- package/src/types/contracts/test/core/index.ts +0 -7
- package/src/types/contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest.ts +0 -1958
- package/src/types/contracts/test/credit/CreditConfigurator.t.sol/index.ts +0 -4
- package/src/types/contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest.ts +0 -2860
- package/src/types/contracts/test/credit/CreditFacade.t.sol/index.ts +0 -4
- package/src/types/contracts/test/credit/CreditManager.t.sol/CreditManagerTest.ts +0 -2480
- package/src/types/contracts/test/credit/CreditManager.t.sol/index.ts +0 -4
- package/src/types/contracts/test/credit/index.ts +0 -9
- package/src/types/contracts/test/index.ts +0 -31
- package/src/types/contracts/test/lib/cheatCodes.sol/CheatCodes.ts +0 -926
- package/src/types/contracts/test/lib/cheatCodes.sol/index.ts +0 -4
- package/src/types/contracts/test/lib/constants.sol/Roles.ts +0 -375
- package/src/types/contracts/test/lib/constants.sol/index.ts +0 -4
- package/src/types/contracts/test/lib/index.ts +0 -9
- package/src/types/contracts/test/lib/test.sol/DSTest.ts +0 -375
- package/src/types/contracts/test/lib/test.sol/index.ts +0 -4
- package/src/types/contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite.ts +0 -346
- package/src/types/contracts/test/mainnet/MainnetTokens.sol/index.ts +0 -4
- package/src/types/contracts/test/mainnet/TotalValueCalculator.ts +0 -104
- package/src/types/contracts/test/mainnet/index.ts +0 -6
- package/src/types/contracts/test/mocks/adapters/AdapterMock.ts +0 -458
- package/src/types/contracts/test/mocks/adapters/TargetContractMock.ts +0 -81
- package/src/types/contracts/test/mocks/adapters/index.ts +0 -5
- package/src/types/contracts/test/mocks/core/ACLTraitTest.ts +0 -238
- package/src/types/contracts/test/mocks/core/AddressProviderACLMock.ts +0 -186
- package/src/types/contracts/test/mocks/core/index.ts +0 -5
- package/src/types/contracts/test/mocks/credit/CreditManagerInternal.ts +0 -2197
- package/src/types/contracts/test/mocks/credit/index.ts +0 -4
- package/src/types/contracts/test/mocks/dao/TreasuryMock.ts +0 -69
- package/src/types/contracts/test/mocks/dao/index.ts +0 -4
- package/src/types/contracts/test/mocks/index.ts +0 -21
- package/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock.ts +0 -1069
- package/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents.ts +0 -140
- package/src/types/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/index.ts +0 -5
- package/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock.ts +0 -1002
- package/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents.ts +0 -122
- package/src/types/contracts/test/mocks/integrations/ConvexBoosterMock.sol/index.ts +0 -5
- package/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock.ts +0 -209
- package/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/IBasicRewards.ts +0 -225
- package/src/types/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts +0 -5
- package/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock.ts +0 -731
- package/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents.ts +0 -141
- package/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper.ts +0 -203
- package/src/types/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/index.ts +0 -6
- package/src/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock.ts +0 -425
- package/src/types/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/index.ts +0 -4
- package/src/types/contracts/test/mocks/integrations/CurveV1MetapoolMock.ts +0 -1101
- package/src/types/contracts/test/mocks/integrations/CurveV1Mock.ts +0 -1124
- package/src/types/contracts/test/mocks/integrations/CurveV1Mock_2Assets.ts +0 -1409
- package/src/types/contracts/test/mocks/integrations/CurveV1Mock_3Assets.ts +0 -1415
- package/src/types/contracts/test/mocks/integrations/CurveV1Mock_4Assets.ts +0 -1424
- package/src/types/contracts/test/mocks/integrations/CurveV1StETHMock.ts +0 -880
- package/src/types/contracts/test/mocks/integrations/LidoMock.sol/ILidoMockEvents.ts +0 -82
- package/src/types/contracts/test/mocks/integrations/LidoMock.sol/LidoMock.ts +0 -747
- package/src/types/contracts/test/mocks/integrations/LidoMock.sol/index.ts +0 -5
- package/src/types/contracts/test/mocks/integrations/UniswapV2Mock.ts +0 -1553
- package/src/types/contracts/test/mocks/integrations/UniswapV3Mock.ts +0 -953
- package/src/types/contracts/test/mocks/integrations/YearnV2Mock.ts +0 -898
- package/src/types/contracts/test/mocks/integrations/index.ts +0 -24
- package/src/types/contracts/test/mocks/libraries/PercentageMathTest.ts +0 -143
- package/src/types/contracts/test/mocks/libraries/WadRayMathTest.ts +0 -315
- package/src/types/contracts/test/mocks/libraries/index.ts +0 -5
- package/src/types/contracts/test/mocks/oracles/LPPriceFeedMock.ts +0 -486
- package/src/types/contracts/test/mocks/oracles/PriceFeedMock.ts +0 -368
- package/src/types/contracts/test/mocks/oracles/index.ts +0 -5
- package/src/types/contracts/test/mocks/pool/CreditManagerMockForPoolTest.ts +0 -285
- package/src/types/contracts/test/mocks/pool/PoolServiceMock.ts +0 -1401
- package/src/types/contracts/test/mocks/pool/TestPoolService.ts +0 -1439
- package/src/types/contracts/test/mocks/pool/index.ts +0 -6
- package/src/types/contracts/test/mocks/token/CERC20Mock.ts +0 -635
- package/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse.ts +0 -544
- package/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert.ts +0 -544
- package/src/types/contracts/test/mocks/token/ERC20ApproveRestricted.sol/index.ts +0 -5
- package/src/types/contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock.ts +0 -620
- package/src/types/contracts/test/mocks/token/ERC20Blocking.sol/index.ts +0 -4
- package/src/types/contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock.ts +0 -595
- package/src/types/contracts/test/mocks/token/ERC20Fee.sol/index.ts +0 -4
- package/src/types/contracts/test/mocks/token/ERC20Mock.ts +0 -695
- package/src/types/contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20.ts +0 -105
- package/src/types/contracts/test/mocks/token/ERC20NonCompliant.sol/index.ts +0 -4
- package/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock.ts +0 -118
- package/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/IERC721Receiver.ts +0 -120
- package/src/types/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts +0 -5
- package/src/types/contracts/test/mocks/token/StETHMock.ts +0 -618
- package/src/types/contracts/test/mocks/token/WETHMock.ts +0 -488
- package/src/types/contracts/test/mocks/token/index.ts +0 -17
- package/src/types/contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest.ts +0 -749
- package/src/types/contracts/test/oracles/CurveLPPriceFeed.t.sol/index.ts +0 -4
- package/src/types/contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest.ts +0 -617
- package/src/types/contracts/test/oracles/LPPriceFeed.t.sol/index.ts +0 -4
- package/src/types/contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest.ts +0 -758
- package/src/types/contracts/test/oracles/PriceOracle.t.sol/index.ts +0 -4
- package/src/types/contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest.ts +0 -595
- package/src/types/contracts/test/oracles/YearnPriceFeed.t.sol/index.ts +0 -4
- package/src/types/contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest.ts +0 -503
- package/src/types/contracts/test/oracles/ZeroPriceFeed.t.sol/index.ts +0 -4
- package/src/types/contracts/test/oracles/index.ts +0 -13
- package/src/types/contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest.ts +0 -897
- package/src/types/contracts/test/pathfinder/CurveLPPathFinder.t.sol/index.ts +0 -4
- package/src/types/contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest.ts +0 -1058
- package/src/types/contracts/test/pathfinder/CurvePathFinder.t.sol/index.ts +0 -4
- package/src/types/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest.ts +0 -1243
- package/src/types/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/index.ts +0 -4
- package/src/types/contracts/test/pathfinder/PathFinderTestHelper.ts +0 -815
- package/src/types/contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest.ts +0 -1328
- package/src/types/contracts/test/pathfinder/SwapPathFinder.t.sol/index.ts +0 -4
- package/src/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest.ts +0 -1108
- package/src/types/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/index.ts +0 -4
- package/src/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest.ts +0 -1142
- package/src/types/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/index.ts +0 -4
- package/src/types/contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest.ts +0 -927
- package/src/types/contracts/test/pathfinder/YearnPathFinder.t.sol/index.ts +0 -4
- package/src/types/contracts/test/pathfinder/index.ts +0 -18
- package/src/types/contracts/test/pool/PoolService.t.sol/PoolServiceTest.ts +0 -1671
- package/src/types/contracts/test/pool/PoolService.t.sol/index.ts +0 -4
- package/src/types/contracts/test/pool/index.ts +0 -5
- package/src/types/contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable.ts +0 -81
- package/src/types/contracts/test/sigp/AttackingContractNonPayable.sol/index.ts +0 -4
- package/src/types/contracts/test/sigp/DummyMulticallTarget.ts +0 -175
- package/src/types/contracts/test/sigp/FlashLoanAttacker2.ts +0 -240
- package/src/types/contracts/test/sigp/Interfaces.sol/ICrvDeposit.ts +0 -128
- package/src/types/contracts/test/sigp/Interfaces.sol/ICurveGauge.ts +0 -242
- package/src/types/contracts/test/sigp/Interfaces.sol/ICurveVoteEscrow.ts +0 -227
- package/src/types/contracts/test/sigp/Interfaces.sol/IDeposit.ts +0 -371
- package/src/types/contracts/test/sigp/Interfaces.sol/IFeeDistro.ts +0 -104
- package/src/types/contracts/test/sigp/Interfaces.sol/IMinter.ts +0 -95
- package/src/types/contracts/test/sigp/Interfaces.sol/IPools.ts +0 -290
- package/src/types/contracts/test/sigp/Interfaces.sol/IRegistry.ts +0 -189
- package/src/types/contracts/test/sigp/Interfaces.sol/IRewardFactory.ts +0 -310
- package/src/types/contracts/test/sigp/Interfaces.sol/IRewards.ts +0 -395
- package/src/types/contracts/test/sigp/Interfaces.sol/IStaker.ts +0 -652
- package/src/types/contracts/test/sigp/Interfaces.sol/IStash.ts +0 -209
- package/src/types/contracts/test/sigp/Interfaces.sol/IStashFactory.ts +0 -120
- package/src/types/contracts/test/sigp/Interfaces.sol/ITokenFactory.ts +0 -104
- package/src/types/contracts/test/sigp/Interfaces.sol/ITokenMinter.ts +0 -143
- package/src/types/contracts/test/sigp/Interfaces.sol/IVestedEscrow.ts +0 -107
- package/src/types/contracts/test/sigp/Interfaces.sol/IVoting.ts +0 -220
- package/src/types/contracts/test/sigp/Interfaces.sol/IWalletChecker.ts +0 -84
- package/src/types/contracts/test/sigp/Interfaces.sol/index.ts +0 -21
- package/src/types/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock.ts +0 -1069
- package/src/types/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/index.ts +0 -4
- package/src/types/contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock.ts +0 -1002
- package/src/types/contracts/test/sigp/NewConvexBoosterMock.sol/index.ts +0 -4
- package/src/types/contracts/test/sigp/NewCreditConfigurator.ts +0 -1262
- package/src/types/contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper.ts +0 -326
- package/src/types/contracts/test/sigp/UniswapHelper.sol/index.ts +0 -4
- package/src/types/contracts/test/sigp/index.ts +0 -20
- package/src/types/contracts/test/sigp/interfaces/ILockedCvx.ts +0 -832
- package/src/types/contracts/test/sigp/interfaces/index.ts +0 -4
- package/src/types/contracts/test/sigp/stETHMock.sol/StETHMockERC20.ts +0 -725
- package/src/types/contracts/test/sigp/stETHMock.sol/index.ts +0 -4
- package/src/types/contracts/test/suites/BalanceHelper.ts +0 -375
- package/src/types/contracts/test/suites/BaseCreditTestSuite.ts +0 -649
- package/src/types/contracts/test/suites/CreditFacadeHelper.ts +0 -472
- package/src/types/contracts/test/suites/CreditFacadeTestSuite.ts +0 -821
- package/src/types/contracts/test/suites/CreditManagerTestSuite.ts +0 -748
- package/src/types/contracts/test/suites/PoolServiceTestSuite.ts +0 -209
- package/src/types/contracts/test/suites/TokensTestSuite.ts +0 -980
- package/src/types/contracts/test/suites/index.ts +0 -10
- package/src/types/contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest.ts +0 -551
- package/src/types/contracts/test/support/PauseMulticall.t.sol/index.ts +0 -4
- package/src/types/contracts/test/support/index.ts +0 -5
- package/src/types/contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest.ts +0 -970
- package/src/types/contracts/test/tokens/DegenNFT.t.sol/index.ts +0 -4
- package/src/types/contracts/test/tokens/index.ts +0 -5
- package/src/types/contracts/tokens/DegenNFT.ts +0 -967
- package/src/types/contracts/tokens/DieselToken.ts +0 -618
- package/src/types/contracts/tokens/GearToken.ts +0 -994
- package/src/types/contracts/tokens/PhantomERC20.ts +0 -379
- package/src/types/contracts/tokens/index.ts +0 -7
- package/src/types/factories/@chainlink/contracts/index.ts +0 -4
- package/src/types/factories/@chainlink/contracts/src/index.ts +0 -4
- package/src/types/factories/@chainlink/contracts/src/v0.8/index.ts +0 -4
- package/src/types/factories/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface__factory.ts +0 -141
- package/src/types/factories/@chainlink/contracts/src/v0.8/interfaces/index.ts +0 -4
- package/src/types/factories/@chainlink/index.ts +0 -4
- package/src/types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +0 -78
- package/src/types/factories/@openzeppelin/contracts/access/index.ts +0 -4
- package/src/types/factories/@openzeppelin/contracts/index.ts +0 -7
- package/src/types/factories/@openzeppelin/contracts/security/Pausable__factory.ts +0 -65
- package/src/types/factories/@openzeppelin/contracts/security/index.ts +0 -4
- package/src/types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +0 -349
- package/src/types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +0 -206
- package/src/types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +0 -248
- package/src/types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +0 -4
- package/src/types/factories/@openzeppelin/contracts/token/ERC20/index.ts +0 -6
- package/src/types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +0 -409
- package/src/types/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts +0 -60
- package/src/types/factories/@openzeppelin/contracts/token/ERC721/IERC721__factory.ts +0 -311
- package/src/types/factories/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata__factory.ts +0 -356
- package/src/types/factories/@openzeppelin/contracts/token/ERC721/extensions/index.ts +0 -4
- package/src/types/factories/@openzeppelin/contracts/token/ERC721/index.ts +0 -7
- package/src/types/factories/@openzeppelin/contracts/token/index.ts +0 -5
- package/src/types/factories/@openzeppelin/contracts/utils/index.ts +0 -4
- package/src/types/factories/@openzeppelin/contracts/utils/introspection/ERC165__factory.ts +0 -42
- package/src/types/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts +0 -45
- package/src/types/factories/@openzeppelin/contracts/utils/introspection/index.ts +0 -5
- package/src/types/factories/@openzeppelin/index.ts +0 -4
- package/src/types/factories/contracts/adapters/AbstractAdapter__factory.ts +0 -107
- package/src/types/factories/contracts/adapters/UniversalAdapter__factory.ts +0 -230
- package/src/types/factories/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/ConvexV1BaseRewardPoolAdapter__factory.ts +0 -806
- package/src/types/factories/contracts/adapters/convex/ConvexV1_BaseRewardPool.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/convex/ConvexV1_Booster.sol/ConvexV1BoosterAdapter__factory.ts +0 -533
- package/src/types/factories/contracts/adapters/convex/ConvexV1_Booster.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/convex/ConvexV1_ClaimZap.sol/ConvexV1ClaimZapAdapter__factory.ts +0 -254
- package/src/types/factories/contracts/adapters/convex/ConvexV1_ClaimZap.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/ConvexStakedPositionToken__factory.ts +0 -338
- package/src/types/factories/contracts/adapters/convex/ConvexV1_StakedPositionToken.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/convex/index.ts +0 -7
- package/src/types/factories/contracts/adapters/curve/CurveV1_2.sol/CurveV1Adapter2Assets__factory.ts +0 -1137
- package/src/types/factories/contracts/adapters/curve/CurveV1_2.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/curve/CurveV1_3.sol/CurveV1Adapter3Assets__factory.ts +0 -1137
- package/src/types/factories/contracts/adapters/curve/CurveV1_3.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/curve/CurveV1_4.sol/CurveV1Adapter4Assets__factory.ts +0 -1137
- package/src/types/factories/contracts/adapters/curve/CurveV1_4.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/curve/CurveV1_Base.sol/CurveV1AdapterBase__factory.ts +0 -1003
- package/src/types/factories/contracts/adapters/curve/CurveV1_Base.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/curve/CurveV1_DepositZap.sol/CurveV1AdapterDeposit__factory.ts +0 -998
- package/src/types/factories/contracts/adapters/curve/CurveV1_DepositZap.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/curve/CurveV1_stETH.sol/CurveV1AdapterStETH__factory.ts +0 -1124
- package/src/types/factories/contracts/adapters/curve/CurveV1_stETH.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/curve/CurveV1_stETHGateway.sol/CurveV1StETHPoolGateway__factory.ts +0 -855
- package/src/types/factories/contracts/adapters/curve/CurveV1_stETHGateway.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/curve/index.ts +0 -10
- package/src/types/factories/contracts/adapters/index.ts +0 -10
- package/src/types/factories/contracts/adapters/lido/LidoV1.sol/LidoV1Adapter__factory.ts +0 -558
- package/src/types/factories/contracts/adapters/lido/LidoV1.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/lido/LidoV1_WETHGateway.sol/LidoV1Gateway__factory.ts +0 -336
- package/src/types/factories/contracts/adapters/lido/LidoV1_WETHGateway.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/lido/index.ts +0 -5
- package/src/types/factories/contracts/adapters/uniswap/UniswapV2.sol/UniswapV2Adapter__factory.ts +0 -1152
- package/src/types/factories/contracts/adapters/uniswap/UniswapV2.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/uniswap/UniswapV3.sol/UniswapV3Adapter__factory.ts +0 -473
- package/src/types/factories/contracts/adapters/uniswap/UniswapV3.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/uniswap/index.ts +0 -5
- package/src/types/factories/contracts/adapters/yearn/YearnV2.sol/YearnV2Adapter__factory.ts +0 -556
- package/src/types/factories/contracts/adapters/yearn/YearnV2.sol/index.ts +0 -4
- package/src/types/factories/contracts/adapters/yearn/index.ts +0 -4
- package/src/types/factories/contracts/core/ACLTrait__factory.ts +0 -107
- package/src/types/factories/contracts/core/ACL__factory.ts +0 -320
- package/src/types/factories/contracts/core/AccountFactory__factory.ts +0 -479
- package/src/types/factories/contracts/core/AddressProvider__factory.ts +0 -404
- package/src/types/factories/contracts/core/ContractsRegister__factory.ts +0 -357
- package/src/types/factories/contracts/core/DataCompressor__factory.ts +0 -910
- package/src/types/factories/contracts/core/WETHGateway__factory.ts +0 -191
- package/src/types/factories/contracts/core/index.ts +0 -10
- package/src/types/factories/contracts/credit/CreditAccount__factory.ts +0 -263
- package/src/types/factories/contracts/credit/CreditConfigurator__factory.ts +0 -931
- package/src/types/factories/contracts/credit/CreditFacade__factory.ts +0 -1254
- package/src/types/factories/contracts/credit/CreditManager__factory.ts +0 -1180
- package/src/types/factories/contracts/credit/index.ts +0 -7
- package/src/types/factories/contracts/factories/CreditManagerFactory__factory.ts +0 -392
- package/src/types/factories/contracts/factories/GenesisFactory__factory.ts +0 -202
- package/src/types/factories/contracts/factories/PoolFactory__factory.ts +0 -248
- package/src/types/factories/contracts/factories/index.ts +0 -6
- package/src/types/factories/contracts/index.ts +0 -16
- package/src/types/factories/contracts/integrations/convex/IBaseRewardPool__factory.ts +0 -541
- package/src/types/factories/contracts/integrations/convex/IBooster__factory.ts +0 -277
- package/src/types/factories/contracts/integrations/convex/IClaimZap__factory.ts +0 -105
- package/src/types/factories/contracts/integrations/convex/IConvexToken__factory.ts +0 -274
- package/src/types/factories/contracts/integrations/convex/IRewards.sol/IBasicRewards__factory.ts +0 -93
- package/src/types/factories/contracts/integrations/convex/IRewards.sol/IRewards__factory.ts +0 -190
- package/src/types/factories/contracts/integrations/convex/IRewards.sol/index.ts +0 -5
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/ICrvDeposit__factory.ts +0 -57
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/ICurveGauge__factory.ts +0 -123
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/ICurveVoteEscrow__factory.ts +0 -90
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IDeposit__factory.ts +0 -230
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IFeeDistro__factory.ts +0 -46
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IMinter__factory.ts +0 -39
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IPools__factory.ts +0 -189
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IRegistry__factory.ts +0 -114
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IRewardFactory__factory.ts +0 -164
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IRewards__factory.ts +0 -190
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IStaker__factory.ts +0 -324
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IStashFactory__factory.ts +0 -60
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IStash__factory.ts +0 -95
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/ITokenFactory__factory.ts +0 -45
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/ITokenMinter__factory.ts +0 -62
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IVestedEscrow__factory.ts +0 -50
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IVoting__factory.ts +0 -131
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/IWalletChecker__factory.ts +0 -45
- package/src/types/factories/contracts/integrations/convex/Interfaces.sol/index.ts +0 -21
- package/src/types/factories/contracts/integrations/convex/index.ts +0 -9
- package/src/types/factories/contracts/integrations/curve/ICRVToken__factory.ts +0 -270
- package/src/types/factories/contracts/integrations/curve/ICurvePoolStETH__factory.ts +0 -478
- package/src/types/factories/contracts/integrations/curve/ICurvePool_2.sol/ICurvePool2Assets__factory.ts +0 -717
- package/src/types/factories/contracts/integrations/curve/ICurvePool_2.sol/index.ts +0 -4
- package/src/types/factories/contracts/integrations/curve/ICurvePool_3.sol/ICurvePool3Assets__factory.ts +0 -717
- package/src/types/factories/contracts/integrations/curve/ICurvePool_3.sol/index.ts +0 -4
- package/src/types/factories/contracts/integrations/curve/ICurvePool_4.sol/ICurvePool4Assets__factory.ts +0 -717
- package/src/types/factories/contracts/integrations/curve/ICurvePool_4.sol/index.ts +0 -4
- package/src/types/factories/contracts/integrations/curve/ICurvePool__factory.ts +0 -571
- package/src/types/factories/contracts/integrations/curve/ICurveRegistry__factory.ts +0 -83
- package/src/types/factories/contracts/integrations/curve/index.ts +0 -10
- package/src/types/factories/contracts/integrations/index.ts +0 -8
- package/src/types/factories/contracts/integrations/lido/ILidoOracle__factory.ts +0 -49
- package/src/types/factories/contracts/integrations/lido/IstETH.sol/IstETHGetters__factory.ts +0 -344
- package/src/types/factories/contracts/integrations/lido/IstETH.sol/IstETH__factory.ts +0 -360
- package/src/types/factories/contracts/integrations/lido/IstETH.sol/index.ts +0 -5
- package/src/types/factories/contracts/integrations/lido/index.ts +0 -5
- package/src/types/factories/contracts/integrations/uniswap/IQuoter__factory.ts +0 -152
- package/src/types/factories/contracts/integrations/uniswap/IUniswapV2Router01__factory.ts +0 -775
- package/src/types/factories/contracts/integrations/uniswap/IUniswapV2Router02__factory.ts +0 -977
- package/src/types/factories/contracts/integrations/uniswap/IUniswapV3.sol/ISwapRouter__factory.ts +0 -240
- package/src/types/factories/contracts/integrations/uniswap/IUniswapV3.sol/index.ts +0 -4
- package/src/types/factories/contracts/integrations/uniswap/IUniswapV3SwapCallback__factory.ts +0 -53
- package/src/types/factories/contracts/integrations/uniswap/index.ts +0 -8
- package/src/types/factories/contracts/integrations/yearn/IYVault__factory.ts +0 -415
- package/src/types/factories/contracts/integrations/yearn/index.ts +0 -4
- package/src/types/factories/contracts/interfaces/IACL.sol/IACLEvents__factory.ts +0 -78
- package/src/types/factories/contracts/interfaces/IACL.sol/IACL__factory.ts +0 -145
- package/src/types/factories/contracts/interfaces/IACL.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/IAccountFactory.sol/IAccountFactoryEvents__factory.ts +0 -107
- package/src/types/factories/contracts/interfaces/IAccountFactory.sol/IAccountFactoryGetters__factory.ts +0 -120
- package/src/types/factories/contracts/interfaces/IAccountFactory.sol/IAccountFactory__factory.ts +0 -243
- package/src/types/factories/contracts/interfaces/IAccountFactory.sol/index.ts +0 -6
- package/src/types/factories/contracts/interfaces/IAddressProvider.sol/IAddressProviderEvents__factory.ts +0 -49
- package/src/types/factories/contracts/interfaces/IAddressProvider.sol/IAddressProvider__factory.ts +0 -175
- package/src/types/factories/contracts/interfaces/IAddressProvider.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/IContractsRegister.sol/IContractsRegisterEvents__factory.ts +0 -56
- package/src/types/factories/contracts/interfaces/IContractsRegister.sol/IContractsRegister__factory.ts +0 -193
- package/src/types/factories/contracts/interfaces/IContractsRegister.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/ICreditAccount.sol/ICrediAccountExceptions__factory.ts +0 -40
- package/src/types/factories/contracts/interfaces/ICreditAccount.sol/ICreditAccount__factory.ts +0 -227
- package/src/types/factories/contracts/interfaces/ICreditAccount.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorEvents__factory.ts +0 -293
- package/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfiguratorExceptions__factory.ts +0 -90
- package/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/ICreditConfigurator__factory.ts +0 -495
- package/src/types/factories/contracts/interfaces/ICreditConfigurator.sol/index.ts +0 -6
- package/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeEvents__factory.ts +0 -302
- package/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExceptions__factory.ts +0 -176
- package/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacadeExtended__factory.ts +0 -61
- package/src/types/factories/contracts/interfaces/ICreditFacade.sol/ICreditFacade__factory.ts +0 -972
- package/src/types/factories/contracts/interfaces/ICreditFacade.sol/index.ts +0 -7
- package/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Events__factory.ts +0 -62
- package/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2Exceptions__factory.ts +0 -95
- package/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/ICreditManagerV2__factory.ts +0 -928
- package/src/types/factories/contracts/interfaces/ICreditManagerV2.sol/index.ts +0 -6
- package/src/types/factories/contracts/interfaces/IDataCompressor.sol/IDataCompressorExceptions__factory.ts +0 -40
- package/src/types/factories/contracts/interfaces/IDataCompressor.sol/IDataCompressor__factory.ts +0 -790
- package/src/types/factories/contracts/interfaces/IDataCompressor.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/IDegenNFT.sol/IDegenNFTExceptions__factory.ts +0 -46
- package/src/types/factories/contracts/interfaces/IDegenNFT.sol/IDegenNFT__factory.ts +0 -134
- package/src/types/factories/contracts/interfaces/IDegenNFT.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/IGearToken__factory.ts +0 -346
- package/src/types/factories/contracts/interfaces/IInterestRateModel__factory.ts +0 -63
- package/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedEvents__factory.ts +0 -45
- package/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeedExceptions__factory.ts +0 -40
- package/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/ILPPriceFeed__factory.ts +0 -244
- package/src/types/factories/contracts/interfaces/ILPPriceFeed.sol/index.ts +0 -6
- package/src/types/factories/contracts/interfaces/IMerkleDistributor__factory.ts +0 -124
- package/src/types/factories/contracts/interfaces/IPhantomERC20__factory.ts +0 -261
- package/src/types/factories/contracts/interfaces/IPoolService.sol/IPoolServiceEvents__factory.ts +0 -222
- package/src/types/factories/contracts/interfaces/IPoolService.sol/IPoolService__factory.ts +0 -581
- package/src/types/factories/contracts/interfaces/IPoolService.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/IPriceFeedAddress__factory.ts +0 -104
- package/src/types/factories/contracts/interfaces/IPriceFeedType__factory.ts +0 -52
- package/src/types/factories/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Events__factory.ts +0 -49
- package/src/types/factories/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Exceptions__factory.ts +0 -45
- package/src/types/factories/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2Ext__factory.ts +0 -274
- package/src/types/factories/contracts/interfaces/IPriceOracle.sol/IPriceOracleV2__factory.ts +0 -256
- package/src/types/factories/contracts/interfaces/IPriceOracle.sol/index.ts +0 -7
- package/src/types/factories/contracts/interfaces/IVersion__factory.ts +0 -39
- package/src/types/factories/contracts/interfaces/IWETHGateway__factory.ts +0 -90
- package/src/types/factories/contracts/interfaces/V1/ICreditFilter__factory.ts +0 -704
- package/src/types/factories/contracts/interfaces/V1/ICreditManager__factory.ts +0 -773
- package/src/types/factories/contracts/interfaces/V1/IPriceOracle.sol/IPriceOracleV2__factory.ts +0 -116
- package/src/types/factories/contracts/interfaces/V1/IPriceOracle.sol/index.ts +0 -4
- package/src/types/factories/contracts/interfaces/V1/index.ts +0 -6
- package/src/types/factories/contracts/interfaces/adapters/IAdapter.sol/IAdapterExceptions__factory.ts +0 -37
- package/src/types/factories/contracts/interfaces/adapters/IAdapter.sol/IAdapter__factory.ts +0 -102
- package/src/types/factories/contracts/interfaces/adapters/IAdapter.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/adapters/IUniversalAdapter.sol/IUniversalAdapterExceptions__factory.ts +0 -46
- package/src/types/factories/contracts/interfaces/adapters/IUniversalAdapter.sol/IUniversalAdapter__factory.ts +0 -173
- package/src/types/factories/contracts/interfaces/adapters/IUniversalAdapter.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapterErrors__factory.ts +0 -43
- package/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/IConvexV1BaseRewardPoolAdapter__factory.ts +0 -723
- package/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BaseRewardPoolAdapter.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/adapters/convex/IConvexV1BoosterAdapter__factory.ts +0 -377
- package/src/types/factories/contracts/interfaces/adapters/convex/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1AdapterExceptions__factory.ts +0 -35
- package/src/types/factories/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/ICurveV1Adapter__factory.ts +0 -900
- package/src/types/factories/contracts/interfaces/adapters/curve/ICurveV1Adapter.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/adapters/curve/index.ts +0 -4
- package/src/types/factories/contracts/interfaces/adapters/index.ts +0 -9
- package/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1AdapterEvents__factory.ts +0 -43
- package/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1AdapterExceptions__factory.ts +0 -35
- package/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/ILidoV1Adapter__factory.ts +0 -324
- package/src/types/factories/contracts/interfaces/adapters/lido/ILidoV1Adapter.sol/index.ts +0 -6
- package/src/types/factories/contracts/interfaces/adapters/lido/index.ts +0 -4
- package/src/types/factories/contracts/interfaces/adapters/uniswap/IUniswapV2Adapter__factory.ts +0 -1082
- package/src/types/factories/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/IUniswapV3AdapterExceptions__factory.ts +0 -35
- package/src/types/factories/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/IUniswapV3Adapter__factory.ts +0 -408
- package/src/types/factories/contracts/interfaces/adapters/uniswap/IUniswapV3Adapter.sol/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/adapters/uniswap/index.ts +0 -5
- package/src/types/factories/contracts/interfaces/external/IWETH__factory.ts +0 -67
- package/src/types/factories/contracts/interfaces/external/index.ts +0 -4
- package/src/types/factories/contracts/interfaces/index.ts +0 -27
- package/src/types/factories/contracts/libraries/Errors__factory.ts +0 -488
- package/src/types/factories/contracts/libraries/index.ts +0 -4
- package/src/types/factories/contracts/oracles/LPPriceFeed__factory.ts +0 -350
- package/src/types/factories/contracts/oracles/PriceFeedChecker__factory.ts +0 -77
- package/src/types/factories/contracts/oracles/PriceOracle__factory.ts +0 -458
- package/src/types/factories/contracts/oracles/ZeroPriceFeed__factory.ts +0 -204
- package/src/types/factories/contracts/oracles/curve/AbstractCurveLPPriceFeed__factory.ts +0 -380
- package/src/types/factories/contracts/oracles/curve/CurveLP2PriceFeed__factory.ts +0 -493
- package/src/types/factories/contracts/oracles/curve/CurveLP3PriceFeed__factory.ts +0 -515
- package/src/types/factories/contracts/oracles/curve/CurveLP4PriceFeed__factory.ts +0 -537
- package/src/types/factories/contracts/oracles/curve/index.ts +0 -7
- package/src/types/factories/contracts/oracles/index.ts +0 -9
- package/src/types/factories/contracts/oracles/yearn/YearnPriceFeed__factory.ts +0 -462
- package/src/types/factories/contracts/oracles/yearn/index.ts +0 -4
- package/src/types/factories/contracts/pathfinder/ConvexPathFinder__factory.ts +0 -224
- package/src/types/factories/contracts/pathfinder/CurveLPPathFinder__factory.ts +0 -323
- package/src/types/factories/contracts/pathfinder/CurvePathFinder__factory.ts +0 -443
- package/src/types/factories/contracts/pathfinder/ISwapper__factory.ts +0 -226
- package/src/types/factories/contracts/pathfinder/NormalTokenPathFinder__factory.ts +0 -623
- package/src/types/factories/contracts/pathfinder/SwapPathFinder__factory.ts +0 -443
- package/src/types/factories/contracts/pathfinder/UniswapV2PathFinder__factory.ts +0 -395
- package/src/types/factories/contracts/pathfinder/UniswapV3PathFinder__factory.ts +0 -516
- package/src/types/factories/contracts/pathfinder/YearnPathFinder__factory.ts +0 -181
- package/src/types/factories/contracts/pathfinder/data/Balances.sol/BalanceOps__factory.ts +0 -73
- package/src/types/factories/contracts/pathfinder/data/Balances.sol/index.ts +0 -4
- package/src/types/factories/contracts/pathfinder/data/index.ts +0 -4
- package/src/types/factories/contracts/pathfinder/index.ts +0 -13
- package/src/types/factories/contracts/pool/LinearInterestRateModel__factory.ts +0 -249
- package/src/types/factories/contracts/pool/PoolService__factory.ts +0 -917
- package/src/types/factories/contracts/pool/index.ts +0 -5
- package/src/types/factories/contracts/support/ContractUpgrader__factory.ts +0 -130
- package/src/types/factories/contracts/support/MerkleDistributor__factory.ts +0 -191
- package/src/types/factories/contracts/support/MultiCall.sol/Multicall2__factory.ts +0 -373
- package/src/types/factories/contracts/support/MultiCall.sol/index.ts +0 -4
- package/src/types/factories/contracts/support/PauseMulticall__factory.ts +0 -206
- package/src/types/factories/contracts/support/index.ts +0 -7
- package/src/types/factories/contracts/test/Playground.t.sol/PlaygroundTest__factory.ts +0 -370
- package/src/types/factories/contracts/test/Playground.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/AbstractAdapter.t.sol/AbstractAdapterTest__factory.ts +0 -966
- package/src/types/factories/contracts/test/adapters/AbstractAdapter.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/AdapterTestHelper__factory.ts +0 -740
- package/src/types/factories/contracts/test/adapters/ConvexAdapterHelper__factory.ts +0 -1190
- package/src/types/factories/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/ConvexV1AdapterBasePoolTest__factory.ts +0 -1280
- package/src/types/factories/contracts/test/adapters/ConvexV1_BaseRewardPool.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/ConvexV1_Booster.t.sol/ConvexV1AdapterBoosterTest__factory.ts +0 -1250
- package/src/types/factories/contracts/test/adapters/ConvexV1_Booster.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/ConvexV1ClaimZapAdapterTest__factory.ts +0 -1245
- package/src/types/factories/contracts/test/adapters/ConvexV1_ClaimZap.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/CurveV1AdapterBaseMetaPoolTest__factory.ts +0 -819
- package/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseMetapoolTest.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/CurveV1AdapterBaseTest__factory.ts +0 -899
- package/src/types/factories/contracts/test/adapters/CurveV1AdapterBaseTest.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/CurveV1AdapterHelper__factory.ts +0 -749
- package/src/types/factories/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/CurveV1Adapter2AssetsTest__factory.ts +0 -831
- package/src/types/factories/contracts/test/adapters/CurveV1Adapter_2AssetsTest.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/CurveV1Adapter3AssetsTest__factory.ts +0 -831
- package/src/types/factories/contracts/test/adapters/CurveV1Adapter_3AssetsTest.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/CurveV1Adapter4AssetsTest__factory.ts +0 -838
- package/src/types/factories/contracts/test/adapters/CurveV1Adapter_4AssetsTest.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/CurveV1StETHTest.t.sol/CurveV1StEthAdapterTest__factory.ts +0 -850
- package/src/types/factories/contracts/test/adapters/CurveV1StETHTest.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/LidoV1Adapter.t.sol/LidoV1AdapterTest__factory.ts +0 -884
- package/src/types/factories/contracts/test/adapters/LidoV1Adapter.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/UniswapV2Adapter.t.sol/UniswapV2AdapterTest__factory.ts +0 -913
- package/src/types/factories/contracts/test/adapters/UniswapV2Adapter.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/UniswapV3Adapter.t.sol/UniswapV3AdapterTest__factory.ts +0 -846
- package/src/types/factories/contracts/test/adapters/UniswapV3Adapter.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/YearnV2Adapter.t.sol/YearnV2AdapterTest__factory.ts +0 -918
- package/src/types/factories/contracts/test/adapters/YearnV2Adapter.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/adapters/index.ts +0 -20
- package/src/types/factories/contracts/test/core/ACL.t.sol/ACLTest__factory.ts +0 -457
- package/src/types/factories/contracts/test/core/ACL.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/core/AddressProvider.t.sol/AddressProviderTest__factory.ts +0 -466
- package/src/types/factories/contracts/test/core/AddressProvider.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/core/index.ts +0 -5
- package/src/types/factories/contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest__factory.ts +0 -1048
- package/src/types/factories/contracts/test/credit/CreditConfigurator.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/credit/CreditFacade.t.sol/CreditFacadeTest__factory.ts +0 -1368
- package/src/types/factories/contracts/test/credit/CreditFacade.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/credit/CreditManager.t.sol/CreditManagerTest__factory.ts +0 -1003
- package/src/types/factories/contracts/test/credit/CreditManager.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/credit/index.ts +0 -6
- package/src/types/factories/contracts/test/index.ts +0 -17
- package/src/types/factories/contracts/test/lib/cheatCodes.sol/CheatCodes__factory.ts +0 -472
- package/src/types/factories/contracts/test/lib/cheatCodes.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/lib/constants.sol/Roles__factory.ts +0 -358
- package/src/types/factories/contracts/test/lib/constants.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/lib/index.ts +0 -6
- package/src/types/factories/contracts/test/lib/test.sol/DSTest__factory.ts +0 -353
- package/src/types/factories/contracts/test/lib/test.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/mainnet/MainnetTokens.sol/MainnetTokensTestSuite__factory.ts +0 -237
- package/src/types/factories/contracts/test/mainnet/MainnetTokens.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/mainnet/TotalValueCalculator__factory.ts +0 -95
- package/src/types/factories/contracts/test/mainnet/index.ts +0 -5
- package/src/types/factories/contracts/test/mocks/adapters/AdapterMock__factory.ts +0 -373
- package/src/types/factories/contracts/test/mocks/adapters/TargetContractMock__factory.ts +0 -84
- package/src/types/factories/contracts/test/mocks/adapters/index.ts +0 -5
- package/src/types/factories/contracts/test/mocks/core/ACLTraitTest__factory.ts +0 -185
- package/src/types/factories/contracts/test/mocks/core/AddressProviderACLMock__factory.ts +0 -153
- package/src/types/factories/contracts/test/mocks/core/index.ts +0 -5
- package/src/types/factories/contracts/test/mocks/credit/CreditManagerInternal__factory.ts +0 -1395
- package/src/types/factories/contracts/test/mocks/credit/index.ts +0 -4
- package/src/types/factories/contracts/test/mocks/dao/TreasuryMock__factory.ts +0 -79
- package/src/types/factories/contracts/test/mocks/dao/index.ts +0 -4
- package/src/types/factories/contracts/test/mocks/index.ts +0 -12
- package/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/BaseRewardPoolMock__factory.ts +0 -763
- package/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/IBaseRewardPoolMockEvents__factory.ts +0 -105
- package/src/types/factories/contracts/test/mocks/integrations/ConvexBaseRewardPoolMock.sol/index.ts +0 -5
- package/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/BoosterMock__factory.ts +0 -776
- package/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/IBoosterMockEvents__factory.ts +0 -94
- package/src/types/factories/contracts/test/mocks/integrations/ConvexBoosterMock.sol/index.ts +0 -5
- package/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/ClaimZapMock__factory.ts +0 -187
- package/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/IBasicRewards__factory.ts +0 -93
- package/src/types/factories/contracts/test/mocks/integrations/ConvexClaimZapMock.sol/index.ts +0 -5
- package/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/ExtraRewardPoolMock__factory.ts +0 -558
- package/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/IExtraRewardPoolMockEvents__factory.ts +0 -105
- package/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/VirtualBalanceWrapper__factory.ts +0 -186
- package/src/types/factories/contracts/test/mocks/integrations/ConvexExtraRewardPoolMock.sol/index.ts +0 -6
- package/src/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/TokenRewardContractMock__factory.ts +0 -345
- package/src/types/factories/contracts/test/mocks/integrations/ConvexTokenRewardContractMock.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/mocks/integrations/CurveV1MetapoolMock__factory.ts +0 -747
- package/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_2Assets__factory.ts +0 -902
- package/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_3Assets__factory.ts +0 -902
- package/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock_4Assets__factory.ts +0 -902
- package/src/types/factories/contracts/test/mocks/integrations/CurveV1Mock__factory.ts +0 -756
- package/src/types/factories/contracts/test/mocks/integrations/CurveV1StETHMock__factory.ts +0 -594
- package/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/ILidoMockEvents__factory.ts +0 -51
- package/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/LidoMock__factory.ts +0 -525
- package/src/types/factories/contracts/test/mocks/integrations/LidoMock.sol/index.ts +0 -5
- package/src/types/factories/contracts/test/mocks/integrations/UniswapV2Mock__factory.ts +0 -1060
- package/src/types/factories/contracts/test/mocks/integrations/UniswapV3Mock__factory.ts +0 -776
- package/src/types/factories/contracts/test/mocks/integrations/YearnV2Mock__factory.ts +0 -609
- package/src/types/factories/contracts/test/mocks/integrations/index.ts +0 -18
- package/src/types/factories/contracts/test/mocks/libraries/PercentageMathTest__factory.ts +0 -110
- package/src/types/factories/contracts/test/mocks/libraries/WadRayMathTest__factory.ts +0 -248
- package/src/types/factories/contracts/test/mocks/libraries/index.ts +0 -5
- package/src/types/factories/contracts/test/mocks/oracles/LPPriceFeedMock__factory.ts +0 -449
- package/src/types/factories/contracts/test/mocks/oracles/PriceFeedMock__factory.ts +0 -297
- package/src/types/factories/contracts/test/mocks/oracles/index.ts +0 -5
- package/src/types/factories/contracts/test/mocks/pool/CreditManagerMockForPoolTest__factory.ts +0 -194
- package/src/types/factories/contracts/test/mocks/pool/PoolServiceMock__factory.ts +0 -899
- package/src/types/factories/contracts/test/mocks/pool/TestPoolService__factory.ts +0 -976
- package/src/types/factories/contracts/test/mocks/pool/index.ts +0 -6
- package/src/types/factories/contracts/test/mocks/token/CERC20Mock__factory.ts +0 -486
- package/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedFalse__factory.ts +0 -395
- package/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/ERC20ApproveRestrictedRevert__factory.ts +0 -395
- package/src/types/factories/contracts/test/mocks/token/ERC20ApproveRestricted.sol/index.ts +0 -5
- package/src/types/factories/contracts/test/mocks/token/ERC20Blocking.sol/ERC20BlockingMock__factory.ts +0 -446
- package/src/types/factories/contracts/test/mocks/token/ERC20Blocking.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/mocks/token/ERC20Fee.sol/TokenFeeMock__factory.ts +0 -454
- package/src/types/factories/contracts/test/mocks/token/ERC20Fee.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/mocks/token/ERC20Mock__factory.ts +0 -526
- package/src/types/factories/contracts/test/mocks/token/ERC20NonCompliant.sol/NonCompliantERC20__factory.ts +0 -86
- package/src/types/factories/contracts/test/mocks/token/ERC20NonCompliant.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/ERC721ReceiverMock__factory.ts +0 -96
- package/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/IERC721Receiver__factory.ts +0 -60
- package/src/types/factories/contracts/test/mocks/token/ERC721ReceiverMock.sol/index.ts +0 -5
- package/src/types/factories/contracts/test/mocks/token/StETHMock__factory.ts +0 -441
- package/src/types/factories/contracts/test/mocks/token/WETHMock__factory.ts +0 -364
- package/src/types/factories/contracts/test/mocks/token/index.ts +0 -12
- package/src/types/factories/contracts/test/oracles/CurveLPPriceFeed.t.sol/CurveLPPriceFeedTest__factory.ts +0 -543
- package/src/types/factories/contracts/test/oracles/CurveLPPriceFeed.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/oracles/LPPriceFeed.t.sol/LPPriceFeedTest__factory.ts +0 -480
- package/src/types/factories/contracts/test/oracles/LPPriceFeed.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/oracles/PriceOracle.t.sol/PriceOracleTest__factory.ts +0 -511
- package/src/types/factories/contracts/test/oracles/PriceOracle.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/oracles/YearnPriceFeed.t.sol/YearnFeedTest__factory.ts +0 -474
- package/src/types/factories/contracts/test/oracles/YearnPriceFeed.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/oracles/ZeroPriceFeed.t.sol/ZeroFeedTest__factory.ts +0 -422
- package/src/types/factories/contracts/test/oracles/ZeroPriceFeed.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/oracles/index.ts +0 -8
- package/src/types/factories/contracts/test/pathfinder/CurveLPPathFinder.t.sol/CurveLPPathFinderTest__factory.ts +0 -673
- package/src/types/factories/contracts/test/pathfinder/CurveLPPathFinder.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/pathfinder/CurvePathFinder.t.sol/CurvePathFinderTest__factory.ts +0 -750
- package/src/types/factories/contracts/test/pathfinder/CurvePathFinder.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/NormalTokenPathFinderTest__factory.ts +0 -839
- package/src/types/factories/contracts/test/pathfinder/NormalTokenPathFinder.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/pathfinder/PathFinderTestHelper__factory.ts +0 -652
- package/src/types/factories/contracts/test/pathfinder/SwapPathFinder.t.sol/SwapPathFinderTest__factory.ts +0 -912
- package/src/types/factories/contracts/test/pathfinder/SwapPathFinder.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/UniswapV2PathFinderTest__factory.ts +0 -806
- package/src/types/factories/contracts/test/pathfinder/UniswapV2PathFinder.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/UniswapV3PathFinderTest__factory.ts +0 -826
- package/src/types/factories/contracts/test/pathfinder/UniswapV3PathFinder.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/pathfinder/YearnPathFinder.t.sol/YearnPathFinderTest__factory.ts +0 -676
- package/src/types/factories/contracts/test/pathfinder/YearnPathFinder.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/pathfinder/index.ts +0 -11
- package/src/types/factories/contracts/test/pool/PoolService.t.sol/PoolServiceTest__factory.ts +0 -804
- package/src/types/factories/contracts/test/pool/PoolService.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/pool/index.ts +0 -4
- package/src/types/factories/contracts/test/sigp/AttackingContractNonPayable.sol/AttackContractNonPayable__factory.ts +0 -88
- package/src/types/factories/contracts/test/sigp/AttackingContractNonPayable.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/sigp/DummyMulticallTarget__factory.ts +0 -131
- package/src/types/factories/contracts/test/sigp/FlashLoanAttacker2__factory.ts +0 -164
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/ICrvDeposit__factory.ts +0 -57
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/ICurveGauge__factory.ts +0 -123
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/ICurveVoteEscrow__factory.ts +0 -90
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IDeposit__factory.ts +0 -230
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IFeeDistro__factory.ts +0 -46
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IMinter__factory.ts +0 -39
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IPools__factory.ts +0 -189
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IRegistry__factory.ts +0 -114
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IRewardFactory__factory.ts +0 -164
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IRewards__factory.ts +0 -190
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IStaker__factory.ts +0 -324
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IStashFactory__factory.ts +0 -60
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IStash__factory.ts +0 -95
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/ITokenFactory__factory.ts +0 -45
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/ITokenMinter__factory.ts +0 -62
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IVestedEscrow__factory.ts +0 -50
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IVoting__factory.ts +0 -131
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/IWalletChecker__factory.ts +0 -45
- package/src/types/factories/contracts/test/sigp/Interfaces.sol/index.ts +0 -21
- package/src/types/factories/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/NewBaseRewardPoolMock__factory.ts +0 -767
- package/src/types/factories/contracts/test/sigp/NewConvexBaseRewardPoolMock.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/sigp/NewConvexBoosterMock.sol/NewBoosterMock__factory.ts +0 -776
- package/src/types/factories/contracts/test/sigp/NewConvexBoosterMock.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/sigp/NewCreditConfigurator__factory.ts +0 -922
- package/src/types/factories/contracts/test/sigp/UniswapHelper.sol/UniswapV3AdapterTestHelper__factory.ts +0 -244
- package/src/types/factories/contracts/test/sigp/UniswapHelper.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/sigp/index.ts +0 -13
- package/src/types/factories/contracts/test/sigp/interfaces/ILockedCvx__factory.ts +0 -442
- package/src/types/factories/contracts/test/sigp/interfaces/index.ts +0 -4
- package/src/types/factories/contracts/test/sigp/stETHMock.sol/StETHMockERC20__factory.ts +0 -482
- package/src/types/factories/contracts/test/sigp/stETHMock.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/suites/BalanceHelper__factory.ts +0 -356
- package/src/types/factories/contracts/test/suites/BaseCreditTestSuite__factory.ts +0 -589
- package/src/types/factories/contracts/test/suites/CreditFacadeHelper__factory.ts +0 -421
- package/src/types/factories/contracts/test/suites/CreditFacadeTestSuite__factory.ts +0 -685
- package/src/types/factories/contracts/test/suites/CreditManagerTestSuite__factory.ts +0 -677
- package/src/types/factories/contracts/test/suites/PoolServiceTestSuite__factory.ts +0 -186
- package/src/types/factories/contracts/test/suites/TokensTestSuite__factory.ts +0 -744
- package/src/types/factories/contracts/test/suites/index.ts +0 -10
- package/src/types/factories/contracts/test/support/PauseMulticall.t.sol/PauseMulticallTest__factory.ts +0 -398
- package/src/types/factories/contracts/test/support/PauseMulticall.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/support/index.ts +0 -4
- package/src/types/factories/contracts/test/tokens/DegenNFT.t.sol/DegenNFTTest__factory.ts +0 -560
- package/src/types/factories/contracts/test/tokens/DegenNFT.t.sol/index.ts +0 -4
- package/src/types/factories/contracts/test/tokens/index.ts +0 -4
- package/src/types/factories/contracts/tokens/DegenNFT__factory.ts +0 -699
- package/src/types/factories/contracts/tokens/DieselToken__factory.ts +0 -464
- package/src/types/factories/contracts/tokens/GearToken__factory.ts +0 -719
- package/src/types/factories/contracts/tokens/PhantomERC20__factory.ts +0 -261
- package/src/types/factories/contracts/tokens/index.ts +0 -7
- package/src/types/factories/index.ts +0 -6
- package/src/types/hardhat.d.ts +0 -2715
- package/src/types/index.ts +0 -562
- package/src/utils/errors.ts +0 -11
- package/src/utils/formatter.ts +0 -146
- package/src/utils/loading.ts +0 -17
- package/src/utils/mappers.ts +0 -32
- package/src/utils/math.ts +0 -42
- package/src/utils/multicall.ts +0 -80
- package/src/utils/network.ts +0 -28
- package/src/utils/repeater.ts +0 -18
- package/src/utils/types.ts +0 -7
- package/src/utils/validate.ts +0 -8
- package/tsconfig.json +0 -62
|
@@ -1,1048 +0,0 @@
|
|
|
1
|
-
/* Autogenerated file. Do not edit manually. */
|
|
2
|
-
/* tslint:disable */
|
|
3
|
-
/* eslint-disable */
|
|
4
|
-
import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers";
|
|
5
|
-
import type { Provider, TransactionRequest } from "@ethersproject/providers";
|
|
6
|
-
import type {
|
|
7
|
-
CreditConfiguratorTest,
|
|
8
|
-
CreditConfiguratorTestInterface,
|
|
9
|
-
} from "../../../../../contracts/test/credit/CreditConfigurator.t.sol/CreditConfiguratorTest";
|
|
10
|
-
|
|
11
|
-
const _abi = [
|
|
12
|
-
{
|
|
13
|
-
inputs: [],
|
|
14
|
-
name: "AdapterUsedTwiceException",
|
|
15
|
-
type: "error",
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
inputs: [],
|
|
19
|
-
name: "ChiThresholdMoreOneException",
|
|
20
|
-
type: "error",
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
inputs: [],
|
|
24
|
-
name: "ContractNotInAllowedList",
|
|
25
|
-
type: "error",
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
inputs: [],
|
|
29
|
-
name: "CreditManagerOrFacadeUsedAsAllowContractsException",
|
|
30
|
-
type: "error",
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
inputs: [],
|
|
34
|
-
name: "DegenNFTnotSetException",
|
|
35
|
-
type: "error",
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
inputs: [],
|
|
39
|
-
name: "FastCheckNotCoverCollateralDropException",
|
|
40
|
-
type: "error",
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
inputs: [],
|
|
44
|
-
name: "IncompatibleContractException",
|
|
45
|
-
type: "error",
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
inputs: [],
|
|
49
|
-
name: "IncorrectExpirationDateException",
|
|
50
|
-
type: "error",
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
inputs: [],
|
|
54
|
-
name: "IncorrectFeesException",
|
|
55
|
-
type: "error",
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
inputs: [],
|
|
59
|
-
name: "IncorrectLimitsException",
|
|
60
|
-
type: "error",
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
inputs: [],
|
|
64
|
-
name: "IncorrectLiquidationThresholdException",
|
|
65
|
-
type: "error",
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
inputs: [],
|
|
69
|
-
name: "SetLTForUnderlyingException",
|
|
70
|
-
type: "error",
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
anonymous: false,
|
|
74
|
-
inputs: [
|
|
75
|
-
{
|
|
76
|
-
indexed: false,
|
|
77
|
-
internalType: "address",
|
|
78
|
-
name: "",
|
|
79
|
-
type: "address",
|
|
80
|
-
},
|
|
81
|
-
],
|
|
82
|
-
name: "AddedToUpgradeable",
|
|
83
|
-
type: "event",
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
anonymous: false,
|
|
87
|
-
inputs: [
|
|
88
|
-
{
|
|
89
|
-
indexed: true,
|
|
90
|
-
internalType: "address",
|
|
91
|
-
name: "protocol",
|
|
92
|
-
type: "address",
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
indexed: true,
|
|
96
|
-
internalType: "address",
|
|
97
|
-
name: "adapter",
|
|
98
|
-
type: "address",
|
|
99
|
-
},
|
|
100
|
-
],
|
|
101
|
-
name: "ContractAllowed",
|
|
102
|
-
type: "event",
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
anonymous: false,
|
|
106
|
-
inputs: [
|
|
107
|
-
{
|
|
108
|
-
indexed: true,
|
|
109
|
-
internalType: "address",
|
|
110
|
-
name: "protocol",
|
|
111
|
-
type: "address",
|
|
112
|
-
},
|
|
113
|
-
],
|
|
114
|
-
name: "ContractForbidden",
|
|
115
|
-
type: "event",
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
anonymous: false,
|
|
119
|
-
inputs: [
|
|
120
|
-
{
|
|
121
|
-
indexed: true,
|
|
122
|
-
internalType: "address",
|
|
123
|
-
name: "newCreditConfigurator",
|
|
124
|
-
type: "address",
|
|
125
|
-
},
|
|
126
|
-
],
|
|
127
|
-
name: "CreditConfiguratorUpgraded",
|
|
128
|
-
type: "event",
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
anonymous: false,
|
|
132
|
-
inputs: [
|
|
133
|
-
{
|
|
134
|
-
indexed: true,
|
|
135
|
-
internalType: "address",
|
|
136
|
-
name: "newCreditFacade",
|
|
137
|
-
type: "address",
|
|
138
|
-
},
|
|
139
|
-
],
|
|
140
|
-
name: "CreditFacadeUpgraded",
|
|
141
|
-
type: "event",
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
anonymous: false,
|
|
145
|
-
inputs: [
|
|
146
|
-
{
|
|
147
|
-
indexed: false,
|
|
148
|
-
internalType: "bool",
|
|
149
|
-
name: "",
|
|
150
|
-
type: "bool",
|
|
151
|
-
},
|
|
152
|
-
],
|
|
153
|
-
name: "DegenModeUpdated",
|
|
154
|
-
type: "event",
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
anonymous: false,
|
|
158
|
-
inputs: [
|
|
159
|
-
{
|
|
160
|
-
indexed: true,
|
|
161
|
-
internalType: "address",
|
|
162
|
-
name: "borrower",
|
|
163
|
-
type: "address",
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
indexed: true,
|
|
167
|
-
internalType: "address",
|
|
168
|
-
name: "target",
|
|
169
|
-
type: "address",
|
|
170
|
-
},
|
|
171
|
-
],
|
|
172
|
-
name: "ExecuteOrder",
|
|
173
|
-
type: "event",
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
anonymous: false,
|
|
177
|
-
inputs: [
|
|
178
|
-
{
|
|
179
|
-
indexed: false,
|
|
180
|
-
internalType: "uint40",
|
|
181
|
-
name: "",
|
|
182
|
-
type: "uint40",
|
|
183
|
-
},
|
|
184
|
-
],
|
|
185
|
-
name: "ExpirationDateUpdated",
|
|
186
|
-
type: "event",
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
anonymous: false,
|
|
190
|
-
inputs: [
|
|
191
|
-
{
|
|
192
|
-
indexed: false,
|
|
193
|
-
internalType: "uint16",
|
|
194
|
-
name: "feeInterest",
|
|
195
|
-
type: "uint16",
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
indexed: false,
|
|
199
|
-
internalType: "uint16",
|
|
200
|
-
name: "feeLiquidation",
|
|
201
|
-
type: "uint16",
|
|
202
|
-
},
|
|
203
|
-
{
|
|
204
|
-
indexed: false,
|
|
205
|
-
internalType: "uint16",
|
|
206
|
-
name: "liquidationPremium",
|
|
207
|
-
type: "uint16",
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
indexed: false,
|
|
211
|
-
internalType: "uint16",
|
|
212
|
-
name: "feeLiquidationExpired",
|
|
213
|
-
type: "uint16",
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
indexed: false,
|
|
217
|
-
internalType: "uint16",
|
|
218
|
-
name: "liquidationPremiumExpired",
|
|
219
|
-
type: "uint16",
|
|
220
|
-
},
|
|
221
|
-
],
|
|
222
|
-
name: "FeesUpdated",
|
|
223
|
-
type: "event",
|
|
224
|
-
},
|
|
225
|
-
{
|
|
226
|
-
anonymous: false,
|
|
227
|
-
inputs: [
|
|
228
|
-
{
|
|
229
|
-
indexed: false,
|
|
230
|
-
internalType: "bool",
|
|
231
|
-
name: "",
|
|
232
|
-
type: "bool",
|
|
233
|
-
},
|
|
234
|
-
],
|
|
235
|
-
name: "IncreaseDebtModeUpdated",
|
|
236
|
-
type: "event",
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
anonymous: false,
|
|
240
|
-
inputs: [
|
|
241
|
-
{
|
|
242
|
-
indexed: false,
|
|
243
|
-
internalType: "uint128",
|
|
244
|
-
name: "",
|
|
245
|
-
type: "uint128",
|
|
246
|
-
},
|
|
247
|
-
],
|
|
248
|
-
name: "LimitPerBlockUpdated",
|
|
249
|
-
type: "event",
|
|
250
|
-
},
|
|
251
|
-
{
|
|
252
|
-
anonymous: false,
|
|
253
|
-
inputs: [
|
|
254
|
-
{
|
|
255
|
-
indexed: false,
|
|
256
|
-
internalType: "uint256",
|
|
257
|
-
name: "minBorrowedAmount",
|
|
258
|
-
type: "uint256",
|
|
259
|
-
},
|
|
260
|
-
{
|
|
261
|
-
indexed: false,
|
|
262
|
-
internalType: "uint256",
|
|
263
|
-
name: "maxBorrowedAmount",
|
|
264
|
-
type: "uint256",
|
|
265
|
-
},
|
|
266
|
-
],
|
|
267
|
-
name: "LimitsUpdated",
|
|
268
|
-
type: "event",
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
anonymous: false,
|
|
272
|
-
inputs: [
|
|
273
|
-
{
|
|
274
|
-
indexed: false,
|
|
275
|
-
internalType: "uint8",
|
|
276
|
-
name: "",
|
|
277
|
-
type: "uint8",
|
|
278
|
-
},
|
|
279
|
-
],
|
|
280
|
-
name: "MaxEnabledTokensUpdated",
|
|
281
|
-
type: "event",
|
|
282
|
-
},
|
|
283
|
-
{
|
|
284
|
-
anonymous: false,
|
|
285
|
-
inputs: [
|
|
286
|
-
{
|
|
287
|
-
indexed: true,
|
|
288
|
-
internalType: "address",
|
|
289
|
-
name: "newConfigurator",
|
|
290
|
-
type: "address",
|
|
291
|
-
},
|
|
292
|
-
],
|
|
293
|
-
name: "NewConfigurator",
|
|
294
|
-
type: "event",
|
|
295
|
-
},
|
|
296
|
-
{
|
|
297
|
-
anonymous: false,
|
|
298
|
-
inputs: [
|
|
299
|
-
{
|
|
300
|
-
indexed: true,
|
|
301
|
-
internalType: "address",
|
|
302
|
-
name: "newPriceOracle",
|
|
303
|
-
type: "address",
|
|
304
|
-
},
|
|
305
|
-
],
|
|
306
|
-
name: "PriceOracleUpgraded",
|
|
307
|
-
type: "event",
|
|
308
|
-
},
|
|
309
|
-
{
|
|
310
|
-
anonymous: false,
|
|
311
|
-
inputs: [
|
|
312
|
-
{
|
|
313
|
-
indexed: false,
|
|
314
|
-
internalType: "address",
|
|
315
|
-
name: "",
|
|
316
|
-
type: "address",
|
|
317
|
-
},
|
|
318
|
-
],
|
|
319
|
-
name: "RemovedFromUpgradeable",
|
|
320
|
-
type: "event",
|
|
321
|
-
},
|
|
322
|
-
{
|
|
323
|
-
anonymous: false,
|
|
324
|
-
inputs: [
|
|
325
|
-
{
|
|
326
|
-
indexed: true,
|
|
327
|
-
internalType: "address",
|
|
328
|
-
name: "token",
|
|
329
|
-
type: "address",
|
|
330
|
-
},
|
|
331
|
-
],
|
|
332
|
-
name: "TokenAllowed",
|
|
333
|
-
type: "event",
|
|
334
|
-
},
|
|
335
|
-
{
|
|
336
|
-
anonymous: false,
|
|
337
|
-
inputs: [
|
|
338
|
-
{
|
|
339
|
-
indexed: true,
|
|
340
|
-
internalType: "address",
|
|
341
|
-
name: "token",
|
|
342
|
-
type: "address",
|
|
343
|
-
},
|
|
344
|
-
],
|
|
345
|
-
name: "TokenForbidden",
|
|
346
|
-
type: "event",
|
|
347
|
-
},
|
|
348
|
-
{
|
|
349
|
-
anonymous: false,
|
|
350
|
-
inputs: [
|
|
351
|
-
{
|
|
352
|
-
indexed: true,
|
|
353
|
-
internalType: "address",
|
|
354
|
-
name: "token",
|
|
355
|
-
type: "address",
|
|
356
|
-
},
|
|
357
|
-
{
|
|
358
|
-
indexed: false,
|
|
359
|
-
internalType: "uint16",
|
|
360
|
-
name: "liquidityThreshold",
|
|
361
|
-
type: "uint16",
|
|
362
|
-
},
|
|
363
|
-
],
|
|
364
|
-
name: "TokenLiquidationThresholdUpdated",
|
|
365
|
-
type: "event",
|
|
366
|
-
},
|
|
367
|
-
{
|
|
368
|
-
anonymous: false,
|
|
369
|
-
inputs: [
|
|
370
|
-
{
|
|
371
|
-
indexed: false,
|
|
372
|
-
internalType: "string",
|
|
373
|
-
name: "",
|
|
374
|
-
type: "string",
|
|
375
|
-
},
|
|
376
|
-
],
|
|
377
|
-
name: "log",
|
|
378
|
-
type: "event",
|
|
379
|
-
},
|
|
380
|
-
{
|
|
381
|
-
anonymous: false,
|
|
382
|
-
inputs: [
|
|
383
|
-
{
|
|
384
|
-
indexed: false,
|
|
385
|
-
internalType: "address",
|
|
386
|
-
name: "",
|
|
387
|
-
type: "address",
|
|
388
|
-
},
|
|
389
|
-
],
|
|
390
|
-
name: "log_address",
|
|
391
|
-
type: "event",
|
|
392
|
-
},
|
|
393
|
-
{
|
|
394
|
-
anonymous: false,
|
|
395
|
-
inputs: [
|
|
396
|
-
{
|
|
397
|
-
indexed: false,
|
|
398
|
-
internalType: "bytes",
|
|
399
|
-
name: "",
|
|
400
|
-
type: "bytes",
|
|
401
|
-
},
|
|
402
|
-
],
|
|
403
|
-
name: "log_bytes",
|
|
404
|
-
type: "event",
|
|
405
|
-
},
|
|
406
|
-
{
|
|
407
|
-
anonymous: false,
|
|
408
|
-
inputs: [
|
|
409
|
-
{
|
|
410
|
-
indexed: false,
|
|
411
|
-
internalType: "bytes32",
|
|
412
|
-
name: "",
|
|
413
|
-
type: "bytes32",
|
|
414
|
-
},
|
|
415
|
-
],
|
|
416
|
-
name: "log_bytes32",
|
|
417
|
-
type: "event",
|
|
418
|
-
},
|
|
419
|
-
{
|
|
420
|
-
anonymous: false,
|
|
421
|
-
inputs: [
|
|
422
|
-
{
|
|
423
|
-
indexed: false,
|
|
424
|
-
internalType: "int256",
|
|
425
|
-
name: "",
|
|
426
|
-
type: "int256",
|
|
427
|
-
},
|
|
428
|
-
],
|
|
429
|
-
name: "log_int",
|
|
430
|
-
type: "event",
|
|
431
|
-
},
|
|
432
|
-
{
|
|
433
|
-
anonymous: false,
|
|
434
|
-
inputs: [
|
|
435
|
-
{
|
|
436
|
-
indexed: false,
|
|
437
|
-
internalType: "string",
|
|
438
|
-
name: "key",
|
|
439
|
-
type: "string",
|
|
440
|
-
},
|
|
441
|
-
{
|
|
442
|
-
indexed: false,
|
|
443
|
-
internalType: "address",
|
|
444
|
-
name: "val",
|
|
445
|
-
type: "address",
|
|
446
|
-
},
|
|
447
|
-
],
|
|
448
|
-
name: "log_named_address",
|
|
449
|
-
type: "event",
|
|
450
|
-
},
|
|
451
|
-
{
|
|
452
|
-
anonymous: false,
|
|
453
|
-
inputs: [
|
|
454
|
-
{
|
|
455
|
-
indexed: false,
|
|
456
|
-
internalType: "string",
|
|
457
|
-
name: "key",
|
|
458
|
-
type: "string",
|
|
459
|
-
},
|
|
460
|
-
{
|
|
461
|
-
indexed: false,
|
|
462
|
-
internalType: "bytes",
|
|
463
|
-
name: "val",
|
|
464
|
-
type: "bytes",
|
|
465
|
-
},
|
|
466
|
-
],
|
|
467
|
-
name: "log_named_bytes",
|
|
468
|
-
type: "event",
|
|
469
|
-
},
|
|
470
|
-
{
|
|
471
|
-
anonymous: false,
|
|
472
|
-
inputs: [
|
|
473
|
-
{
|
|
474
|
-
indexed: false,
|
|
475
|
-
internalType: "string",
|
|
476
|
-
name: "key",
|
|
477
|
-
type: "string",
|
|
478
|
-
},
|
|
479
|
-
{
|
|
480
|
-
indexed: false,
|
|
481
|
-
internalType: "bytes32",
|
|
482
|
-
name: "val",
|
|
483
|
-
type: "bytes32",
|
|
484
|
-
},
|
|
485
|
-
],
|
|
486
|
-
name: "log_named_bytes32",
|
|
487
|
-
type: "event",
|
|
488
|
-
},
|
|
489
|
-
{
|
|
490
|
-
anonymous: false,
|
|
491
|
-
inputs: [
|
|
492
|
-
{
|
|
493
|
-
indexed: false,
|
|
494
|
-
internalType: "string",
|
|
495
|
-
name: "key",
|
|
496
|
-
type: "string",
|
|
497
|
-
},
|
|
498
|
-
{
|
|
499
|
-
indexed: false,
|
|
500
|
-
internalType: "int256",
|
|
501
|
-
name: "val",
|
|
502
|
-
type: "int256",
|
|
503
|
-
},
|
|
504
|
-
{
|
|
505
|
-
indexed: false,
|
|
506
|
-
internalType: "uint256",
|
|
507
|
-
name: "decimals",
|
|
508
|
-
type: "uint256",
|
|
509
|
-
},
|
|
510
|
-
],
|
|
511
|
-
name: "log_named_decimal_int",
|
|
512
|
-
type: "event",
|
|
513
|
-
},
|
|
514
|
-
{
|
|
515
|
-
anonymous: false,
|
|
516
|
-
inputs: [
|
|
517
|
-
{
|
|
518
|
-
indexed: false,
|
|
519
|
-
internalType: "string",
|
|
520
|
-
name: "key",
|
|
521
|
-
type: "string",
|
|
522
|
-
},
|
|
523
|
-
{
|
|
524
|
-
indexed: false,
|
|
525
|
-
internalType: "uint256",
|
|
526
|
-
name: "val",
|
|
527
|
-
type: "uint256",
|
|
528
|
-
},
|
|
529
|
-
{
|
|
530
|
-
indexed: false,
|
|
531
|
-
internalType: "uint256",
|
|
532
|
-
name: "decimals",
|
|
533
|
-
type: "uint256",
|
|
534
|
-
},
|
|
535
|
-
],
|
|
536
|
-
name: "log_named_decimal_uint",
|
|
537
|
-
type: "event",
|
|
538
|
-
},
|
|
539
|
-
{
|
|
540
|
-
anonymous: false,
|
|
541
|
-
inputs: [
|
|
542
|
-
{
|
|
543
|
-
indexed: false,
|
|
544
|
-
internalType: "string",
|
|
545
|
-
name: "key",
|
|
546
|
-
type: "string",
|
|
547
|
-
},
|
|
548
|
-
{
|
|
549
|
-
indexed: false,
|
|
550
|
-
internalType: "int256",
|
|
551
|
-
name: "val",
|
|
552
|
-
type: "int256",
|
|
553
|
-
},
|
|
554
|
-
],
|
|
555
|
-
name: "log_named_int",
|
|
556
|
-
type: "event",
|
|
557
|
-
},
|
|
558
|
-
{
|
|
559
|
-
anonymous: false,
|
|
560
|
-
inputs: [
|
|
561
|
-
{
|
|
562
|
-
indexed: false,
|
|
563
|
-
internalType: "string",
|
|
564
|
-
name: "key",
|
|
565
|
-
type: "string",
|
|
566
|
-
},
|
|
567
|
-
{
|
|
568
|
-
indexed: false,
|
|
569
|
-
internalType: "string",
|
|
570
|
-
name: "val",
|
|
571
|
-
type: "string",
|
|
572
|
-
},
|
|
573
|
-
],
|
|
574
|
-
name: "log_named_string",
|
|
575
|
-
type: "event",
|
|
576
|
-
},
|
|
577
|
-
{
|
|
578
|
-
anonymous: false,
|
|
579
|
-
inputs: [
|
|
580
|
-
{
|
|
581
|
-
indexed: false,
|
|
582
|
-
internalType: "string",
|
|
583
|
-
name: "key",
|
|
584
|
-
type: "string",
|
|
585
|
-
},
|
|
586
|
-
{
|
|
587
|
-
indexed: false,
|
|
588
|
-
internalType: "uint256",
|
|
589
|
-
name: "val",
|
|
590
|
-
type: "uint256",
|
|
591
|
-
},
|
|
592
|
-
],
|
|
593
|
-
name: "log_named_uint",
|
|
594
|
-
type: "event",
|
|
595
|
-
},
|
|
596
|
-
{
|
|
597
|
-
anonymous: false,
|
|
598
|
-
inputs: [
|
|
599
|
-
{
|
|
600
|
-
indexed: false,
|
|
601
|
-
internalType: "string",
|
|
602
|
-
name: "",
|
|
603
|
-
type: "string",
|
|
604
|
-
},
|
|
605
|
-
],
|
|
606
|
-
name: "log_string",
|
|
607
|
-
type: "event",
|
|
608
|
-
},
|
|
609
|
-
{
|
|
610
|
-
anonymous: false,
|
|
611
|
-
inputs: [
|
|
612
|
-
{
|
|
613
|
-
indexed: false,
|
|
614
|
-
internalType: "uint256",
|
|
615
|
-
name: "",
|
|
616
|
-
type: "uint256",
|
|
617
|
-
},
|
|
618
|
-
],
|
|
619
|
-
name: "log_uint",
|
|
620
|
-
type: "event",
|
|
621
|
-
},
|
|
622
|
-
{
|
|
623
|
-
anonymous: false,
|
|
624
|
-
inputs: [
|
|
625
|
-
{
|
|
626
|
-
indexed: false,
|
|
627
|
-
internalType: "bytes",
|
|
628
|
-
name: "",
|
|
629
|
-
type: "bytes",
|
|
630
|
-
},
|
|
631
|
-
],
|
|
632
|
-
name: "logs",
|
|
633
|
-
type: "event",
|
|
634
|
-
},
|
|
635
|
-
{
|
|
636
|
-
inputs: [],
|
|
637
|
-
name: "IS_TEST",
|
|
638
|
-
outputs: [
|
|
639
|
-
{
|
|
640
|
-
internalType: "bool",
|
|
641
|
-
name: "",
|
|
642
|
-
type: "bool",
|
|
643
|
-
},
|
|
644
|
-
],
|
|
645
|
-
stateMutability: "view",
|
|
646
|
-
type: "function",
|
|
647
|
-
},
|
|
648
|
-
{
|
|
649
|
-
inputs: [
|
|
650
|
-
{
|
|
651
|
-
internalType: "bytes",
|
|
652
|
-
name: "bytecode",
|
|
653
|
-
type: "bytes",
|
|
654
|
-
},
|
|
655
|
-
{
|
|
656
|
-
internalType: "uint256",
|
|
657
|
-
name: "_salt",
|
|
658
|
-
type: "uint256",
|
|
659
|
-
},
|
|
660
|
-
],
|
|
661
|
-
name: "_deploy",
|
|
662
|
-
outputs: [],
|
|
663
|
-
stateMutability: "payable",
|
|
664
|
-
type: "function",
|
|
665
|
-
},
|
|
666
|
-
{
|
|
667
|
-
inputs: [
|
|
668
|
-
{
|
|
669
|
-
internalType: "bytes",
|
|
670
|
-
name: "bytecode",
|
|
671
|
-
type: "bytes",
|
|
672
|
-
},
|
|
673
|
-
{
|
|
674
|
-
internalType: "uint256",
|
|
675
|
-
name: "_salt",
|
|
676
|
-
type: "uint256",
|
|
677
|
-
},
|
|
678
|
-
],
|
|
679
|
-
name: "_getAddress",
|
|
680
|
-
outputs: [
|
|
681
|
-
{
|
|
682
|
-
internalType: "address",
|
|
683
|
-
name: "",
|
|
684
|
-
type: "address",
|
|
685
|
-
},
|
|
686
|
-
],
|
|
687
|
-
stateMutability: "view",
|
|
688
|
-
type: "function",
|
|
689
|
-
},
|
|
690
|
-
{
|
|
691
|
-
inputs: [],
|
|
692
|
-
name: "creditConfigurator",
|
|
693
|
-
outputs: [
|
|
694
|
-
{
|
|
695
|
-
internalType: "contract CreditConfigurator",
|
|
696
|
-
name: "",
|
|
697
|
-
type: "address",
|
|
698
|
-
},
|
|
699
|
-
],
|
|
700
|
-
stateMutability: "view",
|
|
701
|
-
type: "function",
|
|
702
|
-
},
|
|
703
|
-
{
|
|
704
|
-
inputs: [],
|
|
705
|
-
name: "creditFacade",
|
|
706
|
-
outputs: [
|
|
707
|
-
{
|
|
708
|
-
internalType: "contract CreditFacade",
|
|
709
|
-
name: "",
|
|
710
|
-
type: "address",
|
|
711
|
-
},
|
|
712
|
-
],
|
|
713
|
-
stateMutability: "view",
|
|
714
|
-
type: "function",
|
|
715
|
-
},
|
|
716
|
-
{
|
|
717
|
-
inputs: [],
|
|
718
|
-
name: "creditManager",
|
|
719
|
-
outputs: [
|
|
720
|
-
{
|
|
721
|
-
internalType: "contract CreditManager",
|
|
722
|
-
name: "",
|
|
723
|
-
type: "address",
|
|
724
|
-
},
|
|
725
|
-
],
|
|
726
|
-
stateMutability: "view",
|
|
727
|
-
type: "function",
|
|
728
|
-
},
|
|
729
|
-
{
|
|
730
|
-
inputs: [],
|
|
731
|
-
name: "failed",
|
|
732
|
-
outputs: [
|
|
733
|
-
{
|
|
734
|
-
internalType: "bool",
|
|
735
|
-
name: "",
|
|
736
|
-
type: "bool",
|
|
737
|
-
},
|
|
738
|
-
],
|
|
739
|
-
stateMutability: "nonpayable",
|
|
740
|
-
type: "function",
|
|
741
|
-
},
|
|
742
|
-
{
|
|
743
|
-
inputs: [],
|
|
744
|
-
name: "setUp",
|
|
745
|
-
outputs: [],
|
|
746
|
-
stateMutability: "nonpayable",
|
|
747
|
-
type: "function",
|
|
748
|
-
},
|
|
749
|
-
{
|
|
750
|
-
inputs: [],
|
|
751
|
-
name: "test_CC_01A_constructor_emits_all_events",
|
|
752
|
-
outputs: [],
|
|
753
|
-
stateMutability: "nonpayable",
|
|
754
|
-
type: "function",
|
|
755
|
-
},
|
|
756
|
-
{
|
|
757
|
-
inputs: [],
|
|
758
|
-
name: "test_CC_01_constructor_sets_correct_values",
|
|
759
|
-
outputs: [],
|
|
760
|
-
stateMutability: "nonpayable",
|
|
761
|
-
type: "function",
|
|
762
|
-
},
|
|
763
|
-
{
|
|
764
|
-
inputs: [],
|
|
765
|
-
name: "test_CC_02_all_functions_revert_if_called_non_configurator",
|
|
766
|
-
outputs: [],
|
|
767
|
-
stateMutability: "nonpayable",
|
|
768
|
-
type: "function",
|
|
769
|
-
},
|
|
770
|
-
{
|
|
771
|
-
inputs: [],
|
|
772
|
-
name: "test_CC_03_addCollateralToken_reverts_for_zero_address_or_in_priceFeed",
|
|
773
|
-
outputs: [],
|
|
774
|
-
stateMutability: "nonpayable",
|
|
775
|
-
type: "function",
|
|
776
|
-
},
|
|
777
|
-
{
|
|
778
|
-
inputs: [],
|
|
779
|
-
name: "test_CC_04_addCollateralToken_adds_new_token_to_creditManager_and_set_lt",
|
|
780
|
-
outputs: [],
|
|
781
|
-
stateMutability: "nonpayable",
|
|
782
|
-
type: "function",
|
|
783
|
-
},
|
|
784
|
-
{
|
|
785
|
-
inputs: [],
|
|
786
|
-
name: "test_CC_05_setLiquidationThreshold_reverts_for_underling_token_and_incorrect_values",
|
|
787
|
-
outputs: [],
|
|
788
|
-
stateMutability: "nonpayable",
|
|
789
|
-
type: "function",
|
|
790
|
-
},
|
|
791
|
-
{
|
|
792
|
-
inputs: [],
|
|
793
|
-
name: "test_CC_06_setLiquidationThreshold_sets_liquidation_threshold_in_creditManager",
|
|
794
|
-
outputs: [],
|
|
795
|
-
stateMutability: "nonpayable",
|
|
796
|
-
type: "function",
|
|
797
|
-
},
|
|
798
|
-
{
|
|
799
|
-
inputs: [],
|
|
800
|
-
name: "test_CC_07_allowToken_and_forbidToken_reverts_for_unknown_or_underlying_token",
|
|
801
|
-
outputs: [],
|
|
802
|
-
stateMutability: "nonpayable",
|
|
803
|
-
type: "function",
|
|
804
|
-
},
|
|
805
|
-
{
|
|
806
|
-
inputs: [],
|
|
807
|
-
name: "test_CC_08_allowToken_doesnt_change_forbidden_mask_if_its_already_allowed",
|
|
808
|
-
outputs: [],
|
|
809
|
-
stateMutability: "nonpayable",
|
|
810
|
-
type: "function",
|
|
811
|
-
},
|
|
812
|
-
{
|
|
813
|
-
inputs: [],
|
|
814
|
-
name: "test_CC_09_allows_token_if_it_was_forbidden",
|
|
815
|
-
outputs: [],
|
|
816
|
-
stateMutability: "nonpayable",
|
|
817
|
-
type: "function",
|
|
818
|
-
},
|
|
819
|
-
{
|
|
820
|
-
inputs: [],
|
|
821
|
-
name: "test_CC_10_forbidToken_doesnt_change_forbidden_mask_if_its_already_forbidden",
|
|
822
|
-
outputs: [],
|
|
823
|
-
stateMutability: "nonpayable",
|
|
824
|
-
type: "function",
|
|
825
|
-
},
|
|
826
|
-
{
|
|
827
|
-
inputs: [],
|
|
828
|
-
name: "test_CC_11_forbidToken_forbids_token_if_it_was_allowed",
|
|
829
|
-
outputs: [],
|
|
830
|
-
stateMutability: "nonpayable",
|
|
831
|
-
type: "function",
|
|
832
|
-
},
|
|
833
|
-
{
|
|
834
|
-
inputs: [],
|
|
835
|
-
name: "test_CC_12A_allowContract_reverts_for_non_contract_addresses",
|
|
836
|
-
outputs: [],
|
|
837
|
-
stateMutability: "nonpayable",
|
|
838
|
-
type: "function",
|
|
839
|
-
},
|
|
840
|
-
{
|
|
841
|
-
inputs: [],
|
|
842
|
-
name: "test_CC_12B_allowContract_reverts_for_non_compartible_adapter_contract",
|
|
843
|
-
outputs: [],
|
|
844
|
-
stateMutability: "nonpayable",
|
|
845
|
-
type: "function",
|
|
846
|
-
},
|
|
847
|
-
{
|
|
848
|
-
inputs: [],
|
|
849
|
-
name: "test_CC_12_allowContract_and_forbidContract_reverts_for_zero_address",
|
|
850
|
-
outputs: [],
|
|
851
|
-
stateMutability: "nonpayable",
|
|
852
|
-
type: "function",
|
|
853
|
-
},
|
|
854
|
-
{
|
|
855
|
-
inputs: [],
|
|
856
|
-
name: "test_CC_13_allowContract_reverts_for_creditManager_and_creditFacade_contracts",
|
|
857
|
-
outputs: [],
|
|
858
|
-
stateMutability: "nonpayable",
|
|
859
|
-
type: "function",
|
|
860
|
-
},
|
|
861
|
-
{
|
|
862
|
-
inputs: [],
|
|
863
|
-
name: "test_CC_14_allowContract_reverts_for_creditManager_and_creditFacade_contracts",
|
|
864
|
-
outputs: [],
|
|
865
|
-
stateMutability: "nonpayable",
|
|
866
|
-
type: "function",
|
|
867
|
-
},
|
|
868
|
-
{
|
|
869
|
-
inputs: [],
|
|
870
|
-
name: "test_CC_15_allowContract_allows_targetContract_adapter_and_emits_event",
|
|
871
|
-
outputs: [],
|
|
872
|
-
stateMutability: "nonpayable",
|
|
873
|
-
type: "function",
|
|
874
|
-
},
|
|
875
|
-
{
|
|
876
|
-
inputs: [],
|
|
877
|
-
name: "test_CC_16_forbidContract_reverts_for_unknown_contract",
|
|
878
|
-
outputs: [],
|
|
879
|
-
stateMutability: "nonpayable",
|
|
880
|
-
type: "function",
|
|
881
|
-
},
|
|
882
|
-
{
|
|
883
|
-
inputs: [],
|
|
884
|
-
name: "test_CC_17_forbidContract_forbids_contract_and_emits_event",
|
|
885
|
-
outputs: [],
|
|
886
|
-
stateMutability: "nonpayable",
|
|
887
|
-
type: "function",
|
|
888
|
-
},
|
|
889
|
-
{
|
|
890
|
-
inputs: [],
|
|
891
|
-
name: "test_CC_18_setLimits_reverts_if_minAmount_gt_maxAmount_or_maxBorrowedAmount_gt_blockLimit",
|
|
892
|
-
outputs: [],
|
|
893
|
-
stateMutability: "nonpayable",
|
|
894
|
-
type: "function",
|
|
895
|
-
},
|
|
896
|
-
{
|
|
897
|
-
inputs: [],
|
|
898
|
-
name: "test_CC_19_setLimits_sets_limits",
|
|
899
|
-
outputs: [],
|
|
900
|
-
stateMutability: "nonpayable",
|
|
901
|
-
type: "function",
|
|
902
|
-
},
|
|
903
|
-
{
|
|
904
|
-
inputs: [],
|
|
905
|
-
name: "test_CC_23_setFees_reverts_for_incorrect_fees",
|
|
906
|
-
outputs: [],
|
|
907
|
-
stateMutability: "nonpayable",
|
|
908
|
-
type: "function",
|
|
909
|
-
},
|
|
910
|
-
{
|
|
911
|
-
inputs: [],
|
|
912
|
-
name: "test_CC_25_setFees_updates_LT_for_underlying_and_for_all_tokens_which_bigger_than_new_LT",
|
|
913
|
-
outputs: [],
|
|
914
|
-
stateMutability: "nonpayable",
|
|
915
|
-
type: "function",
|
|
916
|
-
},
|
|
917
|
-
{
|
|
918
|
-
inputs: [],
|
|
919
|
-
name: "test_CC_26_setFees_sets_fees_and_doesnt_change_others",
|
|
920
|
-
outputs: [],
|
|
921
|
-
stateMutability: "nonpayable",
|
|
922
|
-
type: "function",
|
|
923
|
-
},
|
|
924
|
-
{
|
|
925
|
-
inputs: [],
|
|
926
|
-
name: "test_CC_28_upgradePriceOracle_upgrades_priceOracleCorrectly_and_doesnt_change_facade",
|
|
927
|
-
outputs: [],
|
|
928
|
-
stateMutability: "nonpayable",
|
|
929
|
-
type: "function",
|
|
930
|
-
},
|
|
931
|
-
{
|
|
932
|
-
inputs: [],
|
|
933
|
-
name: "test_CC_29_upgradeCreditFacade_upgradeCreditConfigurator_reverts_for_incompatible_contracts",
|
|
934
|
-
outputs: [],
|
|
935
|
-
stateMutability: "nonpayable",
|
|
936
|
-
type: "function",
|
|
937
|
-
},
|
|
938
|
-
{
|
|
939
|
-
inputs: [],
|
|
940
|
-
name: "test_CC_30_upgradeCreditFacade_upgrades_creditFacade_and_doesnt_change_priceOracle",
|
|
941
|
-
outputs: [],
|
|
942
|
-
stateMutability: "nonpayable",
|
|
943
|
-
type: "function",
|
|
944
|
-
},
|
|
945
|
-
{
|
|
946
|
-
inputs: [],
|
|
947
|
-
name: "test_CC_31_upgradeCreditConfigurator_upgrades_creditConfigurator",
|
|
948
|
-
outputs: [],
|
|
949
|
-
stateMutability: "nonpayable",
|
|
950
|
-
type: "function",
|
|
951
|
-
},
|
|
952
|
-
{
|
|
953
|
-
inputs: [],
|
|
954
|
-
name: "test_CC_32_setIncreaseDebtForbidden_sets_IncreaseDebtForbidden",
|
|
955
|
-
outputs: [],
|
|
956
|
-
stateMutability: "nonpayable",
|
|
957
|
-
type: "function",
|
|
958
|
-
},
|
|
959
|
-
{
|
|
960
|
-
inputs: [],
|
|
961
|
-
name: "test_CC_33_setLimitPerBlock_reverts_if_it_lt_maxLimit_otherwise_sets_limitPerBlock",
|
|
962
|
-
outputs: [],
|
|
963
|
-
stateMutability: "nonpayable",
|
|
964
|
-
type: "function",
|
|
965
|
-
},
|
|
966
|
-
{
|
|
967
|
-
inputs: [],
|
|
968
|
-
name: "test_CC_34_setExpirationDate_reverts_on_incorrect_newExpirationDate_otherwise_sets",
|
|
969
|
-
outputs: [],
|
|
970
|
-
stateMutability: "nonpayable",
|
|
971
|
-
type: "function",
|
|
972
|
-
},
|
|
973
|
-
{
|
|
974
|
-
inputs: [],
|
|
975
|
-
name: "test_CC_35_addToUpgradeableContracts_works_correctly",
|
|
976
|
-
outputs: [],
|
|
977
|
-
stateMutability: "nonpayable",
|
|
978
|
-
type: "function",
|
|
979
|
-
},
|
|
980
|
-
{
|
|
981
|
-
inputs: [],
|
|
982
|
-
name: "test_CC_36_removeFromUpgradeableContracts_works_correctly",
|
|
983
|
-
outputs: [],
|
|
984
|
-
stateMutability: "nonpayable",
|
|
985
|
-
type: "function",
|
|
986
|
-
},
|
|
987
|
-
{
|
|
988
|
-
inputs: [],
|
|
989
|
-
name: "test_CC_37_setMaxEnabledTokens_works_correctly",
|
|
990
|
-
outputs: [],
|
|
991
|
-
stateMutability: "nonpayable",
|
|
992
|
-
type: "function",
|
|
993
|
-
},
|
|
994
|
-
];
|
|
995
|
-
|
|
996
|
-
const _bytecode =
|
|
997
|
-
"0x60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506205e532806200004c6000396000f3fe608060405260043610620003165760003560e01c80636cf3cb8d11620001a3578063bc93cb6811620000e7578063e0c7e3601162000095578063f5487cc3116200006c578063f5487cc31462000752578063f9aa028a146200076a578063fa7626d4146200079957600080fd5b8063e0c7e360146200070a578063e379750f1462000722578063f04f5a7c146200073a57600080fd5b8063c1eca48d11620000ca578063c1eca48d14620006c2578063c366cae114620006da578063dbb058b814620006f257600080fd5b8063bc93cb68146200067b578063c12c21c0146200069357600080fd5b806394a477681162000151578063a9a7e1601162000128578063a9a7e1601462000622578063b47bc1c8146200063a578063ba414fa6146200065257600080fd5b806394a4776814620005da578063a4a1aeec14620005f2578063a7da75f8146200060a57600080fd5b8063763d0ab51162000186578063763d0ab514620005935780637f308f7914620005ab57806382dd5c4214620005c357600080fd5b80636cf3cb8d14620005635780636fd9059c146200057b57600080fd5b8063211f3879116200026b5780633811eff3116200021957806364e6c5fe11620001f057806364e6c5fe146200051b5780636844caa414620005335780636ac1eca0146200054b57600080fd5b80633811eff314620004d35780635566b3d814620004eb5780635864bade146200050357600080fd5b806328b5dab8116200024e57806328b5dab8146200047457806329d0f905146200048c5780632f7a188114620004a457600080fd5b8063211f3879146200044457806325c9c435146200045c57600080fd5b80630e43944011620002c957806314008d5411620002ac57806314008d5414620003fc57806319ca6fac14620004145780631d1739ff146200042c57600080fd5b80630e43944014620003cc5780631278a3d114620003e457600080fd5b806305fe778311620002fe57806305fe7783146200034d578063090f299e146200039c5780630a9254e414620003b457600080fd5b80629b9c38146200031b578063035a5a941462000335575b600080fd5b3480156200032857600080fd5b5062000333620007b5565b005b3480156200034257600080fd5b506200033362000ce9565b3480156200035a57600080fd5b50620003726200036c3660046200ff79565b62001617565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015620003a957600080fd5b5062000333620016a1565b348015620003c157600080fd5b506200033362001b62565b348015620003d957600080fd5b50620003336200218d565b348015620003f157600080fd5b50620003336200266e565b3480156200040957600080fd5b506200033362002b17565b3480156200042157600080fd5b50620003336200313a565b3480156200043957600080fd5b506200033362003400565b3480156200045157600080fd5b506200033362003c37565b3480156200046957600080fd5b506200033362003ffb565b3480156200048157600080fd5b50620003336200452b565b3480156200049957600080fd5b506200033362005041565b348015620004b157600080fd5b50600454620003729073ffffffffffffffffffffffffffffffffffffffff1681565b348015620004e057600080fd5b506200033362005270565b348015620004f857600080fd5b50620003336200647f565b3480156200051057600080fd5b506200033362006982565b3480156200052857600080fd5b506200033362006c64565b3480156200054057600080fd5b506200033362006ff5565b3480156200055857600080fd5b5062000333620080aa565b3480156200057057600080fd5b5062000333620086e3565b3480156200058857600080fd5b506200033362009491565b348015620005a057600080fd5b5062000333620099ab565b348015620005b857600080fd5b506200033362009e2d565b62000333620005d43660046200ff79565b6200a338565b348015620005e757600080fd5b50620003336200a351565b348015620005ff57600080fd5b50620003336200a957565b3480156200061757600080fd5b50620003336200af1f565b3480156200062f57600080fd5b50620003336200b5e0565b3480156200064757600080fd5b50620003336200c881565b3480156200065f57600080fd5b506200066a6200ca24565b604051901515815260200162000393565b3480156200068857600080fd5b50620003336200cb8e565b348015620006a057600080fd5b50600354620003729073ffffffffffffffffffffffffffffffffffffffff1681565b348015620006cf57600080fd5b50620003336200cfbd565b348015620006e757600080fd5b50620003336200d3a4565b348015620006ff57600080fd5b50620003336200d900565b3480156200071757600080fd5b50620003336200e26e565b3480156200072f57600080fd5b50620003336200e6c2565b3480156200074757600080fd5b50620003336200ed1f565b3480156200075f57600080fd5b50620003336200f090565b3480156200077757600080fd5b50600554620003729073ffffffffffffffffffffffffffffffffffffffff1681565b348015620007a657600080fd5b506000546200066a9060ff1681565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b42645906200080f9060029060040162010076565b602060405180830381865afa1580156200082d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008539190620100a9565b6003546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063f67c5bd090602401602060405180830381865afa158015620008ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f09190620100d0565b6000546005546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292935062010000909104169063ca669fa790602401600060405180830381600087803b1580156200096957600080fd5b505af11580156200097e573d6000803e3d6000fd5b50506003546040517fa366f4960000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff909116925063a366f4969150602401600060405180830381600087803b158015620009ef57600080fd5b505af115801562000a04573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562000a9057600080fd5b505af115801562000aa5573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff851692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562000b6f57600080fd5b505af115801562000b84573d6000803e3d6000fd5b50506005546040517fb53472ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152909116925063b53472ef9150602401600060405180830381600087803b15801562000bf657600080fd5b505af115801562000c0b573d6000803e3d6000fd5b5050505062000ce5600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c81573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ca79190620100d0565b60006040518060400160405280601881526020017f496e636f727265637420666f7262696464656e206d61736b00000000000000008152506200f747565b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166354cae56e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000d5457600080fd5b505af115801562000d69573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ddb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e019190620100a9565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182178155604080517fcff0ab9600000000000000000000000000000000000000000000000000000000815290516000939263cff0ab96928082019260609290918290030181865afa15801562000e9b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ec191906201011c565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291945062010000900473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b15801562000f4a57600080fd5b505af115801562000f5f573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe4eaca7f0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562000ff457600080fd5b505af115801562001009573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df90506200103a600184620101a2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff9091166004820152602401600060405180830381600087803b1580156200109257600080fd5b505af1158015620010a7573d6000803e3d6000fd5b505060005462010000900473ffffffffffffffffffffffffffffffffffffffff16915063e5d6bf029050620010de42600a620101cb565b6040518263ffffffff1660e01b8152600401620010fd91815260200190565b600060405180830381600087803b1580156200111857600080fd5b505af11580156200112d573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b158015620011b657600080fd5b505af1158015620011cb573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe4eaca7f0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200126057600080fd5b505af115801562001275573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df9050620012a6836001620101e6565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff9091166004820152602401600060405180830381600087803b158015620012fe57600080fd5b505af115801562001313573d6000803e3d6000fd5b505050506000426001620013289190620101cb565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260048101839052602481018390526044810192909252600160648301529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620013b457600080fd5b505af1158015620013c9573d6000803e3d6000fd5b505060405164ffffffffff841681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac09250602001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200148d57600080fd5b505af1158015620014a2573d6000803e3d6000fd5b50506005546040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff909116925063eb9606df9150602401600060405180830381600087803b1580156200151957600080fd5b505af11580156200152e573d6000803e3d6000fd5b505060048054604080517fcff0ab96000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216945063cff0ab96935080830192606092918290030181865afa158015620015a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015c691906201011c565b60408051808201909152601c81527f496e636f7272656374206e65772065787069726174696f6e4461746500000000602082015290945062000ce5925064ffffffffff80861692508416906200f747565b8151602080840191909120604080517fff00000000000000000000000000000000000000000000000000000000000000818501523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810185905260558082019390935281518082039093018352607501905280519101205b92915050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200172657600080fd5b505af11580156200173b573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620017d057600080fd5b505af1158015620017e5573d6000803e3d6000fd5b50506005546040517f7bccacee0000000000000000000000000000000000000000000000000000000081526000600482015230602482015273ffffffffffffffffffffffffffffffffffffffff9091169250637bccacee9150604401600060405180830381600087803b1580156200185c57600080fd5b505af115801562001871573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200190657600080fd5b505af11580156200191b573d6000803e3d6000fd5b50506005546040517f7bccacee0000000000000000000000000000000000000000000000000000000081523060048201526000602482015273ffffffffffffffffffffffffffffffffffffffff9091169250637bccacee9150604401600060405180830381600087803b1580156200199257600080fd5b505af1158015620019a7573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562001a3c57600080fd5b505af115801562001a51573d6000803e3d6000fd5b50506005546040517f52438e540000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911692506352438e5491506024015b600060405180830381600087803b15801562001ac357600080fd5b505af115801562001ad8573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b4757600080fd5b505af115801562001b5c573d6000803e3d6000fd5b50505050565b60405162001b70906200fe87565b604051809103906000f08015801562001b8d573d6000803e3d6000fd5b50600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905563b36ba20862001bec670de0b6b3a7640000606462010212565b6040518263ffffffff1660e01b81526004016000604051808303818588803b15801562001c1857600080fd5b505af115801562001c2d573d6000803e3d6000fd5b50506001805460405173ffffffffffffffffffffffffffffffffffffffff909116945090925062001c5f91506200fe95565b62001c6c92919062010252565b604051809103906000f08015801562001c89573d6000803e3d6000fd5b50600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169182179055604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051636f307dc3916004808201926020929091908290030181865afa15801562001d23573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d499190620100a9565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517fc12c21c00000000000000000000000000000000000000000000000000000000081529051919092169163c12c21c09160048083019260209291908290030181865afa15801562001de6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e0c9190620100a9565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600254604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290519190921691632f7a18819160048083019260209291908290030181865afa15801562001ea9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ecf9190620100a9565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316178155600254604080517ff9aa028a0000000000000000000000000000000000000000000000000000000081529051919093169263f9aa028a92818101926020929091908290030181865afa15801562001f6b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f919190620100a9565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560405162001fe4906200fea4565b604051809103906000f08015801562002001573d6000803e3d6000fd5b50600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556003546040519216916200205a906200feb2565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f0801580156200209b573d6000803e3d6000fd5b50600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055600a5460405130929190911690620020f5906200feb2565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f08015801562002136573d6000803e3d6000fd5b50600880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff9384161790915560075460098054919093169116179055565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200221257600080fd5b505af115801562002227573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620022bc57600080fd5b505af1158015620022d1573d6000803e3d6000fd5b50506005546040517ffb1bd8c40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fb1bd8c49150602401600060405180830381600087803b1580156200234257600080fd5b505af115801562002357573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620023e357600080fd5b505af1158015620023f8573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff281527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c9250602001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620024c957600080fd5b505af1158015620024de573d6000803e3d6000fd5b50506005546040517ffb1bd8c400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fb1bd8c49150602401600060405180830381600087803b1580156200256257600080fd5b505af115801562002577573d6000803e3d6000fd5b5050600480546040517f79c0ef91000000000000000000000000000000000000000000000000000000008152600092810183905291935073ffffffffffffffffffffffffffffffffffffffff1691506379c0ef9190602401602060405180830381865afa158015620025ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026139190620100a9565b90506200266b8173c4375b7de8af5a38a93548eb8453a498222c4ff26040518060400160405280601481526020017f436f6e747261637420776173206e6f74207365740000000000000000000000008152506200f794565b50565b60035460095460405160009273ffffffffffffffffffffffffffffffffffffffff908116921690620026a0906200feb2565b73ffffffffffffffffffffffffffffffffffffffff928316815291166020820152604001604051809103906000f080158015620026e1573d6000803e3d6000fd5b506000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200276957600080fd5b505af11580156200277e573d6000803e3d6000fd5b50506005546009546007546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169250637bccacee9150604401600060405180830381600087803b158015620027fd57600080fd5b505af115801562002812573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f21ff1e710000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620028a757600080fd5b505af1158015620028bc573d6000803e3d6000fd5b50506005546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152858216602482015291169250637bccacee9150604401600060405180830381600087803b1580156200293857600080fd5b505af11580156200294d573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f21ff1e710000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620029e257600080fd5b505af1158015620029f7573d6000803e3d6000fd5b50506005546008546007546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169250637bccacee91506044015b600060405180830381600087803b15801562002a7757600080fd5b505af115801562002a8c573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002afb57600080fd5b505af115801562002b10573d6000803e3d6000fd5b5050505050565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562002b9c57600080fd5b505af115801562002bb1573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562002c4657600080fd5b505af115801562002c5b573d6000803e3d6000fd5b50506005546040517fe6492d7b0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e6492d7b9150602401600060405180830381600087803b15801562002ccc57600080fd5b505af115801562002ce1573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b15801562002d6a57600080fd5b505af115801562002d7f573d6000803e3d6000fd5b50506005546040517ffb1bd8c400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fb1bd8c49150602401600060405180830381600087803b15801562002e0357600080fd5b505af115801562002e18573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562002ea457600080fd5b505af115801562002eb9573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff281527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b9250602001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562002f8a57600080fd5b505af115801562002f9f573d6000803e3d6000fd5b50506005546040517fe6492d7b00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063e6492d7b9150602401600060405180830381600087803b1580156200302357600080fd5b505af115801562003038573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa158015620030ac573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052620030f491908101906201027e565b90506200266b815160006040518060400160405280601881526020017f436f6e747261637420776173206e6f742072656d6f76656400000000000000008152506200f747565b600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620031c257600080fd5b505af1158015620031d7573d6000803e3d6000fd5b505060095460405173ffffffffffffffffffffffffffffffffffffffff90911692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620032a557600080fd5b505af1158015620032ba573d6000803e3d6000fd5b50506005546009546040517f456e074200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063456e07429150602401600060405180830381600087803b1580156200332e57600080fd5b505af115801562003343573d6000803e3d6000fd5b50505050620033fe600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620033b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620033df9190620100a9565b60095473ffffffffffffffffffffffffffffffffffffffff166200f808565b565b600554604080517f50e036ff000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916350e036ff9160048083019260209291908290030181865afa15801562003471573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034979190620100d0565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200351e57600080fd5b505af115801562003533573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482015260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620035bf57600080fd5b505af1158015620035d4573d6000803e3d6000fd5b5050600754600a5460405173ffffffffffffffffffffffffffffffffffffffff9283169450911691507f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130590600090a360005b818110156200373857600a546005546040517f5094cb4f00000000000000000000000000000000000000000000000000000000815260006004820152620037239273ffffffffffffffffffffffffffffffffffffffff908116921690635094cb4f90602401602060405180830381865afa158015620036a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620036cf9190620100a9565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601681526020017f436f6e747261637420616c7265616479206164646564000000000000000000008152506200f946565b806200372f816201033d565b91505062003626565b50600554600a546007546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201529082166024820152911690637bccacee90604401600060405180830381600087803b158015620037b457600080fd5b505af1158015620037c9573d6000803e3d6000fd5b50506003546007546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152620038c194509116915063ff68754390602401602060405180830381865afa15801562003845573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200386b9190620100a9565b600a546040805180820190915260208082527f61646170746572546f436f6e7472616374207761736e277420756470617465649082015273ffffffffffffffffffffffffffffffffffffffff909116906200f794565b600354600a546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152620039b792919091169063fdd5764590602401602060405180830381865afa1580156200393b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039619190620100a9565b6007546040805180820190915260208082527f636f6e7472616374546f41646170746572207761736e277420756470617465649082015273ffffffffffffffffffffffffffffffffffffffff909116906200f794565b600554604080517f50e036ff000000000000000000000000000000000000000000000000000000008152905162003a7d9273ffffffffffffffffffffffffffffffffffffffff16916350e036ff9160048083019260209291908290030181865afa15801562003a2a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003a509190620100d0565b62003a5d836001620101cb565b6040518060600160405280602181526020016205e3dd602191396200f747565b6000805b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003aef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b159190620100d0565b81101562003c3257600a546005546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9283169290911690635094cb4f90602401602060405180830381865afa15801562003b94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003bba9190620100a9565b73ffffffffffffffffffffffffffffffffffffffff16141562003bdc57505050565b62003c1d826040518060400160405280601b81526020017f54617267657420636f6e7472616374207761736e7420666f756e6400000000008152506200f946565b8062003c29816201033d565b91505062003a81565b505050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b15801562003cbc57600080fd5b505af115801562003cd1573d6000803e3d6000fd5b50506000546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb3925062003dac91600401620103f4565b600060405180830381600087803b15801562003dc757600080fd5b505af115801562003ddc573d6000803e3d6000fd5b50506005546040517f7bccacee00000000000000000000000000000000000000000000000000000000815230600482015273c4375b7de8af5a38a93548eb8453a498222c4ff2602482015273ffffffffffffffffffffffffffffffffffffffff9091169250637bccacee9150604401600060405180830381600087803b15801562003e6657600080fd5b505af115801562003e7b573d6000803e3d6000fd5b50506000546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb3925062003f5691600401620103f4565b600060405180830381600087803b15801562003f7157600080fd5b505af115801562003f86573d6000803e3d6000fd5b50506005546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015230602482015273ffffffffffffffffffffffffffffffffffffffff9091169250637bccacee915060440162001aa8565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b4264590620040559060029060040162010076565b602060405180830381865afa15801562004073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620040999190620100a9565b6003546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063f67c5bd090602401602060405180830381865afa15801562004110573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620041369190620100d0565b6000546005546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292935062010000909104169063ca669fa790602401600060405180830381600087803b158015620041af57600080fd5b505af1158015620041c4573d6000803e3d6000fd5b50506003546040517fa366f4960000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063a366f4969150602401600060405180830381600087803b1580156200423557600080fd5b505af11580156200424a573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620042d657600080fd5b505af1158015620042eb573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff851692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620043b557600080fd5b505af1158015620043ca573d6000803e3d6000fd5b50506005546040517f2414770800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301529091169250632414770891506024015b600060405180830381600087803b1580156200443d57600080fd5b505af115801562004452573d6000803e3d6000fd5b5050505062000ce5600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015620044c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620044ee9190620100d0565b826040518060400160405280601881526020017f496e636f727265637420666f7262696464656e206d61736b00000000000000008152506200f747565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620045b057600080fd5b505af1158015620045c5573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200465a57600080fd5b505af11580156200466f573d6000803e3d6000fd5b50506005546040517f526a41e8000000000000000000000000000000000000000000000000000000008152600060048201819052602482015273ffffffffffffffffffffffffffffffffffffffff909116925063526a41e89150604401600060405180830381600087803b158015620046e757600080fd5b505af1158015620046fc573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200479157600080fd5b505af1158015620047a6573d6000803e3d6000fd5b50506005546040517f456e07420000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063456e07429150602401600060405180830381600087803b1580156200481757600080fd5b505af11580156200482c573d6000803e3d6000fd5b50506000546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb392506200490791600401620103f4565b600060405180830381600087803b1580156200492257600080fd5b505af115801562004937573d6000803e3d6000fd5b50506005546040517f526a41e800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925063526a41e89150604401600060405180830381600087803b158015620049c257600080fd5b505af1158015620049d7573d6000803e3d6000fd5b50506000546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb3925062004ab291600401620103f4565b600060405180830381600087803b15801562004acd57600080fd5b505af115801562004ae2573d6000803e3d6000fd5b50506005546040517f456e074200000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063456e07429150602401600060405180830381600087803b15801562004b6657600080fd5b505af115801562004b7b573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562004c1057600080fd5b505af115801562004c25573d6000803e3d6000fd5b50506005546006546040517f526a41e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600060248201529116925063526a41e89150604401600060405180830381600087803b15801562004ca057600080fd5b505af115801562004cb5573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562004d4a57600080fd5b505af115801562004d5f573d6000803e3d6000fd5b50506005546006546040517f456e074200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063456e07429150602401600060405180830381600087803b15801562004dd357600080fd5b505af115801562004de8573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562004e7d57600080fd5b505af115801562004e92573d6000803e3d6000fd5b50506005546008546040517f526a41e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600060248201529116925063526a41e89150604401600060405180830381600087803b15801562004f0d57600080fd5b505af115801562004f22573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562004fb757600080fd5b505af115801562004fcc573d6000803e3d6000fd5b50506005546008546040517f456e074200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063456e074291506024015b600060405180830381600087803b15801562001b4757600080fd5b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b42645906200509b9060029060040162010076565b602060405180830381865afa158015620050b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050df9190620100a9565b90506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005151573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620051779190620100d0565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b158015620051fe57600080fd5b505af115801562005213573d6000803e3d6000fd5b50506005546040517fb53472ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152909116925063b53472ef915060240162004422565b600554604080517fc12c21c000000000000000000000000000000000000000000000000000000000815290516200535f9273ffffffffffffffffffffffffffffffffffffffff169163c12c21c09160048083019260209291908290030181865afa158015620052e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620053099190620100a9565b60035460408051808201909152601781527f496e636f7272656374206372656469744d616e61676572000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff909116906200f794565b600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290516200544e9273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa158015620053d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620053f89190620100a9565b60045460408051808201909152601681527f496e636f72726563742063726564697446616361646500000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff909116906200f794565b600554604080517f6f307dc30000000000000000000000000000000000000000000000000000000081529051620055b79273ffffffffffffffffffffffffffffffffffffffff1691636f307dc39160048083019260209291908290030181865afa158015620054c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054e79190620100a9565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005555573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200557b9190620100a9565b6040518060400160405280601481526020017f496e636f727265637420756e6465726c79696e670000000000000000000000008152506200f794565b600554604080517f2954018c0000000000000000000000000000000000000000000000000000000081529051620057209273ffffffffffffffffffffffffffffffffffffffff1691632954018c9160048083019260209291908290030181865afa1580156200562a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056509190620100a9565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620056be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620056e49190620100a9565b6040518060400160405280601981526020017f496e636f7272656374206164647265737350726f7669646572000000000000008152506200f794565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562005796573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620057bc91906201041c565b94509450945094509450620058128561ffff166103e861ffff166040518060400160405280601581526020017f496e636f727265637420666565496e74657265737400000000000000000000008152506200f747565b6200585d8461ffff1660c861ffff166040518060400160405280601881526020017f496e636f7272656374206665654c69717569646174696f6e00000000000000008152506200f747565b620058b661ffff8416620058766101f46127106201048c565b61ffff166040518060400160405280601d81526020017f496e636f7272656374206c69717569646174696f6e446973636f756e740000008152506200f747565b620059018261ffff16606461ffff166040518060400160405280601f81526020017f496e636f7272656374206665654c69717569646174696f6e45787069726564008152506200f747565b6200593d61ffff82166200591960c86127106201048c565b61ffff166040518060600160405280602481526020016205e4b6602491396200f747565b600554604080517f2954018c000000000000000000000000000000000000000000000000000000008152905162005aa69273ffffffffffffffffffffffffffffffffffffffff1691632954018c9160048083019260209291908290030181865afa158015620059b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620059d69190620100a9565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005a44573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005a6a9190620100a9565b6040518060400160405280601a81526020017f496e636f727265637420616464726573732070726f76696465720000000000008152506200f794565b6040805160e081018252600160a0820190815261245460c08301528152815180830183526002815261232860208281019190915280830191909152825180840184526005808252612260828401528385019190915283518085018552600380825261206c828501526060850191909152845180860186526004808252611c84828601526080860191909152905485517f458936f500000000000000000000000000000000000000000000000000000000815295519495929462005be99473ffffffffffffffffffffffffffffffffffffffff9092169363458936f5938181019392918290030181865afa15801562005ba2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005bc89190620100d0565b826040518060600160405280602481526020016205e467602491396200f747565b60005b8181101562005e0e576003546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa15801562005c69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005c8f9190620104aa565b600154919350915062005d8f90839073ffffffffffffffffffffffffffffffffffffffff166367b4264588876005811062005cce5762005cce620104e4565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815262005d0f919060040162010076565b602060405180830381865afa15801562005d2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005d539190620100a9565b6040518060400160405280601781526020017f496e636f727265637420746f6b656e20616464726573730000000000000000008152506200f794565b62005df68161ffff1686856005811062005dad5762005dad620104e4565b60200201516020015161ffff166040518060400160405280601f81526020017f496e636f7272656374206c69717569646174696f6e207468726573686f6c64008152506200f747565b5050808062005e05906201033d565b91505062005bec565b50600354604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905162005e829273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa158015620053d2573d6000803e3d6000fd5b600354604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905162005feb9273ffffffffffffffffffffffffffffffffffffffff1691632630c12f9160048083019260209291908290030181865afa15801562005ef5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005f1b9190620100a9565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005f89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005faf9190620100a9565b6040518060400160405280601681526020017f496e636f727265637420637265646974466163616465000000000000000000008152506200f794565b60048054604080517f860aefcf0000000000000000000000000000000000000000000000000000000081528151600094859473ffffffffffffffffffffffffffffffffffffffff169363860aefcf93808301939192908290030181865afa1580156200605b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006081919062010513565b915091506200617e826fffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630bc772da6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200610a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006130919062010542565b6fffffffffffffffffffffffffffffffff166040518060400160405280601b81526020017f496e636f7272656374206d696e426f72726f776564416d6f756e7400000000008152506200f747565b62006277816fffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663621869056040518163ffffffff1660e01b8152600401602060405180830381865afa15801562006203573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006229919062010542565b6fffffffffffffffffffffffffffffffff166040518060400160405280601b81526020017f496e636f7272656374206d6178426f72726f776564416d6f756e7400000000008152506200f747565b6000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015620062ea573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200631091906201011c565b92509250925062006400836fffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663621869056040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200639b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620063c1919062010542565b620063ce90600262010560565b6fffffffffffffffffffffffffffffffff166040518060600160405280602481526020016205e443602491396200f747565b6040805160608101909152602280825262006427918415916205e42160208301396200f946565b620064718164ffffffffff1660006040518060400160405280601981526020017f496e636f72726563742065787069726174696f6e2064617465000000000000008152506200f747565b505050505050505050505050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200650457600080fd5b505af115801562006519573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200658b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620065b19190620100a9565b6040517f530e784f00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff919091169063530e784f90602401600060405180830381600087803b1580156200662f57600080fd5b505af115801562006644573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b158015620066d057600080fd5b505af1158015620066e5573d6000803e3d6000fd5b505060405173c4375b7de8af5a38a93548eb8453a498222c4ff292507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a2600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0527ac66040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200679357600080fd5b505af1158015620067a8573d6000803e3d6000fd5b505050506200685f600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200681e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620068449190620100a9565b73c4375b7de8af5a38a93548eb8453a498222c4ff26200f808565b600354604080517f2f7a18810000000000000000000000000000000000000000000000000000000081529051620069179273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa158015620068d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620068f89190620100a9565b60045473ffffffffffffffffffffffffffffffffffffffff166200f808565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b4757600080fd5b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b15801562006a0757600080fd5b505af115801562006a1c573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562006ab157600080fd5b505af115801562006ac6573d6000803e3d6000fd5b50506005546006546040517f7bccacee00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015291169250637bccacee9150604401600060405180830381600087803b15801562006b4057600080fd5b505af115801562006b55573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe9eddd170000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562006bea57600080fd5b505af115801562006bff573d6000803e3d6000fd5b50506005546008546040517f7bccacee00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015291169250637bccacee915060440162001aa8565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa15801562006cda573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006d0091906201041c565b94509450945094509450600085600262006d1b91906201059b565b9050600062006d2c8660026201059b565b9050600062006d3e866127106201048c565b62006d4b9060026201059b565b9050600062006d5c8660026201059b565b9050600062006d6e866127106201048c565b62006d7b9060026201059b565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260048101839052602481018390526044810192909252600160648301529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562006e0757600080fd5b505af115801562006e1c573d6000803e3d6000fd5b50506040805161ffff898116825288811660208301528781168284015286811660608301528516608082015290517f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f93509081900360a0019150a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562006efc57600080fd5b505af115801562006f11573d6000803e3d6000fd5b50506005546040517ff206d32a00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff909116925063f206d32a915060a401600060405180830381600087803b15801562006fa557600080fd5b505af115801562006fba573d6000803e3d6000fd5b5050505062006fe985858561271062006fd491906201048c565b8562006fe3866127106201048c565b6200f990565b50505050505050505050565b6000546040517f06447d5600000000000000000000000000000000000000000000000000000000815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200707a57600080fd5b505af11580156200708f573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200712457600080fd5b505af115801562007139573d6000803e3d6000fd5b50506005546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526001602482015273ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150604401600060405180830381600087803b158015620071c457600080fd5b505af1158015620071d9573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200726e57600080fd5b505af115801562007283573d6000803e3d6000fd5b50506005546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925063a70bc5429150604401600060405180830381600087803b1580156200730e57600080fd5b505af115801562007323573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620073b857600080fd5b505af1158015620073cd573d6000803e3d6000fd5b50506005546040517fb53472ef00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b53472ef9150602401600060405180830381600087803b1580156200745157600080fd5b505af115801562007466573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620074fb57600080fd5b505af115801562007510573d6000803e3d6000fd5b50506005546040517f2414770800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063241477089150602401600060405180830381600087803b1580156200759457600080fd5b505af1158015620075a9573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200763e57600080fd5b505af115801562007653573d6000803e3d6000fd5b50506005546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201819052602482015273ffffffffffffffffffffffffffffffffffffffff9091169250637bccacee9150604401600060405180830381600087803b158015620076de57600080fd5b505af1158015620076f3573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200778857600080fd5b505af11580156200779d573d6000803e3d6000fd5b50506005546040517f52438e5400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff90911692506352438e549150602401600060405180830381600087803b1580156200782157600080fd5b505af115801562007836573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620078cb57600080fd5b505af1158015620078e0573d6000803e3d6000fd5b50506005546040517f9f1c5069000000000000000000000000000000000000000000000000000000008152600060048201819052602482015273ffffffffffffffffffffffffffffffffffffffff9091169250639f1c50699150604401600060405180830381600087803b1580156200795857600080fd5b505af11580156200796d573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562007a0257600080fd5b505af115801562007a17573d6000803e3d6000fd5b50506005546040517ff206d32a000000000000000000000000000000000000000000000000000000008152600060048201819052602482018190526044820181905260648201819052608482015273ffffffffffffffffffffffffffffffffffffffff909116925063f206d32a915060a401600060405180830381600087803b15801562007aa457600080fd5b505af115801562007ab9573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562007b4e57600080fd5b505af115801562007b63573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f0527ac66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562007bd257600080fd5b505af115801562007be7573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562007c7c57600080fd5b505af115801562007c91573d6000803e3d6000fd5b50506005546040517f526a41e800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526000602482015273ffffffffffffffffffffffffffffffffffffffff909116925063526a41e89150604401600060405180830381600087803b15801562007d1c57600080fd5b505af115801562007d31573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562007dc657600080fd5b505af115801562007ddb573d6000803e3d6000fd5b50506005546040517f456e074200000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063456e07429150602401600060405180830381600087803b15801562007e5f57600080fd5b505af115801562007e74573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b15801562007f0957600080fd5b505af115801562007f1e573d6000803e3d6000fd5b50506005546040517fffd9b9070000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ffd9b9079150602401600060405180830381600087803b15801562007f8f57600080fd5b505af115801562007fa4573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200803957600080fd5b505af11580156200804e573d6000803e3d6000fd5b50506005546040517f9c55a0540000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639c55a054915060240162001aa8565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200812f57600080fd5b505af115801562008144573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f3b899cf90000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b158015620081d957600080fd5b505af1158015620081ee573d6000803e3d6000fd5b50506005546006546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600160248201529116925063a70bc5429150604401600060405180830381600087803b1580156200826957600080fd5b505af11580156200827e573d6000803e3d6000fd5b50506001546040517f67b426450000000000000000000000000000000000000000000000000000000081526000935073ffffffffffffffffffffffffffffffffffffffff90911691506367b4264590620082de9060029060040162010076565b602060405180830381865afa158015620082fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620083229190620100a9565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f33c6608d00000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015620083b557600080fd5b505af1158015620083ca573d6000803e3d6000fd5b50506005546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260006024830152909116925063a70bc5429150604401600060405180830381600087803b1580156200844357600080fd5b505af115801562008458573d6000803e3d6000fd5b50506003546006546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526000945091169150637832743890602401602060405180830381865afa158015620084d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620084f89190620105bf565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f33c6608d00000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200858b57600080fd5b505af1158015620085a0573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063a70bc542905083620085d2846001620105dd565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b1580156200864257600080fd5b505af115801562008657573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620086c657600080fd5b505af1158015620086db573d6000803e3d6000fd5b505050505050565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081620086fa57505060408051808201918290526001547f67b4264500000000000000000000000000000000000000000000000000000000909252919250819073ffffffffffffffffffffffffffffffffffffffff166367b426456200878360026044850162010076565b602060405180830381865afa158015620087a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620087c79190620100a9565b73ffffffffffffffffffffffffffffffffffffffff16815260200161177061ffff1681525081600081518110620088025762008802620104e4565b602002602001018190525060006040518060a00160405280670de0b6b3a7640000603262008831919062010212565b6fffffffffffffffffffffffffffffffff1681526020016200885f670de0b6b3a7640000620249f062010212565b6fffffffffffffffffffffffffffffffff16815260208082018590526000604080840182905260609093015260025482517f6b70b04c000000000000000000000000000000000000000000000000000000008152925193945073ffffffffffffffffffffffffffffffffffffffff1692636b70b04c9260048082019392918290030181865afa158015620088f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200891d9190620100a9565b6040516200892b906200fec0565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f08015801562008965573d6000803e3d6000fd5b50600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905560608201516080830151604051620089c2906200fece565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562008a0c573d6000803e3d6000fd5b50600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316178155600354604080517f2630c12f00000000000000000000000000000000000000000000000000000000815290516000949290921692632630c12f9282820192602092908290030181865afa15801562008aaa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008ad09190620100a9565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b426459062008b2f9060029060040162010076565b602060405180830381865afa15801562008b4d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062008b739190620100a9565b905060006040518060200162008b89906200fedc565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081905260035460045462008bf09273ffffffffffffffffffffffffffffffffffffffff9283169291909116908890602001620105fd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905262008c2e9291602001620106e6565b6040516020818303038152906040529050600062008c4e82600062001617565b6003546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690639f5f86ae90602401600060405180830381600087803b15801562008cbe57600080fd5b505af115801562008cd3573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018490526044820193909352606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b15801562008d6257600080fd5b505af115801562008d77573d6000803e3d6000fd5b5050600654604051612454815273ffffffffffffffffffffffffffffffffffffffff90911692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562008e5457600080fd5b505af115801562008e69573d6000803e3d6000fd5b5050604080516103e8815260c8602082018190526101f48284015260646060830152608082015290517f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f93509081900360a0019150a1600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b15801562008f4757600080fd5b505af115801562008f5c573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018490526044820193909352606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200902c57600080fd5b505af115801562009041573d6000803e3d6000fd5b5050604051611770815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200911a57600080fd5b505af11580156200912f573d6000803e3d6000fd5b505060045460405173ffffffffffffffffffffffffffffffffffffffff90911692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201526024810183905260448101839052606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200920057600080fd5b505af115801562009215573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620092e257600080fd5b505af1158015620092f7573d6000803e3d6000fd5b507fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060029150620093389050670de0b6b3a7640000620249f062010212565b62009344919062010212565b6040516fffffffffffffffffffffffffffffffff909116815260200160405180910390a1600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b158015620093f057600080fd5b505af115801562009405573d6000803e3d6000fd5b505050507f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb670de0b6b3a7640000603262009441919062010212565b62009458670de0b6b3a7640000620249f062010212565b604080516fffffffffffffffffffffffffffffffff93841681529290911660208301520160405180910390a1620086db8260006200a338565b60048054604080517f860aefcf0000000000000000000000000000000000000000000000000000000081528151600094859473ffffffffffffffffffffffffffffffffffffffff169363860aefcf93808301939192908290030181865afa15801562009501573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009527919062010513565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9aadd6f000000000000000000000000000000000000000000000000000000000600482015292945090925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b158015620095bd57600080fd5b505af1158015620095d2573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200965b57600080fd5b505af115801562009670573d6000803e3d6000fd5b50506005546040517f9f1c50690000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528616602482015273ffffffffffffffffffffffffffffffffffffffff9091169250639f1c50699150604401600060405180830381600087803b158015620096fa57600080fd5b505af11580156200970f573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562009783573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620097a991906201011c565b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9aadd6f000000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200983e57600080fd5b505af115801562009853573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b158015620098dc57600080fd5b505af1158015620098f1573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff169150639f1c50699050846200992384600162010710565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526fffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156200998d57600080fd5b505af1158015620099a2573d6000803e3d6000fd5b50505050505050565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b426459062009a059060029060040162010076565b602060405180830381865afa15801562009a23573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009a499190620100a9565b6003546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063f67c5bd090602401602060405180830381865afa15801562009ac0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009ae69190620100d0565b6000546005546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015292935062010000909104169063ca669fa790602401600060405180830381600087803b15801562009b5f57600080fd5b505af115801562009b74573d6000803e3d6000fd5b50506003546040517fa366f4960000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff909116925063a366f4969150602401600060405180830381600087803b15801562009be557600080fd5b505af115801562009bfa573d6000803e3d6000fd5b505050506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa15801562009c6e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062009c949190620100d0565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562009d1b57600080fd5b505af115801562009d30573d6000803e3d6000fd5b50506005546040517f2414770800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152909116925063241477089150602401600060405180830381600087803b15801562009da257600080fd5b505af115801562009db7573d6000803e3d6000fd5b5050505062003c32600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015620044c8573d6000803e3d6000fd5b60005b60028110156200266b5780151560005b60028110156200a3205780151562009e5762001b62565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b15801562009edc57600080fd5b505af115801562009ef1573d6000803e3d6000fd5b50506005546040517fffd9b907000000000000000000000000000000000000000000000000000000008152841515600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ffd9b9079150602401600060405180830381600087803b15801562009f6357600080fd5b505af115801562009f78573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562009fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a01291906201011c565b50915050831515811515146200a10057600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200a0aa57600080fd5b505af11580156200a0bf573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d3846040516200a0f7911515815260200190565b60405180910390a15b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200a18557600080fd5b505af11580156200a19a573d6000803e3d6000fd5b50506005546040517fffd9b907000000000000000000000000000000000000000000000000000000008152871515600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ffd9b9079150602401600060405180830381600087803b1580156200a20c57600080fd5b505af11580156200a221573d6000803e3d6000fd5b505060048054604080517fcff0ab96000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216945063cff0ab96935080830192606092918290030181865afa1580156200a293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a2b991906201011c565b90915050809150506200a308841515821515146040518060400160405280602081526020017f496e636f7272656374206973496e63726561736544656274466f62696464656e8152506200f946565b505080806200a317906201033d565b91505062009e40565b505080806200a32f906201033d565b91505062009e30565b60008183516020850134f59050803b62003c3257600080fd5b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200a3d657600080fd5b505af11580156200a3eb573d6000803e3d6000fd5b50506005546009546007546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169250637bccacee9150604401600060405180830381600087803b1580156200a46a57600080fd5b505af11580156200a47f573d6000803e3d6000fd5b505050506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200a4f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a5199190620100d0565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810183905260648101929092529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200a5a557600080fd5b505af11580156200a5ba573d6000803e3d6000fd5b505060095460405173ffffffffffffffffffffffffffffffffffffffff90911692507fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f9150600090a26005546009546040517f52438e5400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116906352438e5490602401600060405180830381600087803b1580156200a67357600080fd5b505af11580156200a688573d6000803e3d6000fd5b50506003546007546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526200a76894509116915063ff68754390602401602060405180830381865afa1580156200a704573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a72a9190620100a9565b60006040518060400160405280601c81526020017f4372656469744d616e61676572207761736e27742075647061746564000000008152506200f794565b6003546009546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526200a84692919091169063fdd5764590602401602060405180830381865afa1580156200a7e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a8089190620100a9565b60006040518060400160405280601b81526020017f437265646974466163616465207761736e2774207564706174656400000000008152506200f794565b600554604080517f50e036ff00000000000000000000000000000000000000000000000000000000815290516200a8ec9273ffffffffffffffffffffffffffffffffffffffff16916350e036ff9160048083019260209291908290030181865afa1580156200a8b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a8df9190620100d0565b62003a5d6001846201073e565b600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002afb57600080fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa1580156200a9c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200a9ec919062010513565b6000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291935062010000900473ffffffffffffffffffffffffffffffffffffffff16915063ca669fa790602401600060405180830381600087803b1580156200aa7457600080fd5b505af11580156200aa89573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9aadd6f00000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200ab1e57600080fd5b505af11580156200ab33573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff169150639c55a05490506200ab6460018462010758565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526fffffffffffffffffffffffffffffffff9091166004820152602401600060405180830381600087803b1580156200abc757600080fd5b505af11580156200abdc573d6000803e3d6000fd5b505050506000600a82600c6200abf3919062010560565b6200abff919062010784565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260048101839052602481018390526044810192909252600160648301529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200ac8b57600080fd5b505af11580156200aca0573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff841681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d9250602001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200ad6f57600080fd5b505af11580156200ad84573d6000803e3d6000fd5b50506005546040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9091169250639c55a0549150602401600060405180830381600087803b1580156200ae0657600080fd5b505af11580156200ae1b573d6000803e3d6000fd5b505050506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156200ae8f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200aeb591906201011c565b5050905062003c32816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff166040518060400160405280601a81526020017f496e636f7272656374206e6577206c696d69747320626c6f636b0000000000008152506200f747565b600354604080517f458936f5000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163458936f59160048083019260209291908290030181865afa1580156200af90573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200afb69190620100d0565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200b0159060069060040162010076565b602060405180830381865afa1580156200b033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b0599190620100a9565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810183905260648101929092529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200b0e557600080fd5b505af11580156200b0fa573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200b1c457600080fd5b505af11580156200b1d9573d6000803e3d6000fd5b50506005546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261226060248301529091169250633e7c88d69150604401600060405180830381600087803b1580156200b25357600080fd5b505af11580156200b268573d6000803e3d6000fd5b505050506200b34d600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200b2de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b3049190620100d0565b6200b311846001620101cb565b6040518060400160405280601681526020017f496e636f727265637420746f6b656e7320636f756e74000000000000000000008152506200f747565b6003546040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905260009173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156200b3bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b3e39190620104aa565b5090506200b42881836040518060400160405280601a81526020017f546f6b656e206973206e6f7420616464656420746f206c6973740000000000008152506200f794565b6003546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526200b5039260009291169063f67c5bd090602401602060405180830381865afa1580156200b4a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b4c69190620100d0565b116040518060400160405280601481526020017f496e636f727265637420746f6b656e206d61736b0000000000000000000000008152506200f946565b6003546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015262003c32921690637832743890602401602060405180830381865afa1580156200b577573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200b59d9190620105bf565b61ffff166122606040518060400160405280601481526020017f5468726573686f6c64207761736e2774207365740000000000000000000000008152506200f747565b60005b60028110156200266b5780151560005b60028110156200c8695780151560005b60028110156200c851578015156200b61a62001b62565b82156200b94e5760035460405160009173ffffffffffffffffffffffffffffffffffffffff169082906001906200b651906200fece565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f0801580156200b69b573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200b72357600080fd5b505af11580156200b738573d6000803e3d6000fd5b50506005546040517f526a41e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528615156024830152909116925063526a41e89150604401600060405180830381600087803b1580156200b7b257600080fd5b505af11580156200b7c7573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200b85057600080fd5b505af11580156200b865573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df90506200b896426001620101cb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff9091166004820152602401600060405180830381600087803b1580156200b8ee57600080fd5b505af11580156200b903573d6000803e3d6000fd5b5050600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925550505b60035460405160009173ffffffffffffffffffffffffffffffffffffffff1690829086906200b97d906200fece565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f0801580156200b9c7573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200ba4f57600080fd5b505af11580156200ba64573d6000803e3d6000fd5b50506005546040517ffb1bd8c400000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fb1bd8c49150602401600060405180830381600087803b1580156200bae857600080fd5b505af11580156200bafd573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200bb8657600080fd5b505af11580156200bb9b573d6000803e3d6000fd5b50506005546040517ffb1bd8c40000000000000000000000000000000000000000000000000000000081527393548eb8453a498222c4ff2c4375b7de8af5a38a600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fb1bd8c49150602401600060405180830381600087803b1580156200bc1f57600080fd5b505af11580156200bc34573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200bcbd57600080fd5b505af11580156200bcd2573d6000803e3d6000fd5b50506005546040517fffd9b907000000000000000000000000000000000000000000000000000000008152891515600482015273ffffffffffffffffffffffffffffffffffffffff909116925063ffd9b9079150602401600060405180830381600087803b1580156200bd4457600080fd5b505af11580156200bd59573d6000803e3d6000fd5b505050506000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156200bdd0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200bdf691906201011c565b925092509250600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa1580156200be6c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200be92919062010513565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810183905260648101929092529294509092506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200bf2157600080fd5b505af11580156200bf36573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff891692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200c00057600080fd5b505af11580156200c015573d6000803e3d6000fd5b50506005546040517f526a41e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528b15156024830152909116925063526a41e89150604401600060405180830381600087803b1580156200c08f57600080fd5b505af11580156200c0a4573d6000803e3d6000fd5b505050506200c24b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200c11a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c1409190620100a9565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200c1ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c1d49190620100a9565b73ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200c21f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c2459190620100a9565b6200f808565b600354604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290516200c2eb9273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa1580156200c2be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c2e49190620100a9565b876200f808565b600554604080517f2f7a188100000000000000000000000000000000000000000000000000000000815290516200c35e9273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa1580156200c2be573d6000803e3d6000fd5b60008060008873ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156200c3af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c3d591906201011c565b9250925092506000808a73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa1580156200c429573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c44f919062010513565b915091506000808d156200c587576040517f79c0ef910000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff8e16906379c0ef9190602401602060405180830381865afa1580156200c4c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c4ef9190620100a9565b6040517f79c0ef910000000000000000000000000000000000000000000000000000000081526001600482015290925073ffffffffffffffffffffffffffffffffffffffff8e16906379c0ef9190602401602060405180830381865afa1580156200c55e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200c5849190620100a9565b90505b6200c5fc876fffffffffffffffffffffffffffffffff168f6200c5ac5760006200c5ae565b8d5b6fffffffffffffffffffffffffffffffff166040518060400160405280601881526020017f496e636f727277656374206c696d6974506572426c6f636b00000000000000008152506200f747565b6200c671846fffffffffffffffffffffffffffffffff168f6200c6215760006200c623565b8a5b6fffffffffffffffffffffffffffffffff166040518060400160405280601c81526020017f496e636f727277656374206d696e426f72726f776564416d6f756e74000000008152506200f747565b6200c6e6836fffffffffffffffffffffffffffffffff168f6200c6965760006200c698565b895b6fffffffffffffffffffffffffffffffff166040518060400160405280601c81526020017f496e636f727277656374206d6178426f72726f776564416d6f756e74000000008152506200f747565b6200c73c8e6200c6f85760006200c6fa565b8b5b1515871515146040518060400160405280602081526020017f496e636f7272656374206973496e63726561736544656274466f62696464656e8152506200f946565b6200c79b8564ffffffffff168f6200c7565760006200c758565b8b5b64ffffffffff166040518060400160405280601881526020017f496e636f72726563742065787069726174696f6e4461746500000000000000008152506200f747565b6200c7e4828f6200c7ae5760006200c7c4565b73c4375b7de8af5a38a93548eb8453a498222c4ff25b6040518060600160405280602a81526020016205e392602a91396200f794565b6200c82d818f6200c7f75760006200c80d565b7393548eb8453a498222c4ff2c4375b7de8af5a38a5b6040518060600160405280602a81526020016205e368602a91396200f794565b505050505050505050505050505080806200c848906201033d565b9150506200b603565b505080806200c860906201033d565b9150506200b5f3565b505080806200c878906201033d565b9150506200b5e3565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f1170cc2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200c91257600080fd5b505af11580156200c927573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200c9b057600080fd5b505af11580156200c9c5573d6000803e3d6000fd5b5050600554600a546040517f52438e5400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152911692506352438e54915060240162005026565b60008054610100900460ff16156200ca455750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200cb895760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916200caed917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001620107db565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200cb279162010825565b6000604051808303816000865af19150503d80600081146200cb66576040519150601f19603f3d011682016040523d82523d6000602084013e6200cb6b565b606091505b50915050808060200190518101906200cb85919062010843565b9150505b919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200cc1357600080fd5b505af11580156200cc28573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f727de5c60000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200ccbd57600080fd5b505af11580156200ccd2573d6000803e3d6000fd5b50506005546003546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169250637bccacee9150604401600060405180830381600087803b1580156200cd5157600080fd5b505af11580156200cd66573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f727de5c60000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200cdfb57600080fd5b505af11580156200ce10573d6000803e3d6000fd5b5050600554600954600480546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416928101929092528216602482015291169250637bccacee9150604401600060405180830381600087803b1580156200ce9157600080fd5b505af11580156200cea6573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f727de5c60000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200cf3b57600080fd5b505af11580156200cf50573d6000803e3d6000fd5b5050600554600480546009546040517f7bccacee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831693810193909352811660248301529091169250637bccacee915060440162001aa8565b6000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f61081c150000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200d04e57600080fd5b505af11580156200d063573d6000803e3d6000fd5b50506005546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff600482015273ffffffffffffffffffffffffffffffffffffffff909116925063dc2b21c19150602401600060405180830381600087803b1580156200d0d457600080fd5b505af11580156200d0e9573d6000803e3d6000fd5b5050600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600481018390526024810183905260448101929092526001606483015262010000900473ffffffffffffffffffffffffffffffffffffffff16925063491cc7c29150608401600060405180830381600087803b1580156200d17557600080fd5b505af11580156200d18a573d6000803e3d6000fd5b505060405160ff81527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa9509250602001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200d24857600080fd5b505af11580156200d25d573d6000803e3d6000fd5b50506005546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff600482015273ffffffffffffffffffffffffffffffffffffffff909116925063dc2b21c19150602401600060405180830381600087803b1580156200d2ce57600080fd5b505af11580156200d2e3573d6000803e3d6000fd5b50505050620033fe600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200d359573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200d37f919062010861565b60ff1660ff6040518060600160405280602b81526020016205e48b602b91396200f747565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200d42957600080fd5b505af11580156200d43e573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200d4d357600080fd5b505af11580156200d4e8573d6000803e3d6000fd5b50506005546040517fb53472ef00000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063b53472ef9150602401600060405180830381600087803b1580156200d56c57600080fd5b505af11580156200d581573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200d61657600080fd5b505af11580156200d62b573d6000803e3d6000fd5b50506005546006546040517fb53472ef00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116925063b53472ef9150602401600060405180830381600087803b1580156200d69f57600080fd5b505af11580156200d6b4573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200d74957600080fd5b505af11580156200d75e573d6000803e3d6000fd5b50506005546040517f2414770800000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff2600482015273ffffffffffffffffffffffffffffffffffffffff909116925063241477089150602401600060405180830381600087803b1580156200d7e257600080fd5b505af11580156200d7f7573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f700ca0af0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200d88c57600080fd5b505af11580156200d8a1573d6000803e3d6000fd5b50506005546006546040517f2414770800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152911692506324147708915060240162001aa8565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200d98557600080fd5b505af11580156200d99a573d6000803e3d6000fd5b505050506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156200da0e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200da3491906201041c565b50506001546040517f67b4264500000000000000000000000000000000000000000000000000000000815293945060009373ffffffffffffffffffffffffffffffffffffffff90911692506367b4264591506200da979060029060040162010076565b602060405180830381865afa1580156200dab5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200dadb9190620100a9565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906367b42645906200db3a9060039060040162010076565b602060405180830381865afa1580156200db58573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200db7e9190620100a9565b6005546003546006546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529394509182169263a70bc5429286921690637832743890602401602060405180830381865afa1580156200dc02573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200dc289190620105bf565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b1580156200dc9857600080fd5b505af11580156200dcad573d6000803e3d6000fd5b50505050600060c860026200dcc391906201059b565b6200dcd36101f46127106201048c565b6200dcdf91906201048c565b6003546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff93909316935060009290911690637832743890602401602060405180830381865afa1580156200dd5c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200dd829190620105bf565b600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018490526044820193909352606481019290925261ffff9290921692506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200de1757600080fd5b505af11580156200de2c573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff871692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018490526044820193909352606481019290925262010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200df0a57600080fd5b505af11580156200df1f573d6000803e3d6000fd5b505060065460405161ffff8616815273ffffffffffffffffffffffffffffffffffffffff90911692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a260055473ffffffffffffffffffffffffffffffffffffffff1663f206d32a866200dfa360c860026201059b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815261ffff9283166004820152911660248201526101f4604482015260648181015260c8608482015260a401600060405180830381600087803b1580156200e01457600080fd5b505af11580156200e029573d6000803e3d6000fd5b50506003546006546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526200e0f0945091169150637832743890602401602060405180830381865afa1580156200e0a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200e0cb9190620105bf565b61ffff16836040518060600160405280602181526020016205e3bc602191396200f747565b6003546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526200e1af921690637832743890602401602060405180830381865afa1580156200e164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200e18a9190620105bf565b61ffff16836040518060600160405280602381526020016205e3fe602391396200f747565b6003546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015262002b10921690637832743890602401602060405180830381865afa1580156200e223573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200e2499190620105bf565b61ffff16826040518060600160405280602381526020016205e4da602391396200f747565b60048054604080517f860aefcf0000000000000000000000000000000000000000000000000000000081528151600094859473ffffffffffffffffffffffffffffffffffffffff169363860aefcf93808301939192908290030181865afa1580156200e2de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200e304919062010513565b909250905060006200e319836103e862010710565b905060006200e32b836103e862010710565b600080546040517f491cc7c200000000000000000000000000000000000000000000000000000000815260048101839052602481018390526044810192909252600160648301529192506201000090910473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200e3b757600080fd5b505af11580156200e3cc573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8087168252851660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905060405180910390a16000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200e4a257600080fd5b505af11580156200e4b7573d6000803e3d6000fd5b50506005546040517f9f1c50690000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80871660048301528516602482015273ffffffffffffffffffffffffffffffffffffffff9091169250639f1c50699150604401600060405180830381600087803b1580156200e54157600080fd5b505af11580156200e556573d6000803e3d6000fd5b505060048054604080517f860aefcf000000000000000000000000000000000000000000000000000000008152815173ffffffffffffffffffffffffffffffffffffffff909316955063860aefcf945080840193919291908290030181865afa1580156200e5c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200e5ee919062010513565b80945081955050506200e65c846fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff166040518060400160405280601b81526020017f496e636f7272656374206d696e426f72726f776564416d6f756e7400000000008152506200f747565b62001b5c836fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff166040518060400160405280601b81526020017f496e636f7272656374206d6178426f72726f776564416d6f756e7400000000008152506200f747565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b1580156200e74757600080fd5b505af11580156200e75c573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb2335f2e0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200e7f157600080fd5b505af11580156200e806573d6000803e3d6000fd5b50506005546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815260006004820152612454602482015273ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150604401600060405180830381600087803b1580156200e87f57600080fd5b505af11580156200e894573d6000803e3d6000fd5b50506000546040805173c4375b7de8af5a38a93548eb8453a498222c4ff260248083019190915282518083039091018152604490910182526020810180517fdf4c572d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905290517ff28dceb30000000000000000000000000000000000000000000000000000000081526201000090920473ffffffffffffffffffffffffffffffffffffffff16935063f28dceb392506200e96f91600401620103f4565b600060405180830381600087803b1580156200e98a57600080fd5b505af11580156200e99f573d6000803e3d6000fd5b50506005546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273c4375b7de8af5a38a93548eb8453a498222c4ff26004820152612454602482015273ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150604401600060405180830381600087803b1580156200ea2b57600080fd5b505af11580156200ea40573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f528ca31d0000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200ead557600080fd5b505af11580156200eaea573d6000803e3d6000fd5b50506005546040517f3e7c88d6000000000000000000000000000000000000000000000000000000008152306004820152612454602482015273ffffffffffffffffffffffffffffffffffffffff9091169250633e7c88d69150604401600060405180830381600087803b1580156200eb6257600080fd5b505af11580156200eb77573d6000803e3d6000fd5b5050505060006040516200eb8b906200feea565b60408082526004908201527f545750460000000000000000000000000000000000000000000000000000000060608201526080602082018190526017908201527f546f6b656e20776974686f75742070726963654665656400000000000000000060a082015260c001604051809103906000f0801580156200ec11573d6000803e3d6000fd5b506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f67a7cd4300000000000000000000000000000000000000000000000000000000600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063c31eb0e090602401600060405180830381600087803b1580156200eca557600080fd5b505af11580156200ecba573d6000803e3d6000fd5b50506005546040517f3e7c88d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261245460248301529091169250633e7c88d6915060440162002a5c565b6001546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009173ffffffffffffffffffffffffffffffffffffffff16906367b42645906200ed799060029060040162010076565b602060405180830381865afa1580156200ed97573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200edbd9190620100a9565b600080546040517f491cc7c2000000000000000000000000000000000000000000000000000000008152600160048201819052602482018490526044820193909352606481019290925291925060189162010000900473ffffffffffffffffffffffffffffffffffffffff169063491cc7c290608401600060405180830381600087803b1580156200ee4e57600080fd5b505af11580156200ee63573d6000803e3d6000fd5b505060405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a26000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200ef3b57600080fd5b505af11580156200ef50573d6000803e3d6000fd5b50506005546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015261ffff86166024830152909116925063a70bc5429150604401600060405180830381600087803b1580156200efcc57600080fd5b505af11580156200efe1573d6000803e3d6000fd5b50506003546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015262000ce594509091169150637832743890602401602060405180830381865afa1580156200f05b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200f0819190620105bf565b61ffff168261ffff166200fb8c565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156200f101573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200f12791906201041c565b506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0b361d6900000000000000000000000000000000000000000000000000000000600482015293965090945062010000900473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e0916024019050600060405180830381600087803b1580156200f1c157600080fd5b505af11580156200f1d6573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200f25f57600080fd5b505af11580156200f274573d6000803e3d6000fd5b50506005546040517ff206d32a000000000000000000000000000000000000000000000000000000008152612710600482015261ffff8616602482015260006044820181905260648201819052608482015273ffffffffffffffffffffffffffffffffffffffff909116925063f206d32a915060a401600060405180830381600087803b1580156200f30557600080fd5b505af11580156200f31a573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0b361d690000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200f3af57600080fd5b505af11580156200f3c4573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200f44d57600080fd5b505af11580156200f462573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063f206d32a90506200f49560016127106201048c565b846200f4a4816127106201048c565b60405160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815261ffff938416600482015291831660248301529091166044820152600060648201819052608482015260a401600060405180830381600087803b1580156200f51757600080fd5b505af11580156200f52c573d6000803e3d6000fd5b50506000546040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0b361d690000000000000000000000000000000000000000000000000000000060048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063c31eb0e09150602401600060405180830381600087803b1580156200f5c157600080fd5b505af11580156200f5d6573d6000803e3d6000fd5b50506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16925063ca669fa79150602401600060405180830381600087803b1580156200f65f57600080fd5b505af11580156200f674573d6000803e3d6000fd5b505060055473ffffffffffffffffffffffffffffffffffffffff16915063f206d32a90506200f6a760016127106201048c565b8460016200f6b8826127106201048c565b6200f6c491906201048c565b856200f6d3816127106201048c565b60405160e087901b7fffffffff0000000000000000000000000000000000000000000000000000000016815261ffff95861660048201529385166024850152918416604484015283166064830152909116608482015260a401600060405180830381600087803b158015620086c657600080fd5b81831462003c32577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200f780919062010886565b60405180910390a162003c3283836200fb8c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462003c32577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200f7f9919062010886565b60405180910390a162003c3283835b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000ce5577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200f8c29060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f816040516200f8fb9190620108cf565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f826040516200f934919062010931565b60405180910390a162000ce56200fc8c565b8162000ce5577f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583816040516200f97d919062010886565b60405180910390a162000ce5826200fe0f565b6000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639af1d35a6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156200fa06573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200fa2c91906201041c565b945094509450945094506200fa808561ffff168b61ffff166040518060400160405280601581526020017f496e636f727265637420666565496e74657265737400000000000000000000008152506200f747565b6200faca8461ffff168a61ffff166040518060400160405280601881526020017f496e636f7272656374206665654c69717569646174696f6e00000000000000008152506200f747565b6200fb148361ffff168961ffff166040518060400160405280601d81526020017f496e636f7272656374206c69717569646174696f6e446973636f756e740000008152506200f747565b6200fb5e8261ffff168861ffff166040518060400160405280601f81526020017f496e636f7272656374206665654c69717569646174696f6e45787069726564008152506200f747565b62006fe98161ffff168761ffff166040518060600160405280602481526020016205e4b6602491396200f747565b80821462000ce5577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200fc1a9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8816040516200fc5391906201096f565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516200f9349190620109bb565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200fde15760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200fd5e9291602001620107db565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200fd989162010825565b6000604051808303816000865af19150503d80600081146200fdd7576040519150601f19603f3d011682016040523d82523d6000602084013e6200fddc565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b806200266b577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200fe759060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16200266b6200fc8c565b617a5180620109fa83390190565b62031ed6806201844b83390190565b6102ba806204a32183390190565b6118e8806204a5db83390190565b6158e8806204bec383390190565b615e9780620517ab83390190565b615f3d806205764283390190565b610de9806205d57f83390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156200ff71576200ff716200fef8565b604052919050565b600080604083850312156200ff8d57600080fd5b823567ffffffffffffffff808211156200ffa657600080fd5b818501915085601f8301126200ffbb57600080fd5b81356020828211156200ffd2576200ffd26200fef8565b62010004817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116016200ff27565b925081835287818386010111156201001b57600080fd5b8181850182850137600091830181019190915290969401359450505050565b600b811062010072577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b602081016200169b82846201003a565b73ffffffffffffffffffffffffffffffffffffffff811681146200266b57600080fd5b600060208284031215620100bc57600080fd5b8151620100c98162010086565b9392505050565b600060208284031215620100e357600080fd5b5051919050565b80516fffffffffffffffffffffffffffffffff811681146200cb8957600080fd5b805180151581146200cb8957600080fd5b6000806000606084860312156201013257600080fd5b6201013d84620100ea565b92506201014d602085016201010b565b9150604084015164ffffffffff811681146201016857600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600064ffffffffff83811690831681811015620101c357620101c362010173565b039392505050565b60008219821115620101e157620101e162010173565b500190565b600064ffffffffff80831681851680830382111562010209576201020962010173565b01949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156201024d576201024d62010173565b500290565b73ffffffffffffffffffffffffffffffffffffffff8316815260408101620100c960208301846201003a565b600060208083850312156201029257600080fd5b825167ffffffffffffffff80821115620102ab57600080fd5b818501915085601f830112620102c057600080fd5b815181811115620102d557620102d56200fef8565b8060051b9150620102e88483016200ff27565b81815291830184019184810190888411156201030357600080fd5b938501935b83851015620103315784519250620103208362010086565b828252938501939085019062010308565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562010372576201037262010173565b5060010190565b60005b83811015620103965781810151838201526020016201037c565b8381111562001b5c5750506000910152565b60008151808452620103c281602086016020860162010379565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000620100c96020830184620103a8565b805161ffff811681146200cb8957600080fd5b600080600080600060a086880312156201043557600080fd5b620104408662010409565b9450620104506020870162010409565b9350620104606040870162010409565b9250620104706060870162010409565b9150620104806080870162010409565b90509295509295909350565b600061ffff83811690831681811015620101c357620101c362010173565b60008060408385031215620104be57600080fd5b8251620104cb8162010086565b9150620104db6020840162010409565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080604083850312156201052757600080fd5b6201053283620100ea565b9150620104db60208401620100ea565b6000602082840312156201055557600080fd5b620100c982620100ea565b60006fffffffffffffffffffffffffffffffff8083168185168183048111821515161562010592576201059262010173565b02949350505050565b600061ffff8083168185168183048111821515161562010592576201059262010173565b600060208284031215620105d257600080fd5b620100c98262010409565b600061ffff80831681851680830382111562010209576201020962010173565b600073ffffffffffffffffffffffffffffffffffffffff8086168352602081861681850152604060608186015261010085016fffffffffffffffffffffffffffffffff8088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b80831015620106a757835180518816835286015161ffff168683015292850192600192909201919084019062010676565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660c0890152608090980151151560e0909701969096525094979650505050505050565b60008351620106fa81846020880162010379565b8351908301906201020981836020880162010379565b60006fffffffffffffffffffffffffffffffff80831681851680830382111562010209576201020962010173565b60008282101562010753576201075362010173565b500390565b60006fffffffffffffffffffffffffffffffff83811690831681811015620101c357620101c362010173565b60006fffffffffffffffffffffffffffffffff80841680620107cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516201081781600485016020870162010379565b919091016004019392505050565b600082516201083981846020870162010379565b9190910192915050565b6000602082840312156201085657600080fd5b620100c9826201010b565b6000602082840312156201087457600080fd5b815160ff81168114620100c957600080fd5b60408152600560408201527f4572726f720000000000000000000000000000000000000000000000000000006060820152608060208201526000620100c96080830184620103a8565b6040815260006201090d60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b6040815260006201090d60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b604081526000620109ad60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b604081526000620109ad60408301600a81527f2020202041637475616c0000000000000000000000000000000000000000000060208201526040019056fe60806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b506040805161018081019091526000908060c081018060018152604080518082018252600381526244414960e81b6020828101919091528301526012908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806002600a811115620000b957620000b962000b78565b815260408051808201825260048152635553444360e01b6020828101919091528301526006908201526305f5e100606082015260800160018152602001600081525081526020016040518060c001604052806003600a81111562000121576200012162000b78565b815260408051808201825260048152630ae8aa8960e31b602082810191909152830152601290820152644a817c8000606082015260800160028152602001600081525081526020016040518060c001604052806004600a8111156200018a576200018a62000b78565b815260408051808201825260048152634c494e4b60e01b6020828101919091528301526012908201526359682f00606082015260800160018152602001600081525081526020016040518060c001604052806005600a811115620001f257620001f262000b78565b815260408051808201825260048152631554d11560e21b602082810191909152830152601290820152633b023380606082015260800160018152602001600081525081526020016040518060c001604052806006600a8111156200025a576200025a62000b78565b815260408051808201825260058152640e6e88aa8960db1b602082810191909152830152601290820152644cd588640060608201526080016003815260200160009052905260408051610140810190915290915060009080608081018060078152602001604051806040016040528060048152602001636344414960e01b8152508152602001601260ff1681526020016305f5e100815260200160048081111562000309576200030962000b78565b8152602001600181525081526020016040518060c001604052806008600a81111562000339576200033962000b78565b81526040805180820182526005815264635553444360d81b6020828101919091528301526006908201526305f5e100606082015260800160048152602001600281525081526020016040518060c001604052806009600a811115620003a257620003a262000b78565b8152604080518082018252600581526418d554d11560da1b602082810191909152830152601290820152633b023380606082015260800160048152602001600581525081526020016040518060c00160405280600a808111156200040a576200040a62000b78565b81526040805180820182526005815264634c494e4b60d81b6020828101919091528301526012908201526359682f00606082015260800160048152602001600490529052905060005b600681101562000496576200048183826006811062000476576200047662000b8e565b6020020151620004db565b806200048d8162000ba4565b91505062000453565b5060005b6004811015620004d257620004bd82826004811062000476576200047662000b8e565b80620004c98162000ba4565b9150506200049a565b50505062000d14565b6000600282608001516004811115620004f857620004f862000b78565b14156200054e576040516200050d9062000a8c565b604051809103906000f0801580156200052a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03831617905590506200071e565b60038260800151600481111562000569576200056962000b78565b1415620005a4576040516200057e9062000a9a565b604051809103906000f0801580156200059b573d6000803e3d6000fd5b5090506200071e565b600182608001516004811115620005bf57620005bf62000b78565b1415620005f157816020015182602001518360400151604051620005e39062000aa8565b6200057e9392919062000c1e565b6004826080015160048111156200060c576200060c62000b78565b1415620006be576000600260008460a00151600a81111562000632576200063262000b78565b600a81111562000646576200064662000b78565b815260200190815260200160002060009054906101000a90046001600160a01b0316905082602001518360200151846040015183604051620006889062000ab6565b62000697949392919062000c5b565b604051809103906000f080158015620006b4573d6000803e3d6000fd5b509150506200071e565b60405162461bcd60e51b815260206004820152602b60248201527f74657374546f6b656e53756974653a204372656174696e6720756e6b6e6f776e60448201526a20746f6b656e207479706560a81b606482015260840160405180910390fd5b60005460208301516040516318caf8e360e31b8152620100009092046001600160a01b03169163c657c718916200075b9185919060040162000ca9565b600060405180830381600087803b1580156200077657600080fd5b505af11580156200078b573d6000803e3d6000fd5b50505050600082606001516008604051620007a69062000ac4565b91825260ff166020820152604001604051809103906000f080158015620007d1573d6000803e3d6000fd5b50905081600260008560000151600a811115620007f257620007f262000b78565b600a81111562000806576200080662000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260600151600560008560000151600a8111156200085a576200085a62000b78565b600a8111156200086e576200086e62000b78565b8152602080820192909252604090810160009081209390935585516001600160a01b03861684526008909252909120805460ff1916600183600a811115620008ba57620008ba62000b78565b02179055508260800151600360008560000151600a811115620008e157620008e162000b78565b600a811115620008f557620008f562000b78565b81526020810191909152604001600020805460ff1916600183600481111562000922576200092262000b78565b0217905550604080518082019091526001600160a01b0380841682528281166020808401918252600780546001810182556000918252945160029095027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688810180549686166001600160a01b031997881617905592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689909301805493909416929094169190911790915584015184519091600491600a811115620009eb57620009eb62000b78565b600a811115620009ff57620009ff62000b78565b8152602001908152602001600020908051906020019062000a2292919062000ad2565b5080600660008560000151600a81111562000a415762000a4162000b78565b600a81111562000a555762000a5562000b78565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b610ab1806200285183390190565b611224806200330283390190565b611758806200452683390190565b6117098062005c7e83390190565b6106ca806200738783390190565b82805462000ae09062000cd7565b90600052602060002090601f01602090048101928262000b04576000855562000b4f565b82601f1062000b1f57805160ff191683800117855562000b4f565b8280016001018555821562000b4f579182015b8281111562000b4f57825182559160200191906001019062000b32565b5062000b5d92915062000b61565b5090565b5b8082111562000b5d576000815560010162000b62565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060001982141562000bc757634e487b7160e01b600052601160045260246000fd5b5060010190565b6000815180845260005b8181101562000bf65760208185018101518683018201520162000bd8565b8181111562000c09576000602083870101525b50601f01601f19169290920160200192915050565b60608152600062000c33606083018662000bce565b828103602084015262000c47818662000bce565b91505060ff83166040830152949350505050565b60808152600062000c70608083018762000bce565b828103602084015262000c84818762000bce565b60ff95909516604084015250506001600160a01b039190911660609091015292915050565b6001600160a01b038316815260406020820181905260009062000ccf9083018462000bce565b949350505050565b600181811c9082168062000cec57607f821691505b6020821081141562000d0e57634e487b7160e01b600052602260045260246000fd5b50919050565b611b2d8062000d246000396000f3fe6080604052600436106101635760003560e01c80638eb86e8b116100c0578063c6c3bbe611610074578063d051a62211610059578063d051a62214610490578063eebab8ef146104b0578063fa7626d4146104d057600080fd5b8063c6c3bbe614610433578063c74912d21461045357600080fd5b80639b140a85116100a55780639b140a85146103e6578063b36ba20814610406578063ba414fa61461040e57600080fd5b80638eb86e8b1461038357806398cdaadf146103a357600080fd5b80636a72bde71161011757806388327863116100fc578063883278631461030857806388f776a2146103365780638a3177a31461035657600080fd5b80636a72bde7146102c45780636ca42ae3146102e657600080fd5b8063440864fa11610148578063440864fa146102025780634b57b0be1461022f57806367b426451461028157600080fd5b806304bc3b1c1461016f57806310c7f0b9146101b557600080fd5b3661016a57005b600080fd5b34801561017b57600080fd5b5061019f61018a3660046116f6565b60086020526000908152604090205460ff1681565b6040516101ac9190611742565b60405180910390f35b3480156101c157600080fd5b506101d56101d036600461175c565b6104ea565b6040805173ffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101ac565b34801561020e57600080fd5b5061022261021d366004611784565b610530565b6040516101ac91906117cb565b34801561023b57600080fd5b5060015461025c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ac565b34801561028d57600080fd5b5061025c61029c366004611784565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156102d057600080fd5b506102e46102df36600461181c565b6105ca565b005b3480156102f257600080fd5b506102fb610730565b6040516101ac919061186b565b34801561031457600080fd5b506103286103233660046118d4565b6107b5565b6040519081526020016101ac565b34801561034257600080fd5b506102e461035136600461190b565b610888565b34801561036257600080fd5b50610328610371366004611784565b60056020526000908152604090205481565b34801561038f57600080fd5b506102e461039e366004611954565b6108b9565b3480156103af57600080fd5b5061025c6103be366004611784565b60066020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156103f257600080fd5b506102e4610401366004611993565b610a73565b6102e4610b22565b34801561041a57600080fd5b50610423610ba0565b60405190151581526020016101ac565b34801561043f57600080fd5b506102e461044e3660046119b3565b610d00565b34801561045f57600080fd5b5061048361046e366004611784565b60036020526000908152604090205460ff1681565b6040516101ac91906119d3565b34801561049c57600080fd5b506103286104ab36600461190b565b610daf565b3480156104bc57600080fd5b506102e46104cb366004611954565b610e8b565b3480156104dc57600080fd5b506000546104239060ff1681565b600781815481106104fa57600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60046020526000908152604090208054610549906119e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610575906119e7565b80156105c25780601f10610597576101008083540402835291602001916105c2565b820191906000526020600020905b8154815290600101906020018083116105a557829003601f168201915b505050505081565b6000546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152620100009092049091169063ca669fa790602401600060405180830381600087803b15801561063e57600080fd5b505af1158015610652573d6000803e3d6000fd5b505050506002600085600a81111561066c5761066c611713565b600a81111561067d5761067d611713565b8152602081019190915260409081016000205490517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063095ea7b3906044016020604051808303816000875af1158015610705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107299190611a3b565b5050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156107ac5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff908116835260019182015416828401529083529092019101610754565b50505050905090565b60006002600084600a8111156107cd576107cd611713565b600a8111156107de576107de611713565b8152602081019190915260409081016000205490517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152909116906370a0823190602401602060405180830381865afa15801561085d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108819190611a5d565b9392505050565b6108b48383837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105ca565b505050565b60016003600085600a8111156108d1576108d1611713565b600a8111156108e2576108e2611713565b815260208101919091526040016000205460ff16600481111561090757610907611713565b14610999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f74657374546f6b656e53756974653a20547279696e6720746f206275726e206160448201527f206e6f6e2d6e6f726d616c20746f6b656e00000000000000000000000000000060648201526084015b60405180910390fd5b6002600084600a8111156109af576109af611713565b600a8111156109c0576109c0611713565b8152602081019190915260409081016000205490517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905290911690639dc29fac906044015b6020604051808303816000875af1158015610a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6d9190611a3b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610aaf57610aaf611713565b1415610b17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610888565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b8c57600080fd5b505af1158015610729573d6000803e3d6000fd5b60008054610100900460ff1615610bc05750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cfb5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610c65917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611a76565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610c9d91611abe565b6000604051808303816000865af19150503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5091505080806020019051810190610cf79190611a3b565b9150505b919050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205460ff169081600a811115610d3c57610d3c611713565b1415610da4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f20746f6b656e2077697468207375636820616464726573730000000000006044820152606401610990565b610a6d818484610e8b565b60006002600085600a811115610dc757610dc7611713565b600a811115610dd857610dd8611713565b8152602081019190915260409081016000205490517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190611a5d565b949350505050565b60026003600085600a811115610ea357610ea3611713565b600a811115610eb457610eb4611713565b815260208101919091526040016000205460ff166004811115610ed957610ed9611713565b1415610ff6576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b158015610f5657600080fd5b505af1158015610f6a573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050505061163c565b600380600085600a81111561100d5761100d611713565b600a81111561101e5761101e611713565b815260208101919091526040016000205460ff16600481111561104357611043611713565b14156111aa576000546040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018390526201000090910473ffffffffffffffffffffffffffffffffffffffff169063c88a5e6d90604401600060405180830381600087803b1580156110c057600080fd5b505af11580156110d4573d6000803e3d6000fd5b505050506002600084600a8111156110ee576110ee611713565b600a8111156110ff576110ff611713565b8152602081019190915260409081016000205490517fa1903eab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a1903eab90839060240160206040518083038185885af115801561117f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111a49190611a5d565b5061163c565b60046003600085600a8111156111c2576111c2611713565b600a8111156111d3576111d3611713565b815260208101919091526040016000205460ff1660048111156111f8576111f8611713565b141561148f5760006002600085600a81111561121657611216611713565b600a81111561122757611227611713565b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190611ada565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260409020549091506112fb9060ff163084610e8b565b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b36002600087600a81111561132d5761132d611713565b600a81111561133e5761133e611713565b81526020810191909152604090810160002054905160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018590526044016020604051808303816000875af11580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e69190611a3b565b506002600085600a8111156113fd576113fd611713565b600a81111561140e5761140e611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810184905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f1990604401600060405180830381600087803b158015610fd857600080fd5b60016003600085600a8111156114a7576114a7611713565b600a8111156114b8576114b8611713565b815260208101919091526040016000205460ff1660048111156114dd576114dd611713565b14156115b4576002600084600a8111156114f9576114f9611713565b600a81111561150a5761150a611713565b8152602081019190915260409081016000205490517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810183905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044016020604051808303816000875af1158015611590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a49190611a3b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f74657374546f6b656e53756974653a20547279696e6720746f207472616e736660448201527f657220756e6b6e6f776e20746f6b656e000000000000000000000000000000006064820152608401610990565b6002600084600a81111561165257611652611713565b600a81111561166357611663611713565b8152602081019190915260409081016000205490517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490529091169063a9059cbb90604401610a2a565b73ffffffffffffffffffffffffffffffffffffffff811681146116f357600080fd5b50565b60006020828403121561170857600080fd5b8135610881816116d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60208101600b831061175657611756611713565b91905290565b60006020828403121561176e57600080fd5b5035919050565b8035600b8110610cfb57600080fd5b60006020828403121561179657600080fd5b61088182611775565b60005b838110156117ba5781810151838201526020016117a2565b83811115610a6d5750506000910152565b60208152600082518060208401526117ea81604085016020870161179f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561183257600080fd5b61183b85611775565b9350602085013561184b816116d1565b9250604085013561185b816116d1565b9396929550929360600135925050565b602080825282518282018190526000919060409081850190868401855b828110156118c7578151805173ffffffffffffffffffffffffffffffffffffffff90811686529087015116868501529284019290850190600101611888565b5091979650505050505050565b600080604083850312156118e757600080fd5b6118f083611775565b91506020830135611900816116d1565b809150509250929050565b60008060006060848603121561192057600080fd5b61192984611775565b92506020840135611939816116d1565b91506040840135611949816116d1565b809150509250925092565b60008060006060848603121561196957600080fd5b61197284611775565b92506020840135611982816116d1565b929592945050506040919091013590565b6000806000606084860312156119a857600080fd5b8335611929816116d1565b6000806000606084860312156119c857600080fd5b8335611972816116d1565b602081016005831061175657611756611713565b600181811c908216806119fb57607f821691505b60208210811415611a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611a4d57600080fd5b8151801515811461088157600080fd5b600060208284031215611a6f57600080fd5b5051919050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611ab081600485016020870161179f565b919091016004019392505050565b60008251611ad081846020870161179f565b9190910192915050565b600060208284031215611aec57600080fd5b8151610881816116d156fea264697066735822122010fe735ed069aca27931edce4ba2ff14ec7886bf21b0eea685a884f9200fb49e64736f6c634300080a003360c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b5061014e565b82805461008690610113565b90600052602060002090601f0160209004810192826100a857600085556100ee565b82601f106100c157805160ff19168380011785556100ee565b828001600101855582156100ee579182015b828111156100ee5782518255916020019190600101906100d3565b506100fa9291506100fe565b5090565b5b808211156100fa57600081556001016100ff565b600181811c9082168061012757607f821691505b6020821081141561014857634e487b7160e01b600052602260045260246000fd5b50919050565b6109548061015d6000396000f3fe6080604052600436106100cb5760003560e01c806340c10f1911610074578063a9059cbb1161004e578063a9059cbb14610225578063d0e30db014610245578063dd62ed3e1461024d57600080fd5b806340c10f19146101c357806370a08231146101e357806395d89b411461021057600080fd5b806323b872dd116100a557806323b872dd146101575780632e1a7d4d14610177578063313ce5671461019757600080fd5b806306fdde03146100df578063095ea7b31461010a57806318160ddd1461013a57600080fd5b366100da576100d8610285565b005b600080fd5b3480156100eb57600080fd5b506100f46102e0565b6040516101019190610703565b60405180910390f35b34801561011657600080fd5b5061012a61012536600461079f565b61036e565b6040519015158152602001610101565b34801561014657600080fd5b50475b604051908152602001610101565b34801561016357600080fd5b5061012a6101723660046107c9565b6103e7565b34801561018357600080fd5b506100d8610192366004610805565b6105fe565b3480156101a357600080fd5b506002546101b19060ff1681565b60405160ff9091168152602001610101565b3480156101cf57600080fd5b506100d86101de36600461079f565b6106a4565b3480156101ef57600080fd5b506101496101fe36600461081e565b60036020526000908152604090205481565b34801561021c57600080fd5b506100f46106e2565b34801561023157600080fd5b5061012a61024036600461079f565b6106ef565b6100d8610285565b34801561025957600080fd5b50610149610268366004610839565b600460209081526000928352604080842090915290825290205481565b33600090815260036020526040812080543492906102a490849061089b565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102ed906108b3565b80601f0160208091040260200160405190810160405280929190818152602001828054610319906108b3565b80156103665780601f1061033b57610100808354040283529160200191610366565b820191906000526020600020905b81548152906001019060200180831161034957829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103d69086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604081205482111561041957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416331480159061048f575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105175773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156104d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915281208054849290610511908490610907565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061054c908490610907565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061058690849061089b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105ec91815260200190565b60405180910390a35060019392505050565b3360009081526003602052604090205481111561061a57600080fd5b3360009081526003602052604081208054839290610639908490610907565b9091555050604051339082156108fc029083906000818181858888f1935050505015801561066b573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040812080548392906106d990849061089b565b90915550505050565b600180546102ed906108b3565b60006106fc3384846103e7565b9392505050565b600060208083528351808285015260005b8181101561073057858101830151858201604001528201610714565b81811115610742576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461079a57600080fd5b919050565b600080604083850312156107b257600080fd5b6107bb83610776565b946020939093013593505050565b6000806000606084860312156107de57600080fd5b6107e784610776565b92506107f560208501610776565b9150604084013590509250925092565b60006020828403121561081757600080fd5b5035919050565b60006020828403121561083057600080fd5b6106fc82610776565b6000806040838503121561084c57600080fd5b61085583610776565b915061086360208401610776565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156108ae576108ae61086c565b500190565b600181811c908216806108c757607f821691505b60208210811415610901577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000828210156109195761091961086c565b50039056fea26469706673582212206ec943fa4e3b70d8fca6c25b6aa26fa18e8f8952ce3bc4d5afcb443bf3097c0564736f6c634300080a003360806040526000600255600060035534801561001a57600080fd5b506111fa8061002a6000396000f3fe60806040526004361061016e5760003560e01c80637a28fb88116100cb578063bdd17e1c1161007f578063dd62ed3e11610059578063dd62ed3e146103ee578063ee7a7c0414610441578063f5eb42dc1461046157600080fd5b8063bdd17e1c146103ad578063cdb9a21c146103c3578063d5002f2e146103d957600080fd5b8063a1903eab116100b0578063a1903eab1461035a578063a457c2d71461036d578063a9059cbb1461038d57600080fd5b80637a28fb88146102f457806395d89b411461031457600080fd5b806323b872dd1161012257806337cfdaca1161010757806337cfdaca1461020d57806339509351146102b457806370a08231146102d457600080fd5b806323b872dd14610278578063313ce5671461029857600080fd5b806318160ddd1161015357806318160ddd1461020d578063192084511461023057806322301f6e1461025057600080fd5b806306fdde0314610185578063095ea7b3146101dd57600080fd5b366101805761017d6000610481565b50005b600080fd5b34801561019157600080fd5b5060408051808201909152601781527f4c6971756964207374616b656420457468657220322e3000000000000000000060208201525b6040516101d49190610f63565b60405180910390f35b3480156101e957600080fd5b506101fd6101f8366004610fff565b610545565b60405190151581526020016101d4565b34801561021957600080fd5b5061022261055b565b6040519081526020016101d4565b34801561023c57600080fd5b5061022261024b366004611029565b61056b565b34801561025c57600080fd5b5061027661026b366004611042565b600391909155600255565b005b34801561028457600080fd5b506101fd610293366004611064565b6105ab565b3480156102a457600080fd5b50604051601281526020016101d4565b3480156102c057600080fd5b506101fd6102cf366004610fff565b610696565b3480156102e057600080fd5b506102226102ef3660046110a0565b6106d9565b34801561030057600080fd5b5061022261030f366004611029565b61070e565b34801561032057600080fd5b5060408051808201909152600581527f737445544800000000000000000000000000000000000000000000000000000060208201526101c7565b6102226103683660046110a0565b61073a565b34801561037957600080fd5b506101fd610388366004610fff565b610745565b34801561039957600080fd5b506101fd6103a8366004610fff565b6107f9565b3480156103b957600080fd5b5061022260035481565b3480156103cf57600080fd5b5061022260025481565b3480156103e557600080fd5b50610222610806565b3480156103fa57600080fd5b506102226104093660046110bb565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b34801561044d57600080fd5b5061027661045c366004610fff565b610811565b34801561046d57600080fd5b5061022261047c3660046110a0565b61081f565b60003334806104f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f4445504f534954000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60006104fc8261056b565b9050806105065750805b8160036000828254610518919061111d565b909155506105289050838261084a565b61053383838761093b565b61053d8382610992565b949350505050565b60006105523384846109ea565b50600192915050565b600061056660035490565b905090565b60008061057760035490565b9050806105875750600092915050565b6105a48161059e61059760025490565b8690610b52565b90610b5e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203384529091528120548281101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5452414e534645525f414d4f554e545f455843454544535f414c4c4f57414e4360448201527f450000000000000000000000000000000000000000000000000000000000000060648201526084016104e8565b610677858585610b6a565b61068b85336106868487610bef565b6109ea565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916105529185906106869086610bfb565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602081905260408120546107089061070e565b92915050565b60008061071a60025490565b90508061072a5750600092915050565b6105a48161059e61059760035490565b600061070882610481565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4445435245415345445f414c4c4f57414e43455f42454c4f575f5a45524f000060448201526064016104e8565b6107ef33856106868487610bef565b5060019392505050565b6000610552338484610b6a565b600061056660025490565b61081b8282610c07565b5050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040812054610708565b73ffffffffffffffffffffffffffffffffffffffff82166108c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4d494e545f544f5f5448455f5a45524f5f41444452455353000000000000000060448201526064016104e8565b80600260008282546108d9919061111d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461090e9082610bfb565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526020819052604090209190915550565b6040805183815273ffffffffffffffffffffffffffffffffffffffff83811660208301528516917fed8dd430b1e4bba98e943dc5b157cf7b54d9e12916d6c474ff5733a95001d03b910160405180910390a2505050565b73ffffffffffffffffffffffffffffffffffffffff821660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6109d58461070e565b60405190815260200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8316610a67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f415050524f56455f46524f4d5f5a45524f5f414444524553530000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610ae4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f415050524f56455f544f5f5a45524f5f4144445245535300000000000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006105a48284611135565b60006105a48284611172565b6000610b758261056b565b9050610b82848483610d64565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610be191815260200190565b60405180910390a350505050565b60006105a482846111ad565b60006105a4828461111d565b73ffffffffffffffffffffffffffffffffffffffff8216610c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4255524e5f46524f4d5f5448455f5a45524f5f4144445245535300000000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205480821115610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4255524e5f414d4f554e545f455843454544535f42414c414e4345000000000060448201526064016104e8565b8160026000828254610d2691906111ad565b90915550610d3690508183610bef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152602081905260409020929092555050565b73ffffffffffffffffffffffffffffffffffffffff8316610de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5452414e534645525f46524f4d5f5448455f5a45524f5f41444452455353000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff8216610e5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5452414e534645525f544f5f5448455f5a45524f5f414444524553530000000060448201526064016104e8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205480821115610eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5452414e534645525f414d4f554e545f455843454544535f42414c414e43450060448201526064016104e8565b610ef88183610bef565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152602081905260408082209390935590851681522054610f349083610bfb565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260208190526040902092909255505050565b600060208083528351808285015260005b81811015610f9057858101830151858201604001528201610f74565b81811115610fa2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ffa57600080fd5b919050565b6000806040838503121561101257600080fd5b61101b83610fd6565b946020939093013593505050565b60006020828403121561103b57600080fd5b5035919050565b6000806040838503121561105557600080fd5b50508035926020909101359150565b60008060006060848603121561107957600080fd5b61108284610fd6565b925061109060208501610fd6565b9150604084013590509250925092565b6000602082840312156110b257600080fd5b6105a482610fd6565b600080604083850312156110ce57600080fd5b6110d783610fd6565b91506110e560208401610fd6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611130576111306110ee565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561116d5761116d6110ee565b500290565b6000826111a8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156111bf576111bf6110ee565b50039056fea2646970667358221220a5b4f31162ba2b8b3424cef84b31ef91d05a825243602b5fdf758ffb49b8246364736f6c634300080a003360a06040523480156200001157600080fd5b506040516200175838038062001758833981016040819052620000349162000269565b8251839083906200004d906003906020850190620000f6565b50805162000063906004906020840190620000f6565b505050620000806200007a620000a060201b60201c565b620000a4565b60ff166080525050600680546001600160a01b031916331790556200032b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200010490620002ee565b90600052602060002090601f01602090048101928262000128576000855562000173565b82601f106200014357805160ff191683800117855562000173565b8280016001018555821562000173579182015b828111156200017357825182559160200191906001019062000156565b506200018192915062000185565b5090565b5b8082111562000181576000815560010162000186565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c457600080fd5b81516001600160401b0380821115620001e157620001e16200019c565b604051601f8301601f19908116603f011681019082821181831017156200020c576200020c6200019c565b816040528381526020925086838588010111156200022957600080fd5b600091505b838210156200024d57858201830151818301840152908201906200022e565b838211156200025f5760008385830101525b9695505050505050565b6000806000606084860312156200027f57600080fd5b83516001600160401b03808211156200029757600080fd5b620002a587838801620001b2565b94506020860151915080821115620002bc57600080fd5b50620002cb86828701620001b2565b925050604084015160ff81168114620002e357600080fd5b809150509250925092565b600181811c908216806200030357607f821691505b602082108114156200032557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161141162000347600039600061025f01526114116000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd5780639dc29fac11610081578063a9059cbb11610066578063a9059cbb1461034c578063dd62ed3e1461035f578063f2fde38b146103a557600080fd5b80639dc29fac14610326578063a457c2d71461033957600080fd5b806379cc6790116100b257806379cc6790146102ed5780638da5cb5b1461030057806395d89b411461031e57600080fd5b806370a08231146102af578063715018a6146102e557600080fd5b806318160ddd11610124578063313ce56711610109578063313ce56714610258578063395093511461028957806340c10f191461029c57600080fd5b806318160ddd1461023357806323b872dd1461024557600080fd5b806306fdde03146101565780630754617214610174578063095ea7b3146101b95780631652e9fc146101dc575b600080fd5b61015e6103b8565b60405161016b91906111d2565b60405180910390f35b6006546101949073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016b565b6101cc6101c736600461126e565b61044a565b604051901515815260200161016b565b6102316101ea366004611298565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b005b6002545b60405190815260200161016b565b6101cc6102533660046112ba565b610460565b60405160ff7f000000000000000000000000000000000000000000000000000000000000000016815260200161016b565b6101cc61029736600461126e565b61054b565b6101cc6102aa36600461126e565b610594565b6102376102bd366004611298565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102316106a3565b6101cc6102fb36600461126e565b610730565b60055473ffffffffffffffffffffffffffffffffffffffff16610194565b61015e6107be565b6101cc61033436600461126e565b6107cd565b6101cc61034736600461126e565b6107d9565b6101cc61035a36600461126e565b6108b1565b61023761036d3660046112f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6102316103b3366004611298565b6108be565b6060600380546103c790611329565b80601f01602080910402602001604051908101604052809291908181526020018280546103f390611329565b80156104405780601f1061041557610100808354040283529160200191610440565b820191906000526020600020905b81548152906001019060200180831161042357829003601f168201915b5050505050905090565b60006104573384846109ee565b50600192915050565b600061046d848484610ba2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61054085338584036109ee565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161045791859061058f9086906113ac565b6109ee565b60065460009073ffffffffffffffffffffffffffffffffffffffff163314610618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b60065473ffffffffffffffffffffffffffffffffffffffff163314610699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610e56565b60055473ffffffffffffffffffffffffffffffffffffffff163314610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b61072e6000610f76565b565b60065460009073ffffffffffffffffffffffffffffffffffffffff1633146107b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d696e7465722063616c6c73206f6e6c79000000000000000000000000000000604482015260640161052a565b6104578383610fed565b6060600480546103c790611329565b60006104578383610fed565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561089a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161052a565b6108a733858584036109ee565b5060019392505050565b6000610457338484610ba2565b60055473ffffffffffffffffffffffffffffffffffffffff16331461093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052a565b73ffffffffffffffffffffffffffffffffffffffff81166109e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161052a565b6109eb81610f76565b50565b73ffffffffffffffffffffffffffffffffffffffff8316610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff8216610ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610de29084906113ac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610ed3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161052a565b8060026000828254610ee591906113ac565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610f1f9084906113ac565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161052a565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081208383039055600280548492906111829084906113c4565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610b95565b600060208083528351808285015260005b818110156111ff578581018301518582016040015282016111e3565b81811115611211576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461126957600080fd5b919050565b6000806040838503121561128157600080fd5b61128a83611245565b946020939093013593505050565b6000602082840312156112aa57600080fd5b6112b382611245565b9392505050565b6000806000606084860312156112cf57600080fd5b6112d884611245565b92506112e660208501611245565b9150604084013590509250925092565b6000806040838503121561130957600080fd5b61131283611245565b915061132060208401611245565b90509250929050565b600181811c9082168061133d57607f821691505b60208210811415611377577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156113bf576113bf61137d565b500190565b6000828210156113d6576113d661137d565b50039056fea2646970667358221220fd9684963a1e0e9d3eb55681a6f85f5c76804530c79f10cf8d0cfbd35511577164736f6c634300080a003360c06040523480156200001157600080fd5b506040516200170938038062001709833981016040819052620000349162000266565b8351849084906200004d906003906020850190620000f3565b50805162000063906004906020840190620000f3565b505050620000806200007a6200009d60201b60201c565b620000a1565b60ff9091166080526001600160a01b031660a05250620003479050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000101906200030a565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001c157600080fd5b81516001600160401b0380821115620001de57620001de62000199565b604051601f8301601f19908116603f0116810190828211818310171562000209576200020962000199565b816040528381526020925086838588010111156200022657600080fd5b600091505b838210156200024a57858201830151818301840152908201906200022b565b838211156200025c5760008385830101525b9695505050505050565b600080600080608085870312156200027d57600080fd5b84516001600160401b03808211156200029557600080fd5b620002a388838901620001af565b95506020870151915080821115620002ba57600080fd5b50620002c987828801620001af565b935050604085015160ff81168114620002e157600080fd5b60608601519092506001600160a01b0381168114620002ff57600080fd5b939692955090935050565b600181811c908216806200031f57607f821691505b602082108114156200034157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161138e6200037b600039600081816101f70152818161041f0152610600015260006101a2015261138e6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80636f307dc3116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b5578063dd62ed3e146102c8578063f2fde38b1461030e57600080fd5b806395d89b411461029a578063a457c2d7146102a257600080fd5b80636f307dc3146101f257806370a082311461023e578063715018a6146102745780638da5cb5b1461027c57600080fd5b806323b872dd116100ee57806323b872dd14610188578063313ce5671461019b57806339509351146101cc57806340c10f19146101df57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631e9a695014610173575b600080fd5b610128610321565b604051610135919061112d565b60405180910390f35b61015161014c3660046111c9565b6103b3565b6040519015158152602001610135565b6002545b604051908152602001610135565b6101866101813660046111c9565b6103c9565b005b6101516101963660046111f3565b610491565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610135565b6101516101da3660046111c9565b61057c565b6101866101ed3660046111c9565b6105c5565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61016561024c36600461122f565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610186610691565b60055473ffffffffffffffffffffffffffffffffffffffff16610219565b61012861071e565b6101516102b03660046111c9565b61072d565b6101516102c33660046111c9565b610805565b6101656102d6366004611251565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b61018661031c36600461122f565b610812565b60606003805461033090611284565b80601f016020809104026020016040519081016040528092919081815260200182805461035c90611284565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b60006103c0338484610942565b50600192915050565b6103d33382610af5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d8565b505050565b600061049e848484610ce2565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105718533858403610942565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103c09185906105c0908690611329565b610942565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af115801561065e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068291906112d8565b5061068d8282610f96565b5050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b61071c60006110b6565b565b60606004805461033090611284565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161055b565b6107fb3385858403610942565b5060019392505050565b60006103c0338484610ce2565b60055473ffffffffffffffffffffffffffffffffffffffff163314610893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055b565b73ffffffffffffffffffffffffffffffffffffffff8116610936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161055b565b61093f816110b6565b50565b73ffffffffffffffffffffffffffffffffffffffff83166109e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610c4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610c8a908490611341565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff8216610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161055b565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610f22908490611329565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f8891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161055b565b80600260008282546110259190611329565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260408120805483929061105f908490611329565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b8181101561115a5785810183015185820160400152820161113e565b8181111561116c576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146111c457600080fd5b919050565b600080604083850312156111dc57600080fd5b6111e5836111a0565b946020939093013593505050565b60008060006060848603121561120857600080fd5b611211846111a0565b925061121f602085016111a0565b9150604084013590509250925092565b60006020828403121561124157600080fd5b61124a826111a0565b9392505050565b6000806040838503121561126457600080fd5b61126d836111a0565b915061127b602084016111a0565b90509250929050565b600181811c9082168061129857607f821691505b602082108114156112d2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156112ea57600080fd5b8151801515811461124a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561133c5761133c6112fa565b500190565b600082821015611353576113536112fa565b50039056fea26469706673582212203a6db30cd3c097921df4156794aa7973eb848711deeb2cffd7c54a9df1fdb0a564736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d00011790553480156200003a57600080fd5b5060405162031ed638038062031ed68339810160408190526200005d91620015e8565b81816040516200006d9062001595565b604051809103906000f0801580156200008a573d6000803e3d6000fd5b5050600180546001600160a01b0319166001600160a01b038416908117909155604080516325abd85f60e11b81529051634b57b0be916004808201926020929091908290030181865afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c91906200162a565b73c4375b7de8af5a38a93548eb8453a498222c4ff26040516200012f90620015a3565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000163573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691821790556040805163de28735960e01b8152905163de287359916004808201926020929091908290030181865afa158015620001bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e591906200162a565b604051634910832f60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039190911690634910832f90602401600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b031663de2873596040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d091906200162a565b60035460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b1580156200031757600080fd5b505af11580156200032c573d6000803e3d6000fd5b505060035460015460408051636ca42ae360e01b815290516001600160a01b039384169550638874ff1f94509190921691636ca42ae39160048083019260009291908290030181865afa15801562000388573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003b29190810190620016c5565b6040518263ffffffff1660e01b8152600401620003d09190620017b6565b600060405180830381600087803b158015620003eb57600080fd5b505af115801562000400573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e91906200162a565b600280546001600160a01b0319166001600160a01b039290921691821790556040805163120d150d60e31b81529051639068a868916004808201926020929091908290030181865afa158015620004d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ff91906200162a565b600480546001600160a01b0319166001600160a01b0392831617815560025460408051631f94a27560e31b81529051919093169263fca513a892818101926020929091908290030181865afa1580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058391906200162a565b600880546001600160a01b0319166001600160a01b0392831617905560025460408051630873769560e01b81529051919092169163087376959160048083019260209291908290030181865afa158015620005e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200060891906200162a565b600780546001600160a01b0319166001600160a01b039283161790556002546040805163c513c9bb60e01b81529051919092169163c513c9bb9160048083019260209291908290030181865afa15801562000667573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068d91906200162a565b600680546001600160a01b0319166001600160a01b039283161790556001546040516367b4264560e01b81529116906367b4264590620006d29084906004016200184d565b602060405180830381865afa158015620006f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200071691906200162a565b600980546001600160a01b0319166001600160a01b0392831617905560035460408051630a55006360e21b815290519190921691632954018c9160048083019260209291908290030181865afa15801562000775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200079b91906200162a565b6009546040516001600160a01b0390911690620007b890620015b2565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620007ec573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b039283169081179091556001549091169063eebab8ef90839062000825620011ec565b6200083290600a62001879565b6040518463ffffffff1660e01b815260040162000852939291906200189b565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b505060065460055460405163d914cd4b60e01b81526001600160a01b0391821660048201529116925063d914cd4b9150602401600060405180830381600087803b158015620008d057600080fd5b505af1158015620008e5573d6000803e3d6000fd5b5050600f80546001600160801b031916670de0b6b3a76400001790555062000911925050620011ec9050565b6200091e90600a62001879565b600f80546001600160801b03908116600160801b9382168402818117938490556040805160a0810182529184169092178152939092041660208301526000919081016200096b84620012ab565b815260006020820181905260409182018190526005549151929350916001600160a01b039091169083908390620009a290620015c0565b620009b093929190620018c5565b604051809103906000f080158015620009cd573d6000803e3d6000fd5b509050806001600160a01b031663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a0f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a3591906200162a565b600b60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b0316632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a9a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ac091906200162a565b600c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b25573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4b91906200162a565b600d80546001600160a01b0319166001600160a01b03928316179055600654600b5460405163e26b2f6360e01b8152908316600482015291169063e26b2f6390602401600060405180830381600087803b15801562000ba957600080fd5b505af115801562000bbe573d6000803e3d6000fd5b5050600054600554604080516318caf8e360e31b81526001600160a01b039283166004808301919091526024820192909252604481019190915263141bdbdb60e21b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000c3457600080fd5b505af115801562000c49573d6000803e3d6000fd5b5050600054600c8054604080516318caf8e360e31b81526001600160a01b039283166004820152602481019190915260448101929092526b43726564697446616361646560a01b606483015262010000909204909116925063c657c7189150608401600060405180830381600087803b15801562000cc657600080fd5b505af115801562000cdb573d6000803e3d6000fd5b5050600054600b54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152600d60448201526c21b932b234ba26b0b730b3b2b960991b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000d5557600080fd5b505af115801562000d6a573d6000803e3d6000fd5b5050600054600d54604080516318caf8e360e31b81526001600160a01b0392831660048201526024810191909152601260448201527121b932b234ba21b7b73334b3bab930ba37b960711b60648201526201000090920416925063c657c7189150608401600060405180830381600087803b15801562000de957600080fd5b505af115801562000dfe573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef90508473f39fd6e51aad88f6f4ce6ab8827279cfffb9226662000e35620011ec565b6040518463ffffffff1660e01b815260040162000e55939291906200189b565b600060405180830381600087803b15801562000e7057600080fd5b505af115801562000e85573d6000803e3d6000fd5b50506001546001600160a01b0316915063eebab8ef9050847390f79bf6eb2c4f870365e785982e1f101e93b90662000ebc620011ec565b6040518463ffffffff1660e01b815260040162000edc939291906200189b565b600060405180830381600087803b15801562000ef757600080fd5b505af115801562000f0c573d6000803e3d6000fd5b505060005460405163ca669fa760e01b815273f39fd6e51aad88f6f4ce6ab8827279cfffb922666004820152620100009091046001600160a01b0316925063ca669fa79150602401600060405180830381600087803b15801562000f6f57600080fd5b505af115801562000f84573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af115801562000fdf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001005919062001989565b5060005460405163ca669fa760e01b81527390f79bf6eb2c4f870365e785982e1f101e93b9066004820152620100009091046001600160a01b03169063ca669fa790602401600060405180830381600087803b1580156200106557600080fd5b505af11580156200107a573d6000803e3d6000fd5b5050600954600b5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b391506044016020604051808303816000875af1158015620010d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fb919062001989565b5060025460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b039091169063f2fde38b90602401600060405180830381600087803b1580156200115657600080fd5b505af11580156200116b573d6000803e3d6000fd5b505060075460405163f2fde38b60e01b81527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620011c957600080fd5b505af1158015620011de573d6000803e3d6000fd5b5050505050505050620019e1565b600180546040516367b4264560e01b81526000926001600160a01b03909216916367b42645916200122191906004016200184d565b602060405180830381865afa1580156200123f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200126591906200162a565b6009546001600160a01b03908116911614620012955762001290670de0b6b3a764000060c862001879565b905090565b62001290670de0b6b3a7640000614e2062001879565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200130c576200130c62001814565b146200131a5760036200131d565b60015b600a81111562001331576200133162001814565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a6000858281111562001374576200137462001814565b600a81111562001388576200138862001814565b815260208101919091526040908101600020805461ffff9390931661ffff19909316929092179091558051600480825260a0820190925281816020015b6040805180820190915260008082526020820152815260200190600190039081620013c557905050925060005b818110156200158d57828160048110620014105762001410620019ad565b602002015160200151600a6000858460048110620014325762001432620019ad565b602002015151600a8111156200144c576200144c62001814565b600a81111562001460576200146062001814565b815260208101919091526040908101600020805461ffff191661ffff9390931692909217909155805180820190915260015481906001600160a01b03166367b42645868560048110620014b757620014b7620019ad565b6020020151516040516001600160e01b031960e084901b168152620014e091906004016200184d565b602060405180830381865afa158015620014fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152491906200162a565b6001600160a01b03168152602001848360048110620015475762001547620019ad565b60200201516020015161ffff168152508482815181106200156c576200156c620019ad565b602002602001018190525080806200158490620019c3565b915050620013f2565b505050919050565b6105e6806200bc5283390190565b62011105806200c23883390190565b6110a7806201d33d83390190565b62013af2806201e3e483390190565b6001600160a01b0381168114620015e557600080fd5b50565b60008060408385031215620015fc57600080fd5b82516200160981620015cf565b6020840151909250600b81106200161f57600080fd5b809150509250929050565b6000602082840312156200163d57600080fd5b81516200164a81620015cf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200168c576200168c62001651565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620016bd57620016bd62001651565b604052919050565b60006020808385031215620016d957600080fd5b82516001600160401b0380821115620016f157600080fd5b818501915085601f8301126200170657600080fd5b8151818111156200171b576200171b62001651565b6200172b848260051b0162001692565b818152848101925060069190911b8301840190878211156200174c57600080fd5b928401925b81841015620017ab57604084890312156200176c5760008081fd5b6200177662001667565b84516200178381620015cf565b8152848601516200179481620015cf565b818701528352604093909301929184019162001751565b979650505050505050565b602080825282518282018190526000919060409081850190868401855b828110156200180757815180516001600160a01b0390811686529087015116868501529284019290850190600101620017d3565b5091979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600b81106200184957634e487b7160e01b600052602160045260246000fd5b9052565b602081016200185d82846200182a565b92915050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562001896576200189662001863565b500290565b60608101620018ab82866200182a565b6001600160a01b0393909316602082015260400152919050565b6001600160a01b0384811682526060602080840182905285516001600160801b039081169285019290925285810151909116608084015260408086015160a085810152805161010086018190526000949392918301919085906101208801905b808310156200195657845180518816835286015161ffff168683015293850193600192909201919083019062001925565b5060608a01516001600160a01b031660c0890152608090990151151560e088015250909401949094525092949350505050565b6000602082840312156200199c57600080fd5b815180151581146200164a57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415620019da57620019da62001863565b5060010190565b61a26180620019f16000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806362eb33e311620000f5578063ba414fa61162000097578063de287359116200006e578063de2873591462000479578063f9aa028a146200049a578063fa7626d414620004bb57600080fd5b8063ba414fa6146200041c578063c12c21c01462000437578063d46b9330146200045857600080fd5b80637785ff5d11620000cc5780637785ff5d14620003da5780639408b63f14620003e45780639dd55b45146200040557600080fd5b806362eb33e314620003775780636b70b04c14620003985780636f307dc314620003b957600080fd5b80632f7a1881116200015f5780635e813a8b11620001365780635e813a8b146200030c5780635f7c9bd0146200032d57806362186905146200034657600080fd5b80632f7a188114620002be578063406c8e2f14620002df57806354cae56e146200030057600080fd5b80630e42bc5d11620001945780630e42bc5d14620002305780632630c12f14620002565780632954018c146200029d57600080fd5b80630bc772da14620001b25780630c75f80614620001f5575b600080fd5b600f54620001cf906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6200021c62000206366004620012dd565b600a6020526000908152604090205461ffff1681565b60405161ffff9091168152602001620001ec565b6200024762000241366004620012dd565b620004c9565b604051620001ec919062001307565b600854620002779073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001620001ec565b600254620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600c54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600154620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200081f565b005b600454620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200033762000b1a565b604051908152602001620001ec565b600f54620001cf9070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b600654620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600554620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600954620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a62000c0c565b600e54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b6200030a6200041636600462001398565b62000fd6565b6200042662001149565b6040519015158152602001620001ec565b600b54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600354620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600754620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600d54620002779073ffffffffffffffffffffffffffffffffffffffff1681565b600054620004269060ff1681565b6040805160c08101825260026080820190815261232860a08301528152815180830183526005815261226060208281019190915282015281518083018352606092600092919082019080600387600a8111156200052a576200052a620013c7565b14620005385760036200053b565b60015b600a8111156200054f576200054f620013c7565b815261206c6020918201529082526040805180820190915260048152611c84818301529101529050612454600a60008582811115620005925762000592620013c7565b600a811115620005a657620005a6620013c7565b815260208101919091526040908101600020805461ffff939093167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179091558051600480825260a0820190925281816020015b60408051808201909152600080825260208201528152602001906001900390816200060057905050925060005b8181101562000817578281600481106200064b576200064b620013f6565b602002015160200151600a60008584600481106200066d576200066d620013f6565b602002015151600a811115620006875762000687620013c7565b600a8111156200069b576200069b620013c7565b81526020810191909152604090810160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff93909316929092179091558051808201909152600154819073ffffffffffffffffffffffffffffffffffffffff166367b426458685600481106200071c576200071c620013f6565b6020020151516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526200075d919060040162001425565b602060405180830381865afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062001467565b73ffffffffffffffffffffffffffffffffffffffff168152602001848360048110620007d157620007d1620013f6565b60200201516020015161ffff16815250848281518110620007f657620007f6620013f6565b602002602001018190525080806200080e90620014b6565b9150506200062d565b505050919050565b6000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c860048201526201000090910473ffffffffffffffffffffffffffffffffffffffff16906306447d5690602401600060405180830381600087803b158015620008a457600080fd5b505af1158015620008b9573d6000803e3d6000fd5b5050600b5460405173ffffffffffffffffffffffffffffffffffffffff909116925060009150600190620008ed90620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000937573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b158015620009dc57600080fd5b505af1158015620009f1573d6000803e3d6000fd5b5050600d5473ffffffffffffffffffffffffffffffffffffffff16915063eb9606df905062000a22426001620014f2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815264ffffffffff90911660048201526024015b600060405180830381600087803b15801562000a7b57600080fd5b505af115801562000a90573d6000803e3d6000fd5b50505050600060029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000aff57600080fd5b505af115801562000b14573d6000803e3d6000fd5b50505050565b600180546040517f67b4264500000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff909216916367b426459162000b75919060040162001425565b602060405180830381865afa15801562000b93573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bb9919062001467565b60095473ffffffffffffffffffffffffffffffffffffffff90811691161462000bf65762000bf1670de0b6b3a764000060c86200150d565b905090565b62000bf1670de0b6b3a7640000614e206200150d565b60025460405173ffffffffffffffffffffffffffffffffffffffff9091169062000c3690620012c1565b73ffffffffffffffffffffffffffffffffffffffff90911681526060602082018190526008908201527f446567656e4e4654000000000000000000000000000000000000000000000000608082015260a060408201819052600a908201527f476561722d446567656e0000000000000000000000000000000000000000000060c082015260e001604051809103906000f08015801562000cda573d6000803e3d6000fd5b50600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556000546040517f06447d560000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015262010000909104909116906306447d5690602401600060405180830381600087803b15801562000d8e57600080fd5b505af115801562000da3573d6000803e3d6000fd5b5050600e546040517ffca3b5aa0000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015273ffffffffffffffffffffffffffffffffffffffff909116925063fca3b5aa9150602401600060405180830381600087803b15801562000e2757600080fd5b505af115801562000e3c573d6000803e3d6000fd5b5050600b54600e5460405173ffffffffffffffffffffffffffffffffffffffff92831694509116915060009062000e7390620012b3565b73ffffffffffffffffffffffffffffffffffffffff938416815292909116602083015215156040820152606001604051809103906000f08015801562000ebd573d6000803e3d6000fd5b50600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155600d546040517f526a41e80000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063526a41e890604401600060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b5050600e54600c546040517f4610f6ac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250634610f6ac915060240162000a60565b600081600860405162000fe990620012cf565b91825260ff166020820152604001604051809103906000f08015801562001014573d6000803e3d6000fd5b506000546040517fca669fa70000000000000000000000000000000000000000000000000000000081527370997970c51812dc3a010c7d01b50e0d17dc79c8600482015291925062010000900473ffffffffffffffffffffffffffffffffffffffff169063ca669fa790602401600060405180830381600087803b1580156200109c57600080fd5b505af1158015620010b1573d6000803e3d6000fd5b50506008546040517fe8a97a3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528581166024830152909116925063e8a97a3e9150604401600060405180830381600087803b1580156200112b57600080fd5b505af115801562001140573d6000803e3d6000fd5b50505050505050565b60008054610100900460ff16156200116a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620012ae5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000008284015282518083038401815260608301909352600092909162001212917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016200158b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526200124c91620015c9565b6000604051808303816000865af19150503d80600081146200128b576040519150601f19603f3d011682016040523d82523d6000602084013e62001290565b606091505b5091505080806020019051810190620012aa9190620015d7565b9150505b919050565b615e9780620015fc83390190565b6126cf806200749383390190565b6106ca8062009b6283390190565b600060208284031215620012f057600080fd5b8135600b81106200130057600080fd5b9392505050565b602080825282518282018190526000919060409081850190868401855b8281101562001365578151805173ffffffffffffffffffffffffffffffffffffffff16855286015161ffff1686850152928401929085019060010162001324565b5091979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146200139557600080fd5b50565b60008060408385031215620013ac57600080fd5b8235620013b98162001372565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208101600b831062001461577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000602082840312156200147a57600080fd5b8151620013008162001372565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620014eb57620014eb62001487565b5060010190565b6000821982111562001508576200150862001487565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001548576200154862001487565b500290565b6000815160005b8181101562001570576020818501810151868301520162001554565b8181111562001580576000828601525b509290920192915050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000620015c160048301846200154d565b949350505050565b60006200130082846200154d565b600060208284031215620015ea57600080fd5b815180151581146200130057600080fdfe6101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360c06040523480156200001157600080fd5b50604051620026cf380380620026cf833981016040819052620000349162000324565b82828281600090805190602001906200004f92919062000194565b5080516200006590600190602084019062000194565b50506006805460ff19169055506001600160a01b0381166200009a57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ff9190620003a1565b6001600160a01b03166080816001600160a01b03168152505050826001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e9190620003a1565b6001600160a01b031660a0525062000403915050565b828054620001a290620003c6565b90600052602060002090601f016020900481019282620001c6576000855562000211565b82601f10620001e157805160ff191683800117855562000211565b8280016001018555821562000211579182015b8281111562000211578251825591602001919060010190620001f4565b506200021f92915062000223565b5090565b5b808211156200021f576000815560010162000224565b80516001600160a01b03811681146200025257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027f57600080fd5b81516001600160401b03808211156200029c576200029c62000257565b604051601f8301601f19908116603f01168101908282118183101715620002c757620002c762000257565b81604052838152602092508683858801011115620002e457600080fd5b600091505b83821015620003085785820183015181830184015290820190620002e9565b838211156200031a5760008385830101525b9695505050505050565b6000806000606084860312156200033a57600080fd5b62000345846200023a565b60208501519093506001600160401b03808211156200036357600080fd5b62000371878388016200026d565b935060408601519150808211156200038857600080fd5b5062000397868287016200026d565b9150509250925092565b600060208284031215620003b457600080fd5b620003bf826200023a565b9392505050565b600181811c90821680620003db57607f821691505b60208210811415620003fd57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516122756200045a6000396000610a9a015260008181610386015281816106db0152818161089101528181610f15015281816110010152818161115b015281816112f401526114f901526122756000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a0bcfc7f11610097578063b88d4fde11610071578063b88d4fde146103a8578063c87b56dd146103b6578063e985e9c5146103c9578063fca3b5aa1461041257600080fd5b8063a0bcfc7f14610360578063a22cb46514610373578063a50cf2c81461038157600080fd5b80638456cb59116100d35780638456cb591461032a57806389406ff51461033257806395d89b41146103455780639dc29fac1461034d57600080fd5b80636352211e146102fc5780636c0360eb1461030f57806370a082311461031757600080fd5b80633f4ba83a116101665780634610f6ac116101405780634610f6ac146102b357806354fd4d50146102c6578063576cd2d1146102ce5780635c975abb146102f157600080fd5b80633f4ba83a1461029857806340c10f19146102a057806342842e0e1461028a57600080fd5b8063081812fc116101a2578063081812fc1461024b578063095ea7b31461025e57806318160ddd1461027357806323b872dd1461028a57600080fd5b806301ffc9a7146101c957806306fdde03146101f15780630754617214610206575b600080fd5b6101dc6101d7366004611cc6565b610425565b60405190151581526020015b60405180910390f35b6101f961050a565b6040516101e89190611d38565b6008546102269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b610226610259366004611d89565b61059c565b61027161026c366004611dc7565b61067b565b005b61027c60075481565b6040519081526020016101e8565b61027161026c366004611df3565b6102716106ad565b6102716102ae366004611dc7565b61079b565b6102716102c1366004611e34565b610863565b61027c600181565b6101dc6102dc366004611e34565b60096020526000908152604090205460ff1681565b60065460ff166101dc565b61022661030a366004611d89565b610cd9565b6101f9610d8b565b61027c610325366004611e34565b610e19565b610271610ee7565b610271610340366004611e34565b610fd3565b6101f9611103565b61027161035b366004611dc7565b611112565b61027161036e366004611e51565b6112c6565b61027161026c366004611ed1565b6102267f000000000000000000000000000000000000000000000000000000000000000081565b61027161026c366004611f39565b6101f96103c4366004611d89565b6113bb565b6101dc6103d7366004612037565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b610271610420366004611e34565b6114cb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806104b857507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061050457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461051990612065565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612065565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f24e46f7000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075b91906120b9565b610791576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107996115f6565b565b60085473ffffffffffffffffffffffffffffffffffffffff1633146107ec576040517f5c2967f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107f783610e19565b905060005b82811015610846576000816108278473ffffffffffffffffffffffffffffffffffffffff8816612105565b6108319190612105565b905061083d85826116d7565b506001016107fc565b5081600760008282546108599190612105565b9091555050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091191906120b9565b610947576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b610995576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a1c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a199181019061211d565b60015b610a52576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690636fbc6f6b90602401602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0791906120b9565b1580610bad57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16639408b63f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b94919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b80610c5257508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c39919061211d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c89576040517f9c01f6a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610649565b600a8054610d9890612065565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612065565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610ebe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610649565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9591906120b9565b610fcb576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610799611899565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108191906120b9565b6110b7576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461051990612065565b3360009081526009602052604090205460ff161580156111dd57506040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156111b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111db91906120b9565b155b15611214576040517f1e0d048500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121f83610e19565b90508181101561125b576040517f90c9142d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156112b357600060018261128b8573ffffffffffffffffffffffffffffffffffffffff8916612105565b611295919061213a565b61129f919061213a565b90506112aa81611959565b5060010161125e565b508160076000828254610859919061213a565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906120b9565b6113aa576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113b6600a8383611c0f565b505050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff1661146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610649565b6000611479611a26565b9050600081511161149957604051806020016040528060008152506114c4565b806114a384611a35565b6040516020016114b4929190612151565b6040516020818303038152906040525b9392505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611555573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157991906120b9565b6115af576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065460ff16611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610649565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156117e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610649565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290611816908490612105565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60065460ff1615611906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610649565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116ad3390565b600061196482610cd9565b9050611971600083611b6f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526003602052604081208054600192906119a790849061213a565b909155505060008281526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6060600a805461051990612065565b606081611a7557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611a9f5780611a8981612180565b9150611a989050600a836121e8565b9150611a79565b60008167ffffffffffffffff811115611aba57611aba611f0a565b6040519080825280601f01601f191660200182016040528015611ae4576020820181803683370190505b5090505b8415611b6757611af960018361213a565b9150611b06600a866121fc565b611b11906030612105565b60f81b818381518110611b2657611b26612210565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611b60600a866121e8565b9450611ae8565b949350505050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611bc982610cd9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828054611c1b90612065565b90600052602060002090601f016020900481019282611c3d5760008555611ca1565b82601f10611c74578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555611ca1565b82800160010185558215611ca1579182015b82811115611ca1578235825591602001919060010190611c86565b50611cad929150611cb1565b5090565b5b80821115611cad5760008155600101611cb2565b600060208284031215611cd857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146114c457600080fd5b60005b83811015611d23578181015183820152602001611d0b565b83811115611d32576000848401525b50505050565b6020815260008251806020840152611d57816040850160208701611d08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600060208284031215611d9b57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611dc457600080fd5b50565b60008060408385031215611dda57600080fd5b8235611de581611da2565b946020939093013593505050565b600080600060608486031215611e0857600080fd5b8335611e1381611da2565b92506020840135611e2381611da2565b929592945050506040919091013590565b600060208284031215611e4657600080fd5b81356114c481611da2565b60008060208385031215611e6457600080fd5b823567ffffffffffffffff80821115611e7c57600080fd5b818501915085601f830112611e9057600080fd5b813581811115611e9f57600080fd5b866020828501011115611eb157600080fd5b60209290920196919550909350505050565b8015158114611dc457600080fd5b60008060408385031215611ee457600080fd5b8235611eef81611da2565b91506020830135611eff81611ec3565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060008060808587031215611f4f57600080fd5b8435611f5a81611da2565b93506020850135611f6a81611da2565b925060408501359150606085013567ffffffffffffffff80821115611f8e57600080fd5b818701915087601f830112611fa257600080fd5b813581811115611fb457611fb4611f0a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ffa57611ffa611f0a565b816040528281528a602084870101111561201357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561204a57600080fd5b823561205581611da2565b91506020830135611eff81611da2565b600181811c9082168061207957607f821691505b602082108114156120b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156120cb57600080fd5b81516114c481611ec3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612118576121186120d6565b500190565b60006020828403121561212f57600080fd5b81516114c481611da2565b60008282101561214c5761214c6120d6565b500390565b60008351612163818460208801611d08565b835190830190612177818360208801611d08565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156121b2576121b26120d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826121f7576121f76121b9565b500490565b60008261220b5761220b6121b9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ffdd83a2fc9a158347ca248f021e63fcef3a7985b3deb793f75cd1835b068aab64736f6c634300080a003360a060405234801561001057600080fd5b506040516106ca3803806106ca83398101604081905261002f9161006c565b60009190915560ff166080526001805460506001600160501b031991821681179092556004805490911690911790554260028190556003556100a2565b6000806040838503121561007f57600080fd5b82519150602083015160ff8116811461009757600080fd5b809150509250929050565b60805161060e6100bc600039600060d3015261060e6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80639a6fc8f511610081578063d62ada111161005b578063d62ada11146102dc578063f7a30806146102f4578063feaf968c1461030757600080fd5b80639a6fc8f5146101cd578063bd18ad531461023a578063cd653afc1461024d57600080fd5b806354fd4d50116100b257806354fd4d501461012d57806367e8d83d1461013c5780637284e4161461018e57600080fd5b8063313ce567146100ce5780633fd0875f1461010c575b600080fd5b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6004546a0100000000000000000000900460ff166040516101039190610441565b60405160018152602001610103565b61018c61014a366004610482565b600480549115156c01000000000000000000000000027fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff909216919091179055565b005b604080518082018252600c81527f7072696365206f7261636c6500000000000000000000000000000000000000006020820152905161010391906104ab565b6102036101db36600461053d565b60015460005460025460035460045469ffffffffffffffffffff948516941691939590929450565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610103565b61018c610248366004610558565b61030f565b61018c61025b366004610579565b6001805469ffffffffffffffffffff9586167fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000090911617905560029290925560035560048054919092167fffffffffffffffffffffffffffffffffffffffff00ff00000000000000000000909116176b020000000000000000000000179055565b6102e461035f565b6040519015158152602001610103565b61018c6103023660046105bf565b600055565b610203610385565b600480548291907fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff166b01000000000000000000000083600281111561035757610357610412565b021790555050565b600454600090610380906b010000000000000000000000900460ff166103d6565b905090565b60008060008060006004600c9054906101000a900460ff16156103a757600080fd5b505060015460005460025460035460045469ffffffffffffffffffff9485169893975091955093509190911690565b600060028260028111156103ec576103ec610412565b14156103f757600080fd5b600182600281111561040b5761040b610412565b1492915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016006831061047c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561049457600080fd5b813580151581146104a457600080fd5b9392505050565b600060208083528351808285015260005b818110156104d8578581018301518582016040015282016104bc565b818111156104ea576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803569ffffffffffffffffffff8116811461053857600080fd5b919050565b60006020828403121561054f57600080fd5b6104a48261051e565b60006020828403121561056a57600080fd5b8135600381106104a457600080fd5b6000806000806080858703121561058f57600080fd5b6105988561051e565b935060208501359250604085013591506105b46060860161051e565b905092959194509250565b6000602082840312156105d157600080fd5b503591905056fea264697066735822122014874f7a973b86501c4c1a8be32490fe902c8f088ee234d25f9b2497e19f9e5264736f6c634300080a0033a2646970667358221220d8fdaadc825c43ac2783715ebcfe33e7b0ce3a396ac7717d65e4c95e98b6cf7f64736f6c634300080a003360806040526000805461ff01600160b01b031916757109709ecfa91a80626ff3989d68f67f5b1dd12d000117905534801561003957600080fd5b50600054604080516318caf8e360e31b815273f39fd6e51aad88f6f4ce6ab8827279cfffb9226660048083019190915260248201929092526044810191909152632aa9a2a960e11b6064820152620100009091046001600160a01b03169063c657c71890608401600060405180830381600087803b1580156100ba57600080fd5b505af11580156100ce573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b81527390f79bf6eb2c4f870365e785982e1f101e93b90660048201526024810191909152600660448201526511949251539160d21b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561014f57600080fd5b505af1158015610163573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152733c44cdddb6a900fa2b585dd299e03d12fa4293bc60048201526024810191909152600a6044820152692624a8aaa4a220aa27a960b11b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b1580156101e857600080fd5b505af11580156101fc573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b815273c4375b7de8af5a38a93548eb8453a498222c4ff260048201526024810191909152600c60448201526b44554d425f4144445245535360a01b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561028357600080fd5b505af1158015610297573d6000803e3d6000fd5b5050600054604080516318caf8e360e31b8152739965507d1a55bcc2695c58ba16fb37d819b0a4dc60048201526024810191909152600760448201526620a220a82a22a960c91b6064820152620100009091046001600160a01b0316925063c657c7189150608401600060405180830381600087803b15801561031957600080fd5b505af115801561032d573d6000803e3d6000fd5b505050506102a6806103406000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101ff565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526101619161023b565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb919061024e565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b818111156101f4576000828601525b509290920192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061023360048301846101c4565b949350505050565b600061024782846101c4565b9392505050565b60006020828403121561026057600080fd5b8151801515811461024757600080fdfea2646970667358221220293f55a0ef7b60c31a89dbc50e3339c80a8fdb1f9567614b200e97598226671f64736f6c634300080a003360806040523480156200001157600080fd5b506040516201110538038062011105833981016040819052620000349162000811565b6200003f3362000734565b6040516200004d9062000784565b604051809103906000f0801580156200006a573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039283169081179091556040516310dc138160e31b81529184166004830152906386e09c0890602401600060405180830381600087803b158015620000c457600080fd5b505af1158015620000d9573d6000803e3d6000fd5b50506001546040516301ed651160e41b81526001600160a01b0385811660048301529091169250631ed651109150602401600060405180830381600087803b1580156200012557600080fd5b505af11580156200013a573d6000803e3d6000fd5b505050506040516200014c9062000792565b604051809103906000f08015801562000169573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039283169081179091556001546040516376aad60560e01b81526004810192909252909116906376aad60590602401600060405180830381600087803b158015620001c957600080fd5b505af1158015620001de573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200020290620007a0565b6001600160a01b039091168152602001604051809103906000f0801580156200022f573d6000803e3d6000fd5b5060015460405163338f12b960e21b81526001600160a01b03808416600483015292935091169063ce3c4ae490602401600060405180830381600087803b1580156200027a57600080fd5b505af11580156200028f573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620002b390620007ae565b6001600160a01b039091168152602001604051809103906000f080158015620002e0573d6000803e3d6000fd5b5060015460405163c5120b3960e01b81526001600160a01b03808416600483015292935091169063c5120b3990602401600060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b5050600154604051606093506001600160a01b03909116915082906200036690620007bc565b6200037392919062000849565b604051809103906000f08015801562000390573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b0392831690811790915560015460405163530e784f60e01b815260048101929092529091169063530e784f90602401600060405180830381600087803b158015620003f057600080fd5b505af115801562000405573d6000803e3d6000fd5b5050600154604051600093506001600160a01b0390911691506200042990620007ca565b6001600160a01b039091168152602001604051809103906000f08015801562000456573d6000803e3d6000fd5b506001546040516356ee0d3b60e11b81526001600160a01b03808416600483015292935091169063addc1a7690602401600060405180830381600087803b158015620004a157600080fd5b505af1158015620004b6573d6000803e3d6000fd5b5050600154604051600093506001600160a01b039091169150620004da90620007d8565b6001600160a01b039091168152602001604051809103906000f08015801562000507573d6000803e3d6000fd5b506001546040516321da583760e01b81526001600160a01b0380841660048301529293509116906321da583790602401600060405180830381600087803b1580156200055257600080fd5b505af115801562000567573d6000803e3d6000fd5b505050506000306040516200057c90620007e6565b6001600160a01b039091168152602001604051809103906000f080158015620005a9573d6000803e3d6000fd5b50600154604051631795d5b360e31b81526001600160a01b03808416600483015292935091169063bcaead9890602401600060405180830381600087803b158015620005f457600080fd5b505af115801562000609573d6000803e3d6000fd5b505060405163f2fde38b60e01b81523360048201526001600160a01b038416925063f2fde38b9150602401600060405180830381600087803b1580156200064f57600080fd5b505af115801562000664573d6000803e3d6000fd5b505060015460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620006ae57600080fd5b505af1158015620006c3573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050505050505050505050620008b2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610fcd80620010dd83390190565b61098c80620020aa83390190565b610f508062002a3683390190565b614da6806200398683390190565b611b45806200872c83390190565b612ced806200a27183390190565b611627806200cf5e83390190565b612b80806200e58583390190565b80516001600160a01b03811681146200080c57600080fd5b919050565b600080604083850312156200082557600080fd5b6200083083620007f4565b91506200084060208401620007f4565b90509250929050565b6001600160a01b0383811682526040602080840182905284518483018190526000938683019290916060870190865b81811015620008a3578551805186168452840151851684840152948301949186019160010162000878565b50909998505050505050505050565b61081b80620008c26000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638874ff1f1161005b5780638874ff1f146100f55780638da5cb5b14610108578063de28735914610126578063f2fde38b1461014657600080fd5b80632630c12f146100825780632954018c146100cb578063715018a6146100eb575b600080fd5b6003546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6001546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610159565b005b6100f3610103366004610658565b6101eb565b60005473ffffffffffffffffffffffffffffffffffffffff166100a2565b6002546100a29073ffffffffffffffffffffffffffffffffffffffff1681565b6100f3610154366004610734565b6103e3565b60005473ffffffffffffffffffffffffffffffffffffffff1633146101df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6101e96000610513565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b60005b815181101561035c57600354825173ffffffffffffffffffffffffffffffffffffffff9091169063e8a97a3e908490849081106102ae576102ae610756565b6020026020010151600001518484815181106102cc576102cc610756565b6020026020010151602001516040518363ffffffff1660e01b815260040161031792919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b600060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b50505050808061035490610785565b91505061026f565b506002546040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063f2fde38b90602401600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d6565b73ffffffffffffffffffffffffffffffffffffffff8116610507576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101d6565b61051081610513565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156105da576105da610588565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561062757610627610588565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065357600080fd5b919050565b6000602080838503121561066b57600080fd5b823567ffffffffffffffff8082111561068357600080fd5b818501915085601f83011261069757600080fd5b8135818111156106a9576106a9610588565b6106b7848260051b016105e0565b818152848101925060069190911b8301840190878211156106d757600080fd5b928401925b8184101561072957604084890312156106f55760008081fd5b6106fd6105b7565b6107068561062f565b815261071386860161062f565b81870152835260409390930192918401916106dc565b979650505050505050565b60006020828403121561074657600080fd5b61074f8261062f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea26469706673582212205ee75e57bb635aa49a1758f4ab0b04182a73115bff08f420c56a8ddb433c029364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361005f565b60405130906f20a2222922a9a9afa82927ab24a222a960811b907fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c69190600090a36100af565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f0f806100be6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806377532ed9116100e3578063bcaead981161008c578063ce3c4ae411610066578063ce3c4ae414610308578063f2fde38b1461031b578063fca513a81461032e57600080fd5b8063bcaead98146102da578063c5120b39146102ed578063c513c9bb1461030057600080fd5b80639068a868116100bd5780639068a868146102b7578063addc1a76146102bf578063affd9243146102d257600080fd5b806377532ed91461027e57806386e09c08146102865780638da5cb5b1461029957600080fd5b80634c252f9111610145578063699f200f1161011f578063699f200f1461022d578063715018a61461026357806376aad6051461026b57600080fd5b80634c252f91146101fc578063530e784f1461020457806354fd4d501461021757600080fd5b80631ed65110116101765780631ed65110146101cc57806321da5837146101e157806326c74fc3146101f457600080fd5b8063060678c21461019257806308737695146101c4575b600080fd5b61019a610336565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61019a610366565b6101df6101da366004610e10565b610391565b005b6101df6101ef366004610e10565b610444565b61019a6104ef565b61019a61051a565b6101df610212366004610e10565b610545565b61021f600281565b6040519081526020016101bb565b61019a61023b366004610e4d565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101df6105f0565b6101df610279366004610e10565b61067d565b61019a610728565b6101df610294366004610e10565b610753565b60005473ffffffffffffffffffffffffffffffffffffffff1661019a565b61019a6107fe565b6101df6102cd366004610e10565b610829565b61019a6108d4565b6101df6102e8366004610e10565b6108ff565b6101df6102fb366004610e10565b6109aa565b61019a610a55565b6101df610316366004610e10565b610a80565b6101df610329366004610e10565b610b2b565b61019a610c58565b60006103617f444154415f434f4d50524553534f520000000000000000000000000000000000610c7f565b905090565b60006103617f41434c0000000000000000000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6104417f54524541535552595f434f4e545241435400000000000000000000000000000082610d1d565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f47415445574159000000000000000000000000000000000000000082610d1d565b60006103617f54524541535552595f434f4e5452414354000000000000000000000000000000610c7f565b60006103617f574554485f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f50524943455f4f5241434c45000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b61067b6000610d9b565b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f41434c000000000000000000000000000000000000000000000000000000000082610d1d565b60006103617f574554485f474154455741590000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f574554485f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60006103617f4143434f554e545f464143544f52590000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff1633146108aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f4143434f554e545f464143544f5259000000000000000000000000000000000082610d1d565b60006103617f474541525f544f4b454e00000000000000000000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f474541525f544f4b454e0000000000000000000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f444154415f434f4d50524553534f52000000000000000000000000000000000082610d1d565b60006103617f434f4e5452414354535f52454749535445520000000000000000000000000000610c7f565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b6104417f434f4e5452414354535f5245474953544552000000000000000000000000000082610d1d565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161040e565b73ffffffffffffffffffffffffffffffffffffffff8116610c4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161040e565b61044181610d9b565b60006103617f50524943455f4f5241434c4500000000000000000000000000000000000000005b6000818152600160209081526040808320548151808301909252600382527f41503100000000000000000000000000000000000000000000000000000000009282019290925273ffffffffffffffffffffffffffffffffffffffff9091169081610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040e9190610e66565b5092915050565b60008281526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091559051909184917fb37614c7d254ea8d16eb81fa11dddaeb266aa8ba4917980859c7740aff30c6919190a35050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610e2257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610e4657600080fd5b9392505050565b600060208284031215610e5f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610e9357858101830151858201604001528201610e77565b81811115610ea5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea264697066735822122083c228af017c6f5cf8c395cdf7a53276ff56fdd4f4313c39f680ab73bd75417364736f6c634300080a0033608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61090e8061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063732818191161008c578063adce758d11610066578063adce758d14610215578063ba306df114610228578063d4eb5db01461023b578063f2fde38b1461027457600080fd5b806373281819146101b7578063819ad68e146101da5780638da5cb5b146101ed57600080fd5b806354fd4d50116100bd57806354fd4d501461016a5780635f259aba14610180578063715018a6146101af57600080fd5b806335914829146100e45780633a41ec641461011c5780634910832f14610155575b600080fd5b6101076100f236600461089b565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61010761012a36600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b61016861016336600461089b565b610287565b005b610172600181565b604051908152602001610113565b61010761018e36600461089b565b60005473ffffffffffffffffffffffffffffffffffffffff91821691161490565b610168610387565b6101076101c536600461089b565b60026020526000908152604090205460ff1681565b6101686101e836600461089b565b610414565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610113565b61016861022336600461089b565b61050c565b61016861023636600461089b565b610601565b61010761024936600461089b565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b61016861028236600461089b565b6106f6565b60005473ffffffffffffffffffffffffffffffffffffffff16331461030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155517fae26b1cfe9454ba87274a4e8330b6654684362d0f3d7bbd17f7449a1d38387c69190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610408576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b6104126000610826565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517fd400da6c0c0a894dacc0981730b88af0545d00272ee8fff1437bf560ff245fc49190a250565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f1998397e7203f7baca9d6f41b9e4da6e768daac5caad4234fb9bf5869d2715459190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f28b01395b7e25d20552a0c8dc8ecd3b1d4abc986f14dad7885fd45b6fd73c8d99190a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610304565b73ffffffffffffffffffffffffffffffffffffffff811661081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610304565b61082381610826565b50565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156108ad57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146108d157600080fd5b939250505056fea26469706673582212204712efbfe997070def77285a5b8753bc882b62da2133ce1937ad26cd2b48e49864736f6c634300080a003360a060405234801561001057600080fd5b50604051610f50380380610f5083398101604081905261002f916100d7565b6000805460ff19169055806001600160a01b03811661006157604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa15801561009f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100c391906100d7565b6001600160a01b0316608052506101079050565b6000602082840312156100e957600080fd5b81516001600160a01b038116811461010057600080fd5b9392505050565b608051610e1261013e600039600081816101e2015281816102b20152818161040f0152818161057801526108510152610e126000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638456cb5911610097578063b4ac686011610066578063b4ac686014610217578063c29277cd1461021f578063d914cd4b14610227578063e26b2f631461023a57600080fd5b80638456cb59146101cd57806394144856146101d5578063a50cf2c8146101dd578063ac4afa381461020457600080fd5b80635b16ebb7116100d35780635b16ebb7146101575780635c975abb1461018a578063673a2a1f146101955780636fbc6f6b146101aa57600080fd5b80631e16e4fc146100fa5780633f4ba83a1461013757806354fd4d5014610141575b600080fd5b61010d610108366004610c97565b61024d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61013f610284565b005b610149600181565b60405190815260200161012e565b61017a610165366004610cb0565b60026020526000908152604090205460ff1681565b604051901515815260200161012e565b60005460ff1661017a565b61019d610372565b60405161012e9190610ced565b61017a6101b8366004610cb0565b60046020526000908152604090205460ff1681565b61013f6103e1565b61019d6104cd565b61010d7f000000000000000000000000000000000000000000000000000000000000000081565b61010d610212366004610c97565b61053a565b600154610149565b600354610149565b61013f610235366004610cb0565b61054a565b61013f610248366004610cb0565b610823565b6003818154811061025d57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561030e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103329190610d47565b610368576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610af6565b565b606060018054806020026020016040519081016040528092919081815260200182805480156103d757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575b5050505050905090565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f9190610d47565b6104c5576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610370610bd7565b606060038054806020026020016040519081016040528092919081815260200182805480156103d75760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116103ac575050505050905090565b6001818154811061025d57600080fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156105d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f89190610d47565b61062e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff82166106b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260026020908152604091829020548251808401909352600383527f43523100000000000000000000000000000000000000000000000000000000009183019190915260ff1615610753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917ff816b5143086c89d103a0683286be86c2b741e83ebfa75135aae606e2f5c6e5391a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190610d47565b610907576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600281527f5a30000000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8216610989576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b5073ffffffffffffffffffffffffffffffffffffffff8116600090815260046020908152604091829020548251808401909352600383527f43523200000000000000000000000000000000000000000000000000000000009183019190915260ff1615610a23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b09190610d69565b506003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915560008181526004602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909417909355915190917f58ad3cfc4b6552a53c8c4128ae9b080e14b4378a159280643a62c6f709cee24f91a250565b60005460ff16610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff1615610c44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610bad3390565b600060208284031215610ca957600080fd5b5035919050565b600060208284031215610cc257600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610ce657600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610d3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610d09565b50909695505050505050565b600060208284031215610d5957600080fd5b81518015158114610ce657600080fd5b600060208083528351808285015260005b81811015610d9657858101830151858201604001528201610d7a565b81811115610da8576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea26469706673582212208f2d91c863db9ab1494a9c5db20e3fddc4b6c779ea3c3621737c105c60d9440a64736f6c634300080a003360e06040523480156200001157600080fd5b5060405162004da638038062004da6833981016040819052620000349162000160565b6001600160a01b0381166200005c57604051635919af9760e11b815260040160405180910390fd5b6001600160a01b03811660808190526040805163c513c9bb60e01b8152905163c513c9bb916004808201926020929091908290030181865afa158015620000a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cd919062000160565b6001600160a01b031660a0816001600160a01b0316815250506080516001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000160565b6001600160a01b031660c0525062000192565b6000602082840312156200017357600080fd5b81516001600160a01b03811681146200018b57600080fd5b9392505050565b60805160a05160c051614b896200021d6000396000818161018801528181611c4f0152612c5a0152600081816101ed015281816115e201528181611f5f0152818161213f0152818161223f0152818161243801528181612604015281816126bc01528181612788015281816129a501528181613c410152613d000152600061013c0152614b896000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063a80deda31161005b578063a80deda31461020f578063ae093f3f1461022f578063fc9914cb1461024f57600080fd5b806354fd4d50146101bd578063663b8fdb146101d35780637a0c7b21146101e857600080fd5b80632954018c116100b25780632954018c146101375780634b2f336d146101835780634c472fc9146101aa57600080fd5b80630dbd616d146100d957806313d21cdf146101025780631bcd8fc014610122575b600080fd5b6100ec6100e73660046140fc565b610272565b6040516100f9919061430b565b60405180910390f35b61011561011036600461431e565b6114d4565b6040516100f99190614444565b61012a611f59565b6040516100f99190614453565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f9565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61015e6101b83660046140fc565b6121f5565b6101c5600281565b6040519081526020016100f9565b6101db612432565b6040516100f991906146ea565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b61022261021d36600461431e565b6126b5565b6040516100f9919061476a565b61024261023d36600461431e565b612a75565b6040516100f991906147dd565b61026261025d3660046140fc565b613bf7565b60405190151581526020016100f9565b61035f604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b600080600080600061037088613cf4565b509450945094509450945060008560ff1660011461041d576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015284169063e958b70490602401602060405180830381865afa1580156103f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041891906147f0565b6104ad565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015286169063e958b70490602401602060405180830381865afa158015610489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ad91906147f0565b60ff8716610200890181905273ffffffffffffffffffffffffffffffffffffffff808b1660208b01528b811660608b015282168952909150600114156109e9578473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c91906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529085169063c7de38a690602401602060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f5919061480d565b60c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015285169063dfd5946590602401602060405180830381865afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061480d565b60e08801526040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260006024830152861690633ce0735590604401602060405180830381865afa92505050801561073c575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107399181019061480d565b60015b6107455761074c565b6101408801525b6040517f3ce0735500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015260016024830152861690633ce0735590604401602060405180830381865afa9250505080156107f9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526107f69181019061480d565b60015b61080257610809565b6101608801525b60c08701516040517f996329f800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526024820192909252600060448201529086169063996329f89060640160a060405180830381865afa9250505080156108c4575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526108c191810190614826565b60015b6108cd576108da565b505015156101808a015250505b8073ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610949919061480d565b6101a08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152851690633192195c90602401602060405180830381865afa1580156109bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109df919061480d565b60a0880152610c26565b8273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5891906147f0565b73ffffffffffffffffffffffffffffffffffffffff90811660808901526040517fc7de38a600000000000000000000000000000000000000000000000000000000815282821660048201529083169063c7de38a6906024016040805180830381865afa158015610acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af09190614866565b5060c08801526040517fdfd5946500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283169063dfd5946590602401602060405180830381865afa158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b86919061480d565b60e08801526040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152841690633192195c906024016040805180830381865afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614866565b60a08901526101a08801525b60008660ff16600114610ca7578373ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca291906147f0565b610d16565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1691906147f0565b90508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d87919061480d565b6101008901526000600160ff891614610e0e578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e09919061480d565b610e7d565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d919061480d565b90508760ff16600114610f1f576040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152861690638991b2f190602401602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061480d565b610faf565b6040517fb451cecc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015287169063b451cecc90602401602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf919061480d565b6102208a01528067ffffffffffffffff811115610fce57610fce61488a565b60405190808252806020026020018201604052801561103e57816020015b6040805160808101825260008082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610fec5790505b506101208a015260005b818110156113d657604080516080810182526000808252602082018190529181018290526060810191909152600180831b9060ff8c1614156111c5576040517faf0a650200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018590528a169063af0a650290604401608060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906148b9565b5050602084015273ffffffffffffffffffffffffffffffffffffffff9081168084526040517ff9eaee0d0000000000000000000000000000000000000000000000000000000081526004810191909152908a169063f9eaee0d90602401602060405180830381865afa158015611195573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b9919061490d565b15156040830152611388565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff89169063172c48c7906024016040805180830381865afa15801561122f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112539190614928565b5073ffffffffffffffffffffffffffffffffffffffff9081168084526040517f70a082310000000000000000000000000000000000000000000000000000000081529188166004830152906370a0823190602401602060405180830381865afa1580156112c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e8919061480d565b602083015281516040517ff9eaee0d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529088169063f9eaee0d90602401602060405180830381865afa15801561135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611380919061490d565b151560408301525b6102208c015181161561139c57600161139f565b60005b151560608301526101208c01518051839190859081106113c1576113c161495e565b60209081029190910101525050600101611048565b508273ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611422573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611446919061480d565b896101c00181815250508273ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561149b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bf919061480d565b6101e08a015250969998505050505050505050565b61159b604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015283917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f919061490d565b611685576040517fd384b23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316808352604080517ffe14112d000000000000000000000000000000000000000000000000000000008152905185929163fe14112d9160048083019260209291908290030181865afa1580156116f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611719919061480d565b8360c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663ef8d96036040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611791919061480d565b8360e00181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611809919061480d565b8360a00181815250508073ffffffffffffffffffffffffffffffffffffffff16634c19386c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611881919061480d565b836101000181815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fa919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611973919061480d565b8360800181815250508073ffffffffffffffffffffffffffffffffffffffff166345d31f9d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb919061480d565b836101400181815250508073ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6491906147f0565b836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906147f0565b836060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663788c6bfe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb0919061480d565b836101600181815250508073ffffffffffffffffffffffffffffffffffffffff1663e941fa786040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c29919061480d565b61018084015260408084015173ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082161460208087019190915282517f609ae31700000000000000000000000000000000000000000000000000000000815292519184169263609ae31792600480830193928290030181865afa158015611ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cef919061480d565b836101c00181815250508073ffffffffffffffffffffffffffffffffffffffff1663dbcb313b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d68919061480d565b836101a00181815250506000836060015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de7919061480d565b6040517f5427c9380000000000000000000000000000000000000000000000000000000081526004810182905290915060009073ffffffffffffffffffffffffffffffffffffffff841690635427c93890602401602060405180830381865afa158015611e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7c919061480d565b90508015611ec7576101808501518190611eb890611e9c906127106149bc565b876101000151886101400151611eb291906149d3565b90613fd0565b611ec29190614a3f565b611ece565b8461014001515b856101200181815250508273ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f47919061480d565b60ff166101e086015250505050919050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ac68606040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061480d565b90508067ffffffffffffffff8111156120075761200761488a565b6040519080825280602002602001820160405280156120ff57816020015b6120ec604051806102000160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060ff1681525090565b8152602001906001900390816120255790505b50915060005b818110156121f0576040517fac4afa38000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ac4afa3890602401602060405180830381865afa15801561219b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bf91906147f0565b90506121ca816114d4565b8483815181106121dc576121dc61495e565b602090810291909101015250600101612105565b505090565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015612286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122aa919061490d565b6122e0576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006122ee87613cf4565b5050935093505092508260ff16600114612397576040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015282169063fdd5764590602401602060405180830381865afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239291906147f0565b612427565b6040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015283169063fdd5764590602401602060405180830381865afa158015612403573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242791906147f0565b979650505050505050565b606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c5919061480d565b90508067ffffffffffffffff8111156124e0576124e061488a565b6040519080825280602002602001820160405280156125c457816020015b60408051610260810182526000808252602080830182905292820181905260608083018290526080830182905260a0830182905260c0830182905260e0830182905261010083018290526101208301819052610140830181905261016083015261018082018190526101a082018190526101c082018190526101e082018190526102008201819052610220820181905261024082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124fe5790505b50915060005b818110156121f0576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268491906147f0565b905061268f81612a75565b8483815181106126a1576126a161495e565b6020908102919091010152506001016125ca565b60606000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c29277cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612749919061480d565b905060005b81811015612829576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa1580156127e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280891906147f0565b90506128148187613bf7565b15612820578360010193505b5060010161274e565b508167ffffffffffffffff8111156128435761284361488a565b60405190808252806020026020018201604052801561296157816020015b61294e604051806102400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600015158152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001606081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600060ff168152602001600081525090565b8152602001906001900390816128615790505b5092506000915060005b81811015612a6d576040517f1e16e4fc000000000000000000000000000000000000000000000000000000008152600481018290526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690631e16e4fc90602401602060405180830381865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2591906147f0565b9050612a318187613bf7565b15612a6457612a408187610272565b858581518110612a5257612a5261495e565b60209081029190910101526001909301925b5060010161296b565b505050919050565b604080516102608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201819052610140820181905261016082015261018081018290526101a081018290526101c081018290526101e08101829052610200810182905261022081018290526102408101829052908080808080612b1b88613cf4565b73ffffffffffffffffffffffffffffffffffffffff8e168d5260ff86166101808e01819052959b50939950919750955093509150600114612bca578273ffffffffffffffffffffffffffffffffffffffff16636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc591906147f0565b612c39565b8473ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3991906147f0565b73ffffffffffffffffffffffffffffffffffffffff908116602089018190527f00000000000000000000000000000000000000000000000000000000000000009091161460408801526000600160ff881614612d03578373ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe91906147f0565b612d72565b8573ffffffffffffffffffffffffffffffffffffffff1663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7291906147f0565b6040517f2e97ca2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b8116600483015291925090821690632e97ca2190602401602060405180830381865afa158015612de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e06919061490d565b15156060890152604080517f45d31f9d000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff8316916345d31f9d9160048083019260209291908290030181865afa158015612e78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9c919061480d565b8860800181815250508073ffffffffffffffffffffffffffffffffffffffff1663743753596040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f14919061480d565b610100890152600160ff88161415613017578573ffffffffffffffffffffffffffffffffffffffff16639b2cb5d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f95919061480d565b8860a00181815250508573ffffffffffffffffffffffffffffffffffffffff16635f48f3936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300d919061480d565b60c08901526130a5565b8273ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015613061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130859190614a73565b6fffffffffffffffffffffffffffffffff90811660c08b01521660a08901525b60008760ff16600114613126578473ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613121919061480d565b613195565b8573ffffffffffffffffffffffffffffffffffffffff166320a05ff76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613171573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613195919061480d565b90508067ffffffffffffffff8111156131b0576131b061488a565b6040519080825280602002602001820160405280156131d9578160200160208202803683370190505b506101208a01528067ffffffffffffffff8111156131f9576131f961488a565b604051908082528060200260200182016040528015613222578160200160208202803683370190505b506101608a015260005b818110156134c4578860ff16600114156133b4576040517f5e5f2e260000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff891690635e5f2e2690602401602060405180830381865afa1580156132ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d291906147f0565b9050808b610120015183815181106132ec576132ec61495e565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526040517f78327438000000000000000000000000000000000000000000000000000000008152828216600482015290891690637832743890602401602060405180830381865afa158015613367573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338b919061480d565b8b610160015183815181106133a2576133a261495e565b602002602001018181525050506134bc565b6040517f172c48c70000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff87169063172c48c7906024016040805180830381865afa15801561341e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134429190614928565b8061ffff1690508b610120015183815181106134605761346061495e565b602002602001018c6101600151848151811061347e5761347e61495e565b60200260200101828152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b60010161322c565b5060008860ff16600114613546578373ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613541919061480d565b6135b5565b8673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b5919061480d565b90508067ffffffffffffffff8111156135d0576135d061488a565b60405190808252806020026020018201604052801561361557816020015b60408051808201909152600080825260208201528152602001906001900390816135ee5790505b506101408b015260005b818110156139015760408051808201909152600080825260208201528a60ff166001146136da576040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff871690635094cb4f90602401602060405180830381865afa1580156136b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d591906147f0565b613769565b6040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff8a1690635094cb4f90602401602060405180830381865afa158015613745573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376991906147f0565b73ffffffffffffffffffffffffffffffffffffffff168152600160ff8c16146138245780516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529089169063fdd5764590602401602060405180830381865afa1580156137fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381f91906147f0565b6138b7565b80516040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152908a169063fdd5764590602401602060405180830381865afa158015613893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b791906147f0565b73ffffffffffffffffffffffffffffffffffffffff1660208201526101408c01518051829190849081106138ed576138ed61495e565b60209081029190910101525060010161361f565b508860ff166001141561398f578773ffffffffffffffffffffffffffffffffffffffff1663b2c53a6c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397d919061480d565b60e08b015260ff6102408b0152613be9565b73ffffffffffffffffffffffffffffffffffffffff85166101a08b01819052604080517f9408b63f0000000000000000000000000000000000000000000000000000000081529051639408b63f916004808201926020929091908290030181865afa158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a2691906147f0565b8a6101e0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190614aa6565b5015156102008c015250604080517f9fd12b77000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff881691639fd12b779160048083019260209291908290030181865afa158015613b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b66919061480d565b8a6102200181815250508573ffffffffffffffffffffffffffffffffffffffff16638345f26e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bdf9190614af7565b60ff166102408b01525b505050505050505050919050565b6040517f6fbc6f6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015260009184917f00000000000000000000000000000000000000000000000000000000000000001690636fbc6f6b90602401602060405180830381865afa158015613c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cac919061490d565b613ce2576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613cec8484614023565b949350505050565b600080600080600080867f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636fbc6f6b826040518263ffffffff1660e01b8152600401613d73919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b602060405180830381865afa158015613d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db4919061490d565b613dea576040517f2cf3d0de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e59919061480d565b96508660ff1660011415613ee0578795508573ffffffffffffffffffffffffffffffffffffffff1663f93f515b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed991906147f0565b9450613fc6565b8793508373ffffffffffffffffffffffffffffffffffffffff16632f7a18816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5291906147f0565b92508373ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fc391906147f0565b91505b5091939550919395565b6000821580613fdd575081155b15613fea5750600061401d565b612710613ff8600282614b1a565b61ffff1661400684866149d3565b6140109190614b3b565b61401a9190614a3f565b90505b92915050565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829185169063055ee9b590602401602060405180830381865afa158015614094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b891906147f0565b73ffffffffffffffffffffffffffffffffffffffff1614159392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146140f957600080fd5b50565b6000806040838503121561410f57600080fd5b823561411a816140d7565b9150602083013561412a816140d7565b809150509250929050565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff168852838101518489015260408082015115159089015260609081015115159088015260809096019590820190600101614149565b509495945050505050565b805173ffffffffffffffffffffffffffffffffffffffff168252600061024060208301516141f0602086018273ffffffffffffffffffffffffffffffffffffffff169052565b506040830151614204604086018215159052565b50606083015161422c606086018273ffffffffffffffffffffffffffffffffffffffff169052565b506080830151614254608086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015160a085015260c083015160c085015260e083015160e085015261010080840151818601525061012080840151828287015261429783870182614135565b92505050610140808401518186015250610160808401518186015250610180808401516142c78287018215159052565b50506101a083810151908501526101c080840151908501526101e080840151908501526102008084015160ff16908501526102209283015192909301919091525090565b60208152600061401a60208301846141aa565b60006020828403121561433057600080fd5b813561433b816140d7565b9392505050565b805173ffffffffffffffffffffffffffffffffffffffff168252602081015161436f602084018215159052565b506040810151614397604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608101516143bf606084018273ffffffffffffffffffffffffffffffffffffffff169052565b506080818101519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e09081015160ff16910152565b610200810161401d8284614342565b6020808252825182820181905260009190848201906040850190845b8181101561449657614482838551614342565b92840192610200929092019160010161446f565b50909695505050505050565b600081518084526020808501945080840160005b8381101561419f57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016144b6565b600081518084526020808501945080840160005b8381101561419f578151805173ffffffffffffffffffffffffffffffffffffffff9081168952908401511683880152604090960195908201906001016144fc565b600081518084526020808501945080840160005b8381101561419f57815187529582019590820190600101614551565b805173ffffffffffffffffffffffffffffffffffffffff168252600061026060208301516145b3602086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516145c7604086018215159052565b5060608301516145db606086018215159052565b506080830151608085015260a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518282870152614628838701826144a2565b92505050610140808401518583038287015261464483826144e8565b925050506101608084015185830382870152614660838261453d565b92505050610180808401516146798287018260ff169052565b50506101a08381015173ffffffffffffffffffffffffffffffffffffffff908116918601919091526101c0808501511515908601526101e080850151909116908501526102008084015115159085015261022080840151908501526102409283015160ff1692909301919091525090565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261474b85835161456d565b94509285019290850190600101614711565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561475d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147cb8583516141aa565b94509285019290850190600101614791565b60208152600061401a602083018461456d565b60006020828403121561480257600080fd5b815161433b816140d7565b60006020828403121561481f57600080fd5b5051919050565b600080600080600060a0868803121561483e57600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b6000806040838503121561487957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156148cf57600080fd5b84516148da816140d7565b60208601516040870151606090970151919890975090945092505050565b8051801515811461490857600080fd5b919050565b60006020828403121561491f57600080fd5b61401a826148f8565b6000806040838503121561493b57600080fd5b8251614946816140d7565b602084015190925061ffff8116811461412a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149ce576149ce61498d565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a0b57614a0b61498d565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a4e57614a4e614a10565b500490565b80516fffffffffffffffffffffffffffffffff8116811461490857600080fd5b60008060408385031215614a8657600080fd5b614a8f83614a53565b9150614a9d60208401614a53565b90509250929050565b600080600060608486031215614abb57600080fd5b614ac484614a53565b9250614ad2602085016148f8565b9150604084015164ffffffffff81168114614aec57600080fd5b809150509250925092565b600060208284031215614b0957600080fd5b815160ff8116811461433b57600080fd5b600061ffff80841680614b2f57614b2f614a10565b92169190910492915050565b60008219821115614b4e57614b4e61498d565b50019056fea2646970667358221220d15108d0bec9cc6f3903875dd8412869a3da1b36661bdc780e2e2f0ae3136d2464736f6c634300080a003360a06040523480156200001157600080fd5b5060405162001b4538038062001b45833981016040819052620000349162000608565b6000805460ff19169055816001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc91906200070a565b6001600160a01b031660805250805160005b818110156200014257620001398382815181106200010057620001006200072f565b6020026020010151600001518483815181106200012157620001216200072f565b6020026020010151602001516200014c60201b60201c565b600101620000de565b5050505062000822565b6001600160a01b03821615806200016a57506001600160a01b038116155b156200018957604051635919af9760e11b815260040160405180910390fd5b620001a8826001600160a01b0316620004ba60201b620006751760201c565b620001d65760405163df4c572d60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b620001f5816001600160a01b0316620004ba60201b620006751760201c565b6200021f5760405163df4c572d60e01b81526001600160a01b0382166004820152602401620001cd565b806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200027c575060408051601f3d908101601f19168201909252620002799181019062000745565b60015b6200029a576040516367a7cd4360e01b815260040160405180910390fd5b8060ff16600814620002bf576040516367a7cd4360e01b815260040160405180910390fd5b506000816001600160a01b031663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200031f575060408051601f3d908101601f191682019092526200031c918101906200076a565b60015b6200032a576200032d565b90505b6000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200038c575060408051601f3d908101601f19168201909252620003899181019062000745565b60015b620003aa5760405163528ca31d60e01b815260040160405180910390fd5b60128160ff161115620003d05760405163528ca31d60e01b815260040160405180910390fd5b9050826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa9250505080156200042f575060408051601f3d908101601f191682019092526200042c91810190620007a6565b60015b6200044d576040516367a7cd4360e01b815260040160405180910390fd5b8662000461576200046185858484620004c0565b5050505050620004748484848462000526565b826001600160a01b0316846001600160a01b03167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b3b151590565b60008313620004e2576040516356e05d2b60e01b815260040160405180910390fd5b836001600160501b0316816001600160501b0316108062000501575081155b15620005205760405163b1cf675560e01b815260040160405180910390fd5b50505050565b6001600160a01b03831682156200053e57600160a11b175b6200055460ff60a21b60a284901b1682620007fb565b6001600160a01b0390951660009081526001602052604090209490945550505050565b80516001600160a01b03811681146200058f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620005cf57620005cf62000594565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000600576200060062000594565b604052919050565b60008060408084860312156200061d57600080fd5b620006288462000577565b602085810151919450906001600160401b03808211156200064857600080fd5b818701915087601f8301126200065d57600080fd5b81518181111562000672576200067262000594565b62000682848260051b01620005d5565b818152848101925060069190911b830184019089821115620006a357600080fd5b928401925b81841015620006fa5785848b031215620006c25760008081fd5b620006cc620005aa565b620006d78562000577565b8152620006e686860162000577565b8187015283529285019291840191620006a8565b8096505050505050509250929050565b6000602082840312156200071d57600080fd5b620007288262000577565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200075857600080fd5b815160ff811681146200072857600080fd5b6000602082840312156200077d57600080fd5b815180151581146200072857600080fd5b80516001600160501b03811681146200058f57600080fd5b600080600080600060a08688031215620007bf57600080fd5b620007ca866200078e565b9450602086015193506040860151925060608601519150620007ef608087016200078e565b90509295509295909350565b600082198211156200081d57634e487b7160e01b600052601160045260246000fd5b500190565b6080516112f262000853600039600081816101b201528181610280015281816103e201526104ff01526112f26000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80638456cb591161008c578063b66102df11610066578063b66102df146101d4578063e8a97a3e146101e7578063f190e5fa146101fa578063f9a650301461023f57600080fd5b80638456cb591461016d5780639dcb511a14610175578063a50cf2c8146101ad57600080fd5b80635c975abb116100bd5780635c975abb1461011c5780635cecbd0e146101325780637afb01041461015a57600080fd5b80633f4ba83a146100e457806341976e09146100ee57806354fd4d5014610114575b600080fd5b6100ec610252565b005b6101016100fc366004610f28565b610340565b6040519081526020015b60405180910390f35b610101600281565b60005460ff16604051901515815260200161010b565b610145610140366004610f4a565b610352565b6040805192835260208301919091520161010b565b610101610168366004610f90565b610376565b6100ec6103b4565b610188610183366004610f28565b6104a0565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010b565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b6101016101e2366004610fbc565b6104b4565b6100ec6101f5366004610ff8565b6104d1565b61020d610208366004610f28565b6105c3565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845291151560208401529082015260600161010b565b61010161024d366004610f90565b61064d565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156102dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103009190611022565b610336576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e61067b565b565b600061034b82610761565b5092915050565b60008061035f868661064d565b915061036b848461064d565b905094509492505050565b600080600061038484610761565b90925090508161039582600a611193565b61039f908761119f565b6103a991906111dc565b925050505b92915050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561043e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104629190611022565b610498576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033e610819565b60006104ab826105c3565b50909392505050565b60006104c96104c3858561064d565b83610376565b949350505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611022565b6105b5576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105bf82826108d9565b5050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260408120548190819080610624576040517f4bb8ad8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b947402000000000000000000000000000000000000000086161515945060a286901c9350915050565b600080600061065b84610761565b909250905061066b81600a611193565b61039f838761119f565b3b151590565b60005460ff166106ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600080600080610770856105c3565b8095508193508294505050506000806000808573ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f19190611231565b9450945050935093508461080b5761080b84848484610dd9565b829750505050505050915091565b60005460ff1615610886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586107373390565b73ffffffffffffffffffffffffffffffffffffffff82161580610910575073ffffffffffffffffffffffffffffffffffffffff8116155b15610947576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b6109ad576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016106e3565b73ffffffffffffffffffffffffffffffffffffffff81163b610a13576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016106e3565b8073ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a98575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a9591810190611281565b60015b610ace576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16600814610b0b576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060008173ffffffffffffffffffffffffffffffffffffffff1663d62ada116040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b93575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610b9091810190611022565b60015b610b9c57610b9f565b90505b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c26575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610c2391810190611281565b60015b610c5c576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60128160ff161115610c9a576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b90508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa925050508015610d21575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610d1e91810190611231565b60015b610d57576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86610d6857610d6885858484610dd9565b5050505050610d7984848484610e74565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe263805b03657ab13064915d0723c5ce14981547e7cba5283f66b9e5d81f6e6e60405160405180910390a350505050565b60008313610e13576040517f56e05d2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8369ffffffffffffffffffff168169ffffffffffffffffffff161080610e37575081155b15610e6e576040517fb1cf675500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff83168215610ea95774020000000000000000000000000000000000000000175b610ecf7503fc000000000000000000000000000000000000000060a284901b16826112a4565b73ffffffffffffffffffffffffffffffffffffffff90951660009081526001602052604090209490945550505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f2357600080fd5b919050565b600060208284031215610f3a57600080fd5b610f4382610eff565b9392505050565b60008060008060808587031215610f6057600080fd5b84359350610f7060208601610eff565b925060408501359150610f8560608601610eff565b905092959194509250565b60008060408385031215610fa357600080fd5b82359150610fb360208401610eff565b90509250929050565b600080600060608486031215610fd157600080fd5b83359250610fe160208501610eff565b9150610fef60408501610eff565b90509250925092565b6000806040838503121561100b57600080fd5b61101483610eff565b9150610fb360208401610eff565b60006020828403121561103457600080fd5b81518015158114610f4357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156110cc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156110b2576110b2611044565b808516156110bf57918102915b93841c9390800290611078565b509250929050565b6000826110e3575060016103ae565b816110f0575060006103ae565b816001811461110657600281146111105761112c565b60019150506103ae565b60ff84111561112157611121611044565b50506001821b6103ae565b5060208310610133831016604e8410600b841016171561114f575081810a6103ae565b6111598383611073565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561118b5761118b611044565b029392505050565b6000610f4383836110d4565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156111d7576111d7611044565b500290565b600082611212577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff81168114610f2357600080fd5b600080600080600060a0868803121561124957600080fd5b61125286611217565b945060208601519350604086015192506060860151915061127560808701611217565b90509295509295909350565b60006020828403121561129357600080fd5b815160ff81168114610f4357600080fd5b600082198211156112b7576112b7611044565b50019056fea2646970667358221220e7485a2cb5750973f539ca59d2211008b42bb92b6c49605a53f5d9c88c330fb164736f6c634300080a003360e06040523480156200001157600080fd5b5060405162002ced38038062002ced8339810160408190526200003491620004bb565b6000805460ff19169055806001600160a01b0381166200006757604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cc9190620004bb565b6001600160a01b039081166080526001805560408051808201909152600281526105a360f41b602082015291508216620001245760405162461bcd60e51b81526004016200011b9190620004ed565b60405180910390fd5b50806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620004bb565b6001600160a01b031660c052604051620001a490620004ad565b604051809103906000f080158015620001c1573d6000803e3d6000fd5b506001600160a01b031660a08190526040805163204a7f0760e21b81529051638129fc1c9160048082019260009290919082900301818387803b1580156200020857600080fd5b505af11580156200021d573d6000803e3d6000fd5b50505050620002316200028a60201b60201c565b50600454600380546001600160a01b039092166001600160a01b03199283161790556000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b8054909116905562000545565b6000620002a460a0516200038c60201b6200119b1760201c565b9050806001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b5050600480546001600160a01b03908116600090815260026020908152604090912080546001600160a01b03199081169388169384179091558354169091179091556200035492506005915083906200043b811b6200127d17901c565b506040516001600160a01b038216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09150506001600160a01b038116620004365760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c65640000000000000000000060448201526064016200011b565b919050565b600062000452836001600160a01b0384166200045b565b90505b92915050565b6000818152600183016020526040812054620004a45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000455565b50600062000455565b610e788062001e7583390190565b600060208284031215620004ce57600080fd5b81516001600160a01b0381168114620004e657600080fd5b9392505050565b600060208083528351808285015260005b818110156200051c57858101830151858201604001528201620004fe565b818111156200052f576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05160c0516118cf620005a66000396000818161026a015281816103680152610b7001526000818161020201526110650152600081816102c4015281816105b80152818161099601528181610a840152610e7401526118cf6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806388f64c54116100cd578063b193976311610081578063d82ecc4811610066578063d82ecc4814610309578063e3ba9ace1461031c578063f23953ab1461032f57600080fd5b8063b1939763146102f9578063b60e85181461030157600080fd5b80638f7dcfa3116100b25780638f7dcfa31461029f578063a50cf2c8146102bf578063a904aab6146102e657600080fd5b806388f64c541461026557806389b77b3e1461028c57600080fd5b806354fd4d50116101245780635da33c5b116101095780635da33c5b146101fd578063765e0159146102245780638456cb591461025d57600080fd5b806354fd4d50146101d05780635c975abb146101e657600080fd5b806313d8c8401461015657806321d18456146101a05780632932472f146101b35780633f4ba83a146101c8575b600080fd5b6004546101769073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101766101ae366004611651565b610337565b6101c66101c1366004611697565b61058a565b005b6101c6610968565b6101d8600181565b604051908152602001610197565b60005460ff165b6040519015158152602001610197565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101766102323660046116da565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541690565b6101c6610a56565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c661029a3660046116da565b610b42565b6003546101769073ffffffffffffffffffffffffffffffffffffffff1681565b6101767f000000000000000000000000000000000000000000000000000000000000000081565b6101c66102f4366004611697565b610e46565b6101d8610fb8565b6101d8611033565b6101ed6103173660046116da565b611044565b61017661032a3660046116f5565b611051565b6101c661105e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa1580156103c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103e8919061170e565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061045f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b60405180910390fd5b506104686112a6565b6003805473ffffffffffffffffffffffffffffffffffffffff8082166000818152600260205260409081902080549093167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558154909216905590517fc75b5a710000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052819063c75b5a7190606401600060405180830381600087803b15801561052657600080fd5b505af115801561053a573d6000803e3d6000fd5b505060405133925073ffffffffffffffffffffffffffffffffffffffff841691507ff3ede7039176503a8ad1fe7cfaa29475a9dbe0cdcaf04ecf9a5c10570c47b10390600090a390505b92915050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061170e565b61066e576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106766112a6565b60035473ffffffffffffffffffffffffffffffffffffffff838116911614156106fa576003805473ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902080549091167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092558154169055610865565b73ffffffffffffffffffffffffffffffffffffffff838116600090815260026020908152604091829020548251808401909352600383527f4146330000000000000000000000000000000000000000000000000000000000918301919091529091848116911614610798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b5060045473ffffffffffffffffffffffffffffffffffffffff838116911614156107fd57600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b73ffffffffffffffffffffffffffffffffffffffff828116600081815260026020526040808220805488861684529183208054929095167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790945591905281541690555b6040517fc75b5a7100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600060248301819052604483015283169063c75b5a7190606401600060405180830381600087803b1580156108dc57600080fd5b505af11580156108f0573d6000803e3d6000fd5b505050506109088260056112dd90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f25e267469ba2ae82515be7b3d45df60bf8308343f0809e8cf7319058e2255ce660405160405180910390a3505050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156109f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a16919061170e565b610a4c576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546112ff565b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b04919061170e565b610b3a576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a546113e0565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf0919061170e565b6040518060400160405280600281526020017f435000000000000000000000000000000000000000000000000000000000000081525090610c5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50610c6a6005826114a0565b6040518060400160405280600381526020017f414634000000000000000000000000000000000000000000000000000000000081525090610cd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b50438173ffffffffffffffffffffffffffffffffffffffff16633dc54b406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4991906117a3565b14156040518060400160405280600381526020017f414631000000000000000000000000000000000000000000000000000000000081525090610db9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104569190611730565b506004805473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169487169485179091558454168317909355915190917fced6ab9afc868b3a088366f6631ae20752993b5cce5d5f0534ea5a59fcc57d5691a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef4919061170e565b610f2a576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f19a1603900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301528416906319a1603990604401600060405180830381600087803b158015610f9b57600080fd5b505af1158015610faf573d6000803e3d6000fd5b50505050505050565b600354600090819073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff81161561102d5773ffffffffffffffffffffffffffffffffffffffff9081166000908152600260205260409020541681611025816117eb565b925050610fd7565b50919050565b600061103f60056114cf565b905090565b60006105846005836114a0565b60006105846005836114d9565b60006110897f000000000000000000000000000000000000000000000000000000000000000061119b565b90508073ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110d357600080fd5b505af11580156110e7573d6000803e3d6000fd5b50506004805473ffffffffffffffffffffffffffffffffffffffff908116600090815260026020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811692871692831790915582541617905550611156905060058261127d565b5060405173ffffffffffffffffffffffffffffffffffffffff8216907f9f69b6c10f6810213e055b0ba6bc0a4e2603f73c221aad77ea35da819cda7dc390600090a250565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528260601b60148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f091505073ffffffffffffffffffffffffffffffffffffffff8116611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610456565b919050565b600061129f8373ffffffffffffffffffffffffffffffffffffffff84166114e5565b9392505050565b60035473ffffffffffffffffffffffffffffffffffffffff90811660009081526002602052604090205416610a5457610a5461105e565b600061129f8373ffffffffffffffffffffffffffffffffffffffff8416611534565b60005460ff1661136b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60005460ff161561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610456565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113b63390565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600183016020526040812054151561129f565b6000610584825490565b600061129f8383611627565b600081815260018301602052604081205461152c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610584565b506000610584565b6000818152600183016020526040812054801561161d576000611558600183611824565b855490915060009061156c90600190611824565b90508181146115d157600086600001828154811061158c5761158c61183b565b90600052602060002001549050808760000184815481106115af576115af61183b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806115e2576115e261186a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610584565b6000915050610584565b600082600001828154811061163e5761163e61183b565b9060005260206000200154905092915050565b6000806040838503121561166457600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461127857600080fd5b6000806000606084860312156116ac57600080fd5b6116b584611673565b92506116c360208501611673565b91506116d160408501611673565b90509250925092565b6000602082840312156116ec57600080fd5b61129f82611673565b60006020828403121561170757600080fd5b5035919050565b60006020828403121561172057600080fd5b8151801515811461129f57600080fd5b600060208083528351808285015260005b8181101561175d57858101830151858201604001528201611741565b8181111561176f576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000602082840312156117b557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561181d5761181d6117bc565b5060010190565b600082821015611836576118366117bc565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220f1e9c81b8c3af2491c907ee66cf24e1bb76111b821db02df8f98dbb48b5ab5fa64736f6c634300080a0033608060405234801561001057600080fd5b50610e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806354fd4d5011610081578063c45a01551161005b578063c45a0155146101a4578063c75b5a71146101ca578063d1660f99146101dd57600080fd5b806354fd4d501461014f5780638129fc1c14610157578063c12c21c01461015f57600080fd5b80631afbb7a4116100b25780631afbb7a41461011d5780631cff79cd146101265780633dc54b401461014657600080fd5b806316128211146100d957806317d11a15146100ee57806319a160391461010a575b600080fd5b6100ec6100e7366004610b42565b6101f0565b005b6100f760035481565b6040519081526020015b60405180910390f35b6100ec610118366004610b8d565b61024c565b6100f760025481565b610139610134366004610bef565b6102c9565b6040516101019190610d49565b6100f760045481565b6100f7600181565b6100ec610344565b60015461017f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b60005461017f9062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ec6101d8366004610d5c565b610494565b6100ec6101eb366004610d8f565b61053d565b60015473ffffffffffffffffffffffffffffffffffffffff163314610241576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600291909155600355565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146102a3576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102c573ffffffffffffffffffffffffffffffffffffffff83168260006105b4565b5050565b60015460609073ffffffffffffffffffffffffffffffffffffffff16331461031d576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61033d73ffffffffffffffffffffffffffffffffffffffff8416836107b4565b9392505050565b600054610100900460ff1661035f5760005460ff1615610363565b303b155b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600054610100900460ff1615801561043357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16336201000002179055801561049157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146104eb576040517fb126b84800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff949094169390931790925560025560035543600455565b60015473ffffffffffffffffffffffffffffffffffffffff16331461058e576040517f1f51116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105af73ffffffffffffffffffffffffffffffffffffffff841683836107f6565b505050565b80158061065457506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561062e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106529190610dcb565b155b6106e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016103eb565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261084c565b606061033d83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250610958565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526105af9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401610732565b60006108ae826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166109589092919063ffffffff16565b8051909150156105af57808060200190518101906108cc9190610de4565b6105af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103eb565b6060610967848460008561096f565b949350505050565b606082471015610a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103eb565b843b610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103eb565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610a929190610e06565b60006040518083038185875af1925050503d8060008114610acf576040519150601f19603f3d011682016040523d82523d6000602084013e610ad4565b606091505b5091509150610ae4828286610aef565b979650505050505050565b60608315610afe57508161033d565b825115610b0e5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103eb9190610d49565b60008060408385031215610b5557600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b8857600080fd5b919050565b60008060408385031215610ba057600080fd5b610ba983610b64565b9150610bb760208401610b64565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215610c0257600080fd5b610c0b83610b64565b9150602083013567ffffffffffffffff80821115610c2857600080fd5b818501915085601f830112610c3c57600080fd5b813581811115610c4e57610c4e610bc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9457610c94610bc0565b81604052828152886020848701011115610cad57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610cea578181015183820152602001610cd2565b83811115610cf9576000848401525b50505050565b60008151808452610d17816020860160208601610ccf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061033d6020830184610cff565b600080600060608486031215610d7157600080fd5b610d7a84610b64565b95602085013595506040909401359392505050565b600080600060608486031215610da457600080fd5b610dad84610b64565b9250610dbb60208501610b64565b9150604084013590509250925092565b600060208284031215610ddd57600080fd5b5051919050565b600060208284031215610df657600080fd5b8151801515811461033d57600080fd5b60008251610e18818460208701610ccf565b919091019291505056fea2646970667358221220448e7046078cd668c09328d857e534e2aab6cdc0e691d3d4f2c8baae8e084b1364736f6c634300080a003360c06040523480156200001157600080fd5b506040516200162738038062001627833981016040819052620000349162000177565b60408051808201909152600281526105a360f41b60208201526001600160a01b038216620000805760405162461bcd60e51b8152600401620000779190620001a9565b60405180910390fd5b50806001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e6919062000177565b6001600160a01b03166080816001600160a01b031681525050806001600160a01b031663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000164919062000177565b6001600160a01b031660a0525062000201565b6000602082840312156200018a57600080fd5b81516001600160a01b0381168114620001a257600080fd5b9392505050565b600060208083528351808285015260005b81811015620001d857858101830151858201604001528201620001ba565b81811115620001eb576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a0516113c2620002656000396000818161021f0152818161036401526106d501526000818160af0152818161012a015281816104420152818161056e015281816107b301528181610aa601528181610b890152610c6701526113c26000f3fe60806040526004361061005e5760003560e01c80635869dba8116100435780635869dba814610199578063deecfbc9146101bb578063e79a4089146101ce57600080fd5b80634f0e0ef31461011857806354fd4d501461017657600080fd5b366101135760408051808201909152600381527f574732000000000000000000000000000000000000000000000000000000000060208201523373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60405180910390fd5b50005b600080fd5b34801561012457600080fd5b5061014c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018257600080fd5b5061018b600181565b60405190815260200161016d565b3480156101a557600080fd5b506101b96101b4366004611263565b6101ee565b005b6101b96101c936600461128f565b61031d565b3480156101da57600080fd5b506101b96101e93660046112e1565b61068e565b6040517f6fbc6f6b0000000000000000000000000000000000000000000000000000000081523360048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636fbc6f6b90602401602060405180830381865afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190611318565b6040518060400160405280600281526020017f43500000000000000000000000000000000000000000000000000000000000008152509061030d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506103188383610a77565b505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa1580156103ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103d19190611318565b6040518060400160405280600281526020017f52500000000000000000000000000000000000000000000000000000000000008152509061043f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e6919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f57473100000000000000000000000000000000000000000000000000000000008152509061056b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b50505050506105f78434610b3c565b6040517f9aa5d46200000000000000000000000000000000000000000000000000000000815234600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff84166044830152851690639aa5d46290606401600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b5050505050505050565b6040517f5b16ebb700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015284917f000000000000000000000000000000000000000000000000000000000000000090911690635b16ebb790602401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107429190611318565b6040518060400160405280600281526020017f5250000000000000000000000000000000000000000000000000000000000000815250906107b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610857919061133a565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600381526020017f5747310000000000000000000000000000000000000000000000000000000000815250906108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b506109703330858773ffffffffffffffffffffffffffffffffffffffff166336dda7d56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610952919061133a565b73ffffffffffffffffffffffffffffffffffffffff16929190610cd4565b6040517f05fe138b0000000000000000000000000000000000000000000000000000000081526004810184905230602482015260009073ffffffffffffffffffffffffffffffffffffffff8616906305fe138b906044016020604051808303816000875af11580156109e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0a9190611357565b9050610a168382610a77565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f6de63bb986f2779478e384365c03cc2e62f06b453856acca87d5a519ce02664960405160405180910390a35050505050565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690632e1a7d4d90602401600060405180830381600087803b158015610aff57600080fd5b505af1158015610b13573d6000803e3d6000fd5b50610b389250505073ffffffffffffffffffffffffffffffffffffffff831682610d6f565b5050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063dd62ed3e90604401602060405180830381865afa158015610bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf69190611357565b1015610b38576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610cb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190611318565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610d69908590610ec9565b50505050565b80471015610dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610107565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610e33576040519150601f19603f3d011682016040523d82523d6000602084013e610e38565b606091505b5050905080610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610107565b6000610f2b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610fd59092919063ffffffff16565b8051909150156103185780806020019051810190610f499190611318565b610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610107565b6060610fe48484600085610fee565b90505b9392505050565b606082471015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610107565b843b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610107565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516111119190611370565b60006040518083038185875af1925050503d806000811461114e576040519150601f19603f3d011682016040523d82523d6000602084013e611153565b606091505b509150915061116382828661116e565b979650505050505050565b6060831561117d575081610fe7565b82511561118d5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010791906111ed565b60005b838110156111dc5781810151838201526020016111c4565b83811115610d695750506000910152565b602081526000825180602084015261120c8160408501602087016111c1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461126057600080fd5b50565b6000806040838503121561127657600080fd5b82356112818161123e565b946020939093013593505050565b6000806000606084860312156112a457600080fd5b83356112af8161123e565b925060208401356112bf8161123e565b9150604084013561ffff811681146112d657600080fd5b809150509250925092565b6000806000606084860312156112f657600080fd5b83356113018161123e565b92506020840135915060408401356112d68161123e565b60006020828403121561132a57600080fd5b81518015158114610fe757600080fd5b60006020828403121561134c57600080fd5b8151610fe78161123e565b60006020828403121561136957600080fd5b5051919050565b600082516113828184602087016111c1565b919091019291505056fea264697066735822122017fd7fc76e4a1efcf24b78a3417fad7ab9576f0a23aa756ddb211c5e2227aa9564736f6c634300080a003360806040523480156200001157600080fd5b5060405162002b8038038062002b80833981016040819052620000349162000122565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640160405180910390fd5b6001600160a01b03811660008181526001602052604080822080546001600160601b0319166b204fce5e3e2502611000000090811790915590517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000f99190815260200190565b60405180910390a350600680546001600160a81b031916336101000260ff191617905562000154565b6000602082840312156200013557600080fd5b81516001600160a01b03811681146200014d57600080fd5b9392505050565b612a1c80620001646000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610503578063e7a324dc14610555578063f1127ed81461057c578063f2fde38b146105ee57600080fd5b8063b4b5ea57146104ca578063c3cda520146104dd578063d505accf146104f057600080fd5b806395d89b41116100d357806395d89b411461045b5780639742ca4614610497578063a9059cbb146104aa578063b0660c3d146104bd57600080fd5b806370a08231146103c7578063782d6fe11461040b5780637ecebe001461043b57600080fd5b806330adf81f11610166578063481c6a7511610140578063481c6a751461031e578063587cde1e146103435780635c19a95c146103795780636fcfff451461038c57600080fd5b806330adf81f14610298578063313ce567146102bf578063349dc329146102d957600080fd5b806320606b701161019757806320606b70146102545780632185810b1461027b57806323b872dd1461028557600080fd5b806306fdde03146101be578063095ea7b31461021057806318160ddd14610233575b600080fd5b6101fa6040518060400160405280600781526020017f47656172626f780000000000000000000000000000000000000000000000000081525081565b60405161020791906124a3565b60405180910390f35b61022361021e36600461253f565b610601565b6040519015158152602001610207565b6102466b204fce5e3e2502611000000081565b604051908152602001610207565b6102467f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b61028361070d565b005b610223610293366004612569565b6107ee565b6102467f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102c7601281565b60405160ff9091168152602001610207565b6007546102f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6006546102f990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6102f96103513660046125a5565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6102836103873660046125a5565b61098a565b6103b261039a3660046125a5565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610207565b6102466103d53660046125a5565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020546bffffffffffffffffffffffff1690565b61041e61041936600461253f565b610997565b6040516bffffffffffffffffffffffff9091168152602001610207565b6102466104493660046125a5565b60056020526000908152604090205481565b6101fa6040518060400160405280600481526020017f474541520000000000000000000000000000000000000000000000000000000081525081565b6102836104a53660046125a5565b610cae565b6102236104b836600461253f565b610e20565b6006546102239060ff1681565b61041e6104d83660046125a5565b610e5c565b6102836104eb3660046125d1565b610efa565b6102836104fe366004612629565b611310565b610246610511366004612693565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152602081815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6102467fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6105c561058a3660046126c6565b600360209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6040805163ffffffff90931683526bffffffffffffffffffffffff909116602083015201610207565b6102836105fc3660046125a5565b61187a565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561063f57506bffffffffffffffffffffffff610664565b6106618360405180606001604052806025815260200161285260259139611a15565b90505b3360008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e616765720060448201526064015b60405180910390fd5b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f795b0e16c8da9807b0a215f3749bd6dbcc49fc0472183f4e446abb7dcbd9d00790600090a1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083203380855290835281842054825160608101909352602580845291936bffffffffffffffffffffffff909116928592610856928892919061285290830139611a15565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156108a257506bffffffffffffffffffffffff82811614155b156109725760006108cc83836040518060600160405280603d8152602001612974603d9139611a67565b73ffffffffffffffffffffffffffffffffffffffff898116600081815260208181526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff87169081179091559151918252939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b61097d878783611ad5565b5060019695505050505050565b6109943382611e9c565b50565b6000438210610a28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f476561723a3a6765745072696f72566f7465733a206e6f74207965742064657460448201527f65726d696e656400000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205463ffffffff1680610a63576000915050610707565b73ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208491610a95600185612735565b63ffffffff90811682526020820192909252604001600020541611610b1b5773ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090610ae5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff1691506107079050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020908152604080832083805290915290205463ffffffff16831015610b63576000915050610707565b600080610b71600184612735565b90505b8163ffffffff168163ffffffff161115610c565760006002610b968484612735565b610ba0919061275a565b610baa9083612735565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260036020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152919250871415610c2a576020015194506107079350505050565b805163ffffffff16871115610c4157819350610c4f565b610c4c600183612735565b92505b5050610b74565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314610d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8116610db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f2f834d1c8c4b956018fff5faca4d99868ae635487424d9c265c257ccbc698c6a90600090a250565b600080610e45836040518060600160405280602681526020016128a760269139611a15565b9050610e52338583611ad5565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604081205463ffffffff1680610e94576000610ef3565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040812090610ec5600184612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b9392505050565b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c083015273ffffffffffffffffffffffffffffffffffffffff8a1660e08301526101008201899052610120808301899052845180840390910181526101408301909452835193909201929092207f19010000000000000000000000000000000000000000000000000000000000006101608401526101628301829052610182830181905290916000906101a201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110d8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166111a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a20696e76616c69642073696760448201527f6e61747572650000000000000000000000000000000000000000000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081208054916111d7836127a4565b919050558914611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f476561723a3a64656c656761746542795369673a20696e76616c6964206e6f6e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161078f565b874211156112f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f476561723a3a64656c656761746542795369673a207369676e6174757265206560448201527f7870697265640000000000000000000000000000000000000000000000000000606482015260840161078f565b611303818b611e9c565b505050505b505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86141561134d57506bffffffffffffffffffffffff611372565b61136f8660405180606001604052806024815260200161291c60249139611a15565b90505b604080518082018252600781527f47656172626f780000000000000000000000000000000000000000000000000060209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f028ef9f797075f74ac647c65fde04fb0f128c2d59fd40f45732269917642fd4681840152466060820152306080808301919091528351808303909101815260a0909101835280519082012073ffffffffffffffffffffffffffffffffffffffff8b166000908152600590925291812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918c918c918c919086611472836127a4565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001209050600082826040516020016115199291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff8b169284019290925260608301899052608083018890529092509060019060a0016020604051602081039080840390855afa1580156115a2573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a20696e76616c6964207369676e617475726500604482015260640161078f565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f476561723a3a7065726d69743a20756e617574686f72697a6564000000000000604482015260640161078f565b88421115611749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a7065726d69743a207369676e6174757265206578706972656400604482015260640161078f565b846000808e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405161186491906bffffffffffffffffffffffff91909116815260200190565b60405180910390a3505050505050505050505050565b600654610100900473ffffffffffffffffffffffffffffffffffffffff163314611900576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f476561723a3a63616c6c6572206973206e6f7420746865206d616e6167657200604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff811661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5a65726f2061646472657373206973206e6f7420616c6c6f7765640000000000604482015260640161078f565b60065460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000816c010000000000000000000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50611acd83856127dd565b949350505050565b60065460ff1680611b025750600654610100900473ffffffffffffffffffffffffffffffffffffffff1633145b80611b24575060075473ffffffffffffffffffffffffffffffffffffffff1633145b611b8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f476561723a3a7472616e73666572732061726520666f7262696464656e000000604482015260640161078f565b73ffffffffffffffffffffffffffffffffffffffff8316611c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e736665722066726f6d20746865207a65726f206164647265737300000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8216611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f476561723a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747260448201527f616e7366657220746f20746865207a65726f2061646472657373000000000000606482015260840161078f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020908152604091829020548251606081019093526036808452611d2d936bffffffffffffffffffffffff90921692859291906129b190830139611a67565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260016020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251606081019093526030808452611dbf949190911692859290919061287790830139611f50565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055905193851684529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a373ffffffffffffffffffffffffffffffffffffffff808416600090815260026020526040808220548584168352912054611e9792918216911683611fc1565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260026020818152604080842080546001845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611f4a828483611fc1565b50505050565b600080611f5d8486612802565b9050846bffffffffffffffffffffffff16816bffffffffffffffffffffffff1610158390611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91906124a3565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200b57506000816bffffffffffffffffffffffff16115b15611e975773ffffffffffffffffffffffffffffffffffffffff8316156120fd5773ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604081205463ffffffff1690816120655760006120c4565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812090612096600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006120eb82856040518060600160405280602881526020016128cd60289139611a67565b90506120f9868484846121e2565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611e975773ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205463ffffffff1690816121525760006121b1565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812090612183600185612735565b63ffffffff16815260208101919091526040016000205464010000000090046bffffffffffffffffffffffff165b905060006121d882856040518060600160405280602781526020016128f560279139611f50565b9050611308858484845b60006122064360405180606001604052806034815260200161294060349139612465565b905060008463ffffffff1611801561226d575073ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812063ffffffff831691612251600188612735565b63ffffffff908116825260208201929092526040016000205416145b156123035773ffffffffffffffffffffffffffffffffffffffff8516600090815260036020526040812083916122a4600188612735565b63ffffffff168152602081019190915260400160002080546bffffffffffffffffffffffff92909216640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9092169190911790556123fe565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000908152600382528681208b8616825290915294909420925183549451909116640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000000000009094169116179190911790556123a5846001612832565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790555b604080516bffffffffffffffffffffffff80861682528416602082015273ffffffffffffffffffffffffffffffffffffffff8716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b6000816401000000008410611a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078f91905b600060208083528351808285015260005b818110156124d0578581018301518582016040015282016124b4565b818111156124e2576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60008060006060848603121561257e57600080fd5b61258784612516565b925061259560208501612516565b9150604084013590509250925092565b6000602082840312156125b757600080fd5b610ef382612516565b803560ff8116811461253a57600080fd5b60008060008060008060c087890312156125ea57600080fd5b6125f387612516565b9550602087013594506040870135935061260f606088016125c0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561264457600080fd5b61264d88612516565b965061265b60208901612516565b95506040880135945060608801359350612677608089016125c0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156126a657600080fd5b6126af83612516565b91506126bd60208401612516565b90509250929050565b600080604083850312156126d957600080fd5b6126e283612516565b9150602083013563ffffffff811681146126fb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8381169083168181101561275257612752612706565b039392505050565b600063ffffffff80841680612798577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156127d6576127d6612706565b5060010190565b60006bffffffffffffffffffffffff8381169083168181101561275257612752612706565b60006bffffffffffffffffffffffff80831681851680830382111561282957612829612706565b01949350505050565b600063ffffffff8083168185168083038211156128295761282961270656fe476561723a3a617070726f76653a20616d6f756e7420657863656564732039362062697473476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773476561723a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773476561723a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773476561723a3a7065726d69743a20616d6f756e7420657863656564732039362062697473476561723a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473476561723a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365476561723a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212201b84fd7789a35c022f692420863210a30e82d2405659f5a28275d433fa53467f64736f6c634300080a003360806040526016805460ff1916905534801561001a57600080fd5b506040516110a73803806110a7833981016040819052610039916100b6565b600080546001600160a01b038085166001600160a01b0319928316179092556003805492841692909116919091179055610080600a6b033b2e3c9fd0803ce80000006100e9565b60075550506b033b2e3c9fd0803ce800000060155561010b565b80516001600160a01b03811681146100b157600080fd5b919050565b600080604083850312156100c957600080fd5b6100d28361009a565b91506100e06020840161009a565b90509250929050565b60008261010657634e487b7160e01b600052601260045260246000fd5b500490565b610f8d8061011a6000396000f3fe608060405234801561001057600080fd5b50600436106102e95760003560e01c806367c99d5811610191578063c5f956af116100e3578063dbcb313b11610097578063f11a648711610071578063f11a648714610320578063f3fdb15a146105f1578063fe14112d1461061157600080fd5b8063dbcb313b146105d6578063e941fa78146105df578063ef8d9603146105e857600080fd5b8063cb3905e1116100c8578063cb3905e1146105c4578063cf33d95514610320578063d0efe753146105cd57600080fd5b8063c5f956af14610588578063ca9505e4146105a857600080fd5b80639aa5d46211610145578063b6ac642a1161011f578063b6ac642a14610567578063bb04b19314610567578063bf28068b1461057557600080fd5b80639aa5d46214610544578063a4e8273e14610557578063b3554a0a1461055e57600080fd5b8063788c6bfe11610176578063788c6bfe146104ef5780638456cb591461050157806396df5dc01461053157600080fd5b806367c99d58146104de57806374375359146104e757600080fd5b806336dda7d51161024a5780634d778ad1116101fe57806354fd4d50116101d857806354fd4d50146104c05780635c975abb146104c8578063609ae317146104d557600080fd5b80634d778ad114610491578063532fe502146104a45780635427c938146104ad57600080fd5b80633f4ba83a1161022f5780633f4ba83a1461045257806345d31f9d1461047f5780634c19386c1461048857600080fd5b806336dda7d51461040f5780633e163df01461042f57600080fd5b80632495a599116102a157806329f3d3b61161028657806329f3d3b6146103b35780632a3354c9146103bc5780632e97ca21146103dc57600080fd5b80632495a599146103735780632954018c1461039357600080fd5b8063078c4781116102d2578063078c4781146103205780630fce70fb146103335780631e16e4fc1461033b57600080fd5b8063030dbb04146102ee57806305fe138b1461030a575b600080fd5b6102f760105481565b6040519081526020015b60405180910390f35b6102f7610318366004610ce8565b600092915050565b61033161032e366004610d14565b50565b005b6015546102f7565b61034e610349366004610d2f565b610618565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610301565b60035461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60005461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f760095481565b600a5461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff6103ea366004610d14565b60066020526000908152604090205460ff1681565b6040519015158152602001610301565b60055461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103ff61043d366004610d14565b60146020526000908152604090205460ff1681565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6102f760075481565b6102f760015481565b6102f761049f366004610d2f565b61064f565b6102f760115481565b6102f76104bb366004610d2f565b61066d565b6102f7600181565b6016546103ff9060ff1681565b6102f760085481565b6102f7600d5481565b6102f7610685565b6b033b2e3c9fd0803ce80000006102f7565b610331601680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b61033161053f366004610d2f565b601555565b610331610552366004610d48565b505050565b60016102f7565b6102f7600e5481565b61033161032e366004610d2f565b610331610583366004610ce8565b61071d565b60135461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b6103316105b6366004610d7d565b600b92909255600c55600d55565b6102f7600c5481565b6102f7600b5481565b6102f760155481565b6102f7600f5481565b6102f760025481565b60125461034e9073ffffffffffffffffffffffffffffffffffffffff1681565b60006102f7565b6004818154811061062857600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000610667826b033b2e3c9fd0803ce800000061077a565b92915050565b6000610667826b033b2e3c9fd0803ce80000006108e9565b6003546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156106f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107189190610da9565b905090565b6009829055600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691909117909155600354610776911682846109fe565b5050565b60408051808201909152600281527f4d330000000000000000000000000000000000000000000000000000000000006020820152600090826107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b60405180910390fd5b506000610800600284610e72565b90506b033b2e3c9fd0803ce8000000610839827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b6108439190610e72565b8411156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906108b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b5082816108cd6b033b2e3c9fd0803ce800000087610ec4565b6108d79190610f01565b6108e19190610e72565b949350505050565b60008215806108f6575081155b1561090357506000610667565b8161091b60026b033b2e3c9fd0803ce8000000610e72565b610945907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ead565b61094f9190610e72565b8311156040518060400160405280600281526020017f4d31000000000000000000000000000000000000000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b506b033b2e3c9fd0803ce80000006109d9600282610e72565b6109e38486610ec4565b6109ed9190610f01565b6109f79190610e72565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261055292869291600091610ac9918516908490610b73565b8051909150156105525780806020019051810190610ae79190610f19565b610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107e9565b60606108e1848460008585843b610be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107e9565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610c0f9190610f3b565b60006040518083038185875af1925050503d8060008114610c4c576040519150601f19603f3d011682016040523d82523d6000602084013e610c51565b606091505b5091509150610c61828286610c6c565b979650505050505050565b60608315610c7b5750816109f7565b825115610c8b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e99190610df2565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ce357600080fd5b919050565b60008060408385031215610cfb57600080fd5b82359150610d0b60208401610cbf565b90509250929050565b600060208284031215610d2657600080fd5b6109f782610cbf565b600060208284031215610d4157600080fd5b5035919050565b600080600060608486031215610d5d57600080fd5b83359250610d6d60208501610cbf565b9150604084013590509250925092565b600080600060608486031215610d9257600080fd5b505081359360208301359350604090920135919050565b600060208284031215610dbb57600080fd5b5051919050565b60005b83811015610ddd578181015183820152602001610dc5565b83811115610dec576000848401525b50505050565b6020815260008251806020840152610e11816040850160208701610dc2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082821015610ebf57610ebf610e43565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610efc57610efc610e43565b500290565b60008219821115610f1457610f14610e43565b500190565b600060208284031215610f2b57600080fd5b815180151581146109f757600080fd5b60008251610f4d818460208701610dc2565b919091019291505056fea26469706673582212204edb887d94928b3914f60ab48df0182da9eb30ddbb7021b164cc728b60a655d564736f6c634300080a003360e06040523480156200001157600080fd5b5060405162013af238038062013af2833981016040819052620000349162000630565b826001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000999190620007bf565b620000a433620004ab565b6001600160a01b038116608081905260408051630873769560e01b815290516308737695916004808201926020929091908290030181865afa158015620000ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001159190620007bf565b6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000153573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001799190620007bf565b6001600160a01b0390811660a052841660c0525060405183906200019d9062000519565b6001600160a01b039091168152602001604051809103906000f080158015620001ca573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392909216918217905560608301516080840151604051620002029062000527565b6001600160a01b03938416815292909116602083015215156040820152606001604051809103906000f0801580156200023f573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392909216919091179055604051600090620002746020820162000535565b601f1982820381018352601f909101166040819052600154600254620002b0926001600160a01b039283169291909116908790602001620007e6565b60408051601f1981840301815290829052620002d09291602001620008e8565b60408051601f19818403018152919052905060006200035982848151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b6001600160601b03191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b600154604051634fafc35760e11b81526001600160a01b038084166004830152929350911690639f5f86ae90602401600060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b50505050620003ce8284620004fb60201b60201c565b600380546001600160a01b0319166001600160a01b0383811691821790925560015460408051630304b08760e61b81529051919093169263c12c21c09160048083019260209291908290030181865afa15801562000430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004569190620007bf565b6001600160a01b031614620004a05760405162461bcd60e51b815260206004820152600c60248201526b496e636f727265637420434d60a01b604482015260640160405180910390fd5b505050505062000909565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183516020850134f59050803b6200051457600080fd5b505050565b6158e8806200243683390190565b615e978062007d1e83390190565b615f3d806200dbb583390190565b6001600160a01b03811681146200055957600080fd5b50565b8051620005698162000543565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715620005a957620005a96200056e565b60405290565b604080519081016001600160401b0381118282101715620005a957620005a96200056e565b604051601f8201601f191681016001600160401b0381118282101715620005ff57620005ff6200056e565b604052919050565b80516001600160801b03811681146200056957600080fd5b805180151581146200056957600080fd5b6000806000606084860312156200064657600080fd5b8351620006538162000543565b602085810151919450906001600160401b03808211156200067357600080fd5b9086019060a082890312156200068857600080fd5b6200069262000584565b6200069d8362000607565b8152620006ac84840162000607565b8482015260408084015183811115620006c457600080fd5b8401601f81018b13620006d657600080fd5b805184811115620006eb57620006eb6200056e565b620006fb878260051b01620005d4565b818152878101955060069190911b82018701908c8211156200071c57600080fd5b918701915b818310156200077e5783838e0312156200073b5760008081fd5b62000745620005af565b8351620007528162000543565b81528389015161ffff811681146200076a5760008081fd5b818a01528652948701949183019162000721565b8484015250620007939050606085016200055c565b6060830152620007a6608085016200061f565b6080830152979097015195989697509495945050505050565b600060208284031215620007d257600080fd5b8151620007df8162000543565b9392505050565b600060018060a01b0380861683526020818616818501526040606081860152610100850160018060801b038088511660608801528084890151166080880152508187015160a080880152818151808452610120890191508583019350600092505b808310156200087857835180518816835286015161ffff168683015292850192600192909201919084019062000847565b5060608901516001600160a01b031660c0890152608090980151151560e0909701969096525094979650505050505050565b6000815160005b81811015620008cd5760208185018101518683015201620008b1565b81811115620008dd576000828601525b509290920192915050565b600062000901620008fa8386620008aa565b84620008aa565b949350505050565b60805160a05160c051611ad3620009636000396000818161010a0152610ea00152600081816103790152610b170152600081816101680152818161068c01528181610a4d01528181610b860152610c190152611ad36000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063ebf0c71711610059578063ebf0c71714610367578063f2fde38b1461039b578063f4747c58146103bb578063f9aa028a146103db57600080fd5b80638da5cb5b1461025a57806394ca2cb5146102855780639c4ae2d014610327578063c12c21c01461033a57600080fd5b80633e0b1a23116100c65780633e0b1a23146101ce5780634ef501ac146101e3578063715018a614610230578063805abe6a1461024557600080fd5b806316f0115b146100f85780632954018c146101565780632f7a18811461018a578063318d0d10146101b7575b600080fd5b34801561010457600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561016257600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561019657600080fd5b5060025461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156101c357600080fd5b506101cc610408565b005b3480156101da57600080fd5b506101cc610498565b3480156101ef57600080fd5b506102036101fe366004611726565b610521565b6040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301520161014d565b34801561023c57600080fd5b506101cc610567565b34801561025157600080fd5b506101cc6105f2565b34801561026657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661012c565b34801561029157600080fd5b5061012c6102a03660046117e6565b8151602092830120604080517fff00000000000000000000000000000000000000000000000000000000000000818601523060601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b6101cc6103353660046117e6565b6107d8565b34801561034657600080fd5b5060015461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037357600080fd5b5061012c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a757600080fd5b506101cc6103b63660046118c0565b6107f5565b3480156103c757600080fd5b506101cc6103d63660046118e4565b610925565b3480156103e757600080fd5b5060035461012c9073ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610496610a49565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61048e610b82565b6004818154811061053157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff91821692501682565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b61049660006116b1565b60005473ffffffffffffffffffffffffffffffffffffffff163314610673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071991906119c4565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906119c4565b73ffffffffffffffffffffffffffffffffffffffff1614156107d5576040517fbdebb83f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b60008183516020850134f59050803b6107f057600080fd5b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b73ffffffffffffffffffffffffffffffffffffffff8116610919576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610485565b610922816116b1565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610485565b805160005b818110156107f05760048382815181106109c7576109c76119e1565b602090810291909101810151825460018082018555600094855293839020825160029092020180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416178255929093015192840180549092169216919091179055016109ab565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ada91906119c4565b6040517ff2fde38b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192509082169063f2fde38b90602401600060405180830381600087803b158015610b6757600080fd5b505af1158015610b7b573d6000803e3d6000fd5b5050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c513c9bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1391906119c4565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca691906119c4565b60045490915060005b81811015610dd4576003546004805473ffffffffffffffffffffffffffffffffffffffff90921691637bccacee919084908110610cee57610cee6119e1565b906000526020600020906002020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048481548110610d3357610d336119e1565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b50505050806001019050610caf565b506001546040517fe26b2f6300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084169063e26b2f6390602401600060405180830381600087803b158015610e4257600080fd5b505af1158015610e56573d6000803e3d6000fd5b50506001546040517fcf33d95500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527f0000000000000000000000000000000000000000000000000000000000000000909116925063cf33d9559150602401600060405180830381600087803b158015610ee857600080fd5b505af1158015610efc573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166350e036ff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f919190611a10565b905060005b818110156116ab576003546040517f5094cb4f0000000000000000000000000000000000000000000000000000000081526004810183905260009173ffffffffffffffffffffffffffffffffffffffff1690635094cb4f90602401602060405180830381865afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906119c4565b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80841660048301529293506000929091169063fdd5764590602401602060405180830381865afa1580156110a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cc91906119c4565b905060008173ffffffffffffffffffffffffffffffffffffffff1663ce30bbdb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190611a29565b9050600c81601081111561115557611155611a4a565b14156116225760008273ffffffffffffffffffffffffffffffffffffffff166320b2c1516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc91906119c4565b905060008373ffffffffffffffffffffffffffffffffffffffff1663927188d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906119c4565b905060008473ffffffffffffffffffffffffffffffffffffffff166399253ac06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b291906119c4565b6040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152919250908a169063e8a97a3e9083908390639dcb511a90602401602060405180830381865afa15801561132c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135091906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156113bd57600080fd5b505af11580156113d1573d6000803e3d6000fd5b50506040517f9dcb511a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528c16925063e8a97a3e915085908390639dcb511a90602401602060405180830381865afa15801561144b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146f91906119c4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156114dc57600080fd5b505af11580156114f0573d6000803e3d6000fd5b50506003546001546040517f7832743800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301529283169450633e7c88d69350879290911690637832743890602401602060405180830381865afa158015611573573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115979190611a79565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015261ffff166024820152604401600060405180830381600087803b15801561160657600080fd5b505af115801561161a573d6000803e3d6000fd5b505050505050505b600d81601081111561163657611636611a4a565b141561169d578173ffffffffffffffffffffffffffffffffffffffff16639b51ecd36040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050505b836001019350505050610f96565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561173857600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117915761179161173f565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156117de576117de61173f565b604052919050565b600080604083850312156117f957600080fd5b823567ffffffffffffffff8082111561181157600080fd5b818501915085601f83011261182557600080fd5b81356020828211156118395761183961173f565b611869817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601611797565b9250818352878183860101111561187f57600080fd5b8181850182850137600091830181019190915290969401359450505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461092257600080fd5b6000602082840312156118d257600080fd5b81356118dd8161189e565b9392505050565b600060208083850312156118f757600080fd5b823567ffffffffffffffff8082111561190f57600080fd5b818501915085601f83011261192357600080fd5b8135818111156119355761193561173f565b611943848260051b01611797565b818152848101925060069190911b83018401908782111561196357600080fd5b928401925b818410156119b957604084890312156119815760008081fd5b61198961176e565b84356119948161189e565b8152848601356119a38161189e565b8187015283526040939093019291840191611968565b979650505050505050565b6000602082840312156119d657600080fd5b81516118dd8161189e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611a2257600080fd5b5051919050565b600060208284031215611a3b57600080fd5b8151601181106118dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611a8b57600080fd5b815161ffff811681146118dd57600080fdfea264697066735822122090f5e4310a8b66bfdd7fdfbe64bc5b98570e7c1a415ffb0ced3c857cf6c5b14064736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650608060405234801561001057600080fd5b5061029a806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80634e417a981461003a575b610037600080366100e6565b50005b610042610058565b60405161004f919061019d565b60405180910390f35b6000805461006590610210565b80601f016020809104026020016040519081016040528092919081815260200182805461009190610210565b80156100de5780601f106100b3576101008083540402835291602001916100de565b820191906000526020600020905b8154815290600101906020018083116100c157829003601f168201915b505050505081565b8280546100f290610210565b90600052602060002090601f0160209004810192826101145760008555610178565b82601f1061014b578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555610178565b82800160010185558215610178579182015b8281111561017857823582559160200191906001019061015d565b50610184929150610188565b5090565b5b808211156101845760008155600101610189565b600060208083528351808285015260005b818110156101ca578581018301518582016040015282016101ae565b818111156101dc576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600181811c9082168061022457607f821691505b6020821081141561025e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b5091905056fea2646970667358221220ce4d98ff6e78d6e572ead23f5f0316947ad3d447e60e1efdfc3a1485144c317a64736f6c634300080a003360e06040523480156200001157600080fd5b50604051620018e8380380620018e883398101604081905262000034916200011d565b81816001600160a01b03821615806200005457506001600160a01b038116155b156200007357604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038216608081905260408051632f7a188160e01b81529051632f7a1881916004808201926020929091908290030181865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000155565b6001600160a01b0390811660a0521660c052506200017a915050565b80516001600160a01b03811681146200011857600080fd5b919050565b600080604083850312156200013157600080fd5b6200013c8362000100565b91506200014c6020840162000100565b90509250929050565b6000602082840312156200016857600080fd5b620001738262000100565b9392505050565b60805160a05160c05161169062000258600039600081816102990152818161038c0152818161071c0152818161083b0152818161091501528181610d1901528181610e380152610f120152600081816101f7015281816104390152818161058701528181610b840152610f9001526000818160fa015281816102c00152818161035d015281816104a3015281816107720152818161080c0152818161096b01528181610a2c01528181610af001528181610d6f01528181610e0901528181610f4901528181611018015281816110cc015261117601526116906000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063b73c1cfc11610081578063cd685c2c1161005b578063cd685c2c146102e2578063ce30bbdb146102f5578063d190b78d1461030a576100c9565b8063b73c1cfc14610281578063bd90df7014610294578063c12c21c0146102bb576100c9565b806333a9edaf116100b257806333a9edaf1461023e5780633ccb153e1461025357806378aa73a414610266576100c9565b806309c5eabe146101c95780632f7a1881146101f2575b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017a91906111fd565b90506101bc6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061031d92505050565b506101c681610421565b50005b6101dc6101d736600461133b565b610503565b6040516101e991906113f2565b60405180910390f35b6102197f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b61025161024c366004611405565b61050e565b005b6101dc610261366004611437565b610517565b61026e600181565b60405161ffff90911681526020016101e9565b6101dc61028f3660046114cc565b610532565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b6102197f000000000000000000000000000000000000000000000000000000000000000081565b6101dc6102f03660046114cc565b61054b565b6102fd600081565b6040516101e99190611550565b6101dc610318366004611437565b61055a565b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906103b69033907f0000000000000000000000000000000000000000000000000000000000000000908790600401611591565b6000604051808303816000875af11580156103d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261041b91908101906115d3565b92915050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610500576040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b1580156104e757600080fd5b505af11580156104fb573d6000803e3d6000fd5b505050505b50565b606061041b8261031d565b61050081610421565b606061052787878787878761056a565b979650505050505050565b606061054186868686866109e3565b9695505050505050565b60606105418686868686610aa7565b6060610527878787878787610b67565b60606000803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d3576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015610618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c9190611641565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa1580156106ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d09190611641565b90505b84156107cf576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a906108659033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611591565b6000604051808303816000875af1158015610884573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526108ca91908101906115d3565b925084156109c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d906084015b600060405180830381600087803b1580156109b057600080fd5b505af11580156109c4573d6000803e3d6000fd5b505050505b6109d7898989858589610f78565b50509695505050505050565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9791906111fd565b905061052781888888888861056a565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815233600482015260609060009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015610b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5b91906111fd565b90506105278188888888885b60606000803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610cd0576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301528916906370a0823190602401602060405180830381865afa158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c399190611641565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152919350908816906370a0823190602401602060405180830381865afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd9190611641565b90505b8415610dcc576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015289811660448301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015610db357600080fd5b505af1158015610dc7573d6000803e3d6000fd5b505050505b6040517f6ce4074a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690636ce4074a90610e629033907f0000000000000000000000000000000000000000000000000000000000000000908b90600401611591565b6000604051808303816000875af1158015610e81573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ec791908101906115d3565b925084156109c9576040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660248301528981166044830152600160648301527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401610996565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611079576040517f654a9eda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528681166024830152858116604483015260648201859052608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063654a9eda9060a401600060405180830381600087803b15801561105c57600080fd5b505af1158015611070573d6000803e3d6000fd5b505050506111d3565b8015611129576040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015286811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b15801561111057600080fd5b505af1158015611124573d6000803e3d6000fd5b505050505b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015285811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b1580156111ba57600080fd5b505af11580156111ce573d6000803e3d6000fd5b505050505b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461050057600080fd5b60006020828403121561120f57600080fd5b815161121a816111db565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561129757611297611221565b604052919050565b600067ffffffffffffffff8211156112b9576112b9611221565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126112f657600080fd5b81356113096113048261129f565b611250565b81815284602083860101111561131e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561134d57600080fd5b813567ffffffffffffffff81111561136457600080fd5b611370848285016112e5565b949350505050565b60005b8381101561139357818101518382015260200161137b565b838111156113a2576000848401525b50505050565b600081518084526113c0816020860160208601611378565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061121a60208301846113a8565b60006020828403121561141757600080fd5b813561121a816111db565b8035801515811461143257600080fd5b919050565b60008060008060008060c0878903121561145057600080fd5b863561145b816111db565b9550602087013561146b816111db565b9450604087013561147b816111db565b9350606087013567ffffffffffffffff81111561149757600080fd5b6114a389828a016112e5565b9350506114b260808801611422565b91506114c060a08801611422565b90509295509295509295565b600080600080600060a086880312156114e457600080fd5b85356114ef816111db565b945060208601356114ff816111db565b9350604086013567ffffffffffffffff81111561151b57600080fd5b611527888289016112e5565b93505061153660608701611422565b915061154460808701611422565b90509295509295909350565b602081016011831061158b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600073ffffffffffffffffffffffffffffffffffffffff8086168352808516602084015250606060408301526115ca60608301846113a8565b95945050505050565b6000602082840312156115e557600080fd5b815167ffffffffffffffff8111156115fc57600080fd5b8201601f8101841361160d57600080fd5b805161161b6113048261129f565b81815285602083850101111561163057600080fd5b6115ca826020830160208601611378565b60006020828403121561165357600080fd5b505191905056fea264697066735822122018e43ffef2f9cc2414c0800d27162ab8481b522ae2a3529b201f7632a0fcba6764736f6c634300080a00336101606040526000805462ff00001916620c00001790553480156200002357600080fd5b50604051620058e8380380620058e8833981016040819052620000469162000537565b806001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000085573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ab919062000537565b6000805460ff191690556001600160a01b038116620000dd57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200011c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000142919062000537565b6001600160a01b03166080816001600160a01b031681525050506000816001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000537565b6001600160a01b03831661010081905260e081905260408051632495a59960e01b81529051929350600092632495a599916004808201926020929091908290030181865afa1580156200021a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000240919062000537565b6001600160a01b03811660c05290506200025a8162000472565b816001600160a01b0316634c252f916040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000537565b6001600160a01b0316610120816001600160a01b031681525050816001600160a01b03166377532ed96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000318573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033e919062000537565b6001600160a01b0316610140816001600160a01b031681525050816001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000397573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bd919062000537565b6001600001600a6101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b0316639068a8686040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000537565b6001600160a01b031660a0525050600380546001600160a01b031916331790555062000588565b6001600160a01b03811660009081526006602052604090205415620004aa57604051632e5a5c7760e01b815260040160405180910390fd5b61010060055410620004cf57604051631cbbe18560e01b815260040160405180910390fd5b600580546001600160a01b0383166000818152600660209081526040808320600190951b948590558483526004909152812091909155825491929062000515836200055e565b91905055505050565b6001600160a01b03811681146200053457600080fd5b50565b6000602082840312156200054a57600080fd5b815162000557816200051e565b9392505050565b60006000198214156200058157634e487b7160e01b600052601160045260246000fd5b5060010190565b60805160a05160c05160e051610100516101205161014051615248620006a0600039600081816107e20152818161371001526137c501526000818161052f01526136780152600081816103d301528181610e5701528181610ebb015281816124ff0152818161265a01528181612aa101528181612b8c01528181612c4e01528181612d0d0152613b8f015260006105a401526000818161062701528181610d2201528181610db301528181610e0001528181610e3601528181610f3f0152818161203a01528181612b6b015281816130ee015281816134dc015281816135a90152613fe601526000818161081c01528181610fe101526124c20152600081816107a80152818161118401526122cb01526152486000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063830aa745116101bd578063a70bc542116100f9578063e75538c7116100a2578063f9aa028a1161007c578063f9aa028a1461089d578063fdd57645146108bd578063fe47cde7146108f3578063ff6875431461091357600080fd5b8063e75538c714610864578063e958b70414610877578063f67c5bd01461088a57600080fd5b8063db7ceb80116100d3578063db7ceb8014610817578063dc2b21c11461083e578063e1998cf91461085157600080fd5b8063a70bc542146107ca578063c5e10eef146107dd578063d48bfca71461080457600080fd5b806394cf073a116101665780639f5f86ae116101405780639f5f86ae146107745780639fd12b7714610787578063a366f49614610790578063a50cf2c8146107a357600080fd5b806394cf073a146106f557806395373018146107085780639af1d35a1461071b57600080fd5b80638991b2f1116101975780638991b2f1146106af5780638fe3f93f146106cf578063944ac59f146106e257600080fd5b8063830aa7451461066f5780638345f26e146106825780638456cb59146106a757600080fd5b8063458936f51161028c578063570a7af2116102355780636ce4074a1161020f5780636ce4074a146105ef5780636e98e5e41461060f5780636f307dc314610622578063783274381461064957600080fd5b8063570a7af21461059f5780635c975abb146105c6578063654a9eda146105dc57600080fd5b80635063524a116102665780635063524a1461055157806351e3f1601461058457806354fd4d501461059757600080fd5b8063458936f51461050e57806346fb371d146105175780634f0e0ef31461052a57600080fd5b80632630c12f116102ee5780633192195c116102c85780633192195c146104be5780633e8297ca146104e65780633f4ba83a1461050657600080fd5b80632630c12f1461045857806329df0b93146104845780632f7a18811461049757600080fd5b806316f0115b1161031f57806316f0115b146103ce578063172c48c7146103f55780632362a2d81461043757600080fd5b8063055ee9b5146103465780630d8f9cee146103a657806311ca4fc2146103bb575b600080fd5b61037c610354366004614a87565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103b96103b4366004614aa4565b610949565b005b6103b96103c9366004614aa4565b610a76565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b610408610403366004614add565b610b4e565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835261ffff90911660208301520161039d565b61044a610445366004614b13565b610b66565b60405190815260200161039d565b6001546a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1661037c565b6103b9610492366004614a87565b6110be565b60005461037c906301000000900473ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc366004614a87565b611122565b6040805192835260208301919091520161039d565b61044a6104f4366004614a87565b60096020526000908152604090205481565b6103b9611156565b61044a60055481565b6103b9610525366004614b95565b611244565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61056461055f366004614be6565b61149b565b60408051948552602085019390935291830152606082015260800161039d565b6103b9610592366004614aa4565b611602565b61044a600281565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff16604051901515815260200161039d565b6103b96105ea366004614c21565b611703565b6106026105fd366004614d40565b611bbb565b60405161039d9190614e5b565b6103b961061d366004614aa4565b611e8e565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b61065c610657366004614a87565b612036565b60405161ffff909116815260200161039d565b6103b961067d366004614b95565b61210f565b6000546106959062010000900460ff1681565b60405160ff909116815260200161039d565b6103b961229d565b61044a6106bd366004614a87565b60086020526000908152604090205481565b61037c6106dd366004614e6e565b612389565b6103b96106f0366004614ea5565b612718565b61044a610703366004614f0a565b612845565b6103b9610716366004614a87565b612e5a565b6001546040805161ffff808416825262010000840481166020830152640100000000840481169282019290925266010000000000008304821660608201526801000000000000000090920416608082015260a00161039d565b6103b9610782366004614a87565b612f85565b61044a60075481565b6103b961079e366004614add565b613045565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b96107d8366004614f4c565b61309b565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b9610812366004614a87565b613221565b61037c7f000000000000000000000000000000000000000000000000000000000000000081565b6103b961084c366004614f81565b61327b565b6103b961085f366004614aa4565b613306565b610408610872366004614add565b6134c9565b61037c610885366004614a87565b613541565b61044a610898366004614a87565b6135a5565b60035461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c6108cb366004614a87565b600b6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600c5461037c9073ffffffffffffffffffffffffffffffffffffffff1681565b61037c610921366004614a87565b600a6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561099b57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b156109d2576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615610a14576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a828261362e565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314610ac7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff9384166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617905560018054919092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909116179055565b600080610b5d6001841b6134c9565b91509150915091565b6000805460ff1615610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064015b60405180910390fd5b600054610100900460ff1615610c1b576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314610ca0576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab89613541565b90506000806000806000610cbe86611122565b9094509050610ccf8c8e868461149b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152939b5093985090955093506000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015610d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190614fa4565b9050610d9b8887614fec565b610da6906001614fec565b811115610de657610de1877f00000000000000000000000000000000000000000000000000000000000000008d60018c8b870303038d61366e565b610e30565b610e3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168d8960018a8d01869003016138c0565b610e7e877f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000089600061366e565b6040517fca9505e40000000000000000000000000000000000000000000000000000000081526004810186905260248101859052604481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ca9505e490606401600060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b50505050505050506001841115610f6757610f67837f00000000000000000000000000000000000000000000000000000000000000008d87600061366e565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260086020526040902054861916610f9c8489888461395b565b6040517f89b77b3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f000000000000000000000000000000000000000000000000000000000000000016906389b77b3e90602401600060405180830381600087803b15801561102557600080fd5b505af1158015611039573d6000803e3d6000fd5b50505073ffffffffffffffffffffffffffffffffffffffff909c16600090815260026020526040812080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550929a9950505050505050505050565b6000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314611116576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81613a35565b50565b60008060008061113185613aa6565b91955092509050816111438286615004565b61114d9190615041565b92505050915091565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611204919061507c565b61123a576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611242613c24565b565b60005460ff16156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156112f3576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff9081169084161480159061137457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b80156113985750600c5473ffffffffffffffffffffffffffffffffffffffff163314155b806113b7575073ffffffffffffffffffffffffffffffffffffffff8316155b156113ee576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f7826135a5565b61142d576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143885613541565b9050611448838583856000613d05565b61146c5761145b83858360006001613d05565b5061146a838583856001613d05565b505b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6001546000908190819081906127109061ffff166114b98888615099565b6114c39190615004565b6114cd9190615041565b6114d79086614fec565b935060018760028111156114ed576114ed6150b0565b1415611587576001546000906127109061151390640100000000900461ffff168b615004565b61151d9190615041565b6001549091506127109061153b9062010000900461ffff168b615004565b6115459190615041565b61154f9086614fec565b94508481111561156657600185820303935061156a565b8094505b85811061157b578585039250611581565b84860391505b506115f7565b600287600281111561159b5761159b6150b0565b14156115f157600154600090612710906115c59068010000000000000000900461ffff168b615004565b6115cf9190615041565b6001549091506127109061153b906601000000000000900461ffff168b615004565b84840391505b945094509450949050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561165457506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561168b576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156116cd576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055610a4a8282613ea6565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1615801561175557506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b1561178c576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16156117ce576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790556118048584613ea6565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600091908616906370a0823190602401602060405180830381865afa158015611874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118989190614fa4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918616906370a0823190602401602060405180830381865afa15801561190a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192e9190614fa4565b60015490915060009081906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16635cecbd0e61196c8689615099565b8a6119778988615099565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152600481019390935273ffffffffffffffffffffffffffffffffffffffff918216602484015260448301528a1660648201526084016040805180830381865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906150df565b9150915060018411611a2d57611a2d898961362e565b611a3687612036565b611a449061ffff1682615004565b9050611a4f88612036565b611a5d9061ffff1683615004565b9150818110611a7857611a6f89613a35565b5050505061146c565b73ffffffffffffffffffffffffffffffffffffffff891660009081526009602052604081205483611ab56b033b2e3c9fd0803ce800000085615004565b611abf9190615041565b611ad5906b033b2e3c9fd0803ce8000000615099565b611adf9190614fec565b60015490915061271090611b0a906b033b2e3c9fd0803ce80000009062010000900461ffff16615004565b611b149190615041565b8111611b555773ffffffffffffffffffffffffffffffffffffffff8a166000908152600960205260409020819055611b4b8a613a35565b505050505061146c565b611b5e8a613f56565b50505073ffffffffffffffffffffffffffffffffffffffff871660009081526009602052604090206001905550505050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b6060611bc960005460ff1690565b15611c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615611c72576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100178155338152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff908116908416141580611ce7575073ffffffffffffffffffffffffffffffffffffffff8316155b15611d3d57600c5473ffffffffffffffffffffffffffffffffffffffff163314611d3d576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d4885613541565b90508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167faed1eb34af6acd8c1e3911fb2ebb875a66324b03957886bd002227b17f52ab0360405160405180910390a36040517f1cff79cd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690631cff79cd90611df89087908790600401615103565b6000604051808303816000875af1158015611e17573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611e5d9190810190615132565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905595945050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314611edf576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615611f4f5773ffffffffffffffffffffffffffffffffffffffff8281166000908152600a6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b73ffffffffffffffffffffffffffffffffffffffff811615611fbf5773ffffffffffffffffffffffffffffffffffffffff8181166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169184169190911790555b73ffffffffffffffffffffffffffffffffffffffff811673cccccccccccccccccccccccccccccccccccccccc141561203257600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba5750506001547e01000000000000000000000000000000000000000000000000000000000000900461ffff1690565b60006120c5836135a5565b9050806120fe576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612107816134c9565b949350505050565b60005460ff161561217c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156121be576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff163314612243576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224d8383613ea6565b61226f73ffffffffffffffffffffffffffffffffffffffff83168585846138c0565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061507c565b612381576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112426142d4565b6000805460ff16156123f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff1615612439576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff1633146124be576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166321d18456857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258c9190614fa4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260248201526044016020604051808303816000875af11580156125e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260b91906151a0565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff80831660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b1580156126a057600080fd5b505af11580156126b4573d6000803e3d6000fd5b505050506126c28382614394565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081206001905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690559392505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612769576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805461ffff92831668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff9484166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff96851664010000000002969096167fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff97851662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090931694909816939093171794909416949094179190911716919091179055565b6000805460ff16156128b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156128f5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461297a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600061298887613aa6565b925092509250846129a25761299d8684615099565b6129ac565b6129ac8684614fec565b935060008515612b045769021e19e0c9bab24000008510612a15576129d583603689901c615004565b6129e3603686901c84615004565b6129ed9190614fec565b603686901c6129fc8585615004565b612a069190615004565b612a109190615041565b612a52565b612a1f8388615004565b612a298584615004565b612a339190614fec565b85612a3e8585615004565b612a489190615004565b612a529190615041565b6040517fbf28068b0000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff8a811660248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063bf28068b90604401600060405180830381600087803b158015612ae757600080fd5b505af1158015612afb573d6000803e3d6000fd5b50505050612d9f565b60008484612b128583615004565b612b1c9190615041565b612b269190615099565b60015490915060009061271090612b419061ffff1684615004565b612b4b9190615041565b905073ffffffffffffffffffffffffffffffffffffffff8a1663d1660f997f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000084612bb6878f614fec565b612bc09190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff93841660048201529290911660248301526044820152606401600060405180830381600087803b158015612c3457600080fd5b505af1158015612c48573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca9505e4838b612c949190614fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526024810184905260006044820152606401600060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190614fa4565b925050505b6040517f16128211000000000000000000000000000000000000000000000000000000008152600481018690526024810182905273ffffffffffffffffffffffffffffffffffffffff891690631612821190604401600060405180830381600087803b158015612e0e57600080fd5b505af1158015612e22573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055509498975050505050505050565b336000908152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16158015612eac57506000546301000000900473ffffffffffffffffffffffffffffffffffffffff163314155b15612ee3576040517fad40d9e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615612f25576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055612f5a81613f56565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055565b60035473ffffffffffffffffffffffffffffffffffffffff163314612fd6576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517ff62005acebe9b616aefb5f248b48f5e89f28437b27d1eebc0b2d911209f297af90600090a250565b60035473ffffffffffffffffffffffffffffffffffffffff163314613096576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600755565b60035473ffffffffffffffffffffffffffffffffffffffff1633146130ec576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613193576001805461ffff83167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790555050565b600061319e836135a5565b9050806131d7576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff1675ffff000000000000000000000000000000000000000060a084901b161790555050565b60035473ffffffffffffffffffffffffffffffffffffffff163314613272576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111f81614467565b60035473ffffffffffffffffffffffffffffffffffffffff1633146132cc576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460ff90921662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b60005460ff1615613373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600054610100900460ff16156133b5576040517f69bc183d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff90911617908190556301000000900473ffffffffffffffffffffffffffffffffffffffff16331461343a576040517fd8026b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344583613541565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260026020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055905061349c8282614394565b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008082600114156135275750506001547f0000000000000000000000000000000000000000000000000000000000000000927e0100000000000000000000000000000000000000000000000000000000000090910461ffff169150565b50506000908152600460205260409020549060a082901c90565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526002602052604090205416806135a0576040517fb5ba4c4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146136255773ffffffffffffffffffffffffffffffffffffffff8216600090815260066020526040902054613628565b60015b92915050565b6000613639826135a5565b73ffffffffffffffffffffffffffffffffffffffff909316600090815260086020526040902080549319939093169092555050565b8080156136c657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15613828576040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b15801561376357600080fd5b505af1158015613777573d6000803e3d6000fd5b50506040517f5869dba800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018690527f0000000000000000000000000000000000000000000000000000000000000000169250635869dba89150604401600060405180830381600087803b15801561380b57600080fd5b505af115801561381f573d6000803e3d6000fd5b505050506138b9565b6040517fd1660f9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301526044820184905286169063d1660f9990606401600060405180830381600087803b1580156138a057600080fd5b505af11580156138b4573d6000803e3d6000fd5b505050505b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261395590859061455b565b50505050565b60025b8181116138b95781811615613a2d576000613978826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529192506000918316906370a0823190602401602060405180830381865afa1580156139eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0f9190614fa4565b90506002811115613a2a57613a2a878388600185038961366e565b50505b60011b61395e565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205490613a6582614667565b60005490915062010000900460ff16811115613aa1576000613a86836146a7565b613a91906001614fec565b905061395584848460008561470b565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16631afbb7a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1a9190614fa4565b92508373ffffffffffffffffffffffffffffffffffffffff166317d11a156040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8b9190614fa4565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630fce70fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1c9190614fa4565b929491935050565b60005460ff16613c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291517f1cff79cd000000000000000000000000000000000000000000000000000000008152600092861691631cff79cd91613dc6918a91600401615103565b6000604051808303816000875af1925050508015613e2457506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613e219190810190615132565b60015b613e2d57613e61565b80511580613e50575080806020019051810190613e4a919061507c565b15156001145b15613e5f576001915050613e9d565b505b8115613e99576040517f76e3e29c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060005b95945050505050565b6000613eb1826135a5565b9050801580613ec35750600754811615155b15613efa576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020548116613aa15773ffffffffffffffffffffffffffffffffffffffff83166000908152600860205260409020805482179055505050565b60015473ffffffffffffffffffffffffffffffffffffffff8281166000908152600860205260408120546a010000000000000000000090930490911691908080613f9f86611122565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526127108202600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350908716915063f9a6503090604401602060405180830381865afa15801561403a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061405e9190614fa4565b9250614069846146a7565b6001019150506000806000805b848110156142a157801561408f5760018186031b614092565b60015b935086841615614299576000806140a8866134c9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301529294509092506000918416906370a0823190602401602060405180830381865afa15801561411d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141419190614fa4565b9050600181111561428c576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff848116602483015261ffff841691908d169063f9a6503090604401602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190614fa4565b6141f49190615004565b6141fe9087614fec565b95508886106142875760006142128b614667565b60005490915062010000900460ff16811115614249576142448d8c836001891561423e57898e0361470b565b8d61470b565b614278565b85156142785773ffffffffffffffffffffffffffffffffffffffff8d1660009081526008602052604090208b90555b50505050505050505050505050565b614295565b98861898600194505b5050505b600101614076565b506040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005460ff1615614341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610bd0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613cdb3390565b73ffffffffffffffffffffffffffffffffffffffff821615806143dd575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020541615155b15614414576040517f9e59609e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054156144c4576040517f2e5a5c7700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010060055410614501576040517f1cbbe18500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff83166000818152600660209081526040808320600190951b9485905584835260049091528120919091558254919290614552836151bd565b91905055505050565b60006145bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166148799092919063ffffffff16565b805190915015613aa157808060200190518101906145db919061507c565b613aa1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd0565b60008060005b6101008110156146a0576001811b91508382161561468c578260010192505b838210614698576146a0565b60010161466d565b5050919050565b600081600114156146ba57506000919050565b61010060015b60016146cc8284614fec565b901c92506001831b848116158015906146e75750600185851c145b156146f257506146a0565b84811061470157839250614705565b8391505b506146c0565b815b81811015614846576001811b8581161561483d57600061472c826134c9565b506040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529192506000918316906370a0823190602401602060405180830381865afa15801561479f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147c39190614fa4565b90506001811161483a57600054978318977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9097019660ff6201000090910416871161483a5750505073ffffffffffffffffffffffffffffffffffffffff86166000908152600860205260409020859055506138b9565b50505b5060010161470d565b506040517f53275fcb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606148888484600085614892565b90505b9392505050565b606082471015614924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd0565b843b61498c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd0565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516149b591906151f6565b60006040518083038185875af1925050503d80600081146149f2576040519150601f19603f3d011682016040523d82523d6000602084013e6149f7565b606091505b5091509150614a07828286614a12565b979650505050505050565b60608315614a2157508161488b565b825115614a315782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd09190614e5b565b73ffffffffffffffffffffffffffffffffffffffff8116811461111f57600080fd5b600060208284031215614a9957600080fd5b813561488b81614a65565b60008060408385031215614ab757600080fd5b8235614ac281614a65565b91506020830135614ad281614a65565b809150509250929050565b600060208284031215614aef57600080fd5b5035919050565b8035600381106135a057600080fd5b801515811461111f57600080fd5b600080600080600080600060e0888a031215614b2e57600080fd5b8735614b3981614a65565b9650614b4760208901614af6565b9550604088013594506060880135614b5e81614a65565b93506080880135614b6e81614a65565b925060a0880135915060c0880135614b8581614b05565b8091505092959891949750929550565b60008060008060808587031215614bab57600080fd5b8435614bb681614a65565b93506020850135614bc681614a65565b92506040850135614bd681614a65565b9396929550929360600135925050565b60008060008060808587031215614bfc57600080fd5b84359350614c0c60208601614af6565b93969395505050506040820135916060013590565b600080600080600060a08688031215614c3957600080fd5b8535614c4481614a65565b94506020860135614c5481614a65565b93506040860135614c6481614a65565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cf257614cf2614c7c565b604052919050565b600067ffffffffffffffff821115614d1457614d14614c7c565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215614d5557600080fd5b8335614d6081614a65565b92506020840135614d7081614a65565b9150604084013567ffffffffffffffff811115614d8c57600080fd5b8401601f81018613614d9d57600080fd5b8035614db0614dab82614cfa565b614cab565b818152876020838501011115614dc557600080fd5b816020840160208301376000602083830101528093505050509250925092565b60005b83811015614e00578181015183820152602001614de8565b838111156139555750506000910152565b60008151808452614e29816020860160208601614de5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061488b6020830184614e11565b60008060408385031215614e8157600080fd5b823591506020830135614ad281614a65565b803561ffff811681146135a057600080fd5b600080600080600060a08688031215614ebd57600080fd5b614ec686614e93565b9450614ed460208701614e93565b9350614ee260408701614e93565b9250614ef060608701614e93565b9150614efe60808701614e93565b90509295509295909350565b600080600060608486031215614f1f57600080fd5b8335614f2a81614a65565b9250602084013591506040840135614f4181614b05565b809150509250925092565b60008060408385031215614f5f57600080fd5b8235614f6a81614a65565b9150614f7860208401614e93565b90509250929050565b600060208284031215614f9357600080fd5b813560ff8116811461488b57600080fd5b600060208284031215614fb657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614fff57614fff614fbd565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561503c5761503c614fbd565b500290565b600082615077577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60006020828403121561508e57600080fd5b815161488b81614b05565b6000828210156150ab576150ab614fbd565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600080604083850312156150f257600080fd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006148886040830184614e11565b60006020828403121561514457600080fd5b815167ffffffffffffffff81111561515b57600080fd5b8201601f8101841361516c57600080fd5b805161517a614dab82614cfa565b81815285602083850101111561518f57600080fd5b613e9d826020830160208601614de5565b6000602082840312156151b257600080fd5b815161488b81614a65565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ef576151ef614fbd565b5060010190565b60008251615208818460208701614de5565b919091019291505056fea26469706673582212209d39bb9d4972b515acdad1ffb757acd15e103ca6ee762f88a6382b36243734ba64736f6c634300080a00336101406040523480156200001257600080fd5b5060405162005e9738038062005e97833981016040819052620000359162000198565b60016000556001600160a01b0383166200006257604051635919af9760e11b815260040160405180910390fd5b6001600160a01b038316608081905260408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620000ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d39190620001ea565b6001600160a01b031660a0816001600160a01b031681525050826001600160a01b0316634f0e0ef36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001519190620001ea565b6001600160a01b0390811660c0529190911660e0819052151561010052151561012052506200020f565b80516001600160a01b03811681146200019357600080fd5b919050565b600080600060608486031215620001ae57600080fd5b620001b9846200017b565b9250620001c9602085016200017b565b915060408401518015158114620001df57600080fd5b809150509250925092565b600060208284031215620001fd57600080fd5b62000208826200017b565b9392505050565b60805160a05160c05160e0516101005161012051615a86620004116000396000818161061101528181612fb5015261481f01526000818161031701528181610dde015281816144f901526146e5015260008181610557015281816146a901526147a901526000818161034b0152818161387d015261392d01526000818161047301528181611bfe0152818161274f0152818161280d0152818161366a01526137dd015260008181610665015281816109d801528181610b0301528181610bd501528181610cdd01528181610e6501528181610fe30152818161114e0152818161120e0152818161132e015281816114510152818161162b01528181611708015281816117e0015281816119e501528181611b1201528181611d9501528181611ed5015281816120040152818161216801528181612290015281816123c601528181612568015281816126390152818161266f0152818161293d01528181612a2101528181612a8a01528181612bde01528181612d2601528181612e6801528181612ec2015281816130a10152818161311b015281816131b401528181613341015281816134c10152818161358a0152818161372f01528181613a1a01528181613b2e01528181613dbb015281816142200152818161432801528181614492015281816148e7015281816149e801528181614aae0152614d8f0152615a866000f3fe6080604052600436106102695760003560e01c8063860aefcf11610153578063c7de38a6116100cb578063dfd594651161007f578063eb9606df11610064578063eb9606df1461081e578063f9eaee0d1461083e578063ffd9b9071461085e57600080fd5b8063dfd59465146107de578063e1f21c67146107fe57600080fd5b8063cff0ab96116100b0578063cff0ab96146106ef578063d9ccbec114610783578063dcf65482146107be57600080fd5b8063c7de38a6146106a7578063caa5c23f146106dc57600080fd5b80639c55a05411610122578063b55bb84b11610107578063b55bb84b14610633578063c12c21c014610653578063c690908a1461068757600080fd5b80639c55a054146105df578063b1836d32146105ff57600080fd5b8063860aefcf146104db5780639408b63f146105455780639b67ab30146105795780639be0536a146105bd57600080fd5b80635d91a0e0116101e65780636d19b486116101b55780637071b7c51161019a5780637071b7c51461049557806379c0ef91146104a857806382871ace146104c857600080fd5b80636d19b486146104415780636f307dc31461046157600080fd5b80635d91a0e0146103e85780635f73fbec146103fb578063601d66f61461040e5780636c8f225d1461042e57600080fd5b80633d9287fa1161023d5780635019e20a116102225780635019e20a1461039257806354fd4d50146103b257806359781034146103d557600080fd5b80633d9287fa146103055780634f0e0ef31461033957600080fd5b8062842b571461026e578063256ac915146102905780632a7ba1f7146102c55780632b7c7b11146102e5575b600080fd5b34801561027a57600080fd5b5061028e6102893660046151bf565b61087e565b005b34801561029c57600080fd5b506102b06102ab3660046151f8565b61098e565b60405190151581526020015b60405180910390f35b3480156102d157600080fd5b5061028e6102e0366004615215565b610a61565b3480156102f157600080fd5b5061028e610300366004615215565b610c3b565b34801561031157600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561034557600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102bc565b34801561039e57600080fd5b5061028e6103ad3660046151f8565b610d6a565b3480156103be57600080fd5b506103c7600281565b6040519081526020016102bc565b61028e6103e336600461522e565b61108c565b61028e6103f63660046152bb565b611275565b61028e610409366004615340565b611589565b34801561041a57600080fd5b5061028e6104293660046153d8565b6117de565b61028e61043c36600461541b565b611900565b34801561044d57600080fd5b506102b061045c3660046151f8565b611c31565b34801561046d57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b61028e6104a336600461546e565b611c60565b3480156104b457600080fd5b5061036d6104c3366004615215565b611f3e565b61028e6104d63660046152bb565b611f4b565b3480156104e757600080fd5b5060025461051c906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152016102bc565b34801561055157600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058557600080fd5b506004546040805167ffffffffffffffff608084901c1681526fffffffffffffffffffffffffffffffff9092166020830152016102bc565b3480156105c957600080fd5b506105d261227d565b6040516102bc91906154e2565b3480156105eb57600080fd5b5061028e6105fa36600461553c565b61228e565b34801561060b57600080fd5b506102b07f000000000000000000000000000000000000000000000000000000000000000081565b34801561063f57600080fd5b5061028e61064e3660046151f8565b6123c4565b34801561065f57600080fd5b5061036d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069357600080fd5b5061028e6106a23660046151f8565b6124c6565b3480156106b357600080fd5b506106c76106c23660046151f8565b612668565b604080519283526020830191909152016102bc565b61028e6106ea366004615557565b61289b565b3480156106fb57600080fd5b5060015461074e906fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000810460ff169071010000000000000000000000000000000000900464ffffffffff1683565b604080516fffffffffffffffffffffffffffffffff9094168452911515602084015264ffffffffff16908201526060016102bc565b34801561078f57600080fd5b506102b061079e366004615599565b600360209081526000928352604080842090915290825290205460ff1681565b3480156107ca57600080fd5b5061028e6107d93660046151f8565b612a88565b3480156107ea57600080fd5b506103c76107f93660046151f8565b612b86565b34801561080a57600080fd5b5061028e61081936600461522e565b612c6d565b34801561082a57600080fd5b5061028e6108393660046155c7565b612ec0565b34801561084a57600080fd5b506102b06108593660046151f8565b613057565b34801561086a57600080fd5b5061028e6108793660046155ee565b6131b2565b600260005414156108f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600090815573ffffffffffffffffffffffffffffffffffffffff8316808252600360209081526040808420338086529083529381902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081527f9b3258bc4904fd6426b99843e206c6c7cdb1fd0f040121c25b71dafbb3851ee0910160405180910390a350506001600055565b6040517f055ee9b500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063055ee9b590602401602060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a43919061560b565b73ffffffffffffffffffffffffffffffffffffffff16141592915050565b60026000541415610ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b83919061560b565b9050610b903382846132eb565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906395373018906024015b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b5050600160005550505050565b60026000541415610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5d919061560b565b9050610b90338284613411565b60026000541415610dd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000557f000000000000000000000000000000000000000000000000000000000000000015610e34576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee5919061560b565b33600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205490915060ff16610f52576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f5d82613583565b5090508015610f98576040517ff713841e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b15801561102757600080fd5b505af115801561103b573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692503391507f93c70cc9715bef0d83edf2095f3595402279d274f402a73ffc17f1bcb19d863d90600090a35050600160005550565b600260005414156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611106613875565b6040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063e958b70490602401602060405180830381865afa158015611197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bb919061560b565b90506111c9848285856139b7565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b50506001600055505050505050565b600260005414156112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015611375573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611399919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166113e8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806113f483613583565b915091508161142f576040517f1fdd676f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611437613875565b831561144d5761144d85858b8660016000613ae3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632362a2d88b600185338e8e8e6040518863ffffffff1660e01b81526004016114b59796959493929190615663565b6020604051808303816000875af11580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906156bf565b90508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f7dfecd8419723a9d3954585a30c2a270165d70aafa146c11c1e1b88ae14390648460405161157091815260200190565b60405180910390a4505060016000555050505050505050565b600260005414156115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015611687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ab919061560b565b90506116b5613875565b81156116cb576116cb8383338460016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d89061174a903390600090819083908d908d908d90600401615663565b6020604051808303816000875af1158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906156bf565b5060405173ffffffffffffffffffffffffffffffffffffffff87169033907f460ad03b1cf79b1d64d3aefa28475f110ab66e84649c52bb41ed796b9b39198190600090a35050600160005550505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118d1576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff90811670010000000000000000000000000000000002911617600255565b6002600054141561196d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b60026000908155606461198461ffff851687615707565b61198e9190615744565b9050611999816144f7565b6119a2816145e8565b6119ab84614668565b6119b3613875565b6040517f172c48c7000000000000000000000000000000000000000000000000000000008152600060048201819052907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa158015611a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a64919061577f565b61ffff169150611a789050816127106157ae565b611a829083615707565b611a8c8288615707565b11611ac3576040517f532e7bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff86811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b81919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638587604051611bef92919091825261ffff16602082015260400190565b60405180910390a3611c2386827f00000000000000000000000000000000000000000000000000000000000000008a6139b7565b505060016000555050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081205415155b92915050565b60026000541415611ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b6002600055611cdb856144f7565b611ce484614668565b611ced856145e8565b600154700100000000000000000000000000000000900460ff1615611d3e576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d46613875565b6040517f8fe3f93f0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690638fe3f93f906044016020604051808303816000875af1158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061560b565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ffa2baf5d3eb95569f312f22477b246f9d4c50276f1cb3ded8e1aeadcbc07a7638885604051611e7292919091825261ffff16602082015260400190565b60405180910390a38215611e9057611e908484878460006001613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505060016000555050505050505050565b6000611c5a60058361480f565b60026000541415611fb8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa15801561204b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206f919061560b565b905073ffffffffffffffffffffffffffffffffffffffff86166120be576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120c661481b565b6120fc576040517f7e52ccb400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061210782612668565b509050612112613875565b82156121285761212884848a8560016000613ae3565b6040517f2362a2d800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632362a2d8906121aa908c90600290879033908f908f908f90600401615663565b6020604051808303816000875af11580156121c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ed91906156bf565b90508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167ffada13ff2d5e1a1d9da37ad4a4130893b34e3c69c32b17f87ec31fd661b867078460405161226591815260200190565b60405180910390a45050600160005550505050505050565b6060612289600561486b565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231d919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612381576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561242f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612453919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124b7576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614878565b5050565b60026000541415612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa1580156125c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e8919061560b565b90506125f4818361489a565b6040517f29df0b9300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906329df0b9390602401610c00565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fc919061560b565b905060008061270b8387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156127a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c991906156bf565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015291965061271091851690637afb010490604401602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288791906156bf565b6128919190615744565b9350505050915091565b60026000541415612908576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517fe958b7040000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e958b70490602401602060405180830381865afa158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd919061560b565b90506129c7613875565b8115612a7e576129dc83833384600080613ae3565b6040517f9537301800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639537301890602401600060405180830381600087803b158015612a6557600080fd5b505af1158015612a79573d6000803e3d6000fd5b505050505b5050600160005550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b17919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b7b576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124c2600582614c92565b600080612b9283612668565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152919350600092507f000000000000000000000000000000000000000000000000000000000000000090911690633192195c906024016040805180830381865afa158015612c26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4a91906157c5565b9150819050612c5b61271084615707565b612c659190615744565b949350505050565b60026000541415612cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e7565b600260009081556040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fdd5764590602401602060405180830381865afa158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d91919061560b565b73ffffffffffffffffffffffffffffffffffffffff161480612dd7575073ffffffffffffffffffffffffffffffffffffffff831660009081526006602052604090205415155b15612e0e576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f46fb371d00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f000000000000000000000000000000000000000000000000000000000000000016906346fb371d90608401600060405180830381600087803b158015612eac57600080fd5b505af1158015611c23573d6000803e3d6000fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fb3576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000061300a576040517f50dd11fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805464ffffffffff90921671010000000000000000000000000000000000027fffffffffffffffffffff0000000000ffffffffffffffffffffffffffffffffff909216919091179055565b6040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063f67c5bd090602401602060405180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310c91906156bf565b905080158015906131ab5750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015613184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a891906156bf565b16155b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f9aa028a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613241919061560b565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132a5576040517feee4716900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054911515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff909216919091179055565b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600060448301819052917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561338c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b091906156bf565b90506133bb816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f98274bf834d179ee08dc0604071b0dc90b54731bd5f725a5a96a39a86bce025a8360405161340391815260200190565b60405180910390a250505050565b61341a816144f7565b600154700100000000000000000000000000000000900460ff161561346b576040517f7615238d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f94cf073a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201839052600160448301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906394cf073a906064016020604051808303816000875af115801561350c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061353091906156bf565b905061353b816145e8565b8373ffffffffffffffffffffffffffffffffffffffff167f9cac51154cc0d835e2f9c9d1f59a9344588cee107f4203bf58a8c797e3a58c458360405161340391815260200190565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613617919061560b565b90506000806136268387614999565b6040517f7afb01040000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602483015292945090925090841690637afb010490604401602060405180830381865afa1580156136c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e491906156bf565b6040517f3192195c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529195506000917f00000000000000000000000000000000000000000000000000000000000000001690633192195c906024016040805180830381865afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906157c5565b6040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024830152919350600092506127109187169063f9a6503090604401602060405180830381865afa158015613837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061385b91906156bf565b6138659190615707565b9092109794965093945050505050565b34156139b5577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138e357600080fd5b505af11580156138f7573d6000803e3d6000fd5b50506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201523460248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16935063a9059cbb925060440190506020604051808303816000875af115801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b391906157e9565b505b565b6139c084614cb4565b6040517f830aa74500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063830aa74590608401600060405180830381600087803b158015613a5e57600080fd5b505af1158015613a72573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fa32435755c235de2976ed44a75a2f85cb01faf0c894f639fe0c32bb9455fea8f83604051613ad591815260200190565b60405180910390a350505050565b6040517fe1998cf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b158015613b7257600080fd5b505af1158015613b86573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff871692507f4ad424605b950d17d87835716d98c0cac1f6ff9c38114e63304902188a6908119150600090a28460005b8181101561441d5736888883818110613bea57613bea615806565b9050602002810190613bfc9190615835565b90506004613c0d6020830183615873565b90501015613c47576040517fe2b0e50600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b30613c5560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16141561421c578415613ca9576040517f5fb9107f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613cb86020830183615873565b613cc1916158d8565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167f59781034000000000000000000000000000000000000000000000000000000001415613e3c5760008080613d1e6020860186615873565b613d2c916004908290615920565b810190613d39919061522e565b925092509250613e34838c73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614613e2b576040517fe958b70400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063e958b70490602401602060405180830381865afa158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e26919061560b565b613e2d565b8b5b84846139b7565b505050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2b7c7b11000000000000000000000000000000000000000000000000000000001415613ec757600194506000613e996020840184615873565b613ea7916004908290615920565b810190613eb49190615215565b9050613ec1898983613411565b50614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f2a7ba1f7000000000000000000000000000000000000000000000000000000001415613f80578415613f49576040517fc0b0caa800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613f586020840184615873565b613f66916004908290615920565b810190613f739190615215565b9050613ec18989836132eb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f233a8caa0000000000000000000000000000000000000000000000000000000014156140e457600080613fda6020850185615873565b613fe8916004908290615920565b810190613ff5919061594a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015292945090925082918416906370a0823190602401602060405180830381865afa158015614069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061408d91906156bf565b10156140dd576040517fa5ac537300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016108e7565b5050614216565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fc690908a00000000000000000000000000000000000000000000000000000000141561416457600061413d6020840184615873565b61414b916004908290615920565b81019061415891906151f8565b9050613ec1888261489a565b7fffffffff0000000000000000000000000000000000000000000000000000000081167f23e27a640000000000000000000000000000000000000000000000000000000014156141e45760006141bd6020840184615873565b6141cb916004908290615920565b8101906141d891906151f8565b9050613ec18882614d42565b6040517f1e9e7e7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50614414565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ff68754361426760208501856151f8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156142d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f4919061560b565b73ffffffffffffffffffffffffffffffffffffffff16148061436d575073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001661435560208301836151f8565b73ffffffffffffffffffffffffffffffffffffffff16145b156143a4576040517f5d2e3a7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6144126143b46020830183615873565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506143f69250505060208401846151f8565b73ffffffffffffffffffffffffffffffffffffffff1690614e39565b505b50600101613bcf565b506040517f60c8e8938c9a0c0d88a98d6f1c562ce68077e12bf3edb8047378f2f736cb45b490600090a16040517fe1998cf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e1998cf990604401600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006139b3576001546fffffffffffffffffffffffffffffffff9081169081146124c257600454608081901c906fffffffffffffffffffffffffffffffff16600067ffffffffffffffff8316431461456e578461458a565b61458a6fffffffffffffffffffffffffffffffff831686615976565b9050838111156145c6576040517f675f1a5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6fffffffffffffffffffffffffffffffff81164360801b176004555050505050565b6002546fffffffffffffffffffffffffffffffff16811080614631575060025470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681115b156139b3576040517fce16799400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61467061481b565b156146a7576040517f63fc31c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1615614806577f0000000000000000000000000000000000000000000000000000000000000000801561472657503373ffffffffffffffffffffffffffffffffffffffff821614155b1561475d576040517f5aa6676700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600160248301527f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac90604401600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050505b6139b381614cb4565b60006131ab8383614e7b565b60007f0000000000000000000000000000000000000000000000000000000000000000801561228957505060015471010000000000000000000000000000000000900464ffffffffff1642101590565b606060006131ab83614ea5565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f01565b6040517f51e3f16000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000000000000000000000000000000000000016906351e3f16090604401600060405180830381600087803b15801561492b57600080fd5b505af115801561493f573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527fdf498aa1c340e992665d6fb4f3be8436d452c45a630cb6d7fab7963da39bac8793500190505b60405180910390a15050565b6040517f8991b2f100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152600091829160019183917f00000000000000000000000000000000000000000000000000000000000000001690638991b2f190602401602060405180830381865afa158015614a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a5391906156bf565b90505b808211614c895780821615614c7d576040517fe75538c700000000000000000000000000000000000000000000000000000000815260048101839052600090819073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e75538c7906024016040805180830381865afa158015614af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b18919061577f565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a811660048301529294509092506000918416906370a0823190602401602060405180830381865afa158015614b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bb191906156bf565b90506001811115614c79576040517ff9a650300000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff8481166024830152600091908b169063f9a6503090604401602060405180830381865afa158015614c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c5791906156bf565b978801979050614c6b61ffff841682615707565b614c759088615976565b9650505b5050505b600182901b9150614a56565b50509250929050565b60006131ab8373ffffffffffffffffffffffffffffffffffffffff8416614f50565b3373ffffffffffffffffffffffffffffffffffffffff821614801590614d0b575033600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16155b156139b3576040517f85b0772600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0d8f9cee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630d8f9cee90604401600060405180830381600087803b158015614dd357600080fd5b505af1158015614de7573d6000803e3d6000fd5b50506040805173ffffffffffffffffffffffffffffffffffffffff8087168252851660208201527f69db9e9764da61b6681b89fb0f5be018506e0342036e56b59c3015a620d60977935001905061498d565b60606131ab83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250615043565b6000826000018281548110614e9257614e92615806565b9060005260206000200154905092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015614ef557602002820191906000526020600020905b815481526020019060010190808311614ee1575b50505050509050919050565b6000818152600183016020526040812054614f4857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c5a565b506000611c5a565b60008181526001830160205260408120548015615039576000614f746001836157ae565b8554909150600090614f88906001906157ae565b9050818114614fed576000866000018281548110614fa857614fa8615806565b9060005260206000200154905080876000018481548110614fcb57614fcb615806565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614ffe57614ffe61598e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611c5a565b6000915050611c5a565b6060612c65848460008585843b6150b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e7565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150df91906159ed565b60006040518083038185875af1925050503d806000811461511c576040519150601f19603f3d011682016040523d82523d6000602084013e615121565b606091505b509150915061513182828661513c565b979650505050505050565b6060831561514b5750816131ab565b82511561515b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e791906159ff565b73ffffffffffffffffffffffffffffffffffffffff811681146139b357600080fd5b80151581146139b357600080fd5b600080604083850312156151d257600080fd5b82356151dd8161518f565b915060208301356151ed816151b1565b809150509250929050565b60006020828403121561520a57600080fd5b81356131ab8161518f565b60006020828403121561522757600080fd5b5035919050565b60008060006060848603121561524357600080fd5b833561524e8161518f565b9250602084013561525e8161518f565b929592945050506040919091013590565b60008083601f84011261528157600080fd5b50813567ffffffffffffffff81111561529957600080fd5b6020830191508360208260051b85010111156152b457600080fd5b9250929050565b60008060008060008060a087890312156152d457600080fd5b86356152df8161518f565b955060208701356152ef8161518f565b9450604087013593506060870135615306816151b1565b9250608087013567ffffffffffffffff81111561532257600080fd5b61532e89828a0161526f565b979a9699509497509295939492505050565b60008060008060006080868803121561535857600080fd5b85356153638161518f565b945060208601359350604086013561537a816151b1565b9250606086013567ffffffffffffffff81111561539657600080fd5b6153a28882890161526f565b969995985093965092949392505050565b80356fffffffffffffffffffffffffffffffff811681146153d357600080fd5b919050565b600080604083850312156153eb57600080fd5b6153f4836153b3565b9150615402602084016153b3565b90509250929050565b61ffff811681146139b357600080fd5b6000806000806080858703121561543157600080fd5b8435935060208501356154438161518f565b925060408501356154538161540b565b915060608501356154638161540b565b939692955090935050565b60008060008060006080868803121561548657600080fd5b8535945060208601356154988161518f565b9350604086013567ffffffffffffffff8111156154b457600080fd5b6154c08882890161526f565b90945092505060608601356154d48161540b565b809150509295509295909350565b6020808252825182820181905260009190848201906040850190845b8181101561553057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016154fe565b50909695505050505050565b60006020828403121561554e57600080fd5b6131ab826153b3565b6000806020838503121561556a57600080fd5b823567ffffffffffffffff81111561558157600080fd5b61558d8582860161526f565b90969095509350505050565b600080604083850312156155ac57600080fd5b82356155b78161518f565b915060208301356151ed8161518f565b6000602082840312156155d957600080fd5b813564ffffffffff811681146131ab57600080fd5b60006020828403121561560057600080fd5b81356131ab816151b1565b60006020828403121561561d57600080fd5b81516131ab8161518f565b6003811061565f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b73ffffffffffffffffffffffffffffffffffffffff888116825260e082019061568f602084018a615628565b6040830197909752948616606082015292909416608083015260a082015291151560c09092019190915292915050565b6000602082840312156156d157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561573f5761573f6156d8565b500290565b60008261577a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000806040838503121561579257600080fd5b825161579d8161518f565b60208401519092506151ed8161540b565b6000828210156157c0576157c06156d8565b500390565b600080604083850312156157d857600080fd5b505080516020909101519092909150565b6000602082840312156157fb57600080fd5b81516131ab816151b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261586957600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126158a857600080fd5b83018035915067ffffffffffffffff8211156158c357600080fd5b6020019150368190038213156152b457600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156159185780818660040360031b1b83161692505b505092915050565b6000808585111561593057600080fd5b8386111561593d57600080fd5b5050820193919092039150565b6000806040838503121561595d57600080fd5b82356159688161518f565b946020939093013593505050565b60008219821115615989576159896156d8565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60005b838110156159d85781810151838201526020016159c0565b838111156159e7576000848401525b50505050565b600082516158698184602087016159bd565b6020815260008251806020840152615a1e8160408501602087016159bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220a3f4a705ab580a6ada1e438cd2ee4abc001b62d1d171fce12c41994900fef21664736f6c634300080a003360a06040523480156200001157600080fd5b5060405162005f3d38038062005f3d8339810160408190526200003491620012eb565b826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000073573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009991906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000fd91906200147f565b6000805460ff191690556001600160a01b0381166200012f57604051635919af9760e11b815260040160405180910390fd5b806001600160a01b031663087376956040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200016e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019491906200147f565b6001600160a01b03908116608052600180546001600160a01b031916918616918217905560408051636f307dc360e01b81529051919250636f307dc39160048083019260209291908290030181865afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c91906200147f565b600260006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663570a7af26040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200147f565b6001600160a01b0316632954018c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b91906200147f565b600080546001600160a01b039290921661010002610100600160a81b0319909216919091179055620003626103e860c86200034b6101f4612710620014bc565b60646200035c60c8612710620014bc565b620005e8565b60408101515160005b81811015620003ee576000836040015182815181106200038f576200038f620014e2565b6020026020010151600001519050620003ae81620007c260201b60201c565b620003e48185604001518481518110620003cc57620003cc620014e2565b60200260200101516020015162000a5e60201b60201c565b506001016200036b565b5060015460408051632630c12f60e01b815290516001600160a01b03909216916311ca4fc29186918491632630c12f9160048083019260209291908290030181865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046991906200147f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401600060405180830381600087803b158015620004b257600080fd5b505af1158015620004c7573d6000803e3d6000fd5b50506040516001600160a01b03861692507fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d9150600090a2600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057991906200147f565b6001600160a01b03167f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d096160405160405180910390a26020820151620005cb90620005c5906002620014f8565b62000bda565b81516020830151620005de919062000dc8565b5050505062001604565b6000620005f68585620014bc565b60015460405163172c48c760e01b81526000600482018190529293506001600160a01b039091169063172c48c7906024016040805180830381865afa15801562000644573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066a91906200152a565b9150508061ffff168261ffff1614620006be57620006888262000f47565b60025460405161ffff841681526001600160a01b039091169060008051602062005f1d8339815191529060200160405180910390a25b60015460405163944ac59f60e01b815261ffff808a166004830152808916602483015280881660448301528087166064830152851660848201526001600160a01b039091169063944ac59f9060a401600060405180830381600087803b1580156200072857600080fd5b505af11580156200073d573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710620007749190620014bc565b876200078388612710620014bc565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6001600160a01b038116620007ea57604051635919af9760e11b815260040160405180910390fd5b62000809816001600160a01b03166200116f60201b620023381760201c565b620008365760405163df4c572d60e01b81526001600160a01b038216600482015260240160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa92505050801562000899575060408051601f3d908101601f19168201909252620008969181019062001564565b60015b620008b75760405163528ca31d60e01b815260040160405180910390fd5b50600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093291906200147f565b604051630f9a650360e41b8152670de0b6b3a764000060048201526001600160a01b038381166024830152919091169063f9a6503090604401602060405180830381865afa925050508015620009a7575060408051601f3d908101601f19168201909252620009a49181019062001564565b60015b620009c5576040516367a7cd4360e01b815260040160405180910390fd5b5060015460405163d48bfca760e01b81526001600160a01b0383811660048301529091169063d48bfca790602401600060405180830381600087803b15801562000a0e57600080fd5b505af115801562000a23573d6000803e3d6000fd5b50506040516001600160a01b03841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b6002546001600160a01b038381169116141562000a8e57604051633b899cf960e01b815260040160405180910390fd5b60015460405163172c48c760e01b8152600060048201819052916001600160a01b03169063172c48c7906024016040805180830381865afa15801562000ad8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000afe91906200152a565b91505061ffff8216158062000b1a57508061ffff168261ffff16115b1562000b39576040516333c6608d60e01b815260040160405180910390fd5b600154604051635385e2a160e11b81526001600160a01b03858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b15801562000b8b57600080fd5b505af115801562000ba0573d6000803e3d6000fd5b505060405161ffff851681526001600160a01b038616925060008051602062005f1d833981519152915060200160405180910390a2505050565b600062000be662001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4a91906200157e565b50509050600062000c606200117560201b60201c565b6001600160a01b031663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801562000c9d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cc39190620015d5565b915050806001600160801b0316836001600160801b0316101562000cfa576040516309aadd6f60e41b815260040160405180910390fd5b826001600160801b0316826001600160801b03161462000dc35762000d1e62001175565b604051632715681560e21b81526001600160801b03851660048201526001600160a01b039190911690639c55a05490602401600060405180830381600087803b15801562000d6b57600080fd5b505af115801562000d80573d6000803e3d6000fd5b50506040516001600160801b03861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a15b505050565b600062000dd462001175565b6001600160a01b031663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801562000e12573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3891906200157e565b50509050816001600160801b0316836001600160801b0316118062000e6e5750806001600160801b0316826001600160801b0316115b1562000e8d576040516309aadd6f60e41b815260040160405180910390fd5b62000e9762001175565b60405163300eb37b60e11b81526001600160801b038086166004830152841660248201526001600160a01b03919091169063601d66f690604401600060405180830381600087803b15801562000eec57600080fd5b505af115801562000f01573d6000803e3d6000fd5b5050604080516001600160801b038088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb935001905062000dba565b600154600254604051635385e2a160e11b81526001600160a01b03918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801562000f9b57600080fd5b505af115801562000fb0573d6000803e3d6000fd5b505050506000600160009054906101000a90046001600160a01b03166001600160a01b031663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001030919062001564565b905060015b8181101562000dc35760015460405163172c48c760e01b81526004810183905260009182916001600160a01b039091169063172c48c7906024016040805180830381865afa1580156200108c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b291906200152a565b915091508461ffff168161ffff1611156200116457600154604051635385e2a160e11b81526001600160a01b03848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b1580156200111957600080fd5b505af11580156200112e573d6000803e3d6000fd5b505060405161ffff881681526001600160a01b038516925060008051602062005f1d833981519152915060200160405180910390a25b505060010162001035565b3b151590565b60015460408051632f7a188160e01b815290516000926001600160a01b031691632f7a18819160048083019260209291908290030181865afa158015620011c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e691906200147f565b905090565b6001600160a01b03811681146200120157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200123f576200123f62001204565b60405290565b604080519081016001600160401b03811182821017156200123f576200123f62001204565b604051601f8201601f191681016001600160401b038111828210171562001295576200129562001204565b604052919050565b80516001600160801b0381168114620012b557600080fd5b919050565b8051620012b581620011eb565b805161ffff81168114620012b557600080fd5b80518015158114620012b557600080fd5b6000806000606084860312156200130157600080fd5b83516200130e81620011eb565b809350506020808501516200132381620011eb565b604086810151919450906001600160401b03808211156200134357600080fd5b9087019060a0828a0312156200135857600080fd5b620013626200121a565b6200136d836200129d565b81526200137c8584016200129d565b8582015283830151828111156200139257600080fd5b8301601f81018b13620013a457600080fd5b805183811115620013b957620013b962001204565b620013c9878260051b016200126a565b818152878101945060069190911b82018701908c821115620013ea57600080fd5b918701915b81831015620014435786838e031215620014095760008081fd5b6200141362001245565b83516200142081620011eb565b81526200142f848a01620012c7565b818a015285529387019391860191620013ef565b838701525062001458905060608401620012ba565b60608201526200146b60808401620012da565b608082015280955050505050509250925092565b6000602082840312156200149257600080fd5b81516200149f81620011eb565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600061ffff83811690831681811015620014da57620014da620014a6565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60006001600160801b0382811684821681151582840482111615620015215762001521620014a6565b02949350505050565b600080604083850312156200153e57600080fd5b82516200154b81620011eb565b91506200155b60208401620012c7565b90509250929050565b6000602082840312156200157757600080fd5b5051919050565b6000806000606084860312156200159457600080fd5b6200159f846200129d565b9250620015af60208501620012da565b9150604084015164ffffffffff81168114620015ca57600080fd5b809150509250925092565b60008060408385031215620015e957600080fd5b620015f4836200129d565b91506200155b602084016200129d565b608051614878620016a56000396000818161033601528181610446015281816107c5015281816108c0015281816109ae01528181610b8301528181610f0a015281816113e1015281816114cf015281816115bb015281816116ab015281816117990152818161187d01528181611ad901528181611bc601528181611cb301528181611da0015281816120090152818161218c015261227901526148786000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638456cb59116100f9578063dc2b21c111610097578063f0527ac611610071578063f0527ac6146103d7578063f206d32a146103df578063fb1bd8c4146103f2578063ffd9b9071461040557600080fd5b8063dc2b21c11461039e578063e6492d7b146103b1578063eb9606df146103c457600080fd5b8063a50cf2c8116100d3578063a50cf2c814610331578063a70bc54214610358578063b53472ef1461036b578063c12c21c01461037e57600080fd5b80638456cb59146103035780639c55a0541461030b5780639f1c50691461031e57600080fd5b806350e036ff1161016657806354fd4d501161014057806354fd4d50146102b25780635c975abb146102ba5780636f307dc3146102d05780637bccacee146102f057600080fd5b806350e036ff1461027657806352438e541461028c578063526a41e81461029f57600080fd5b80633e7c88d6116101a25780633e7c88d6146102355780633f4ba83a14610248578063456e0742146102505780635094cb4f1461026357600080fd5b806324147708146101c95780632954018c146101de5780632f7a18811461022d575b600080fd5b6101dc6101d7366004614307565b610418565b005b60005461020390610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6102036106fe565b6101dc610243366004614334565b610797565b6101dc610892565b6101dc61025e366004614307565b610980565b61020361027136600461436d565b610b36565b61027e610b49565b604051908152602001610224565b6101dc61029a366004614307565b610b55565b6101dc6102ad366004614394565b610edc565b61027e600281565b60005460ff166040519015158152602001610224565b6002546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6102fe3660046143c2565b6113b3565b6101dc6114a1565b6101dc61031936600461440e565b61158d565b6101dc61032c36600461442b565b61167d565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b6101dc610366366004614334565b61176b565b6101dc610379366004614307565b61184f565b6001546102039073ffffffffffffffffffffffffffffffffffffffff1681565b6101dc6103ac366004614459565b611aab565b6101dc6103bf366004614307565b611b98565b6101dc6103d236600461448f565b611c85565b6101dc611d72565b6101dc6103ed3660046144ac565b611fdb565b6101dc610400366004614307565b61215e565b6101dc61041336600461451d565b61224b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156104a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c6919061453a565b6104fc576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006105078261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c9190614557565b90508181166106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918317600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506106356106fe565b6040517fffd9b9070000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507ff17b849746e74d7186170c9553d4bbf60b4f8bb1ed81fe50c099b934fb078f059150600090a25b505050565b600154604080517f2f7a1881000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691632f7a18819160048083019260209291908290030181865afa15801561076e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610792919061457b565b905090565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610845919061453a565b61087b576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108848261241e565b61088e82826127f8565b5050565b6040517fd4eb5db00000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d4eb5db090602401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610940919061453a565b610976576040517f10332dee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e612a15565b565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e919061453a565b610a64576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a6d81612af6565b6001546040517f9f5f86ae00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015290911690639f5f86ae90602401600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f5a0b7d0f9c24b39256e112a0584b4c5ce38d8f1dee2e7c56f15b852604cdc8869150600090a250565b6000610b43600383612cb8565b92915050565b60006107926003612ccb565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c03919061453a565b610c39576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610c86576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063fdd5764590602401602060405180830381865afa158015610cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1b919061457b565b905073ffffffffffffffffffffffffffffffffffffffff8116610d6a576040517f1170cc2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000602483015290911690636e98e5e490604401600060405180830381600087803b158015610dde57600080fd5b505af1158015610df2573d6000803e3d6000fd5b50506001546040517f6e98e5e40000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff86811660248301529091169250636e98e5e49150604401600060405180830381600087803b158015610e6a57600080fd5b505af1158015610e7e573d6000803e3d6000fd5b50505050610e96826003612cd590919063ffffffff16565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fab9f405bf0c19b97f65a7031634db41569cd2f0e0376a610a1e977f9ab22b58f90600090a25050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a919061453a565b610fc0576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fc982612af6565b6000806000610fd66106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190614598565b9250925092506000806110556106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa15801561109e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c291906145e5565b9150915060006110d06106fe565b73ffffffffffffffffffffffffffffffffffffffff16639be0536a6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561111a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526111609190810190614643565b9050600061116c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663b1836d326040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111da919061453a565b600154604080517f2630c12f000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff909116916311ca4fc2918c918491632630c12f9160048083019260209291908290030181865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a919061457b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401600060405180830381600087803b1580156112e757600080fd5b505af11580156112fb573d6000803e3d6000fd5b5050505087156113675761130e87612cf7565b6113188484612f5d565b61132186613152565b60005b82518110156113575761134f83828151811061134257611342614726565b60200260200101516132a3565b600101611324565b50801561136757611367856133c9565b60405173ffffffffffffffffffffffffffffffffffffffff8a16907fa8b21f72cb83bce808df32dc2330217d744a1c22f3e9e44e4b11bbf049d37d9d90600090a2505050505050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa15801561143d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611461919061453a565b611497576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e828261357b565b6040517f3a41ec640000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633a41ec6490602401602060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154f919061453a565b611585576040517fd794b1e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097e6139c3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061453a565b611671576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81612cf7565b50565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061453a565b611761576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61088e8282612f5d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611819919061453a565b610884576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156118d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fd919061453a565b611933576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061193e8261233e565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fd12b776040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d39190614557565b9050818116156106f9576001546040517fa366f496000000000000000000000000000000000000000000000000000000008152918318600483018190529173ffffffffffffffffffffffffffffffffffffffff9091169063a366f49690602401600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff861692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a2505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b59919061453a565b611b8f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613a83565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061453a565b611c7c576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613b3d565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d33919061453a565b611d69576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816133c9565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015611dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e20919061453a565b611e56576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee8919061457b565b60015490915073ffffffffffffffffffffffffffffffffffffffff166311ca4fc2611f116106fe565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff91821660048201529084166024820152604401600060405180830381600087803b158015611f7f57600080fd5b505af1158015611f93573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507f3f82447be465b0b5a4a9e54c74d5f6ae73f2e9537f2cc1590a340524703d09619150600090a250565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa158015612065573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612089919061453a565b6120bf576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271061ffff86161015806120e357506127106120dc8585614784565b61ffff1610155b806120fd57506127106120f68383614784565b61ffff1610155b15612134576040517f0b361d6900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121578585612145866127106147aa565b85612152866127106147aa565b613c5c565b5050505050565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156121e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220c919061453a565b612242576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a816132a3565b6040517f5f259aba0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635f259aba90602401602060405180830381865afa1580156122d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f9919061453a565b61232f576040517f61081c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167a81613152565b3b151590565b6001546040517ff67c5bd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063f67c5bd090602401602060405180830381865afa1580156123af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d39190614557565b90508015806123e25750806001145b15612419576040517f700ca0af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff811661246b576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6124d6576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa92505050801561257a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261257791810190614557565b60015b6125b0576040517f528ca31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612642919061457b565b6040517ff9a65030000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff8381166024830152919091169063f9a6503090604401602060405180830381865afa9250505080156126f8575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526126f591810190614557565b60015b61272e576040517f67a7cd4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001546040517fd48bfca700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063d48bfca790602401600060405180830381600087803b15801561279c57600080fd5b505af11580156127b0573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692507fbeceb48aeaa805aeae57be163cca6249077a18734e408a85aa74e875c43738099150600090a250565b60025473ffffffffffffffffffffffffffffffffffffffff8381169116141561284d576040517f3b899cf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f172c48c70000000000000000000000000000000000000000000000000000000081526000600482018190529173ffffffffffffffffffffffffffffffffffffffff169063172c48c7906024016040805180830381865afa1580156128bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e091906147cd565b91505061ffff821615806128fb57508061ffff168261ffff16115b15612932576040517f33c6608d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015261ffff851660248301529091169063a70bc54290604401600060405180830381600087803b1580156129a957600080fd5b505af11580156129bd573d6000803e3d6000fd5b505060405161ffff8516815273ffffffffffffffffffffffffffffffffffffffff861692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a2505050565b60005460ff16612a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8116612b43576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b612ba9576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016124cd565b8073ffffffffffffffffffffffffffffffffffffffff1663c12c21c06040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612c2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612c2b9181019061457b565b60015b612c64576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161461088e576040517fe9eddd1700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612cc48383613e92565b9392505050565b6000610b43825490565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416613ebc565b6000612d016106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6f9190614598565b505090506000612d7d6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663860aefcf6040518163ffffffff1660e01b81526004016040805180830381865afa158015612dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dea91906145e5565b915050806fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015612e4b576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16146106f957612e7e6106fe565b6040517f9c55a0540000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff9190911690639c55a05490602401600060405180830381600087803b158015612ef957600080fd5b505af1158015612f0d573d6000803e3d6000fd5b50506040516fffffffffffffffffffffffffffffffff861681527fa030eec20ae970821387224ec3bb15b4bd22b89bfb86dc4d2b3827aa3d99e48d925060200190505b60405180910390a1505050565b6000612f676106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa158015612fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd59190614598565b50509050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff16118061302e5750806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16115b15613065576040517f9aadd6f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61306d6106fe565b6040517f601d66f60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80861660048301528416602482015273ffffffffffffffffffffffffffffffffffffffff919091169063601d66f690604401600060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b5050604080516fffffffffffffffffffffffffffffffff8088168252861660208201527f4d4981437d0211f9e6843eb024d9ada1fa3a99514d4343d4aece106dd11524bb9350019050612f50565b600061315c6106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa1580156131a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131ca9190614598565b509150508015158215151461088e576131e16106fe565b6040517fffd9b907000000000000000000000000000000000000000000000000000000008152831515600482015273ffffffffffffffffffffffffffffffffffffffff919091169063ffd9b90790602401600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050507ff97ba903470ff3262b4a68a938fe81def401bac1bd742169d2e8d5c4ed2185d382604051613297911515815260200190565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff81166132f0576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132f86106fe565b6040517fb55bb84b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063b55bb84b90602401600060405180830381600087803b15801561336357600080fd5b505af1158015613377573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527fdac9a7995cbc0c0f01d78970fb6fd0b52fe0fe869eb6635e65cc1b5682b8325c925060200190505b60405180910390a150565b60006133d36106fe565b73ffffffffffffffffffffffffffffffffffffffff1663cff0ab966040518163ffffffff1660e01b8152600401606060405180830381865afa15801561341d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134419190614598565b925050508064ffffffffff168264ffffffffff161461088e578164ffffffffff168164ffffffffff16118061347c57508164ffffffffff1642115b156134b3576040517fe4eaca7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134bb6106fe565b6040517feb9606df00000000000000000000000000000000000000000000000000000000815264ffffffffff8416600482015273ffffffffffffffffffffffffffffffffffffffff919091169063eb9606df90602401600060405180830381600087803b15801561352b57600080fd5b505af115801561353f573d6000803e3d6000fd5b505060405164ffffffffff851681527f0b3eb35ba750e7a7e4d26c9eee3d226f4e1f68c5568f4a3d051c94b241b02ac092506020019050613297565b73ffffffffffffffffffffffffffffffffffffffff82166135c8576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82163b61362e576040517fdf4c572d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016124cd565b61363781612af6565b60015473ffffffffffffffffffffffffffffffffffffffff8381169116148061369257506136636106fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806136b7575060015473ffffffffffffffffffffffffffffffffffffffff8281169116145b806136f457506136c56106fe565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561372b576040517f727de5c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517fff68754300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063ff68754390602401602060405180830381865afa15801561379c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c0919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614158061388c57506001546040517ffdd5764500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152600092169063fdd5764590602401602060405180830381865afa15801561384f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613873919061457b565b73ffffffffffffffffffffffffffffffffffffffff1614155b156138c3576040517f21ff1e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f6e98e5e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152848116602483015290911690636e98e5e490604401600060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b50505050613964826003613faf90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4bcbefaef68b99503d502f5a6abe7bca2b183ab8ac55457013c77d084ebd130560405160405180910390a35050565b60005460ff1615613a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016124cd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612acc3390565b6001546040517fdc2b21c100000000000000000000000000000000000000000000000000000000815260ff8316600482015273ffffffffffffffffffffffffffffffffffffffff9091169063dc2b21c190602401600060405180830381600087803b158015613af157600080fd5b505af1158015613b05573d6000803e3d6000fd5b505060405160ff841681527f73caacd705657a7d283e48ecf288b73bc517e3aea1bbc9da2fd54a979e8aa950925060200190506133be565b73ffffffffffffffffffffffffffffffffffffffff8116613b8a576040517fb2335f2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613b926106fe565b6040517fdcf6548200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152919091169063dcf6548290602401600060405180830381600087803b158015613bfd57600080fd5b505af1158015613c11573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841681527f32e53e2e527af8518ae889e5f7e674bc83f7cf68e4cc059aceeaa0e64208b85b925060200190506133be565b6000613c6885856147aa565b6001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260006004820181905292935073ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015613cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cff91906147cd565b9150508061ffff168261ffff1614613d6e57613d1a82613fd1565b60025460405161ffff8416815273ffffffffffffffffffffffffffffffffffffffff909116907f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac6509060200160405180910390a25b6001546040517f944ac59f00000000000000000000000000000000000000000000000000000000815261ffff808a1660048301528089166024830152808816604483015280871660648301528516608482015273ffffffffffffffffffffffffffffffffffffffff9091169063944ac59f9060a401600060405180830381600087803b158015613dfd57600080fd5b505af1158015613e11573d6000803e3d6000fd5b505050507f2214a403d5f8d049e52eacca974c6dea01a471e41d6a18903bfaf7dbc709741f878787612710613e4691906147aa565b87613e53886127106147aa565b6040805161ffff96871681529486166020860152928516848401529084166060840152909216608082015290519081900360a00190a150505050505050565b6000826000018281548110613ea957613ea9614726565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613fa5576000613ee06001836147fc565b8554909150600090613ef4906001906147fc565b9050818114613f59576000866000018281548110613f1457613f14614726565b9060005260206000200154905080876000018481548110613f3757613f37614726565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f6a57613f6a614813565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b43565b6000915050610b43565b6000612cc48373ffffffffffffffffffffffffffffffffffffffff8416614296565b6001546002546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015261ffff8416602482015291169063a70bc54290604401600060405180830381600087803b15801561404a57600080fd5b505af115801561405e573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663458936f56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f59190614557565b905060015b818110156106f9576001546040517f172c48c700000000000000000000000000000000000000000000000000000000815260048101839052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063172c48c7906024016040805180830381865afa158015614175573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419991906147cd565b915091508461ffff168161ffff16111561428c576001546040517fa70bc54200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015261ffff881660248301529091169063a70bc54290604401600060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505060405161ffff8816815273ffffffffffffffffffffffffffffffffffffffff851692507f94525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac650915060200160405180910390a25b50506001016140fa565b60008181526001830160205260408120546142dd57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b43565b506000610b43565b73ffffffffffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561431957600080fd5b8135612cc4816142e5565b61ffff8116811461167a57600080fd5b6000806040838503121561434757600080fd5b8235614352816142e5565b9150602083013561436281614324565b809150509250929050565b60006020828403121561437f57600080fd5b5035919050565b801515811461167a57600080fd5b600080604083850312156143a757600080fd5b82356143b2816142e5565b9150602083013561436281614386565b600080604083850312156143d557600080fd5b82356143e0816142e5565b91506020830135614362816142e5565b6fffffffffffffffffffffffffffffffff8116811461167a57600080fd5b60006020828403121561442057600080fd5b8135612cc4816143f0565b6000806040838503121561443e57600080fd5b8235614449816143f0565b91506020830135614362816143f0565b60006020828403121561446b57600080fd5b813560ff81168114612cc457600080fd5b64ffffffffff8116811461167a57600080fd5b6000602082840312156144a157600080fd5b8135612cc48161447c565b600080600080600060a086880312156144c457600080fd5b85356144cf81614324565b945060208601356144df81614324565b935060408601356144ef81614324565b925060608601356144ff81614324565b9150608086013561450f81614324565b809150509295509295909350565b60006020828403121561452f57600080fd5b8135612cc481614386565b60006020828403121561454c57600080fd5b8151612cc481614386565b60006020828403121561456957600080fd5b5051919050565b8051612419816142e5565b60006020828403121561458d57600080fd5b8151612cc4816142e5565b6000806000606084860312156145ad57600080fd5b83516145b8816143f0565b60208501519093506145c981614386565b60408501519092506145da8161447c565b809150509250925092565b600080604083850312156145f857600080fd5b8251614603816143f0565b6020840151909250614362816143f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602080838503121561465657600080fd5b825167ffffffffffffffff8082111561466e57600080fd5b818501915085601f83011261468257600080fd5b81518181111561469457614694614614565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811085821117156146d7576146d7614614565b6040529182528482019250838101850191888311156146f557600080fd5b938501935b8285101561471a5761470b85614570565b845293850193928501926146fa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061ffff8083168185168083038211156147a1576147a1614755565b01949350505050565b600061ffff838116908316818110156147c5576147c5614755565b039392505050565b600080604083850312156147e057600080fd5b82516147eb816142e5565b602084015190925061436281614324565b60008282101561480e5761480e614755565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122046c364b67d38a3dd85b57e027716324d90dd1df102f265f0a0e2697babdb3f3b64736f6c634300080a003394525be3f877fb3bb3d260299de56a31f86aaacb06ccba90e4fbedcb693ac65060806040523480156200001157600080fd5b5060405162000de938038062000de98339810160408190526200003491620001db565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b50505062000282565b828054620000769062000245565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013657600080fd5b81516001600160401b03808211156200015357620001536200010e565b604051601f8301601f19908116603f011681019082821181831017156200017e576200017e6200010e565b816040528381526020925086838588010111156200019b57600080fd5b600091505b83821015620001bf5785820183015181830184015290820190620001a0565b83821115620001d15760008385830101525b9695505050505050565b60008060408385031215620001ef57600080fd5b82516001600160401b03808211156200020757600080fd5b620002158683870162000124565b935060208501519150808211156200022c57600080fd5b506200023b8582860162000124565b9150509250929050565b600181811c908216806200025a57607f821691505b602082108114156200027c57634e487b7160e01b600052602260045260246000fd5b50919050565b610b5780620002926000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d714610194578063a9059cbb146101a7578063dd62ed3e146101ba57600080fd5b8063395093511461014357806370a082311461015657806395d89b411461018c57600080fd5b806318160ddd116100b257806318160ddd1461010f57806323b872dd14610121578063313ce5671461013457600080fd5b806306fdde03146100ce578063095ea7b3146100ec575b600080fd5b6100d6610200565b6040516100e39190610937565b60405180910390f35b6100ff6100fa3660046109d3565b610292565b60405190151581526020016100e3565b6002545b6040519081526020016100e3565b6100ff61012f3660046109fd565b6102a8565b604051601281526020016100e3565b6100ff6101513660046109d3565b610393565b610113610164366004610a39565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100d66103dc565b6100ff6101a23660046109d3565b6103eb565b6100ff6101b53660046109d3565b6104c3565b6101136101c8366004610a5b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461020f90610a8e565b80601f016020809104026020016040519081016040528092919081815260200182805461023b90610a8e565b80156102885780601f1061025d57610100808354040283529160200191610288565b820191906000526020600020905b81548152906001019060200180831161026b57829003601f168201915b5050505050905090565b600061029f3384846104d0565b50600192915050565b60006102b5848484610683565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561037b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61038885338584036104d0565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161029f9185906103d7908690610ae2565b6104d0565b60606004805461020f90610a8e565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156104ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610372565b6104b933858584036104d0565b5060019392505050565b600061029f338484610683565b73ffffffffffffffffffffffffffffffffffffffff8316610572576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff8216610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff82166107c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561087f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610372565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082208585039055918516815290812080548492906108c3908490610ae2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161092991815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561096457858101830151858201604001528201610948565b81811115610976576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146109ce57600080fd5b919050565b600080604083850312156109e657600080fd5b6109ef836109aa565b946020939093013593505050565b600080600060608486031215610a1257600080fd5b610a1b846109aa565b9250610a29602085016109aa565b9150604084013590509250925092565b600060208284031215610a4b57600080fd5b610a54826109aa565b9392505050565b60008060408385031215610a6e57600080fd5b610a77836109aa565b9150610a85602084016109aa565b90509250929050565b600181811c90821680610aa257607f821691505b60208210811415610adc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60008219821115610b1c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50019056fea2646970667358221220ea837db55982fa6337364a97193f807baffaf946f2fc4d834a362194db15ea6564736f6c634300080a00335570677261646561626c6520636f6e7472616374203120776173206e6f74207472616e736665727265645570677261646561626c6520636f6e7472616374203020776173206e6f74207472616e73666572726564496e636f7272656374204c5420666f7220756e6465726c79696e6720746f6b656e496e636f727265637420616c6c6f77656420636f6e74726163747320636f756e74496e636f7272656374205553444320666f7220756e6465726c79696e6720746f6b656e496e636f7272656374206973496e63726561736544656274466f7262696464656e20496e636f727265637420206d6178426f72726f776564416d6f756e74506572426c6f636b496e636f7272656374207175616e74697479206f6620616c6c6f77656420746f6b656e73437265646974206d616e61676572206d617820656e61626c656420746f6b656e7320696e636f7272656374496e636f7272656374206c69717569646174696f6e446973636f756e7445787069726564496e636f7272656374205745544820666f7220756e6465726c79696e6720746f6b656ea2646970667358221220ec8431432767766effca5926ce812d52c8401c4e96f32b0312069c1cf85b476664736f6c634300080a0033";
|
|
998
|
-
|
|
999
|
-
type CreditConfiguratorTestConstructorParams =
|
|
1000
|
-
| [signer?: Signer]
|
|
1001
|
-
| ConstructorParameters<typeof ContractFactory>;
|
|
1002
|
-
|
|
1003
|
-
const isSuperArgs = (
|
|
1004
|
-
xs: CreditConfiguratorTestConstructorParams
|
|
1005
|
-
): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;
|
|
1006
|
-
|
|
1007
|
-
export class CreditConfiguratorTest__factory extends ContractFactory {
|
|
1008
|
-
constructor(...args: CreditConfiguratorTestConstructorParams) {
|
|
1009
|
-
if (isSuperArgs(args)) {
|
|
1010
|
-
super(...args);
|
|
1011
|
-
} else {
|
|
1012
|
-
super(_abi, _bytecode, args[0]);
|
|
1013
|
-
}
|
|
1014
|
-
}
|
|
1015
|
-
|
|
1016
|
-
override deploy(
|
|
1017
|
-
overrides?: Overrides & { from?: string | Promise<string> }
|
|
1018
|
-
): Promise<CreditConfiguratorTest> {
|
|
1019
|
-
return super.deploy(overrides || {}) as Promise<CreditConfiguratorTest>;
|
|
1020
|
-
}
|
|
1021
|
-
override getDeployTransaction(
|
|
1022
|
-
overrides?: Overrides & { from?: string | Promise<string> }
|
|
1023
|
-
): TransactionRequest {
|
|
1024
|
-
return super.getDeployTransaction(overrides || {});
|
|
1025
|
-
}
|
|
1026
|
-
override attach(address: string): CreditConfiguratorTest {
|
|
1027
|
-
return super.attach(address) as CreditConfiguratorTest;
|
|
1028
|
-
}
|
|
1029
|
-
override connect(signer: Signer): CreditConfiguratorTest__factory {
|
|
1030
|
-
return super.connect(signer) as CreditConfiguratorTest__factory;
|
|
1031
|
-
}
|
|
1032
|
-
|
|
1033
|
-
static readonly bytecode = _bytecode;
|
|
1034
|
-
static readonly abi = _abi;
|
|
1035
|
-
static createInterface(): CreditConfiguratorTestInterface {
|
|
1036
|
-
return new utils.Interface(_abi) as CreditConfiguratorTestInterface;
|
|
1037
|
-
}
|
|
1038
|
-
static connect(
|
|
1039
|
-
address: string,
|
|
1040
|
-
signerOrProvider: Signer | Provider
|
|
1041
|
-
): CreditConfiguratorTest {
|
|
1042
|
-
return new Contract(
|
|
1043
|
-
address,
|
|
1044
|
-
_abi,
|
|
1045
|
-
signerOrProvider
|
|
1046
|
-
) as CreditConfiguratorTest;
|
|
1047
|
-
}
|
|
1048
|
-
}
|