@dolomite-exchange/dolomite-margin 0.2.0 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/build/contracts/Account.json +11 -11
  2. package/build/contracts/Actions.json +11 -11
  3. package/build/contracts/Address.json +1 -1
  4. package/build/contracts/Admin.json +23 -23
  5. package/build/contracts/AdminImpl.json +31 -322
  6. package/build/contracts/AdvancedMath.json +7 -7
  7. package/build/contracts/AmmRebalancerProxy.json +32 -77
  8. package/build/contracts/Babylonian.json +1 -1
  9. package/build/contracts/Bits.json +9 -9
  10. package/build/contracts/Cache.json +13 -13
  11. package/build/contracts/ChainlinkPriceOracleV1.json +16 -16
  12. package/build/contracts/Context.json +1 -1
  13. package/build/contracts/CustomTestToken.json +9 -9
  14. package/build/contracts/Decimal.json +9 -9
  15. package/build/contracts/DelayedMultiSig.json +9 -9
  16. package/build/contracts/DolomiteAmmERC20.json +11 -11
  17. package/build/contracts/DolomiteAmmFactory.json +14 -52
  18. package/build/contracts/DolomiteAmmLibrary.json +24 -24
  19. package/build/contracts/DolomiteAmmPair.json +27 -27
  20. package/build/contracts/DolomiteAmmRouterProxy.json +30 -363
  21. package/build/contracts/DolomiteMargin.json +22 -68
  22. package/build/contracts/DoubleExponentInterestSetter.json +15 -21
  23. package/build/contracts/EnumerableSet.json +7 -7
  24. package/build/contracts/ErroringOmiseToken.json +9 -9
  25. package/build/contracts/ErroringToken.json +10 -10
  26. package/build/contracts/Events.json +17 -17
  27. package/build/contracts/Exchange.json +15 -15
  28. package/build/contracts/Expiry.json +34 -34
  29. package/build/contracts/Getters.json +34 -34
  30. package/build/contracts/IAutoTrader.json +9 -9
  31. package/build/contracts/ICallee.json +7 -7
  32. package/build/contracts/IChainlinkAggregator.json +5 -5
  33. package/build/contracts/IDolomiteAmmERC20.json +5 -5
  34. package/build/contracts/IDolomiteAmmFactory.json +9 -9
  35. package/build/contracts/IDolomiteAmmPair.json +9 -9
  36. package/build/contracts/IDolomiteMargin.json +23 -23
  37. package/build/contracts/IERC20.json +1 -1
  38. package/build/contracts/IERC20Detailed.json +5 -5
  39. package/build/contracts/IExchangeWrapper.json +5 -5
  40. package/build/contracts/IExpiry.json +9 -9
  41. package/build/contracts/IInterestSetter.json +7 -7
  42. package/build/contracts/ILiquidationCallback.json +7 -7
  43. package/build/contracts/IMakerOracle.json +5 -5
  44. package/build/contracts/IOasisDex.json +5 -5
  45. package/build/contracts/IPriceOracle.json +7 -7
  46. package/build/contracts/IRecyclable.json +9 -9
  47. package/build/contracts/ITransferProxy.json +5 -5
  48. package/build/contracts/IUniswapV2Callee.json +5 -5
  49. package/build/contracts/IUniswapV2Factory.json +5 -5
  50. package/build/contracts/IUniswapV2Pair.json +5 -5
  51. package/build/contracts/IUniswapV2Router.json +5 -5
  52. package/build/contracts/IWETH.json +5 -5
  53. package/build/contracts/Interest.json +15 -15
  54. package/build/contracts/LiquidateOrVaporizeImpl.json +31 -82
  55. package/build/contracts/LiquidatorProxyHelper.json +23 -23
  56. package/build/contracts/LiquidatorProxyV1.json +31 -37
  57. package/build/contracts/LiquidatorProxyV1WithAmm.json +246 -363
  58. package/build/contracts/Math.json +1 -1
  59. package/build/contracts/Migrations.json +8 -14
  60. package/build/contracts/Monetary.json +7 -7
  61. package/build/contracts/MultiCall.json +8 -14
  62. package/build/contracts/MultiSig.json +7 -7
  63. package/build/contracts/OmiseToken.json +8 -8
  64. package/build/contracts/OnlyDolomiteMargin.json +11 -11
  65. package/build/contracts/Operation.json +15 -15
  66. package/build/contracts/OperationImpl.json +39 -47
  67. package/build/contracts/Ownable.json +1 -1
  68. package/build/contracts/PartiallyDelayedMultiSig.json +9 -9
  69. package/build/contracts/PayableProxy.json +16 -22
  70. package/build/contracts/Permission.json +11 -11
  71. package/build/contracts/PolynomialInterestSetter.json +13 -13
  72. package/build/contracts/RecyclableTokenProxy.json +25 -25
  73. package/build/contracts/ReentrancyGuard.json +1 -1
  74. package/build/contracts/Require.json +7 -7
  75. package/build/contracts/SafeERC20.json +1 -1
  76. package/build/contracts/SafeETH.json +7 -7
  77. package/build/contracts/SafeMath.json +1 -1
  78. package/build/contracts/SignedOperationProxy.json +21 -104
  79. package/build/contracts/SimpleFeeOwner.json +19 -64
  80. package/build/contracts/State.json +9 -9
  81. package/build/contracts/Storage.json +3222 -3222
  82. package/build/contracts/TestAmmRebalancerProxy.json +32 -58
  83. package/build/contracts/TestAutoTrader.json +22 -22
  84. package/build/contracts/TestBtcUsdChainlinkAggregator.json +11 -11
  85. package/build/contracts/TestCallee.json +18 -18
  86. package/build/contracts/TestChainlinkPriceOracleV1.json +10 -94
  87. package/build/contracts/TestCounter.json +7 -7
  88. package/build/contracts/TestDaiUsdChainlinkAggregator.json +11 -11
  89. package/build/contracts/TestDolomiteMargin.json +21 -21
  90. package/build/contracts/TestDoubleExponentInterestSetter.json +10 -10
  91. package/build/contracts/TestEthUsdChainlinkAggregator.json +11 -11
  92. package/build/contracts/TestExchangeWrapper.json +10 -10
  93. package/build/contracts/TestInterestSetter.json +13 -13
  94. package/build/contracts/TestLib.json +22 -22
  95. package/build/contracts/TestLinkUsdChainlinkAggregator.json +11 -11
  96. package/build/contracts/TestLiquidateCallback.json +15 -15
  97. package/build/contracts/TestLrcEthChainlinkAggregator.json +11 -11
  98. package/build/contracts/TestMakerOracle.json +10 -10
  99. package/build/contracts/TestMaticUsdChainlinkAggregator.json +10 -10
  100. package/build/contracts/TestOasisDex.json +12 -12
  101. package/build/contracts/TestOperationImpl.json +15 -15
  102. package/build/contracts/TestPolynomialInterestSetter.json +10 -10
  103. package/build/contracts/TestPriceAggregator.json +9 -9
  104. package/build/contracts/TestPriceOracle.json +13 -13
  105. package/build/contracts/TestRecyclableToken.json +9 -9
  106. package/build/contracts/TestSimpleCallee.json +14 -14
  107. package/build/contracts/TestToken.json +9 -9
  108. package/build/contracts/TestTrader.json +17 -17
  109. package/build/contracts/TestUniswapAmmRebalancerProxy.json +43 -16
  110. package/build/contracts/TestUsdcUsdChainlinkAggregator.json +11 -11
  111. package/build/contracts/TestWETH.json +9 -9
  112. package/build/contracts/Time.json +9 -9
  113. package/build/contracts/Token.json +9 -9
  114. package/build/contracts/TokenA.json +10 -10
  115. package/build/contracts/TokenB.json +10 -10
  116. package/build/contracts/TokenC.json +10 -10
  117. package/build/contracts/TokenD.json +10 -10
  118. package/build/contracts/TokenE.json +10 -10
  119. package/build/contracts/TokenF.json +10 -10
  120. package/build/contracts/TransferProxy.json +22 -28
  121. package/build/contracts/TypedSignature.json +9 -9
  122. package/build/contracts/Types.json +9 -9
  123. package/build/contracts/UQ112x112.json +7 -7
  124. package/build/contracts/UniswapV2ERC20.json +7 -7
  125. package/build/contracts/UniswapV2Factory.json +12 -12
  126. package/build/contracts/UniswapV2Library.json +20 -20
  127. package/build/contracts/UniswapV2Pair.json +17 -17
  128. package/build/contracts/UniswapV2Router02.json +16 -16
  129. package/build/contracts/WETH9.json +1 -1
  130. package/contracts/protocol/impl/artifacts/OperationImpl.json +80 -0
  131. package/contracts/protocol/impl/artifacts/OperationImpl_metadata.json +193 -0
  132. package/contracts/protocol/lib/Storage.sol +7 -0
  133. package/dist/build/published_contracts/AdminImpl.json +1 -1
  134. package/dist/build/published_contracts/AmmRebalancerProxy.json +1 -1
  135. package/dist/build/published_contracts/ChainlinkPriceOracleV1.json +1 -1
  136. package/dist/build/published_contracts/DolomiteAmmFactory.json +1 -1
  137. package/dist/build/published_contracts/DolomiteAmmRouterProxy.json +1 -1
  138. package/dist/build/published_contracts/DoubleExponentInterestSetter.json +2 -2
  139. package/dist/build/published_contracts/Expiry.json +1 -1
  140. package/dist/build/published_contracts/LiquidatorProxyV1.json +2 -2
  141. package/dist/build/published_contracts/LiquidatorProxyV1WithAmm.json +2 -2
  142. package/dist/build/published_contracts/MultiCall.json +1 -1
  143. package/dist/build/published_contracts/PayableProxy.json +1 -1
  144. package/dist/build/published_contracts/SignedOperationProxy.json +2 -2
  145. package/dist/build/published_contracts/SimpleFeeOwner.json +2 -2
  146. package/dist/build/published_contracts/TransferProxy.json +1 -1
  147. package/dist/build/wrappers/TestUniswapAmmRebalancerProxy.d.ts +66 -0
  148. package/dist/src/modules/MultiCall.js +2 -1
  149. package/dist/src/modules/MultiCall.js.map +1 -1
  150. package/dist/src/modules/operate/AccountOperation.d.ts +8 -2
  151. package/dist/src/modules/operate/AccountOperation.js +8 -10
  152. package/dist/src/modules/operate/AccountOperation.js.map +1 -1
  153. package/dist/src/types.d.ts +0 -1
  154. package/dist/src/types.js.map +1 -1
  155. package/package.json +4 -3
@@ -1156,15 +1156,15 @@
1156
1156
  "type": "function"
1157
1157
  }
1158
1158
  ],
1159
- "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dolomiteMargin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dolomiteAmmFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expiry\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"accountIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inputToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"outputToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"withdrawalToken\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"inputBalanceUpdate\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"outputBalanceUpdate\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"marginWithdrawalUpdate\",\"type\":\"tuple\"}],\"name\":\"MarginPositionClose\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"accountIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inputToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"outputToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"depositToken\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"inputBalanceUpdate\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"outputBalanceUpdate\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"marginDepositUpdate\",\"type\":\"tuple\"}],\"name\":\"MarginPositionOpen\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_AMM_FACTORY\",\"outputs\":[{\"internalType\":\"contract IDolomiteAmmFactory\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_MARGIN\",\"outputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EXPIRY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromAccountNumber\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountADesired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBDesired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountAMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountAWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getPairInitCodeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinWei\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"}],\"name\":\"getParamsForSwapExactTokensForTokens\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"accountId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amount\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"primaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"otherAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"otherAccountId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaxWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutWei\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"}],\"name\":\"getParamsForSwapTokensForExactTokens\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"accountId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amount\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"primaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"otherAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"otherAccountId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"toAccountNumber\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountAMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountAWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBWei\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"toAccountNumber\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountAMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"approveMax\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct DolomiteAmmRouterProxy.PermitSignature\",\"name\":\"permit\",\"type\":\"tuple\"}],\"name\":\"removeLiquidityWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountAWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBWei\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinWei\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactTokensForTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amountIn\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amountOut\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"depositToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isPositiveMarginDeposit\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"marginDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiryTimeDelta\",\"type\":\"uint256\"}],\"internalType\":\"struct DolomiteAmmRouterProxy.ModifyPositionParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactTokensForTokensAndModifyPosition\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaxWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutWei\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapTokensForExactTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amountIn\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amountOut\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"depositToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isPositiveMarginDeposit\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"marginDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiryTimeDelta\",\"type\":\"uint256\"}],\"internalType\":\"struct DolomiteAmmRouterProxy.ModifyPositionParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapTokensForExactTokensAndModifyPosition\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/DolomiteAmmRouterProxy.sol\":\"DolomiteAmmRouterProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IDolomiteAmmFactory.sol\":{\"keccak256\":\"0xf5fd97ee3591ff30a3576d6d58847b5f6e156639578bed3827313a2c70823b78\",\"urls\":[\"bzz-raw://f9da41065f9b3b559bfc588cea01480f1c64ee7b1f1a86e54868f464fdfe2160\",\"dweb:/ipfs/QmWeBi2zSdPCENVV4fvCQ49HgnwLGxd3WS9sGMC4vR5NrB\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IDolomiteAmmPair.sol\":{\"keccak256\":\"0xe2272c233467a78460e681419f0acdc765de0ad5357d3b768665f289941ccd47\",\"urls\":[\"bzz-raw://114f1c797f4e7e803b0764ae7107a2279c3da806450287c9e5600211faeeab57\",\"dweb:/ipfs/QmUoLx1rGgCdX5ScsUkp4NsSZLyVWdKsVKeXuPCtcrAvLn\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IExpiry.sol\":{\"keccak256\":\"0xd7613bcef3a7384660aa4aeae9905faafbb0425b423080e5dcc0a6df4ee26cf6\",\"urls\":[\"bzz-raw://98b4cd8852fec0d6fe8bb92575974ca36d80d1a75f342c45292f2bfb62de1b67\",\"dweb:/ipfs/QmPmWrw5NhxGBqC3HByiAeV6BtTJtPXLnhvTSLEMKedj2z\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/DolomiteAmmLibrary.sol\":{\"keccak256\":\"0xcbda45657476fb516cba12698bac7d09ec4eaca999d6dc9480f13a5ae1bd0e29\",\"urls\":[\"bzz-raw://7e154ac11a849cadc74fb71d074c74d42420bd5279f36f6b948311d7a8e9be34\",\"dweb:/ipfs/QmRBRHQYXSpGHpS39cffRccYsn5gBBCd5S6yNrrYFnHHfc\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/TypedSignature.sol\":{\"keccak256\":\"0x4b4eb5fd2869d6c410948f78163773442c11bc82e393307e41359bbdb21577bf\",\"urls\":[\"bzz-raw://9c9c3abae44173086bc08f5479fbc67151d5905f60e1032ec6f9e40f841f3365\",\"dweb:/ipfs/QmbsQRX3gmcpimjFEW5ULJVavHQtViyg7NSQ2Q8Qcu6F6V\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/DolomiteAmmRouterProxy.sol\":{\"keccak256\":\"0xeabeadba370b921a5b053fc9475a31de27bdf7fbf4ef24592f082e730e87b9b8\",\"urls\":[\"bzz-raw://479286ba36c067f21750c34e339986b88ac08eaae7e144671fa6361e55baa4a3\",\"dweb:/ipfs/QmUo4q6ytVtxUkgPTxAZh1DYLx1t6GW2Q8H1G2MXJSmq4U\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/external/uniswap-v2/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0x022ea15b611c155e236053a484d21223ae6f74da3828379cd8a34a16649b5945\",\"urls\":[\"bzz-raw://41979b601b10b34937f2f5939ab5c5240759c3434e405bf84a69ef94a1612454\",\"dweb:/ipfs/QmbK4y63kjtpbxFgResFo9K2bEhNxcxoTqddpJXeHxwqcT\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x3e95a2b461f3f0cc4000d71d5c7bb6b1222788cfac1c66faad029ccaa1859d1e\",\"urls\":[\"bzz-raw://cad9773b4a1b196ea3d71129b5bd5679df7db601555a6b29ac111d38c36b00f0\",\"dweb:/ipfs/QmThFva71eLSVmBHHxn34zP7BUCJZDD6wMJHxEkKNWkkvv\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x0ab9a3fabc89984dff748af63d4319ee134051de2d7fc560e34ebaac86198396\",\"urls\":[\"bzz-raw://ab67f499a8ef83dc7e7cf7176a0f66eced40fa228eda8dd2d47e066ab985cf42\",\"dweb:/ipfs/QmXRHbsEYxr2Qsfsj5psXGV5LaPZHuzLiEXzSQJ77WSE27\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x44ec62b766a88a2f65267991e76cab88711e733b826dc9e578cb6ad6b38b2445\",\"urls\":[\"bzz-raw://731a8d44e57c9dcd7fbdefc37a6b5889c0d06defb3bd66b921b2a7db0edf0103\",\"dweb:/ipfs/QmcVbXc9oi5DMxjPtsBF76oJzD6zVjm7RuXgJfP3Goqrrb\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x425bf5764368faca16cc30a64b79d9bbe01fd8150444b58a464971c32450bd85\",\"urls\":[\"bzz-raw://064baf3155da634c5c80cea70bba0dda7a33af934b34f75f596961b4ab9aeafe\",\"dweb:/ipfs/QmTUHXoi9L6CkERyfhFs1jhxU66u2sbc6XRR5cH4TeHEqL\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0x1e6ff383f285e311d07374edda353e14ac4f29201726b0062a2f046c1a2b482c\",\"urls\":[\"bzz-raw://fd11c5db01039bf2c95f3561b08d271b80b7b1cb9fd7f75da887f7609807c5a7\",\"dweb:/ipfs/QmcY6CugdEHaYUa8ZKSnUDhvtVuoLfpDscZcmC91koAn1t\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0x66990bbe3c58d0edf57d3f67ab5280e2a53958ce44f75c335c4c50542321bccb\",\"urls\":[\"bzz-raw://724cfdb5c99121aab5262679e46766a2883e344749870d7dbfa92d1617f68bf2\",\"dweb:/ipfs/QmYjAsS45f6UG2u3zuTks2HVfMYtyFCVMgUvD7Gt7XtU3R\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x9710b0ab43cc2d964d8722a0aabbedbf7e9d4756dcc0b4ab7c46c1ee68653042\",\"urls\":[\"bzz-raw://2405593d37f0f224bfca556f01634a9755bb0ed626f74dd15293106a8b4dd7d3\",\"dweb:/ipfs/QmTZ16S336jsoDnK5p3vAZRzimBkmdEJibncHVBJxBt469\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Events.sol\":{\"keccak256\":\"0x0c71c063b3a1b4e653d94c05f6fc49de43ccc28838e406faccb1c93f424995a8\",\"urls\":[\"bzz-raw://73268db2286565ecc242da93930780e8e4794015c8c0e58d336981ffdc6cfd3a\",\"dweb:/ipfs/QmRYzhuRtKXnTscERvYS9XzjqdQFBoJZoHwRAekHo6w6Zy\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0xbb17eb41ff805df51e8d637ef2a368782fdc5f085889c2d847713484f8f1967b\",\"urls\":[\"bzz-raw://538001d60d625695754159a8f716877f72217899fdab296d4725dc44bdbe1895\",\"dweb:/ipfs/QmbRm1WpPpaynnwTdmwB5M7H1cZQEtRAuExqtJ3g9SUiVp\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Math.sol\":{\"keccak256\":\"0x0c0c913b6ccdb69063f9ec84879fcad20a1ee6f44402c9f5ec2b4f5b9f2fa16b\",\"urls\":[\"bzz-raw://89b32eefb57e5e63ad8c6e079ae7bf2d2c8622776cd45af0cf304e1cafd6e078\",\"dweb:/ipfs/Qmcj7yRnYuTgKC3ZqZqe8rynHGYVDS3UrFExcVGcqeaDHY\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0xe641662503ea29ca959e84674188c3e9deaaf64c5623fb9560a4301c521ca1d3\",\"urls\":[\"bzz-raw://b10a04c7d014b99eb792c8c774e203c846d070b30cf0b715325fc07838ed6a6d\",\"dweb:/ipfs/QmUqZWnbchfEY9jM647yQamHe4GzspfUeRQF9k2nn1Hixd\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0xca1826cf783a2d48a5a45309ca92cbaee46d2caec7b5a7c154b2dfda06af8975\",\"urls\":[\"bzz-raw://e13679dfa92725d990e3b0656f4eca4b0d09616e5c2729a3bc0276923d6887e1\",\"dweb:/ipfs/QmVc8teCJ6rKutZLyvk568hCw1vYj2nC6DwyxRgswHu71k\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x233d6ebf965711bf980f4bb2e672fb1a11b4b879fd41c884b3c2b704417d0d0c\",\"urls\":[\"bzz-raw://6478ff81706d531f9438b96274a7b904abbbd9c631540c68c6a89c3accf27abf\",\"dweb:/ipfs/QmWe9vkz3qwVjrcbmcTL8wgkjLPsrEqxcqPJL9ujM8PPbp\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0xd7bcae9e3c570544fc946a00cc7695106a64c20bc130d0183612c0410a531d19\",\"urls\":[\"bzz-raw://0ff5ffd6abb9ed223a64128c131afd962bec07fb9867cb62593906b339c76920\",\"dweb:/ipfs/QmbTrJL4bekvBqqaw6wXnBhYzS9uAqULSWF2VzW4cdfsM5\"]},\"/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xab134538648a2e223a7fe61db03c14f687657a5d37147f93c9088f11735aa311\",\"urls\":[\"bzz-raw://79dc7d2b30576d2349b99267642ac8d5fb7939c920b8d8045379d3614238bdc3\",\"dweb:/ipfs/QmaQJYg1nirHoWSC6G38Cjsk9pZBzEaNrGXKqTsvAzbyES\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xb63221b23818d622bfd83d18e0968307e4fcb7a35536bdceded76e1cf8349acd\",\"urls\":[\"bzz-raw://44e1e8c22362c4708a8c3362735f1465f5b05e2f7315e16c7010d694ce019d73\",\"dweb:/ipfs/QmWj9g8X1hxkXRre2kwkEjLBetjuzmSbWHD81bsSojnBkS\"]}},\"version\":1}",
1160
- "bytecode": "0x60806040523480156200001157600080fd5b5060405162004f6638038062004f6683398101604081905262000034916200009e565b600080546001600160a01b0394851661010002610100600160a81b031960ff199092166001908117929092161790915580549284166001600160a01b0319938416179055600280549190931691161790556200011e565b8051620000988162000104565b92915050565b600080600060608486031215620000b457600080fd5b6000620000c286866200008b565b9350506020620000d5868287016200008b565b9250506040620000e8868287016200008b565b9150509250925092565b60006001600160a01b03821662000098565b6200010f81620000f2565b81146200011b57600080fd5b50565b614e38806200012e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80635105ca4a1161008c57806383c88e311161006657806383c88e31146101c0578063ad22c2ae146101d3578063cb8f8f04146101e6578063fd15c891146101f9576100df565b80635105ca4a1461018357806366d555a9146101a55780636993e676146101ad576100df565b806324e43f3d116100bd57806324e43f3d146101445780632f480262146101595780634530a2d71461016e576100df565b8063032027b5146100e457806315c14a4a1461010e5780631a6e58f514610123575b600080fd5b6100f76100f2366004613f2f565b61020c565b604051610105929190614ba2565b60405180910390f35b610116610488565b6040516101059190614b28565b610136610131366004614157565b61049c565b604051610105929190614af5565b61014c61061e565b6040516101059190614b1a565b61016c610167366004614223565b61062d565b005b610176610713565b60405161010591906149d0565b6101966101913660046140a3565b610722565b60405161010593929190614bb0565b610116610b0a565b61016c6101bb36600461434b565b610b19565b6100f76101ce366004613fdf565b610c7d565b61016c6101e136600461434b565b610d4e565b61016c6101f4366004614223565b610e6c565b610136610207366004614157565b610f10565b60008082610260428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b60015460009061027a906001600160a01b03168b8b6111b5565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081529091506001600160a01b038216906323b872dd906102c690339085908d906004016149de565b602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061031891908101906141e7565b50600080826001600160a01b0316639dc29fac8f8f6040518363ffffffff1660e01b815260040161034a929190614ada565b6040805180830381600087803b15801561036357600080fd5b505af1158015610377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061039b919081019061431b565b9150915060006103ab8d8d6111ed565b509050806001600160a01b03168d6001600160a01b0316146103ce5781836103d1565b82825b90975095506104268a8810157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204120616d6f756e7400000000000000000000008a8e611083565b610476898710157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204220616d6f756e740000000000000000000000898d611083565b50505050509850989650505050505050565b60005461010090046001600160a01b031681565b60608061060f6040518060e001604052806040518061010001604052808b81526020016104c88b6112d5565b81526020016104d68a6112d5565b8152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815260200160006001600160a01b031681526020016000151581526020016000815260200160008152508152602001600060019054906101000a90046001600160a01b03166001600160a01b03168152602001600160009054906101000a90046001600160a01b03166001600160a01b031681526020018a6001600160a01b0316815260200160006040519080825280602002602001820160405280156105ce578160200160208202803883390190505b50815260200160006040519080825280602002602001820160405280156105ff578160200160208202803883390190505b5081526020016000815250611309565b91509150965096945050505050565b6000610628611434565b905090565b8061067e428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6040805160e081018252848152600080546001600160a01b03610100909104811660208085019190915260015490911683850152336060840152835182815290810190935261070e9260808301915b50815260200160006040519080825280602002602001820160405280156106fe578160200160208202803883390190505b5081526020016000815250611458565b505050565b6002546001600160a01b031681565b600080600083610778428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6107868b8b8b8b8b8b6114d6565b60015491955093506000906107a5906001600160a01b03168d8d6111b5565b60408051600280825260608281019093529293509091816020015b6107c8613a93565b8152602001906001900390816107c05790505090506040518060400160405280336001600160a01b031681526020018f8152508160008151811061080857fe5b60200260200101819052506040518060400160405280836001600160a01b0316815260200160008152508160018151811061083f57fe5b602002602001018190525060008060019054906101000a90046001600160a01b03166001600160a01b0316638fae3be18f6040518263ffffffff1660e01b815260040161088c91906149d0565b60206040518083038186803b1580156108a457600080fd5b505afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108dc91908101906142fd565b905060008060019054906101000a90046001600160a01b03166001600160a01b0316638fae3be18f6040518263ffffffff1660e01b815260040161092091906149d0565b60206040518083038186803b15801561093857600080fd5b505afa15801561094c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061097091908101906142fd565b60408051600280825260608281019093529293509091816020015b610993613aaa565b81526020019060019003908161098b5790505090506109b660006001858c611744565b816000815181106109c357fe5b60200260200101819052506109dc60006001848b611744565b816001815181106109e957fe5b60209081029190910101526000546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063a67a6a4590610a439087908590600401614af5565b600060405180830381600087803b158015610a5d57600080fd5b505af1158015610a71573d6000803e3d6000fd5b5050505050505050806001600160a01b0316636a6278428f6040518263ffffffff1660e01b8152600401610aa591906149d0565b602060405180830381600087803b158015610abf57600080fd5b505af1158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610af791908101906142fd565b9250505099509950999650505050505050565b6001546001600160a01b031681565b80610b6a428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b610c746040518060e001604052806040518061010001604052808b8152602001610b938b6112d5565b8152602001610ba18a6112d5565b815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050506020808301829052604080840183905260608085018490526080948501849052948652825461010090046001600160a01b03908116878401526001541686820152339486019490945283518281529081019093529201915b5081526020016000604051908082528060200260200182016040528015610c64578160200160208202803883390190505b5081526020016000815250611815565b50505050505050565b60015460009081908190610c9b906001600160a01b03168b8b6111b5565b905060008460000151610cae5788610cb2565b6000195b9050816001600160a01b031663d505accf3330848a8a602001518b604001518c606001516040518863ffffffff1660e01b8152600401610cf89796959493929190614a06565b600060405180830381600087803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b50505050610d3a8d8d8d8d8d8d8d8d61020c565b909e909d509b505050505050505050505050565b80610d9f428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b610c746040518060e001604052806040518061010001604052808b8152602001610dc88b6112d5565b8152602001610dd68a6112d5565b815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050506020808301829052604080840183905260608085018490526080948501849052948652825461010090046001600160a01b03908116878401526001541686820152339486019490945283518281529081019093529201916106cd565b80610ebd428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6040805160e081018252848152600080546001600160a01b03610100909104811660208085019190915260015490911683850152336060840152835182815290810190935261070e926080830191610c33565b60608061060f6040518060e001604052806040518061010001604052808b8152602001610f3c8b6112d5565b8152602001610f4a8a6112d5565b8152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815260200160006001600160a01b031681526020016000151581526020016000815260200160008152508152602001600060019054906101000a90046001600160a01b03166001600160a01b03168152602001600160009054906101000a90046001600160a01b03166001600160a01b031681526020018a6001600160a01b031681526020016000604051908082528060200260200182016040528015611042578160200160208202803883390190505b5081526020016000604051908082528060200260200182016040528015611073578160200160208202803883390190505b5081526020016000815250611821565b846111ae5761109184611910565b7f3a200000000000000000000000000000000000000000000000000000000000006110bb85611910565b7f203c0000000000000000000000000000000000000000000000000000000000006110e5866119c6565b7f2c2000000000000000000000000000000000000000000000000000000000000061110f876119c6565b60405161114797969594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001614912565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526111a591600401614b56565b60405180910390fd5b5050505050565b60006111e38484847fe6a28b91a2f6ed25ca52fc081821cf7e099221d7cad41fa6c6239bad4ce3803f611ab7565b90505b9392505050565b600080611250836001600160a01b0316856001600160a01b031614157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f6964656e746963616c2061646472657373657300000000000000000000000000611b48565b826001600160a01b0316846001600160a01b031610611270578284611273565b83835b90925090506112ce6001600160a01b03831615157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f7a65726f20616464726573730000000000000000000000000000000000000000611b48565b9250929050565b6112dd613afc565b60408051608081019091526001815260208101600081526020016000815260200183905290505b919050565b60608061131583611b92565b6080840181905283516020015181516000926113429291849061133457fe5b602002602001015186611c9d565b9050600061137885600001516040015186608001516001886080015151038151811061136a57fe5b602002602001015187611c9d565b9050611391856040015183876000015160600151611dfe565b60a08601819052805161142091839160001981019081106113ae57fe5b602002602001015110157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74206f757470757420616d6f756e740000000000008860a0015160018a60a0015151038151811061141257fe5b602002602001015185611083565b61142985611f2c565b935093505050915091565b7fe6a28b91a2f6ed25ca52fc081821cf7e099221d7cad41fa6c6239bad4ce3803f90565b60608061146483611821565b9150915082602001516001600160a01b031663a67a6a4583836040518363ffffffff1660e01b815260040161149a929190614af5565b600060405180830381600087803b1580156114b457600080fd5b505af11580156114c8573d6000803e3d6000fd5b5050505061070e838361239a565b6001546040517fe6a4390500000000000000000000000000000000000000000000000000000000815260009182916001600160a01b03909116908290829063e6a439059061152a908d908d90600401614a6e565b60206040518083038186803b15801561154257600080fd5b505afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061157a9190810190613f11565b6001600160a01b03161415611624576040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063c9c65396906115d0908c908c90600401614a6e565b602060405180830381600087803b1580156115ea57600080fd5b505af11580156115fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116229190810190613f11565b505b600080611632838c8c612875565b91509150816000148015611644575080155b1561165457889450879350611736565b60006116618a84846128b0565b90508881116116c5576116ba878210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204220616d6f756e740000000000000000000000848b611083565b899550935083611734565b60006116d28a84866128b0565b90508a8111156116de57fe5b61172e898210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204120616d6f756e740000000000000000000000848d611083565b95508894505b505b505050965096945050505050565b61174c613aaa565b611754613afc565b60001983141561178b57604080516080810190915260018152602081016000815260200160018152602001600081525090506117b2565b60408051608081019091526000808252602082019081526020016000815260200184905290505b6040805161010081019091528060028152602001878152602001828152602001858152602001600019815260200160006001600160a01b03168152602001868152602001604051806020016040528060008152508152509150505b949350505050565b60608061146483611309565b60608061182d83611b92565b60808401819052835160200151815160009261184c9291849061133457fe5b9050600061187485600001516040015186608001516001886080015151038151811061136a57fe5b905061188d85604001518287600001516060015161297b565b60a0860181905280516114209184916000906118a557fe5b602002602001015111157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f65786365737369766520696e70757420616d6f756e74000000000000000000008860a0015160008151811061190257fe5b602002602001015186611083565b6060808260405160200161192491906148d5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156119af5781516000199091019082908290811061197257fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156119aa5760010181529050611304565b611957565b505060408051600081526020810190915292915050565b606081611a07575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152611304565b8160005b8115611a1f57600101600a82049150611a0b565b6060816040519080825280601f01601f191660200182016040528015611a4c576020820181803883390190505b508593509050815b8015611aae5760001901600a840660300160f81b828281518110611a7457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611a54565b50949350505050565b6000806000611ac686866111ed565b91509150868282604051602001611ade9291906148af565b6040516020818303038152906040528051906020012085604051602001611b079392919061498e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120979650505050505050565b8261070e57611b5682611910565b7f3a20000000000000000000000000000000000000000000000000000000000000611b8083611910565b604051602001611147939291906148ea565b60608082600001516060015151604051908082528060200260200182016040528015611bc8578160200160208202803883390190505b50905060005b83516060015151811015611c965783602001516001600160a01b0316638fae3be18560000151606001518381518110611c0357fe5b60200260200101516040518263ffffffff1660e01b8152600401611c2791906149d0565b60206040518083038186803b158015611c3f57600080fd5b505afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c7791908101906142fd565b828281518110611c8357fe5b6020908102919091010152600101611bce565b5092915050565b60008084602001516001811115611cb057fe5b1415611cc1575060608301516111e6565b6060840151611d25906fffffffffffffffffffffffffffffffff8116147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c696420617373657420616d6f756e74000000000000000000000000611b48565b60408051808201825285511515815260608601516fffffffffffffffffffffffffffffffff1660208083019190915284015191517f56ea84b2000000000000000000000000000000000000000000000000000000008152611df3926001600160a01b0316906356ea84b290611d9e908890600401614b1a565b60606040518083038186803b158015611db657600080fd5b505afa158015611dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611dee9190810190614205565b6129a9565b6020015190506111e6565b6060611e506002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c696420706174680000000000000000000000000000000000000000611b48565b8151604051908082528060200260200182016040528015611e7b578160200160208202803883390190505b5090508281600081518110611e8c57fe5b60200260200101818152505060005b6001835103811015611f2457600080611ede87868581518110611eba57fe5b6020026020010151878660010181518110611ed157fe5b6020026020010151612875565b91509150611f00848481518110611ef157fe5b60200260200101518383612a60565b848460010181518110611f0f57fe5b60209081029190910101525050600101611e9b565b509392505050565b606080611fb16000845160200151604001516001811115611f4957fe5b148015611f6a57506000845160409081015101516001811115611f6857fe5b145b7f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206173736574207265666572656e6365000000000000000000611b48565b6060611fc98460400151856000015160600151612b6e565b90506060611fd78583612b9b565b90506060611fe6868385612d13565b8651608001519091506001600160a01b03161580159061200c5750855160c00151600019145b1561238257855160e0015160009015612026576001612029565b60005b60ff169050600082826001855103038151811061204257fe5b6020026020010151606001519050876000015160a00151156121045787602001516001600160a01b031663c190c2ec8560018751038151811061208157fe5b6020026020010151836040518363ffffffff1660e01b81526004016120a7929190614b87565b604080518083038186803b1580156120be57600080fd5b505afa1580156120d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120f69190810190614292565b6020015160c089015261237b565b80886080015160008151811061211657fe5b602002602001015114156121ef576121e58860a0015160008151811061213857fe5b602002602001015189602001516001600160a01b031663c190c2ec8760008151811061216057fe5b6020026020010151856040518363ffffffff1660e01b8152600401612186929190614b87565b604080518083038186803b15801561219d57600080fd5b505afa1580156121b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121d59190810190614292565b602001519063ffffffff6130bb16565b60c089015261237b565b60808801518051829190600019810190811061220757fe5b602002602001015114156122dc5760a088015180516121e59190600019810190811061222f57fe5b602002602001015189602001516001600160a01b031663c190c2ec8760008151811061225757fe5b6020026020010151856040518363ffffffff1660e01b815260040161227d929190614b87565b604080518083038186803b15801561229457600080fd5b505afa1580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122cc9190810190614292565b602001519063ffffffff6130fd16565b87602001516001600160a01b031663c190c2ec856000815181106122fc57fe5b6020026020010151836040518363ffffffff1660e01b8152600401612322929190614b87565b604080518083038186803b15801561233957600080fd5b505afa15801561234d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123719190810190614292565b6020015160c08901525b505061238f565b855160c090810151908701525b909350915050915091565b815160a0015180156123ad575081515115155b15612659576123ba613a93565b82602001516001600160a01b03166347d1b53c836000815181106123da57fe5b60200260200101518560800151600187608001515103815181106123fa57fe5b60200260200101516040518363ffffffff1660e01b815260040161241f929190614b87565b604080518083038186803b15801561243657600080fd5b505afa15801561244a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061246e9190810190614274565b835180516060909101518051929350909133917fb81518bcaf15a56ac0e4b0ff579f0bd8e163ac444d526743908dc22733789f06916000906124ac57fe5b6020908102919091010151865160600151805160001981019081106124cd57fe5b6020026020010151876000015160800151604051806040016040528060405180604001604052806000151581526020018c60a0015160008151811061250e57fe5b602002602001015181525081526020018a602001516001600160a01b03166347d1b53c8b60008151811061253e57fe5b60200260200101518d6080015160008151811061255757fe5b60200260200101516040518363ffffffff1660e01b815260040161257c929190614b87565b604080518083038186803b15801561259357600080fd5b505afa1580156125a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125cb9190810190614274565b905260408051608081018252600191810191825260a08c01518051919283929091606084019160001981019081106125ff57fe5b6020908102919091018101519091529082529081018a905260408051608081018252600181830190815260c08f0151606083015281529182018b90525161264b96959493929190614a89565b60405180910390a350612871565b8151511561287157612669613a93565b82602001516001600160a01b03166347d1b53c8360008151811061268957fe5b602002602001015185608001516000815181106126a257fe5b60200260200101516040518363ffffffff1660e01b81526004016126c7929190614b87565b604080518083038186803b1580156126de57600080fd5b505afa1580156126f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127169190810190614274565b835180516060909101518051929350909133917fecf4fe97b02d1620f6c04edbd484eff130a2247b31ac1ef061f54c8177b657b99160009061275457fe5b60209081029190910101518651606001518051600019810190811061277557fe5b6020026020010151876000015160800151604051806040016040528060405180604001604052806000151581526020018c60a001516000815181106127b657fe5b6020026020010151815250815260200188815250604051806040016040528060405180604001604052806001151581526020018d60a0015160018f60a0015151038151811061280157fe5b6020026020010151815250815260200161282f8c8c60008151811061282257fe5b602002602001015161313c565b905260408051608081018252600081830190815260c08e015160608301528152602081018b9052905161286796959493929190614a89565b60405180910390a3505b5050565b6000806128a4857fe6a28b91a2f6ed25ca52fc081821cf7e099221d7cad41fa6c6239bad4ce3803f86866131e4565b91509150935093915050565b6000612900600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e7420616d6f756e7400000000000000000000000000611b48565b61295a6000841180156129135750600083115b7f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b8261296b858463ffffffff6132cd16565b8161297257fe5b04949350505050565b60606111e3847fe6a28b91a2f6ed25ca52fc081821cf7e099221d7cad41fa6c6239bad4ce3803f8585613321565b6129b1613a93565b602083015183516fffffffffffffffffffffffffffffffff9091169015612a1d57604080518082019091526001815260208481015190820190612a129084906bffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61344916565b815250915050612a5a565b604080518082019091526000815283516020820190612a129084906bffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61344916565b92915050565b6000612ab0600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e7420696e70757420616d6f756e7400000000000000611b48565b612b096000841180156129135750600083117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b6000612b1d856103e563ffffffff6132cd16565b90506000612b31828563ffffffff6132cd16565b90506000612b5783612b4b886103e863ffffffff6132cd16565b9063ffffffff6130fd16565b9050808281612b6257fe5b04979650505050505050565b60606111e6837fe6a28b91a2f6ed25ca52fc081821cf7e099221d7cad41fa6c6239bad4ce3803f846134e6565b81516080015160609081906001600160a01b0316612bf9578251600101604051908082528060200260200182016040528015612bf157816020015b612bde613a93565b815260200190600190039081612bd65790505b509050612c79565b8251600201604051908082528060200260200182016040528015612c3757816020015b612c24613a93565b815260200190600190039081612c1c5790505b509050604051806040016040528085606001516001600160a01b03168152602001600081525081600183510381518110612c6d57fe5b60200260200101819052505b6040805180820190915260608501516001600160a01b03168152845151602082015281518290600090612ca857fe5b602090810291909101015260005b8351811015611f24576040518060400160405280858381518110612cd657fe5b60200260200101516001600160a01b031681526020016000815250828260010181518110612d0057fe5b6020908102919091010152600101612cb6565b82516080015160609081906001600160a01b0316612d6e578251604051908082528060200260200182016040528015612d6657816020015b612d53613aaa565b815260200190600190039081612d4b5790505b509050612f7c565b845160c00151612dc19015157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206d617267696e206465706f73697400000000000000000000611b48565b845160e0015160009015612dd6576001612dd9565b60005b60ff16905080845160010101604051908082528060200260200182016040528015612e1e57816020015b612e0b613aaa565b815260200190600190039081612e035790505b50865160a0015190925015612efa81612e3b576001875103612e3e565b60005b82612e4a576000612e50565b60018851035b60208a01518a51608001516040517f8fae3be10000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691638fae3be191612e9f916004016149d0565b60206040518083038186803b158015612eb757600080fd5b505afa158015612ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612eef91908101906142fd565b8a5160c00151611744565b838360018651030381518110612f0c57fe5b60200260200101819052508160011415612f7957612f5d876000015187600081518110612f3557fe5b602002602001015160008a60800151600081518110612f5057fe5b60200260200101516135db565b83600185510381518110612f6d57fe5b60200260200101819052505b50505b60005b8351811015611aae57613014848281518110612f9757fe5b60200260200101516001600160a01b0316868360010181518110612fb757fe5b6020026020010151600001516001600160a01b0316147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206f7468657220616464726573730000000000000000000000611b48565b61309c6000826001018860800151848151811061302d57fe5b60200260200101518960800151856001018151811061304857fe5b602002602001015188868151811061305c57fe5b60200260200101518b60a00151878151811061307457fe5b60200260200101518c60a00151886001018151811061308f57fe5b6020026020010151613784565b8282815181106130a857fe5b6020908102919091010152600101612f7f565b60006111e683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613822565b6000828201838110156111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590614b67565b613144613a93565b82602001516001600160a01b03166347d1b53c8385608001516001876080015151038151811061317057fe5b60200260200101516040518363ffffffff1660e01b8152600401613195929190614b87565b604080518083038186803b1580156131ac57600080fd5b505afa1580156131c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111e69190810190614274565b60008060006131f385856111ed565b5090506000806132058988888b611ab7565b6001600160a01b031663b432a82c6040518163ffffffff1660e01b815260040160606040518083038186803b15801561323d57600080fd5b505afa158015613251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061327591908101906142b0565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316876001600160a01b0316146132ba5780826132bd565b81815b909a909950975050505050505050565b6000826132dc57506000612a5a565b828202828482816132e957fe5b04146111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590614b77565b60606133736002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c696420706174680000000000000000000000000000000000000000611b48565b815160405190808252806020026020018201604052801561339e578160200160208202803883390190505b50905082816001835103815181106133b257fe5b60209081029190910101528151600019015b8015611aae5760008061340288888760018703815181106133e157fe5b60200260200101518887815181106133f557fe5b60200260200101516131e4565b9150915061342484848151811061341557fe5b60200260200101518383613868565b84600185038151811061343357fe5b60209081029190910101525050600019016133c4565b6000831580613456575082155b1561346d57613466600083613970565b90506111e6565b600061347f858563ffffffff6132cd16565b90506134dd6134aa6001612b4b600261349e888463ffffffff6130bb16565b9063ffffffff61397016565b6134ba838663ffffffff6139b216565b10156134c75760006134ca565b60015b60ff16612b4b838663ffffffff61397016565b95945050505050565b60606135386002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c69642070617468206c656e67746800000000000000000000000000611b48565b60606001835103604051908082528060200260200182016040528015613568578160200160208202803883390190505b50905060005b6001845103811015611aae576135af8685838151811061358a57fe5b60200260200101518684600101815181106135a157fe5b602002602001015188611ab7565b8282815181106135bb57fe5b6001600160a01b039092166020928302919091019091015260010161356e565b6135e3613aaa565b60e085015161363b9063ffffffff8116147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206578706972792074696d6500000000000000000000000000611b48565b604080516001808252818301909252606091816020015b61365a613b25565b81526020019060019003908161365257905050905060405180608001604052808681526020018481526020018760e0015163ffffffff16815260200160011515815250816000815181106136aa57fe5b602090810291909101015260408051610100810190915280600881526020808201879052604080516080810182526001815292019190810160008152602001600081526020016000815250815260200160001981526020016000198152602001600260009054906101000a90046001600160a01b03166001600160a01b03168152602001600019815260200160008360405160200161374a929190614b36565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290529695505050505050565b61378c613aaa565b604080516101008101909152806005815260208082018b905260408051608081018252600181529201919081016000815260200160008152602001868152508152602001878152602001868152602001856001600160a01b03168152602001888152602001836040516020016138029190614b1a565b60405160208183030381529060405281525090505b979650505050505050565b60008184841115613860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b505050900390565b60006138b8600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206f757470757420616d6f756e74000000000000611b48565b6139116000841180156129135750600083117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b60006139356103e8613929868863ffffffff6132cd16565b9063ffffffff6132cd16565b9050600061394f6103e5613929868963ffffffff6130bb16565b90506139666001612b4b848463ffffffff61397016565b9695505050505050565b60006111e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139f4565b60006111e683836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250613a45565b60008183613a2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b506000838581613a3b57fe5b0495945050505050565b60008183613a80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b50828481613a8a57fe5b06949350505050565b604080518082019091526000808252602082015290565b604080516101008101825260008082526020820152908101613aca613afc565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b6040518060800160405280613b38613a93565b81526000602082018190526040820181905260609091015290565b8035612a5a81614d95565b8051612a5a81614d95565b60008083601f840112613b7b57600080fd5b50813567ffffffffffffffff811115613b9357600080fd5b6020830191508360208202830111156112ce57600080fd5b600082601f830112613bbc57600080fd5b8135613bcf613bca82614bf2565b614bcb565b91508181835260208401935060208101905083856020840282011115613bf457600080fd5b60005b83811015613c205781613c0a8882613b53565b8452506020928301929190910190600101613bf7565b5050505092915050565b8035612a5a81614da9565b8051612a5a81614da9565b8035612a5a81614db2565b8035612a5a81614dbb565b600060808284031215613c6857600080fd5b613c726080614bcb565b90506000613c808484613c2a565b8252506020613c9184848301613c4b565b6020830152506040613ca584828501613c4b565b6040830152506060613cb984828501613c40565b60608301525092915050565b600060608284031215613cd757600080fd5b613ce16060614bcb565b90506000613cef8484613f06565b8252506020613d0084848301613f06565b6020830152506040613d1484828501613ef0565b60408301525092915050565b60006101c08284031215613d3357600080fd5b613d3e610100614bcb565b90506000613d4c8484613c40565b8252506020613d5d84848301613c56565b60208301525060a0613d7184828501613c56565b60408301525061012082013567ffffffffffffffff811115613d9257600080fd5b613d9e84828501613bab565b606083015250610140613db384828501613b53565b608083015250610160613dc884828501613c2a565b60a083015250610180613ddd84828501613c40565b60c0830152506101a0613df284828501613c40565b60e08301525092915050565b600060408284031215613e1057600080fd5b613e1a6040614bcb565b90506000613e288484613c35565b8252506020613e3984848301613eda565b60208301525092915050565b600060808284031215613e5757600080fd5b613e616080614bcb565b90506000613e6f8484613c2a565b8252506020613e8084848301613efb565b6020830152506040613ca584828501613c40565b600060408284031215613ea657600080fd5b613eb06040614bcb565b90506000613ebe8484613c35565b8252506020613e3984848301613ee5565b8051612a5a81614dc8565b8051612a5a81614dd1565b8051612a5a81614db2565b8051612a5a81614dda565b8035612a5a81614de3565b8051612a5a81614dec565b600060208284031215613f2357600080fd5b600061180d8484613b5e565b600080600080600080600080610100898b031215613f4c57600080fd5b6000613f588b8b613b53565b9850506020613f698b828c01613c40565b9750506040613f7a8b828c01613b53565b9650506060613f8b8b828c01613b53565b9550506080613f9c8b828c01613c40565b94505060a0613fad8b828c01613c40565b93505060c0613fbe8b828c01613c40565b92505060e0613fcf8b828c01613c40565b9150509295985092959890939650565b60008060008060008060008060006101808a8c031215613ffe57600080fd5b600061400a8c8c613b53565b995050602061401b8c828d01613c40565b985050604061402c8c828d01613b53565b975050606061403d8c828d01613b53565b965050608061404e8c828d01613c40565b95505060a061405f8c828d01613c40565b94505060c06140708c828d01613c40565b93505060e06140818c828d01613c40565b9250506101006140938c828d01613e45565b9150509295985092959850929598565b60008060008060008060008060006101208a8c0312156140c257600080fd5b60006140ce8c8c613b53565b99505060206140df8c828d01613c40565b98505060406140f08c828d01613b53565b97505060606141018c828d01613b53565b96505060806141128c828d01613c40565b95505060a06141238c828d01613c40565b94505060c06141348c828d01613c40565b93505060e06141458c828d01613c40565b9250506101006140938c828d01613c40565b60008060008060008060a0878903121561417057600080fd5b600061417c8989613b53565b965050602061418d89828a01613c40565b955050604061419e89828a01613c40565b94505060606141af89828a01613c40565b935050608087013567ffffffffffffffff8111156141cc57600080fd5b6141d889828a01613b69565b92509250509295509295509295565b6000602082840312156141f957600080fd5b600061180d8484613c35565b60006060828403121561421757600080fd5b600061180d8484613cc5565b6000806040838503121561423657600080fd5b823567ffffffffffffffff81111561424d57600080fd5b61425985828601613d20565b925050602061426a85828601613c40565b9150509250929050565b60006040828403121561428657600080fd5b600061180d8484613dfe565b6000604082840312156142a457600080fd5b600061180d8484613e94565b6000806000606084860312156142c557600080fd5b60006142d18686613ecf565b93505060206142e286828701613ecf565b92505060406142f386828701613ef0565b9150509250925092565b60006020828403121561430f57600080fd5b600061180d8484613ee5565b6000806040838503121561432e57600080fd5b600061433a8585613ee5565b925050602061426a85828601613ee5565b60008060008060008060a0878903121561436457600080fd5b60006143708989613c40565b965050602061438189828a01613c40565b955050604061439289828a01613c40565b945050606087013567ffffffffffffffff8111156143af57600080fd5b6143bb89828a01613b69565b935093505060806143ce89828a01613c40565b9150509295509295509295565b60006111e683836146db565b60006143f383836147f1565b505060400190565b60006144078383614839565b505060a00190565b61441881614ceb565b82525050565b61441881614c26565b61441861443382614c26565b614d3f565b600061444382614c19565b61444d8185614c1d565b93508360208202850161445f85614c13565b8060005b85811015614499578484038952815161447c85826143db565b945061448783614c13565b60209a909a0199925050600101614463565b5091979650505050505050565b60006144b182614c19565b6144bb8185614c1d565b93506144c683614c13565b8060005b838110156144f45781516144de88826143e7565b97506144e983614c13565b9250506001016144ca565b509495945050505050565b600061450a82614c19565b6145148185614c1d565b935061451f83614c13565b8060005b838110156144f457815161453788826143fb565b975061454283614c13565b925050600101614523565b61441881614c31565b61441861456282614c36565b614c80565b61441861456282614c5b565b61441881614c80565b61441861456282614c80565b600061459382614c19565b61459d8185611304565b93506145ad818560208601614d13565b9290920192915050565b60006145c282614c19565b6145cc8185614c1d565b93506145dc818560208601614d13565b6145e581614d50565b9093019392505050565b61441881614cf2565b61441881614cfd565b61441881614d08565b6000614617601b83614c1d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000614650600183611304565b7fff00000000000000000000000000000000000000000000000000000000000000815260010192915050565b6000614689602183614c1d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b80516000906101608401906146f085826145f8565b5060208301516147036020860182614573565b506040830151614716604086018261477d565b50606083015161472960c0860182614573565b50608083015161473c60e0860182614573565b5060a083015161475061010086018261441e565b5060c0830151614764610120860182614573565b5060e08301518482036101408601526134dd82826145b7565b8051608083019061478e848261454d565b5060208201516147a16020850182614601565b5060408201516147b46040850182614601565b5060608201516147c76060850182614573565b50505050565b805160808301906147de8482614883565b5060208201516147c76040850182614815565b80516040830190614802848261441e565b5060208201516147c76020850182614573565b80516040830190614826848261454d565b5060208201516147c76020850182614894565b805160a083019061484a84826147f1565b50602082015161485d6040850182614573565b506040820151614870606085018261489d565b5060608201516147c7608085018261454d565b80516040830190614802848261454d565b61441881614caa565b61441881614ccb565b61441881614cd4565b60006148bb8285614427565b6014820191506148cb8284614427565b5060140192915050565b60006148e1828461457c565b50602001919050565b60006148f68286614588565b91506149028285614567565b6002820191506134dd8284614588565b600061491e828b614588565b915061492a828a614567565b60028201915061493a8289614588565b91506149468288614567565b6002820191506149568287614588565b91506149628286614567565b6002820191506149728285614588565b915061497e8284614556565b5060010198975050505050505050565b600061499982614643565b91506149a58286614427565b6014820191506149b5828561457c565b6020820191506149c5828461457c565b506020019392505050565b60208101612a5a828461441e565b606081016149ec828661440f565b6149f9602083018561441e565b61180d6040830184614573565b60e08101614a14828a61440f565b614a21602083018961441e565b614a2e6040830188614573565b614a3b6060830187614573565b614a4860808301866148a6565b614a5560a0830185614573565b614a6260c0830184614573565b98975050505050505050565b60408101614a7c828561441e565b6111e6602083018461441e565b6101e08101614a98828961441e565b614aa5602083018861441e565b614ab2604083018761441e565b614abf60608301866147cd565b614acc60e08301856147cd565b6138176101608301846147cd565b60408101614ae8828561441e565b6111e66020830184614573565b60408082528101614b0681856144a6565b905081810360208301526111e38184614438565b60208101612a5a8284614573565b60208101612a5a82846145ef565b60408101614b448285614601565b81810360208301526111e381846144ff565b602080825281016111e681846145b7565b60208082528101612a5a8161460a565b60208082528101612a5a8161467c565b60608101614b9582856147f1565b6111e66040830184614573565b60408101614ae88285614573565b60608101614bbe8286614573565b6149f96020830185614573565b60405181810167ffffffffffffffff81118282101715614bea57600080fd5b604052919050565b600067ffffffffffffffff821115614c0957600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b6000612a5a82614cbf565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b8061130481614d7e565b8061130481614d8b565b6dffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b6000612a5a825b6000612a5a82614c26565b6000612a5a82614c83565b6000612a5a82614c8d565b60005b83811015614d2e578181015183820152602001614d16565b838111156147c75750506000910152565b6000612a5a826000612a5a82614d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b60601b90565b60098110614d8857fe5b50565b60028110614d8857fe5b614d9e81614c26565b8114614d8857600080fd5b614d9e81614c31565b614d9e81614c80565b60028110614d8857600080fd5b614d9e81614c97565b614d9e81614caa565b614d9e81614ccb565b614d9e81614cd4565b614d9e81614cda56fea365627a7a72315820eb70ff17178866644c220285a977b4b8cac09a31c65ac291a4cb6876f7a2c4b56c6578706572696d656e74616cf564736f6c63430005100040",
1161
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c80635105ca4a1161008c57806383c88e311161006657806383c88e31146101c0578063ad22c2ae146101d3578063cb8f8f04146101e6578063fd15c891146101f9576100df565b80635105ca4a1461018357806366d555a9146101a55780636993e676146101ad576100df565b806324e43f3d116100bd57806324e43f3d146101445780632f480262146101595780634530a2d71461016e576100df565b8063032027b5146100e457806315c14a4a1461010e5780631a6e58f514610123575b600080fd5b6100f76100f2366004613f2f565b61020c565b604051610105929190614ba2565b60405180910390f35b610116610488565b6040516101059190614b28565b610136610131366004614157565b61049c565b604051610105929190614af5565b61014c61061e565b6040516101059190614b1a565b61016c610167366004614223565b61062d565b005b610176610713565b60405161010591906149d0565b6101966101913660046140a3565b610722565b60405161010593929190614bb0565b610116610b0a565b61016c6101bb36600461434b565b610b19565b6100f76101ce366004613fdf565b610c7d565b61016c6101e136600461434b565b610d4e565b61016c6101f4366004614223565b610e6c565b610136610207366004614157565b610f10565b60008082610260428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b60015460009061027a906001600160a01b03168b8b6111b5565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081529091506001600160a01b038216906323b872dd906102c690339085908d906004016149de565b602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061031891908101906141e7565b50600080826001600160a01b0316639dc29fac8f8f6040518363ffffffff1660e01b815260040161034a929190614ada565b6040805180830381600087803b15801561036357600080fd5b505af1158015610377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061039b919081019061431b565b9150915060006103ab8d8d6111ed565b509050806001600160a01b03168d6001600160a01b0316146103ce5781836103d1565b82825b90975095506104268a8810157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204120616d6f756e7400000000000000000000008a8e611083565b610476898710157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204220616d6f756e740000000000000000000000898d611083565b50505050509850989650505050505050565b60005461010090046001600160a01b031681565b60608061060f6040518060e001604052806040518061010001604052808b81526020016104c88b6112d5565b81526020016104d68a6112d5565b8152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815260200160006001600160a01b031681526020016000151581526020016000815260200160008152508152602001600060019054906101000a90046001600160a01b03166001600160a01b03168152602001600160009054906101000a90046001600160a01b03166001600160a01b031681526020018a6001600160a01b0316815260200160006040519080825280602002602001820160405280156105ce578160200160208202803883390190505b50815260200160006040519080825280602002602001820160405280156105ff578160200160208202803883390190505b5081526020016000815250611309565b91509150965096945050505050565b6000610628611434565b905090565b8061067e428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6040805160e081018252848152600080546001600160a01b03610100909104811660208085019190915260015490911683850152336060840152835182815290810190935261070e9260808301915b50815260200160006040519080825280602002602001820160405280156106fe578160200160208202803883390190505b5081526020016000815250611458565b505050565b6002546001600160a01b031681565b600080600083610778428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6107868b8b8b8b8b8b6114d6565b60015491955093506000906107a5906001600160a01b03168d8d6111b5565b60408051600280825260608281019093529293509091816020015b6107c8613a93565b8152602001906001900390816107c05790505090506040518060400160405280336001600160a01b031681526020018f8152508160008151811061080857fe5b60200260200101819052506040518060400160405280836001600160a01b0316815260200160008152508160018151811061083f57fe5b602002602001018190525060008060019054906101000a90046001600160a01b03166001600160a01b0316638fae3be18f6040518263ffffffff1660e01b815260040161088c91906149d0565b60206040518083038186803b1580156108a457600080fd5b505afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108dc91908101906142fd565b905060008060019054906101000a90046001600160a01b03166001600160a01b0316638fae3be18f6040518263ffffffff1660e01b815260040161092091906149d0565b60206040518083038186803b15801561093857600080fd5b505afa15801561094c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061097091908101906142fd565b60408051600280825260608281019093529293509091816020015b610993613aaa565b81526020019060019003908161098b5790505090506109b660006001858c611744565b816000815181106109c357fe5b60200260200101819052506109dc60006001848b611744565b816001815181106109e957fe5b60209081029190910101526000546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063a67a6a4590610a439087908590600401614af5565b600060405180830381600087803b158015610a5d57600080fd5b505af1158015610a71573d6000803e3d6000fd5b5050505050505050806001600160a01b0316636a6278428f6040518263ffffffff1660e01b8152600401610aa591906149d0565b602060405180830381600087803b158015610abf57600080fd5b505af1158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610af791908101906142fd565b9250505099509950999650505050505050565b6001546001600160a01b031681565b80610b6a428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b610c746040518060e001604052806040518061010001604052808b8152602001610b938b6112d5565b8152602001610ba18a6112d5565b815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050506020808301829052604080840183905260608085018490526080948501849052948652825461010090046001600160a01b03908116878401526001541686820152339486019490945283518281529081019093529201915b5081526020016000604051908082528060200260200182016040528015610c64578160200160208202803883390190505b5081526020016000815250611815565b50505050505050565b60015460009081908190610c9b906001600160a01b03168b8b6111b5565b905060008460000151610cae5788610cb2565b6000195b9050816001600160a01b031663d505accf3330848a8a602001518b604001518c606001516040518863ffffffff1660e01b8152600401610cf89796959493929190614a06565b600060405180830381600087803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b50505050610d3a8d8d8d8d8d8d8d8d61020c565b909e909d509b505050505050505050505050565b80610d9f428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b610c746040518060e001604052806040518061010001604052808b8152602001610dc88b6112d5565b8152602001610dd68a6112d5565b815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050506020808301829052604080840183905260608085018490526080948501849052948652825461010090046001600160a01b03908116878401526001541686820152339486019490945283518281529081019093529201916106cd565b80610ebd428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6040805160e081018252848152600080546001600160a01b03610100909104811660208085019190915260015490911683850152336060840152835182815290810190935261070e926080830191610c33565b60608061060f6040518060e001604052806040518061010001604052808b8152602001610f3c8b6112d5565b8152602001610f4a8a6112d5565b8152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815260200160006001600160a01b031681526020016000151581526020016000815260200160008152508152602001600060019054906101000a90046001600160a01b03166001600160a01b03168152602001600160009054906101000a90046001600160a01b03166001600160a01b031681526020018a6001600160a01b031681526020016000604051908082528060200260200182016040528015611042578160200160208202803883390190505b5081526020016000604051908082528060200260200182016040528015611073578160200160208202803883390190505b5081526020016000815250611821565b846111ae5761109184611910565b7f3a200000000000000000000000000000000000000000000000000000000000006110bb85611910565b7f203c0000000000000000000000000000000000000000000000000000000000006110e5866119c6565b7f2c2000000000000000000000000000000000000000000000000000000000000061110f876119c6565b60405161114797969594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001614912565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526111a591600401614b56565b60405180910390fd5b5050505050565b60006111e38484847fe6a28b91a2f6ed25ca52fc081821cf7e099221d7cad41fa6c6239bad4ce3803f611ab7565b90505b9392505050565b600080611250836001600160a01b0316856001600160a01b031614157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f6964656e746963616c2061646472657373657300000000000000000000000000611b48565b826001600160a01b0316846001600160a01b031610611270578284611273565b83835b90925090506112ce6001600160a01b03831615157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f7a65726f20616464726573730000000000000000000000000000000000000000611b48565b9250929050565b6112dd613afc565b60408051608081019091526001815260208101600081526020016000815260200183905290505b919050565b60608061131583611b92565b6080840181905283516020015181516000926113429291849061133457fe5b602002602001015186611c9d565b9050600061137885600001516040015186608001516001886080015151038151811061136a57fe5b602002602001015187611c9d565b9050611391856040015183876000015160600151611dfe565b60a08601819052805161142091839160001981019081106113ae57fe5b602002602001015110157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74206f757470757420616d6f756e740000000000008860a0015160018a60a0015151038151811061141257fe5b602002602001015185611083565b61142985611f2c565b935093505050915091565b7fe6a28b91a2f6ed25ca52fc081821cf7e099221d7cad41fa6c6239bad4ce3803f90565b60608061146483611821565b9150915082602001516001600160a01b031663a67a6a4583836040518363ffffffff1660e01b815260040161149a929190614af5565b600060405180830381600087803b1580156114b457600080fd5b505af11580156114c8573d6000803e3d6000fd5b5050505061070e838361239a565b6001546040517fe6a4390500000000000000000000000000000000000000000000000000000000815260009182916001600160a01b03909116908290829063e6a439059061152a908d908d90600401614a6e565b60206040518083038186803b15801561154257600080fd5b505afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061157a9190810190613f11565b6001600160a01b03161415611624576040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063c9c65396906115d0908c908c90600401614a6e565b602060405180830381600087803b1580156115ea57600080fd5b505af11580156115fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116229190810190613f11565b505b600080611632838c8c612875565b91509150816000148015611644575080155b1561165457889450879350611736565b60006116618a84846128b0565b90508881116116c5576116ba878210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204220616d6f756e740000000000000000000000848b611083565b899550935083611734565b60006116d28a84866128b0565b90508a8111156116de57fe5b61172e898210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204120616d6f756e740000000000000000000000848d611083565b95508894505b505b505050965096945050505050565b61174c613aaa565b611754613afc565b60001983141561178b57604080516080810190915260018152602081016000815260200160018152602001600081525090506117b2565b60408051608081019091526000808252602082019081526020016000815260200184905290505b6040805161010081019091528060028152602001878152602001828152602001858152602001600019815260200160006001600160a01b03168152602001868152602001604051806020016040528060008152508152509150505b949350505050565b60608061146483611309565b60608061182d83611b92565b60808401819052835160200151815160009261184c9291849061133457fe5b9050600061187485600001516040015186608001516001886080015151038151811061136a57fe5b905061188d85604001518287600001516060015161297b565b60a0860181905280516114209184916000906118a557fe5b602002602001015111157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f65786365737369766520696e70757420616d6f756e74000000000000000000008860a0015160008151811061190257fe5b602002602001015186611083565b6060808260405160200161192491906148d5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156119af5781516000199091019082908290811061197257fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156119aa5760010181529050611304565b611957565b505060408051600081526020810190915292915050565b606081611a07575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152611304565b8160005b8115611a1f57600101600a82049150611a0b565b6060816040519080825280601f01601f191660200182016040528015611a4c576020820181803883390190505b508593509050815b8015611aae5760001901600a840660300160f81b828281518110611a7457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611a54565b50949350505050565b6000806000611ac686866111ed565b91509150868282604051602001611ade9291906148af565b6040516020818303038152906040528051906020012085604051602001611b079392919061498e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120979650505050505050565b8261070e57611b5682611910565b7f3a20000000000000000000000000000000000000000000000000000000000000611b8083611910565b604051602001611147939291906148ea565b60608082600001516060015151604051908082528060200260200182016040528015611bc8578160200160208202803883390190505b50905060005b83516060015151811015611c965783602001516001600160a01b0316638fae3be18560000151606001518381518110611c0357fe5b60200260200101516040518263ffffffff1660e01b8152600401611c2791906149d0565b60206040518083038186803b158015611c3f57600080fd5b505afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c7791908101906142fd565b828281518110611c8357fe5b6020908102919091010152600101611bce565b5092915050565b60008084602001516001811115611cb057fe5b1415611cc1575060608301516111e6565b6060840151611d25906fffffffffffffffffffffffffffffffff8116147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c696420617373657420616d6f756e74000000000000000000000000611b48565b60408051808201825285511515815260608601516fffffffffffffffffffffffffffffffff1660208083019190915284015191517f56ea84b2000000000000000000000000000000000000000000000000000000008152611df3926001600160a01b0316906356ea84b290611d9e908890600401614b1a565b60606040518083038186803b158015611db657600080fd5b505afa158015611dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611dee9190810190614205565b6129a9565b6020015190506111e6565b6060611e506002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c696420706174680000000000000000000000000000000000000000611b48565b8151604051908082528060200260200182016040528015611e7b578160200160208202803883390190505b5090508281600081518110611e8c57fe5b60200260200101818152505060005b6001835103811015611f2457600080611ede87868581518110611eba57fe5b6020026020010151878660010181518110611ed157fe5b6020026020010151612875565b91509150611f00848481518110611ef157fe5b60200260200101518383612a60565b848460010181518110611f0f57fe5b60209081029190910101525050600101611e9b565b509392505050565b606080611fb16000845160200151604001516001811115611f4957fe5b148015611f6a57506000845160409081015101516001811115611f6857fe5b145b7f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206173736574207265666572656e6365000000000000000000611b48565b6060611fc98460400151856000015160600151612b6e565b90506060611fd78583612b9b565b90506060611fe6868385612d13565b8651608001519091506001600160a01b03161580159061200c5750855160c00151600019145b1561238257855160e0015160009015612026576001612029565b60005b60ff169050600082826001855103038151811061204257fe5b6020026020010151606001519050876000015160a00151156121045787602001516001600160a01b031663c190c2ec8560018751038151811061208157fe5b6020026020010151836040518363ffffffff1660e01b81526004016120a7929190614b87565b604080518083038186803b1580156120be57600080fd5b505afa1580156120d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120f69190810190614292565b6020015160c089015261237b565b80886080015160008151811061211657fe5b602002602001015114156121ef576121e58860a0015160008151811061213857fe5b602002602001015189602001516001600160a01b031663c190c2ec8760008151811061216057fe5b6020026020010151856040518363ffffffff1660e01b8152600401612186929190614b87565b604080518083038186803b15801561219d57600080fd5b505afa1580156121b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121d59190810190614292565b602001519063ffffffff6130bb16565b60c089015261237b565b60808801518051829190600019810190811061220757fe5b602002602001015114156122dc5760a088015180516121e59190600019810190811061222f57fe5b602002602001015189602001516001600160a01b031663c190c2ec8760008151811061225757fe5b6020026020010151856040518363ffffffff1660e01b815260040161227d929190614b87565b604080518083038186803b15801561229457600080fd5b505afa1580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122cc9190810190614292565b602001519063ffffffff6130fd16565b87602001516001600160a01b031663c190c2ec856000815181106122fc57fe5b6020026020010151836040518363ffffffff1660e01b8152600401612322929190614b87565b604080518083038186803b15801561233957600080fd5b505afa15801561234d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123719190810190614292565b6020015160c08901525b505061238f565b855160c090810151908701525b909350915050915091565b815160a0015180156123ad575081515115155b15612659576123ba613a93565b82602001516001600160a01b03166347d1b53c836000815181106123da57fe5b60200260200101518560800151600187608001515103815181106123fa57fe5b60200260200101516040518363ffffffff1660e01b815260040161241f929190614b87565b604080518083038186803b15801561243657600080fd5b505afa15801561244a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061246e9190810190614274565b835180516060909101518051929350909133917fb81518bcaf15a56ac0e4b0ff579f0bd8e163ac444d526743908dc22733789f06916000906124ac57fe5b6020908102919091010151865160600151805160001981019081106124cd57fe5b6020026020010151876000015160800151604051806040016040528060405180604001604052806000151581526020018c60a0015160008151811061250e57fe5b602002602001015181525081526020018a602001516001600160a01b03166347d1b53c8b60008151811061253e57fe5b60200260200101518d6080015160008151811061255757fe5b60200260200101516040518363ffffffff1660e01b815260040161257c929190614b87565b604080518083038186803b15801561259357600080fd5b505afa1580156125a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125cb9190810190614274565b905260408051608081018252600191810191825260a08c01518051919283929091606084019160001981019081106125ff57fe5b6020908102919091018101519091529082529081018a905260408051608081018252600181830190815260c08f0151606083015281529182018b90525161264b96959493929190614a89565b60405180910390a350612871565b8151511561287157612669613a93565b82602001516001600160a01b03166347d1b53c8360008151811061268957fe5b602002602001015185608001516000815181106126a257fe5b60200260200101516040518363ffffffff1660e01b81526004016126c7929190614b87565b604080518083038186803b1580156126de57600080fd5b505afa1580156126f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127169190810190614274565b835180516060909101518051929350909133917fecf4fe97b02d1620f6c04edbd484eff130a2247b31ac1ef061f54c8177b657b99160009061275457fe5b60209081029190910101518651606001518051600019810190811061277557fe5b6020026020010151876000015160800151604051806040016040528060405180604001604052806000151581526020018c60a001516000815181106127b657fe5b6020026020010151815250815260200188815250604051806040016040528060405180604001604052806001151581526020018d60a0015160018f60a0015151038151811061280157fe5b6020026020010151815250815260200161282f8c8c60008151811061282257fe5b602002602001015161313c565b905260408051608081018252600081830190815260c08e015160608301528152602081018b9052905161286796959493929190614a89565b60405180910390a3505b5050565b6000806128a4857fe6a28b91a2f6ed25ca52fc081821cf7e099221d7cad41fa6c6239bad4ce3803f86866131e4565b91509150935093915050565b6000612900600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e7420616d6f756e7400000000000000000000000000611b48565b61295a6000841180156129135750600083115b7f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b8261296b858463ffffffff6132cd16565b8161297257fe5b04949350505050565b60606111e3847fe6a28b91a2f6ed25ca52fc081821cf7e099221d7cad41fa6c6239bad4ce3803f8585613321565b6129b1613a93565b602083015183516fffffffffffffffffffffffffffffffff9091169015612a1d57604080518082019091526001815260208481015190820190612a129084906bffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61344916565b815250915050612a5a565b604080518082019091526000815283516020820190612a129084906bffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61344916565b92915050565b6000612ab0600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e7420696e70757420616d6f756e7400000000000000611b48565b612b096000841180156129135750600083117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b6000612b1d856103e563ffffffff6132cd16565b90506000612b31828563ffffffff6132cd16565b90506000612b5783612b4b886103e863ffffffff6132cd16565b9063ffffffff6130fd16565b9050808281612b6257fe5b04979650505050505050565b60606111e6837fe6a28b91a2f6ed25ca52fc081821cf7e099221d7cad41fa6c6239bad4ce3803f846134e6565b81516080015160609081906001600160a01b0316612bf9578251600101604051908082528060200260200182016040528015612bf157816020015b612bde613a93565b815260200190600190039081612bd65790505b509050612c79565b8251600201604051908082528060200260200182016040528015612c3757816020015b612c24613a93565b815260200190600190039081612c1c5790505b509050604051806040016040528085606001516001600160a01b03168152602001600081525081600183510381518110612c6d57fe5b60200260200101819052505b6040805180820190915260608501516001600160a01b03168152845151602082015281518290600090612ca857fe5b602090810291909101015260005b8351811015611f24576040518060400160405280858381518110612cd657fe5b60200260200101516001600160a01b031681526020016000815250828260010181518110612d0057fe5b6020908102919091010152600101612cb6565b82516080015160609081906001600160a01b0316612d6e578251604051908082528060200260200182016040528015612d6657816020015b612d53613aaa565b815260200190600190039081612d4b5790505b509050612f7c565b845160c00151612dc19015157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206d617267696e206465706f73697400000000000000000000611b48565b845160e0015160009015612dd6576001612dd9565b60005b60ff16905080845160010101604051908082528060200260200182016040528015612e1e57816020015b612e0b613aaa565b815260200190600190039081612e035790505b50865160a0015190925015612efa81612e3b576001875103612e3e565b60005b82612e4a576000612e50565b60018851035b60208a01518a51608001516040517f8fae3be10000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691638fae3be191612e9f916004016149d0565b60206040518083038186803b158015612eb757600080fd5b505afa158015612ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612eef91908101906142fd565b8a5160c00151611744565b838360018651030381518110612f0c57fe5b60200260200101819052508160011415612f7957612f5d876000015187600081518110612f3557fe5b602002602001015160008a60800151600081518110612f5057fe5b60200260200101516135db565b83600185510381518110612f6d57fe5b60200260200101819052505b50505b60005b8351811015611aae57613014848281518110612f9757fe5b60200260200101516001600160a01b0316868360010181518110612fb757fe5b6020026020010151600001516001600160a01b0316147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206f7468657220616464726573730000000000000000000000611b48565b61309c6000826001018860800151848151811061302d57fe5b60200260200101518960800151856001018151811061304857fe5b602002602001015188868151811061305c57fe5b60200260200101518b60a00151878151811061307457fe5b60200260200101518c60a00151886001018151811061308f57fe5b6020026020010151613784565b8282815181106130a857fe5b6020908102919091010152600101612f7f565b60006111e683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613822565b6000828201838110156111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590614b67565b613144613a93565b82602001516001600160a01b03166347d1b53c8385608001516001876080015151038151811061317057fe5b60200260200101516040518363ffffffff1660e01b8152600401613195929190614b87565b604080518083038186803b1580156131ac57600080fd5b505afa1580156131c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111e69190810190614274565b60008060006131f385856111ed565b5090506000806132058988888b611ab7565b6001600160a01b031663b432a82c6040518163ffffffff1660e01b815260040160606040518083038186803b15801561323d57600080fd5b505afa158015613251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061327591908101906142b0565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316876001600160a01b0316146132ba5780826132bd565b81815b909a909950975050505050505050565b6000826132dc57506000612a5a565b828202828482816132e957fe5b04146111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590614b77565b60606133736002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c696420706174680000000000000000000000000000000000000000611b48565b815160405190808252806020026020018201604052801561339e578160200160208202803883390190505b50905082816001835103815181106133b257fe5b60209081029190910101528151600019015b8015611aae5760008061340288888760018703815181106133e157fe5b60200260200101518887815181106133f557fe5b60200260200101516131e4565b9150915061342484848151811061341557fe5b60200260200101518383613868565b84600185038151811061343357fe5b60209081029190910101525050600019016133c4565b6000831580613456575082155b1561346d57613466600083613970565b90506111e6565b600061347f858563ffffffff6132cd16565b90506134dd6134aa6001612b4b600261349e888463ffffffff6130bb16565b9063ffffffff61397016565b6134ba838663ffffffff6139b216565b10156134c75760006134ca565b60015b60ff16612b4b838663ffffffff61397016565b95945050505050565b60606135386002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c69642070617468206c656e67746800000000000000000000000000611b48565b60606001835103604051908082528060200260200182016040528015613568578160200160208202803883390190505b50905060005b6001845103811015611aae576135af8685838151811061358a57fe5b60200260200101518684600101815181106135a157fe5b602002602001015188611ab7565b8282815181106135bb57fe5b6001600160a01b039092166020928302919091019091015260010161356e565b6135e3613aaa565b60e085015161363b9063ffffffff8116147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206578706972792074696d6500000000000000000000000000611b48565b604080516001808252818301909252606091816020015b61365a613b25565b81526020019060019003908161365257905050905060405180608001604052808681526020018481526020018760e0015163ffffffff16815260200160011515815250816000815181106136aa57fe5b602090810291909101015260408051610100810190915280600881526020808201879052604080516080810182526001815292019190810160008152602001600081526020016000815250815260200160001981526020016000198152602001600260009054906101000a90046001600160a01b03166001600160a01b03168152602001600019815260200160008360405160200161374a929190614b36565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290529695505050505050565b61378c613aaa565b604080516101008101909152806005815260208082018b905260408051608081018252600181529201919081016000815260200160008152602001868152508152602001878152602001868152602001856001600160a01b03168152602001888152602001836040516020016138029190614b1a565b60405160208183030381529060405281525090505b979650505050505050565b60008184841115613860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b505050900390565b60006138b8600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206f757470757420616d6f756e74000000000000611b48565b6139116000841180156129135750600083117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b60006139356103e8613929868863ffffffff6132cd16565b9063ffffffff6132cd16565b9050600061394f6103e5613929868963ffffffff6130bb16565b90506139666001612b4b848463ffffffff61397016565b9695505050505050565b60006111e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139f4565b60006111e683836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250613a45565b60008183613a2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b506000838581613a3b57fe5b0495945050505050565b60008183613a80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b50828481613a8a57fe5b06949350505050565b604080518082019091526000808252602082015290565b604080516101008101825260008082526020820152908101613aca613afc565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b6040518060800160405280613b38613a93565b81526000602082018190526040820181905260609091015290565b8035612a5a81614d95565b8051612a5a81614d95565b60008083601f840112613b7b57600080fd5b50813567ffffffffffffffff811115613b9357600080fd5b6020830191508360208202830111156112ce57600080fd5b600082601f830112613bbc57600080fd5b8135613bcf613bca82614bf2565b614bcb565b91508181835260208401935060208101905083856020840282011115613bf457600080fd5b60005b83811015613c205781613c0a8882613b53565b8452506020928301929190910190600101613bf7565b5050505092915050565b8035612a5a81614da9565b8051612a5a81614da9565b8035612a5a81614db2565b8035612a5a81614dbb565b600060808284031215613c6857600080fd5b613c726080614bcb565b90506000613c808484613c2a565b8252506020613c9184848301613c4b565b6020830152506040613ca584828501613c4b565b6040830152506060613cb984828501613c40565b60608301525092915050565b600060608284031215613cd757600080fd5b613ce16060614bcb565b90506000613cef8484613f06565b8252506020613d0084848301613f06565b6020830152506040613d1484828501613ef0565b60408301525092915050565b60006101c08284031215613d3357600080fd5b613d3e610100614bcb565b90506000613d4c8484613c40565b8252506020613d5d84848301613c56565b60208301525060a0613d7184828501613c56565b60408301525061012082013567ffffffffffffffff811115613d9257600080fd5b613d9e84828501613bab565b606083015250610140613db384828501613b53565b608083015250610160613dc884828501613c2a565b60a083015250610180613ddd84828501613c40565b60c0830152506101a0613df284828501613c40565b60e08301525092915050565b600060408284031215613e1057600080fd5b613e1a6040614bcb565b90506000613e288484613c35565b8252506020613e3984848301613eda565b60208301525092915050565b600060808284031215613e5757600080fd5b613e616080614bcb565b90506000613e6f8484613c2a565b8252506020613e8084848301613efb565b6020830152506040613ca584828501613c40565b600060408284031215613ea657600080fd5b613eb06040614bcb565b90506000613ebe8484613c35565b8252506020613e3984848301613ee5565b8051612a5a81614dc8565b8051612a5a81614dd1565b8051612a5a81614db2565b8051612a5a81614dda565b8035612a5a81614de3565b8051612a5a81614dec565b600060208284031215613f2357600080fd5b600061180d8484613b5e565b600080600080600080600080610100898b031215613f4c57600080fd5b6000613f588b8b613b53565b9850506020613f698b828c01613c40565b9750506040613f7a8b828c01613b53565b9650506060613f8b8b828c01613b53565b9550506080613f9c8b828c01613c40565b94505060a0613fad8b828c01613c40565b93505060c0613fbe8b828c01613c40565b92505060e0613fcf8b828c01613c40565b9150509295985092959890939650565b60008060008060008060008060006101808a8c031215613ffe57600080fd5b600061400a8c8c613b53565b995050602061401b8c828d01613c40565b985050604061402c8c828d01613b53565b975050606061403d8c828d01613b53565b965050608061404e8c828d01613c40565b95505060a061405f8c828d01613c40565b94505060c06140708c828d01613c40565b93505060e06140818c828d01613c40565b9250506101006140938c828d01613e45565b9150509295985092959850929598565b60008060008060008060008060006101208a8c0312156140c257600080fd5b60006140ce8c8c613b53565b99505060206140df8c828d01613c40565b98505060406140f08c828d01613b53565b97505060606141018c828d01613b53565b96505060806141128c828d01613c40565b95505060a06141238c828d01613c40565b94505060c06141348c828d01613c40565b93505060e06141458c828d01613c40565b9250506101006140938c828d01613c40565b60008060008060008060a0878903121561417057600080fd5b600061417c8989613b53565b965050602061418d89828a01613c40565b955050604061419e89828a01613c40565b94505060606141af89828a01613c40565b935050608087013567ffffffffffffffff8111156141cc57600080fd5b6141d889828a01613b69565b92509250509295509295509295565b6000602082840312156141f957600080fd5b600061180d8484613c35565b60006060828403121561421757600080fd5b600061180d8484613cc5565b6000806040838503121561423657600080fd5b823567ffffffffffffffff81111561424d57600080fd5b61425985828601613d20565b925050602061426a85828601613c40565b9150509250929050565b60006040828403121561428657600080fd5b600061180d8484613dfe565b6000604082840312156142a457600080fd5b600061180d8484613e94565b6000806000606084860312156142c557600080fd5b60006142d18686613ecf565b93505060206142e286828701613ecf565b92505060406142f386828701613ef0565b9150509250925092565b60006020828403121561430f57600080fd5b600061180d8484613ee5565b6000806040838503121561432e57600080fd5b600061433a8585613ee5565b925050602061426a85828601613ee5565b60008060008060008060a0878903121561436457600080fd5b60006143708989613c40565b965050602061438189828a01613c40565b955050604061439289828a01613c40565b945050606087013567ffffffffffffffff8111156143af57600080fd5b6143bb89828a01613b69565b935093505060806143ce89828a01613c40565b9150509295509295509295565b60006111e683836146db565b60006143f383836147f1565b505060400190565b60006144078383614839565b505060a00190565b61441881614ceb565b82525050565b61441881614c26565b61441861443382614c26565b614d3f565b600061444382614c19565b61444d8185614c1d565b93508360208202850161445f85614c13565b8060005b85811015614499578484038952815161447c85826143db565b945061448783614c13565b60209a909a0199925050600101614463565b5091979650505050505050565b60006144b182614c19565b6144bb8185614c1d565b93506144c683614c13565b8060005b838110156144f45781516144de88826143e7565b97506144e983614c13565b9250506001016144ca565b509495945050505050565b600061450a82614c19565b6145148185614c1d565b935061451f83614c13565b8060005b838110156144f457815161453788826143fb565b975061454283614c13565b925050600101614523565b61441881614c31565b61441861456282614c36565b614c80565b61441861456282614c5b565b61441881614c80565b61441861456282614c80565b600061459382614c19565b61459d8185611304565b93506145ad818560208601614d13565b9290920192915050565b60006145c282614c19565b6145cc8185614c1d565b93506145dc818560208601614d13565b6145e581614d50565b9093019392505050565b61441881614cf2565b61441881614cfd565b61441881614d08565b6000614617601b83614c1d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000614650600183611304565b7fff00000000000000000000000000000000000000000000000000000000000000815260010192915050565b6000614689602183614c1d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b80516000906101608401906146f085826145f8565b5060208301516147036020860182614573565b506040830151614716604086018261477d565b50606083015161472960c0860182614573565b50608083015161473c60e0860182614573565b5060a083015161475061010086018261441e565b5060c0830151614764610120860182614573565b5060e08301518482036101408601526134dd82826145b7565b8051608083019061478e848261454d565b5060208201516147a16020850182614601565b5060408201516147b46040850182614601565b5060608201516147c76060850182614573565b50505050565b805160808301906147de8482614883565b5060208201516147c76040850182614815565b80516040830190614802848261441e565b5060208201516147c76020850182614573565b80516040830190614826848261454d565b5060208201516147c76020850182614894565b805160a083019061484a84826147f1565b50602082015161485d6040850182614573565b506040820151614870606085018261489d565b5060608201516147c7608085018261454d565b80516040830190614802848261454d565b61441881614caa565b61441881614ccb565b61441881614cd4565b60006148bb8285614427565b6014820191506148cb8284614427565b5060140192915050565b60006148e1828461457c565b50602001919050565b60006148f68286614588565b91506149028285614567565b6002820191506134dd8284614588565b600061491e828b614588565b915061492a828a614567565b60028201915061493a8289614588565b91506149468288614567565b6002820191506149568287614588565b91506149628286614567565b6002820191506149728285614588565b915061497e8284614556565b5060010198975050505050505050565b600061499982614643565b91506149a58286614427565b6014820191506149b5828561457c565b6020820191506149c5828461457c565b506020019392505050565b60208101612a5a828461441e565b606081016149ec828661440f565b6149f9602083018561441e565b61180d6040830184614573565b60e08101614a14828a61440f565b614a21602083018961441e565b614a2e6040830188614573565b614a3b6060830187614573565b614a4860808301866148a6565b614a5560a0830185614573565b614a6260c0830184614573565b98975050505050505050565b60408101614a7c828561441e565b6111e6602083018461441e565b6101e08101614a98828961441e565b614aa5602083018861441e565b614ab2604083018761441e565b614abf60608301866147cd565b614acc60e08301856147cd565b6138176101608301846147cd565b60408101614ae8828561441e565b6111e66020830184614573565b60408082528101614b0681856144a6565b905081810360208301526111e38184614438565b60208101612a5a8284614573565b60208101612a5a82846145ef565b60408101614b448285614601565b81810360208301526111e381846144ff565b602080825281016111e681846145b7565b60208082528101612a5a8161460a565b60208082528101612a5a8161467c565b60608101614b9582856147f1565b6111e66040830184614573565b60408101614ae88285614573565b60608101614bbe8286614573565b6149f96020830185614573565b60405181810167ffffffffffffffff81118282101715614bea57600080fd5b604052919050565b600067ffffffffffffffff821115614c0957600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b6000612a5a82614cbf565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b8061130481614d7e565b8061130481614d8b565b6dffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b6000612a5a825b6000612a5a82614c26565b6000612a5a82614c83565b6000612a5a82614c8d565b60005b83811015614d2e578181015183820152602001614d16565b838111156147c75750506000910152565b6000612a5a826000612a5a82614d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b60601b90565b60098110614d8857fe5b50565b60028110614d8857fe5b614d9e81614c26565b8114614d8857600080fd5b614d9e81614c31565b614d9e81614c80565b60028110614d8857600080fd5b614d9e81614c97565b614d9e81614caa565b614d9e81614ccb565b614d9e81614cd4565b614d9e81614cda56fea365627a7a72315820eb70ff17178866644c220285a977b4b8cac09a31c65ac291a4cb6876f7a2c4b56c6578706572696d656e74616cf564736f6c63430005100040",
1159
+ "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dolomiteMargin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dolomiteAmmFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expiry\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"accountIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inputToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"outputToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"withdrawalToken\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"inputBalanceUpdate\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"outputBalanceUpdate\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"marginWithdrawalUpdate\",\"type\":\"tuple\"}],\"name\":\"MarginPositionClose\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"accountIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inputToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"outputToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"depositToken\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"inputBalanceUpdate\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"outputBalanceUpdate\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.Wei\",\"name\":\"deltaWei\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"internalType\":\"struct Types.Par\",\"name\":\"newPar\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct Events.BalanceUpdate\",\"name\":\"marginDepositUpdate\",\"type\":\"tuple\"}],\"name\":\"MarginPositionOpen\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_AMM_FACTORY\",\"outputs\":[{\"internalType\":\"contract IDolomiteAmmFactory\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DOLOMITE_MARGIN\",\"outputs\":[{\"internalType\":\"contract IDolomiteMargin\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EXPIRY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromAccountNumber\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountADesired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBDesired\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountAMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountAWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getPairInitCodeHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinWei\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"}],\"name\":\"getParamsForSwapExactTokensForTokens\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"accountId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amount\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"primaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"otherAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"otherAccountId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaxWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutWei\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"}],\"name\":\"getParamsForSwapTokensForExactTokens\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"internalType\":\"struct Account.Info[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"enum Actions.ActionType\",\"name\":\"actionType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"accountId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amount\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"primaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondaryMarketId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"otherAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"otherAccountId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct Actions.ActionArgs[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"toAccountNumber\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountAMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountAWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBWei\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"toAccountNumber\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountAMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBMinWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"approveMax\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct DolomiteAmmRouterProxy.PermitSignature\",\"name\":\"permit\",\"type\":\"tuple\"}],\"name\":\"removeLiquidityWithPermit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountAWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBWei\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutMinWei\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactTokensForTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amountIn\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amountOut\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"depositToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isPositiveMarginDeposit\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"marginDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiryTimeDelta\",\"type\":\"uint256\"}],\"internalType\":\"struct DolomiteAmmRouterProxy.ModifyPositionParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactTokensForTokensAndModifyPosition\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInMaxWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutWei\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapTokensForExactTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"accountNumber\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amountIn\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"sign\",\"type\":\"bool\"},{\"internalType\":\"enum Types.AssetDenomination\",\"name\":\"denomination\",\"type\":\"uint8\"},{\"internalType\":\"enum Types.AssetReference\",\"name\":\"ref\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.AssetAmount\",\"name\":\"amountOut\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"tokenPath\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"depositToken\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isPositiveMarginDeposit\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"marginDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiryTimeDelta\",\"type\":\"uint256\"}],\"internalType\":\"struct DolomiteAmmRouterProxy.ModifyPositionParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapTokensForExactTokensAndModifyPosition\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/DolomiteAmmRouterProxy.sol\":\"DolomiteAmmRouterProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IDolomiteAmmFactory.sol\":{\"keccak256\":\"0xf5fd97ee3591ff30a3576d6d58847b5f6e156639578bed3827313a2c70823b78\",\"urls\":[\"bzz-raw://f9da41065f9b3b559bfc588cea01480f1c64ee7b1f1a86e54868f464fdfe2160\",\"dweb:/ipfs/QmWeBi2zSdPCENVV4fvCQ49HgnwLGxd3WS9sGMC4vR5NrB\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IDolomiteAmmPair.sol\":{\"keccak256\":\"0xe2272c233467a78460e681419f0acdc765de0ad5357d3b768665f289941ccd47\",\"urls\":[\"bzz-raw://114f1c797f4e7e803b0764ae7107a2279c3da806450287c9e5600211faeeab57\",\"dweb:/ipfs/QmUoLx1rGgCdX5ScsUkp4NsSZLyVWdKsVKeXuPCtcrAvLn\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IExpiry.sol\":{\"keccak256\":\"0xd7613bcef3a7384660aa4aeae9905faafbb0425b423080e5dcc0a6df4ee26cf6\",\"urls\":[\"bzz-raw://98b4cd8852fec0d6fe8bb92575974ca36d80d1a75f342c45292f2bfb62de1b67\",\"dweb:/ipfs/QmPmWrw5NhxGBqC3HByiAeV6BtTJtPXLnhvTSLEMKedj2z\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/DolomiteAmmLibrary.sol\":{\"keccak256\":\"0x9f567afb49879fd8b2b58fb327ee26bf2dc4f86bb801c755daf224d3200b78d6\",\"urls\":[\"bzz-raw://64c0838891b4e825a97c086a440cd255f7cbbbdc4de424fb57ca46cb0b283b83\",\"dweb:/ipfs/QmSuRVdDtpMLrzAMPhBgs3SGKxXJ5jCL4d6sXuNyesLyYp\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/TypedSignature.sol\":{\"keccak256\":\"0x4b4eb5fd2869d6c410948f78163773442c11bc82e393307e41359bbdb21577bf\",\"urls\":[\"bzz-raw://9c9c3abae44173086bc08f5479fbc67151d5905f60e1032ec6f9e40f841f3365\",\"dweb:/ipfs/QmbsQRX3gmcpimjFEW5ULJVavHQtViyg7NSQ2Q8Qcu6F6V\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/DolomiteAmmRouterProxy.sol\":{\"keccak256\":\"0xeabeadba370b921a5b053fc9475a31de27bdf7fbf4ef24592f082e730e87b9b8\",\"urls\":[\"bzz-raw://479286ba36c067f21750c34e339986b88ac08eaae7e144671fa6361e55baa4a3\",\"dweb:/ipfs/QmUo4q6ytVtxUkgPTxAZh1DYLx1t6GW2Q8H1G2MXJSmq4U\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/uniswap-v2/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0x022ea15b611c155e236053a484d21223ae6f74da3828379cd8a34a16649b5945\",\"urls\":[\"bzz-raw://41979b601b10b34937f2f5939ab5c5240759c3434e405bf84a69ef94a1612454\",\"dweb:/ipfs/QmbK4y63kjtpbxFgResFo9K2bEhNxcxoTqddpJXeHxwqcT\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IDolomiteMargin.sol\":{\"keccak256\":\"0x3e95a2b461f3f0cc4000d71d5c7bb6b1222788cfac1c66faad029ccaa1859d1e\",\"urls\":[\"bzz-raw://cad9773b4a1b196ea3d71129b5bd5679df7db601555a6b29ac111d38c36b00f0\",\"dweb:/ipfs/QmThFva71eLSVmBHHxn34zP7BUCJZDD6wMJHxEkKNWkkvv\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IERC20Detailed.sol\":{\"keccak256\":\"0x22a62e2a8155e70300773721902f4b9118e17aa0bb5d9d1b046050a014cfb223\",\"urls\":[\"bzz-raw://03af737a33c552fbe58f6f1fbd5496854fdc28dd57be4365d56663725c083a18\",\"dweb:/ipfs/QmbgLqGAQEd6tXsZB8QaPNCAMiU6nNzP75wNbKdS65BuUF\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IInterestSetter.sol\":{\"keccak256\":\"0x546825f65490a30e29d0f6446acec49c1e895ce6b33d48ca5c05092725a63a57\",\"urls\":[\"bzz-raw://6ad3013aed985bdf6e6234ae0f7f37e6bba76c3470c33bfa24678cf19b3b412c\",\"dweb:/ipfs/QmfYaSBzxGpgiHoR7ontMJY66S5L26XwkLYoEuzsEjpbQH\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IPriceOracle.sol\":{\"keccak256\":\"0x3f7c3d1397390ea44c6d5e5730d49476431c3df3b28334fe38218de5edc31138\",\"urls\":[\"bzz-raw://63ebf926fca9ce33aaabaf93805686acc25daded1648d6dab59c8c4d05116918\",\"dweb:/ipfs/QmeGkDp7ycYstpfqCYBiqoCYwy876gabx8r42o5koj3H5A\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Account.sol\":{\"keccak256\":\"0x0ab9a3fabc89984dff748af63d4319ee134051de2d7fc560e34ebaac86198396\",\"urls\":[\"bzz-raw://ab67f499a8ef83dc7e7cf7176a0f66eced40fa228eda8dd2d47e066ab985cf42\",\"dweb:/ipfs/QmXRHbsEYxr2Qsfsj5psXGV5LaPZHuzLiEXzSQJ77WSE27\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Actions.sol\":{\"keccak256\":\"0x44ec62b766a88a2f65267991e76cab88711e733b826dc9e578cb6ad6b38b2445\",\"urls\":[\"bzz-raw://731a8d44e57c9dcd7fbdefc37a6b5889c0d06defb3bd66b921b2a7db0edf0103\",\"dweb:/ipfs/QmcVbXc9oi5DMxjPtsBF76oJzD6zVjm7RuXgJfP3Goqrrb\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Bits.sol\":{\"keccak256\":\"0x425bf5764368faca16cc30a64b79d9bbe01fd8150444b58a464971c32450bd85\",\"urls\":[\"bzz-raw://064baf3155da634c5c80cea70bba0dda7a33af934b34f75f596961b4ab9aeafe\",\"dweb:/ipfs/QmTUHXoi9L6CkERyfhFs1jhxU66u2sbc6XRR5cH4TeHEqL\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Cache.sol\":{\"keccak256\":\"0x1e6ff383f285e311d07374edda353e14ac4f29201726b0062a2f046c1a2b482c\",\"urls\":[\"bzz-raw://fd11c5db01039bf2c95f3561b08d271b80b7b1cb9fd7f75da887f7609807c5a7\",\"dweb:/ipfs/QmcY6CugdEHaYUa8ZKSnUDhvtVuoLfpDscZcmC91koAn1t\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Decimal.sol\":{\"keccak256\":\"0x66990bbe3c58d0edf57d3f67ab5280e2a53958ce44f75c335c4c50542321bccb\",\"urls\":[\"bzz-raw://724cfdb5c99121aab5262679e46766a2883e344749870d7dbfa92d1617f68bf2\",\"dweb:/ipfs/QmYjAsS45f6UG2u3zuTks2HVfMYtyFCVMgUvD7Gt7XtU3R\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/EnumerableSet.sol\":{\"keccak256\":\"0x9710b0ab43cc2d964d8722a0aabbedbf7e9d4756dcc0b4ab7c46c1ee68653042\",\"urls\":[\"bzz-raw://2405593d37f0f224bfca556f01634a9755bb0ed626f74dd15293106a8b4dd7d3\",\"dweb:/ipfs/QmTZ16S336jsoDnK5p3vAZRzimBkmdEJibncHVBJxBt469\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Events.sol\":{\"keccak256\":\"0x0c71c063b3a1b4e653d94c05f6fc49de43ccc28838e406faccb1c93f424995a8\",\"urls\":[\"bzz-raw://73268db2286565ecc242da93930780e8e4794015c8c0e58d336981ffdc6cfd3a\",\"dweb:/ipfs/QmRYzhuRtKXnTscERvYS9XzjqdQFBoJZoHwRAekHo6w6Zy\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Interest.sol\":{\"keccak256\":\"0xbb17eb41ff805df51e8d637ef2a368782fdc5f085889c2d847713484f8f1967b\",\"urls\":[\"bzz-raw://538001d60d625695754159a8f716877f72217899fdab296d4725dc44bdbe1895\",\"dweb:/ipfs/QmbRm1WpPpaynnwTdmwB5M7H1cZQEtRAuExqtJ3g9SUiVp\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Math.sol\":{\"keccak256\":\"0x0c0c913b6ccdb69063f9ec84879fcad20a1ee6f44402c9f5ec2b4f5b9f2fa16b\",\"urls\":[\"bzz-raw://89b32eefb57e5e63ad8c6e079ae7bf2d2c8622776cd45af0cf304e1cafd6e078\",\"dweb:/ipfs/Qmcj7yRnYuTgKC3ZqZqe8rynHGYVDS3UrFExcVGcqeaDHY\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Monetary.sol\":{\"keccak256\":\"0x5257274f2d4d3605f3e97ec45fb902111fe9a22506f0b4cf308ea933bc81bfe2\",\"urls\":[\"bzz-raw://85b8023b78805063a2ec8d376f1f5983994eabd96efd8ceadb0224dbb71c5678\",\"dweb:/ipfs/QmaDhzCzRqsuHuJfhToEC4pATQHwhh7yWWsjwfuRzFT1kG\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol\":{\"keccak256\":\"0xe641662503ea29ca959e84674188c3e9deaaf64c5623fb9560a4301c521ca1d3\",\"urls\":[\"bzz-raw://b10a04c7d014b99eb792c8c774e203c846d070b30cf0b715325fc07838ed6a6d\",\"dweb:/ipfs/QmUqZWnbchfEY9jM647yQamHe4GzspfUeRQF9k2nn1Hixd\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Storage.sol\":{\"keccak256\":\"0x9f8e80613b7dcefc4719e57a4a3f7c9bf2cadeb1d2c205c0b667fd5c5538648d\",\"urls\":[\"bzz-raw://ad5d2626e00154cdd4651c718824108220405b75e9196f0744874527d239246b\",\"dweb:/ipfs/QmW7VgfjXDURsTLBayTL6XBkvEX7BGsT9SYCVLpYVMAJtC\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Time.sol\":{\"keccak256\":\"0x233d6ebf965711bf980f4bb2e672fb1a11b4b879fd41c884b3c2b704417d0d0c\",\"urls\":[\"bzz-raw://6478ff81706d531f9438b96274a7b904abbbd9c631540c68c6a89c3accf27abf\",\"dweb:/ipfs/QmWe9vkz3qwVjrcbmcTL8wgkjLPsrEqxcqPJL9ujM8PPbp\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Token.sol\":{\"keccak256\":\"0xd7bcae9e3c570544fc946a00cc7695106a64c20bc130d0183612c0410a531d19\",\"urls\":[\"bzz-raw://0ff5ffd6abb9ed223a64128c131afd962bec07fb9867cb62593906b339c76920\",\"dweb:/ipfs/QmbTrJL4bekvBqqaw6wXnBhYzS9uAqULSWF2VzW4cdfsM5\"]},\"/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol\":{\"keccak256\":\"0xab134538648a2e223a7fe61db03c14f687657a5d37147f93c9088f11735aa311\",\"urls\":[\"bzz-raw://79dc7d2b30576d2349b99267642ac8d5fb7939c920b8d8045379d3614238bdc3\",\"dweb:/ipfs/QmaQJYg1nirHoWSC6G38Cjsk9pZBzEaNrGXKqTsvAzbyES\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]},\"@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xb63221b23818d622bfd83d18e0968307e4fcb7a35536bdceded76e1cf8349acd\",\"urls\":[\"bzz-raw://44e1e8c22362c4708a8c3362735f1465f5b05e2f7315e16c7010d694ce019d73\",\"dweb:/ipfs/QmWj9g8X1hxkXRre2kwkEjLBetjuzmSbWHD81bsSojnBkS\"]}},\"version\":1}",
1160
+ "bytecode": "0x60806040523480156200001157600080fd5b5060405162004f6638038062004f6683398101604081905262000034916200009e565b600080546001600160a01b0394851661010002610100600160a81b031960ff199092166001908117929092161790915580549284166001600160a01b0319938416179055600280549190931691161790556200011e565b8051620000988162000104565b92915050565b600080600060608486031215620000b457600080fd5b6000620000c286866200008b565b9350506020620000d5868287016200008b565b9250506040620000e8868287016200008b565b9150509250925092565b60006001600160a01b03821662000098565b6200010f81620000f2565b81146200011b57600080fd5b50565b614e38806200012e6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80635105ca4a1161008c57806383c88e311161006657806383c88e31146101c0578063ad22c2ae146101d3578063cb8f8f04146101e6578063fd15c891146101f9576100df565b80635105ca4a1461018357806366d555a9146101a55780636993e676146101ad576100df565b806324e43f3d116100bd57806324e43f3d146101445780632f480262146101595780634530a2d71461016e576100df565b8063032027b5146100e457806315c14a4a1461010e5780631a6e58f514610123575b600080fd5b6100f76100f2366004613f2f565b61020c565b604051610105929190614ba2565b60405180910390f35b610116610488565b6040516101059190614b28565b610136610131366004614157565b61049c565b604051610105929190614af5565b61014c61061e565b6040516101059190614b1a565b61016c610167366004614223565b61062d565b005b610176610713565b60405161010591906149d0565b6101966101913660046140a3565b610722565b60405161010593929190614bb0565b610116610b0a565b61016c6101bb36600461434b565b610b19565b6100f76101ce366004613fdf565b610c7d565b61016c6101e136600461434b565b610d4e565b61016c6101f4366004614223565b610e6c565b610136610207366004614157565b610f10565b60008082610260428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b60015460009061027a906001600160a01b03168b8b6111b5565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081529091506001600160a01b038216906323b872dd906102c690339085908d906004016149de565b602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061031891908101906141e7565b50600080826001600160a01b0316639dc29fac8f8f6040518363ffffffff1660e01b815260040161034a929190614ada565b6040805180830381600087803b15801561036357600080fd5b505af1158015610377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061039b919081019061431b565b9150915060006103ab8d8d6111ed565b509050806001600160a01b03168d6001600160a01b0316146103ce5781836103d1565b82825b90975095506104268a8810157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204120616d6f756e7400000000000000000000008a8e611083565b610476898710157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204220616d6f756e740000000000000000000000898d611083565b50505050509850989650505050505050565b60005461010090046001600160a01b031681565b60608061060f6040518060e001604052806040518061010001604052808b81526020016104c88b6112d5565b81526020016104d68a6112d5565b8152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815260200160006001600160a01b031681526020016000151581526020016000815260200160008152508152602001600060019054906101000a90046001600160a01b03166001600160a01b03168152602001600160009054906101000a90046001600160a01b03166001600160a01b031681526020018a6001600160a01b0316815260200160006040519080825280602002602001820160405280156105ce578160200160208202803883390190505b50815260200160006040519080825280602002602001820160405280156105ff578160200160208202803883390190505b5081526020016000815250611309565b91509150965096945050505050565b6000610628611434565b905090565b8061067e428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6040805160e081018252848152600080546001600160a01b03610100909104811660208085019190915260015490911683850152336060840152835182815290810190935261070e9260808301915b50815260200160006040519080825280602002602001820160405280156106fe578160200160208202803883390190505b5081526020016000815250611458565b505050565b6002546001600160a01b031681565b600080600083610778428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6107868b8b8b8b8b8b6114d6565b60015491955093506000906107a5906001600160a01b03168d8d6111b5565b60408051600280825260608281019093529293509091816020015b6107c8613a93565b8152602001906001900390816107c05790505090506040518060400160405280336001600160a01b031681526020018f8152508160008151811061080857fe5b60200260200101819052506040518060400160405280836001600160a01b0316815260200160008152508160018151811061083f57fe5b602002602001018190525060008060019054906101000a90046001600160a01b03166001600160a01b0316638fae3be18f6040518263ffffffff1660e01b815260040161088c91906149d0565b60206040518083038186803b1580156108a457600080fd5b505afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108dc91908101906142fd565b905060008060019054906101000a90046001600160a01b03166001600160a01b0316638fae3be18f6040518263ffffffff1660e01b815260040161092091906149d0565b60206040518083038186803b15801561093857600080fd5b505afa15801561094c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061097091908101906142fd565b60408051600280825260608281019093529293509091816020015b610993613aaa565b81526020019060019003908161098b5790505090506109b660006001858c611744565b816000815181106109c357fe5b60200260200101819052506109dc60006001848b611744565b816001815181106109e957fe5b60209081029190910101526000546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063a67a6a4590610a439087908590600401614af5565b600060405180830381600087803b158015610a5d57600080fd5b505af1158015610a71573d6000803e3d6000fd5b5050505050505050806001600160a01b0316636a6278428f6040518263ffffffff1660e01b8152600401610aa591906149d0565b602060405180830381600087803b158015610abf57600080fd5b505af1158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610af791908101906142fd565b9250505099509950999650505050505050565b6001546001600160a01b031681565b80610b6a428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b610c746040518060e001604052806040518061010001604052808b8152602001610b938b6112d5565b8152602001610ba18a6112d5565b815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050506020808301829052604080840183905260608085018490526080948501849052948652825461010090046001600160a01b03908116878401526001541686820152339486019490945283518281529081019093529201915b5081526020016000604051908082528060200260200182016040528015610c64578160200160208202803883390190505b5081526020016000815250611815565b50505050505050565b60015460009081908190610c9b906001600160a01b03168b8b6111b5565b905060008460000151610cae5788610cb2565b6000195b9050816001600160a01b031663d505accf3330848a8a602001518b604001518c606001516040518863ffffffff1660e01b8152600401610cf89796959493929190614a06565b600060405180830381600087803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b50505050610d3a8d8d8d8d8d8d8d8d61020c565b909e909d509b505050505050505050505050565b80610d9f428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b610c746040518060e001604052806040518061010001604052808b8152602001610dc88b6112d5565b8152602001610dd68a6112d5565b815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050506020808301829052604080840183905260608085018490526080948501849052948652825461010090046001600160a01b03908116878401526001541686820152339486019490945283518281529081019093529201916106cd565b80610ebd428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6040805160e081018252848152600080546001600160a01b03610100909104811660208085019190915260015490911683850152336060840152835182815290810190935261070e926080830191610c33565b60608061060f6040518060e001604052806040518061010001604052808b8152602001610f3c8b6112d5565b8152602001610f4a8a6112d5565b8152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815260200160006001600160a01b031681526020016000151581526020016000815260200160008152508152602001600060019054906101000a90046001600160a01b03166001600160a01b03168152602001600160009054906101000a90046001600160a01b03166001600160a01b031681526020018a6001600160a01b031681526020016000604051908082528060200260200182016040528015611042578160200160208202803883390190505b5081526020016000604051908082528060200260200182016040528015611073578160200160208202803883390190505b5081526020016000815250611821565b846111ae5761109184611910565b7f3a200000000000000000000000000000000000000000000000000000000000006110bb85611910565b7f203c0000000000000000000000000000000000000000000000000000000000006110e5866119c6565b7f2c2000000000000000000000000000000000000000000000000000000000000061110f876119c6565b60405161114797969594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001614912565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526111a591600401614b56565b60405180910390fd5b5050505050565b60006111e38484847f1a9d5b55099d6a7ec208ab10001d5fd43c8c7736353a25c1af97ae381a093257611ab7565b90505b9392505050565b600080611250836001600160a01b0316856001600160a01b031614157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f6964656e746963616c2061646472657373657300000000000000000000000000611b48565b826001600160a01b0316846001600160a01b031610611270578284611273565b83835b90925090506112ce6001600160a01b03831615157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f7a65726f20616464726573730000000000000000000000000000000000000000611b48565b9250929050565b6112dd613afc565b60408051608081019091526001815260208101600081526020016000815260200183905290505b919050565b60608061131583611b92565b6080840181905283516020015181516000926113429291849061133457fe5b602002602001015186611c9d565b9050600061137885600001516040015186608001516001886080015151038151811061136a57fe5b602002602001015187611c9d565b9050611391856040015183876000015160600151611dfe565b60a08601819052805161142091839160001981019081106113ae57fe5b602002602001015110157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74206f757470757420616d6f756e740000000000008860a0015160018a60a0015151038151811061141257fe5b602002602001015185611083565b61142985611f2c565b935093505050915091565b7f1a9d5b55099d6a7ec208ab10001d5fd43c8c7736353a25c1af97ae381a09325790565b60608061146483611821565b9150915082602001516001600160a01b031663a67a6a4583836040518363ffffffff1660e01b815260040161149a929190614af5565b600060405180830381600087803b1580156114b457600080fd5b505af11580156114c8573d6000803e3d6000fd5b5050505061070e838361239a565b6001546040517fe6a4390500000000000000000000000000000000000000000000000000000000815260009182916001600160a01b03909116908290829063e6a439059061152a908d908d90600401614a6e565b60206040518083038186803b15801561154257600080fd5b505afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061157a9190810190613f11565b6001600160a01b03161415611624576040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063c9c65396906115d0908c908c90600401614a6e565b602060405180830381600087803b1580156115ea57600080fd5b505af11580156115fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116229190810190613f11565b505b600080611632838c8c612875565b91509150816000148015611644575080155b1561165457889450879350611736565b60006116618a84846128b0565b90508881116116c5576116ba878210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204220616d6f756e740000000000000000000000848b611083565b899550935083611734565b60006116d28a84866128b0565b90508a8111156116de57fe5b61172e898210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204120616d6f756e740000000000000000000000848d611083565b95508894505b505b505050965096945050505050565b61174c613aaa565b611754613afc565b60001983141561178b57604080516080810190915260018152602081016000815260200160018152602001600081525090506117b2565b60408051608081019091526000808252602082019081526020016000815260200184905290505b6040805161010081019091528060028152602001878152602001828152602001858152602001600019815260200160006001600160a01b03168152602001868152602001604051806020016040528060008152508152509150505b949350505050565b60608061146483611309565b60608061182d83611b92565b60808401819052835160200151815160009261184c9291849061133457fe5b9050600061187485600001516040015186608001516001886080015151038151811061136a57fe5b905061188d85604001518287600001516060015161297b565b60a0860181905280516114209184916000906118a557fe5b602002602001015111157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f65786365737369766520696e70757420616d6f756e74000000000000000000008860a0015160008151811061190257fe5b602002602001015186611083565b6060808260405160200161192491906148d5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156119af5781516000199091019082908290811061197257fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156119aa5760010181529050611304565b611957565b505060408051600081526020810190915292915050565b606081611a07575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152611304565b8160005b8115611a1f57600101600a82049150611a0b565b6060816040519080825280601f01601f191660200182016040528015611a4c576020820181803883390190505b508593509050815b8015611aae5760001901600a840660300160f81b828281518110611a7457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611a54565b50949350505050565b6000806000611ac686866111ed565b91509150868282604051602001611ade9291906148af565b6040516020818303038152906040528051906020012085604051602001611b079392919061498e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120979650505050505050565b8261070e57611b5682611910565b7f3a20000000000000000000000000000000000000000000000000000000000000611b8083611910565b604051602001611147939291906148ea565b60608082600001516060015151604051908082528060200260200182016040528015611bc8578160200160208202803883390190505b50905060005b83516060015151811015611c965783602001516001600160a01b0316638fae3be18560000151606001518381518110611c0357fe5b60200260200101516040518263ffffffff1660e01b8152600401611c2791906149d0565b60206040518083038186803b158015611c3f57600080fd5b505afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c7791908101906142fd565b828281518110611c8357fe5b6020908102919091010152600101611bce565b5092915050565b60008084602001516001811115611cb057fe5b1415611cc1575060608301516111e6565b6060840151611d25906fffffffffffffffffffffffffffffffff8116147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c696420617373657420616d6f756e74000000000000000000000000611b48565b60408051808201825285511515815260608601516fffffffffffffffffffffffffffffffff1660208083019190915284015191517f56ea84b2000000000000000000000000000000000000000000000000000000008152611df3926001600160a01b0316906356ea84b290611d9e908890600401614b1a565b60606040518083038186803b158015611db657600080fd5b505afa158015611dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611dee9190810190614205565b6129a9565b6020015190506111e6565b6060611e506002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c696420706174680000000000000000000000000000000000000000611b48565b8151604051908082528060200260200182016040528015611e7b578160200160208202803883390190505b5090508281600081518110611e8c57fe5b60200260200101818152505060005b6001835103811015611f2457600080611ede87868581518110611eba57fe5b6020026020010151878660010181518110611ed157fe5b6020026020010151612875565b91509150611f00848481518110611ef157fe5b60200260200101518383612a60565b848460010181518110611f0f57fe5b60209081029190910101525050600101611e9b565b509392505050565b606080611fb16000845160200151604001516001811115611f4957fe5b148015611f6a57506000845160409081015101516001811115611f6857fe5b145b7f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206173736574207265666572656e6365000000000000000000611b48565b6060611fc98460400151856000015160600151612b6e565b90506060611fd78583612b9b565b90506060611fe6868385612d13565b8651608001519091506001600160a01b03161580159061200c5750855160c00151600019145b1561238257855160e0015160009015612026576001612029565b60005b60ff169050600082826001855103038151811061204257fe5b6020026020010151606001519050876000015160a00151156121045787602001516001600160a01b031663c190c2ec8560018751038151811061208157fe5b6020026020010151836040518363ffffffff1660e01b81526004016120a7929190614b87565b604080518083038186803b1580156120be57600080fd5b505afa1580156120d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120f69190810190614292565b6020015160c089015261237b565b80886080015160008151811061211657fe5b602002602001015114156121ef576121e58860a0015160008151811061213857fe5b602002602001015189602001516001600160a01b031663c190c2ec8760008151811061216057fe5b6020026020010151856040518363ffffffff1660e01b8152600401612186929190614b87565b604080518083038186803b15801561219d57600080fd5b505afa1580156121b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121d59190810190614292565b602001519063ffffffff6130bb16565b60c089015261237b565b60808801518051829190600019810190811061220757fe5b602002602001015114156122dc5760a088015180516121e59190600019810190811061222f57fe5b602002602001015189602001516001600160a01b031663c190c2ec8760008151811061225757fe5b6020026020010151856040518363ffffffff1660e01b815260040161227d929190614b87565b604080518083038186803b15801561229457600080fd5b505afa1580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122cc9190810190614292565b602001519063ffffffff6130fd16565b87602001516001600160a01b031663c190c2ec856000815181106122fc57fe5b6020026020010151836040518363ffffffff1660e01b8152600401612322929190614b87565b604080518083038186803b15801561233957600080fd5b505afa15801561234d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123719190810190614292565b6020015160c08901525b505061238f565b855160c090810151908701525b909350915050915091565b815160a0015180156123ad575081515115155b15612659576123ba613a93565b82602001516001600160a01b03166347d1b53c836000815181106123da57fe5b60200260200101518560800151600187608001515103815181106123fa57fe5b60200260200101516040518363ffffffff1660e01b815260040161241f929190614b87565b604080518083038186803b15801561243657600080fd5b505afa15801561244a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061246e9190810190614274565b835180516060909101518051929350909133917fb81518bcaf15a56ac0e4b0ff579f0bd8e163ac444d526743908dc22733789f06916000906124ac57fe5b6020908102919091010151865160600151805160001981019081106124cd57fe5b6020026020010151876000015160800151604051806040016040528060405180604001604052806000151581526020018c60a0015160008151811061250e57fe5b602002602001015181525081526020018a602001516001600160a01b03166347d1b53c8b60008151811061253e57fe5b60200260200101518d6080015160008151811061255757fe5b60200260200101516040518363ffffffff1660e01b815260040161257c929190614b87565b604080518083038186803b15801561259357600080fd5b505afa1580156125a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125cb9190810190614274565b905260408051608081018252600191810191825260a08c01518051919283929091606084019160001981019081106125ff57fe5b6020908102919091018101519091529082529081018a905260408051608081018252600181830190815260c08f0151606083015281529182018b90525161264b96959493929190614a89565b60405180910390a350612871565b8151511561287157612669613a93565b82602001516001600160a01b03166347d1b53c8360008151811061268957fe5b602002602001015185608001516000815181106126a257fe5b60200260200101516040518363ffffffff1660e01b81526004016126c7929190614b87565b604080518083038186803b1580156126de57600080fd5b505afa1580156126f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127169190810190614274565b835180516060909101518051929350909133917fecf4fe97b02d1620f6c04edbd484eff130a2247b31ac1ef061f54c8177b657b99160009061275457fe5b60209081029190910101518651606001518051600019810190811061277557fe5b6020026020010151876000015160800151604051806040016040528060405180604001604052806000151581526020018c60a001516000815181106127b657fe5b6020026020010151815250815260200188815250604051806040016040528060405180604001604052806001151581526020018d60a0015160018f60a0015151038151811061280157fe5b6020026020010151815250815260200161282f8c8c60008151811061282257fe5b602002602001015161313c565b905260408051608081018252600081830190815260c08e015160608301528152602081018b9052905161286796959493929190614a89565b60405180910390a3505b5050565b6000806128a4857f1a9d5b55099d6a7ec208ab10001d5fd43c8c7736353a25c1af97ae381a09325786866131e4565b91509150935093915050565b6000612900600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e7420616d6f756e7400000000000000000000000000611b48565b61295a6000841180156129135750600083115b7f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b8261296b858463ffffffff6132cd16565b8161297257fe5b04949350505050565b60606111e3847f1a9d5b55099d6a7ec208ab10001d5fd43c8c7736353a25c1af97ae381a0932578585613321565b6129b1613a93565b602083015183516fffffffffffffffffffffffffffffffff9091169015612a1d57604080518082019091526001815260208481015190820190612a129084906bffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61344916565b815250915050612a5a565b604080518082019091526000815283516020820190612a129084906bffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61344916565b92915050565b6000612ab0600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e7420696e70757420616d6f756e7400000000000000611b48565b612b096000841180156129135750600083117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b6000612b1d856103e563ffffffff6132cd16565b90506000612b31828563ffffffff6132cd16565b90506000612b5783612b4b886103e863ffffffff6132cd16565b9063ffffffff6130fd16565b9050808281612b6257fe5b04979650505050505050565b60606111e6837f1a9d5b55099d6a7ec208ab10001d5fd43c8c7736353a25c1af97ae381a093257846134e6565b81516080015160609081906001600160a01b0316612bf9578251600101604051908082528060200260200182016040528015612bf157816020015b612bde613a93565b815260200190600190039081612bd65790505b509050612c79565b8251600201604051908082528060200260200182016040528015612c3757816020015b612c24613a93565b815260200190600190039081612c1c5790505b509050604051806040016040528085606001516001600160a01b03168152602001600081525081600183510381518110612c6d57fe5b60200260200101819052505b6040805180820190915260608501516001600160a01b03168152845151602082015281518290600090612ca857fe5b602090810291909101015260005b8351811015611f24576040518060400160405280858381518110612cd657fe5b60200260200101516001600160a01b031681526020016000815250828260010181518110612d0057fe5b6020908102919091010152600101612cb6565b82516080015160609081906001600160a01b0316612d6e578251604051908082528060200260200182016040528015612d6657816020015b612d53613aaa565b815260200190600190039081612d4b5790505b509050612f7c565b845160c00151612dc19015157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206d617267696e206465706f73697400000000000000000000611b48565b845160e0015160009015612dd6576001612dd9565b60005b60ff16905080845160010101604051908082528060200260200182016040528015612e1e57816020015b612e0b613aaa565b815260200190600190039081612e035790505b50865160a0015190925015612efa81612e3b576001875103612e3e565b60005b82612e4a576000612e50565b60018851035b60208a01518a51608001516040517f8fae3be10000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691638fae3be191612e9f916004016149d0565b60206040518083038186803b158015612eb757600080fd5b505afa158015612ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612eef91908101906142fd565b8a5160c00151611744565b838360018651030381518110612f0c57fe5b60200260200101819052508160011415612f7957612f5d876000015187600081518110612f3557fe5b602002602001015160008a60800151600081518110612f5057fe5b60200260200101516135db565b83600185510381518110612f6d57fe5b60200260200101819052505b50505b60005b8351811015611aae57613014848281518110612f9757fe5b60200260200101516001600160a01b0316868360010181518110612fb757fe5b6020026020010151600001516001600160a01b0316147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206f7468657220616464726573730000000000000000000000611b48565b61309c6000826001018860800151848151811061302d57fe5b60200260200101518960800151856001018151811061304857fe5b602002602001015188868151811061305c57fe5b60200260200101518b60a00151878151811061307457fe5b60200260200101518c60a00151886001018151811061308f57fe5b6020026020010151613784565b8282815181106130a857fe5b6020908102919091010152600101612f7f565b60006111e683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613822565b6000828201838110156111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590614b67565b613144613a93565b82602001516001600160a01b03166347d1b53c8385608001516001876080015151038151811061317057fe5b60200260200101516040518363ffffffff1660e01b8152600401613195929190614b87565b604080518083038186803b1580156131ac57600080fd5b505afa1580156131c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111e69190810190614274565b60008060006131f385856111ed565b5090506000806132058988888b611ab7565b6001600160a01b031663b432a82c6040518163ffffffff1660e01b815260040160606040518083038186803b15801561323d57600080fd5b505afa158015613251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061327591908101906142b0565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316876001600160a01b0316146132ba5780826132bd565b81815b909a909950975050505050505050565b6000826132dc57506000612a5a565b828202828482816132e957fe5b04146111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590614b77565b60606133736002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c696420706174680000000000000000000000000000000000000000611b48565b815160405190808252806020026020018201604052801561339e578160200160208202803883390190505b50905082816001835103815181106133b257fe5b60209081029190910101528151600019015b8015611aae5760008061340288888760018703815181106133e157fe5b60200260200101518887815181106133f557fe5b60200260200101516131e4565b9150915061342484848151811061341557fe5b60200260200101518383613868565b84600185038151811061343357fe5b60209081029190910101525050600019016133c4565b6000831580613456575082155b1561346d57613466600083613970565b90506111e6565b600061347f858563ffffffff6132cd16565b90506134dd6134aa6001612b4b600261349e888463ffffffff6130bb16565b9063ffffffff61397016565b6134ba838663ffffffff6139b216565b10156134c75760006134ca565b60015b60ff16612b4b838663ffffffff61397016565b95945050505050565b60606135386002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c69642070617468206c656e67746800000000000000000000000000611b48565b60606001835103604051908082528060200260200182016040528015613568578160200160208202803883390190505b50905060005b6001845103811015611aae576135af8685838151811061358a57fe5b60200260200101518684600101815181106135a157fe5b602002602001015188611ab7565b8282815181106135bb57fe5b6001600160a01b039092166020928302919091019091015260010161356e565b6135e3613aaa565b60e085015161363b9063ffffffff8116147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206578706972792074696d6500000000000000000000000000611b48565b604080516001808252818301909252606091816020015b61365a613b25565b81526020019060019003908161365257905050905060405180608001604052808681526020018481526020018760e0015163ffffffff16815260200160011515815250816000815181106136aa57fe5b602090810291909101015260408051610100810190915280600881526020808201879052604080516080810182526001815292019190810160008152602001600081526020016000815250815260200160001981526020016000198152602001600260009054906101000a90046001600160a01b03166001600160a01b03168152602001600019815260200160008360405160200161374a929190614b36565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290529695505050505050565b61378c613aaa565b604080516101008101909152806005815260208082018b905260408051608081018252600181529201919081016000815260200160008152602001868152508152602001878152602001868152602001856001600160a01b03168152602001888152602001836040516020016138029190614b1a565b60405160208183030381529060405281525090505b979650505050505050565b60008184841115613860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b505050900390565b60006138b8600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206f757470757420616d6f756e74000000000000611b48565b6139116000841180156129135750600083117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b60006139356103e8613929868863ffffffff6132cd16565b9063ffffffff6132cd16565b9050600061394f6103e5613929868963ffffffff6130bb16565b90506139666001612b4b848463ffffffff61397016565b9695505050505050565b60006111e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139f4565b60006111e683836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250613a45565b60008183613a2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b506000838581613a3b57fe5b0495945050505050565b60008183613a80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b50828481613a8a57fe5b06949350505050565b604080518082019091526000808252602082015290565b604080516101008101825260008082526020820152908101613aca613afc565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b6040518060800160405280613b38613a93565b81526000602082018190526040820181905260609091015290565b8035612a5a81614d95565b8051612a5a81614d95565b60008083601f840112613b7b57600080fd5b50813567ffffffffffffffff811115613b9357600080fd5b6020830191508360208202830111156112ce57600080fd5b600082601f830112613bbc57600080fd5b8135613bcf613bca82614bf2565b614bcb565b91508181835260208401935060208101905083856020840282011115613bf457600080fd5b60005b83811015613c205781613c0a8882613b53565b8452506020928301929190910190600101613bf7565b5050505092915050565b8035612a5a81614da9565b8051612a5a81614da9565b8035612a5a81614db2565b8035612a5a81614dbb565b600060808284031215613c6857600080fd5b613c726080614bcb565b90506000613c808484613c2a565b8252506020613c9184848301613c4b565b6020830152506040613ca584828501613c4b565b6040830152506060613cb984828501613c40565b60608301525092915050565b600060608284031215613cd757600080fd5b613ce16060614bcb565b90506000613cef8484613f06565b8252506020613d0084848301613f06565b6020830152506040613d1484828501613ef0565b60408301525092915050565b60006101c08284031215613d3357600080fd5b613d3e610100614bcb565b90506000613d4c8484613c40565b8252506020613d5d84848301613c56565b60208301525060a0613d7184828501613c56565b60408301525061012082013567ffffffffffffffff811115613d9257600080fd5b613d9e84828501613bab565b606083015250610140613db384828501613b53565b608083015250610160613dc884828501613c2a565b60a083015250610180613ddd84828501613c40565b60c0830152506101a0613df284828501613c40565b60e08301525092915050565b600060408284031215613e1057600080fd5b613e1a6040614bcb565b90506000613e288484613c35565b8252506020613e3984848301613eda565b60208301525092915050565b600060808284031215613e5757600080fd5b613e616080614bcb565b90506000613e6f8484613c2a565b8252506020613e8084848301613efb565b6020830152506040613ca584828501613c40565b600060408284031215613ea657600080fd5b613eb06040614bcb565b90506000613ebe8484613c35565b8252506020613e3984848301613ee5565b8051612a5a81614dc8565b8051612a5a81614dd1565b8051612a5a81614db2565b8051612a5a81614dda565b8035612a5a81614de3565b8051612a5a81614dec565b600060208284031215613f2357600080fd5b600061180d8484613b5e565b600080600080600080600080610100898b031215613f4c57600080fd5b6000613f588b8b613b53565b9850506020613f698b828c01613c40565b9750506040613f7a8b828c01613b53565b9650506060613f8b8b828c01613b53565b9550506080613f9c8b828c01613c40565b94505060a0613fad8b828c01613c40565b93505060c0613fbe8b828c01613c40565b92505060e0613fcf8b828c01613c40565b9150509295985092959890939650565b60008060008060008060008060006101808a8c031215613ffe57600080fd5b600061400a8c8c613b53565b995050602061401b8c828d01613c40565b985050604061402c8c828d01613b53565b975050606061403d8c828d01613b53565b965050608061404e8c828d01613c40565b95505060a061405f8c828d01613c40565b94505060c06140708c828d01613c40565b93505060e06140818c828d01613c40565b9250506101006140938c828d01613e45565b9150509295985092959850929598565b60008060008060008060008060006101208a8c0312156140c257600080fd5b60006140ce8c8c613b53565b99505060206140df8c828d01613c40565b98505060406140f08c828d01613b53565b97505060606141018c828d01613b53565b96505060806141128c828d01613c40565b95505060a06141238c828d01613c40565b94505060c06141348c828d01613c40565b93505060e06141458c828d01613c40565b9250506101006140938c828d01613c40565b60008060008060008060a0878903121561417057600080fd5b600061417c8989613b53565b965050602061418d89828a01613c40565b955050604061419e89828a01613c40565b94505060606141af89828a01613c40565b935050608087013567ffffffffffffffff8111156141cc57600080fd5b6141d889828a01613b69565b92509250509295509295509295565b6000602082840312156141f957600080fd5b600061180d8484613c35565b60006060828403121561421757600080fd5b600061180d8484613cc5565b6000806040838503121561423657600080fd5b823567ffffffffffffffff81111561424d57600080fd5b61425985828601613d20565b925050602061426a85828601613c40565b9150509250929050565b60006040828403121561428657600080fd5b600061180d8484613dfe565b6000604082840312156142a457600080fd5b600061180d8484613e94565b6000806000606084860312156142c557600080fd5b60006142d18686613ecf565b93505060206142e286828701613ecf565b92505060406142f386828701613ef0565b9150509250925092565b60006020828403121561430f57600080fd5b600061180d8484613ee5565b6000806040838503121561432e57600080fd5b600061433a8585613ee5565b925050602061426a85828601613ee5565b60008060008060008060a0878903121561436457600080fd5b60006143708989613c40565b965050602061438189828a01613c40565b955050604061439289828a01613c40565b945050606087013567ffffffffffffffff8111156143af57600080fd5b6143bb89828a01613b69565b935093505060806143ce89828a01613c40565b9150509295509295509295565b60006111e683836146db565b60006143f383836147f1565b505060400190565b60006144078383614839565b505060a00190565b61441881614ceb565b82525050565b61441881614c26565b61441861443382614c26565b614d3f565b600061444382614c19565b61444d8185614c1d565b93508360208202850161445f85614c13565b8060005b85811015614499578484038952815161447c85826143db565b945061448783614c13565b60209a909a0199925050600101614463565b5091979650505050505050565b60006144b182614c19565b6144bb8185614c1d565b93506144c683614c13565b8060005b838110156144f45781516144de88826143e7565b97506144e983614c13565b9250506001016144ca565b509495945050505050565b600061450a82614c19565b6145148185614c1d565b935061451f83614c13565b8060005b838110156144f457815161453788826143fb565b975061454283614c13565b925050600101614523565b61441881614c31565b61441861456282614c36565b614c80565b61441861456282614c5b565b61441881614c80565b61441861456282614c80565b600061459382614c19565b61459d8185611304565b93506145ad818560208601614d13565b9290920192915050565b60006145c282614c19565b6145cc8185614c1d565b93506145dc818560208601614d13565b6145e581614d50565b9093019392505050565b61441881614cf2565b61441881614cfd565b61441881614d08565b6000614617601b83614c1d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000614650600183611304565b7fff00000000000000000000000000000000000000000000000000000000000000815260010192915050565b6000614689602183614c1d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b80516000906101608401906146f085826145f8565b5060208301516147036020860182614573565b506040830151614716604086018261477d565b50606083015161472960c0860182614573565b50608083015161473c60e0860182614573565b5060a083015161475061010086018261441e565b5060c0830151614764610120860182614573565b5060e08301518482036101408601526134dd82826145b7565b8051608083019061478e848261454d565b5060208201516147a16020850182614601565b5060408201516147b46040850182614601565b5060608201516147c76060850182614573565b50505050565b805160808301906147de8482614883565b5060208201516147c76040850182614815565b80516040830190614802848261441e565b5060208201516147c76020850182614573565b80516040830190614826848261454d565b5060208201516147c76020850182614894565b805160a083019061484a84826147f1565b50602082015161485d6040850182614573565b506040820151614870606085018261489d565b5060608201516147c7608085018261454d565b80516040830190614802848261454d565b61441881614caa565b61441881614ccb565b61441881614cd4565b60006148bb8285614427565b6014820191506148cb8284614427565b5060140192915050565b60006148e1828461457c565b50602001919050565b60006148f68286614588565b91506149028285614567565b6002820191506134dd8284614588565b600061491e828b614588565b915061492a828a614567565b60028201915061493a8289614588565b91506149468288614567565b6002820191506149568287614588565b91506149628286614567565b6002820191506149728285614588565b915061497e8284614556565b5060010198975050505050505050565b600061499982614643565b91506149a58286614427565b6014820191506149b5828561457c565b6020820191506149c5828461457c565b506020019392505050565b60208101612a5a828461441e565b606081016149ec828661440f565b6149f9602083018561441e565b61180d6040830184614573565b60e08101614a14828a61440f565b614a21602083018961441e565b614a2e6040830188614573565b614a3b6060830187614573565b614a4860808301866148a6565b614a5560a0830185614573565b614a6260c0830184614573565b98975050505050505050565b60408101614a7c828561441e565b6111e6602083018461441e565b6101e08101614a98828961441e565b614aa5602083018861441e565b614ab2604083018761441e565b614abf60608301866147cd565b614acc60e08301856147cd565b6138176101608301846147cd565b60408101614ae8828561441e565b6111e66020830184614573565b60408082528101614b0681856144a6565b905081810360208301526111e38184614438565b60208101612a5a8284614573565b60208101612a5a82846145ef565b60408101614b448285614601565b81810360208301526111e381846144ff565b602080825281016111e681846145b7565b60208082528101612a5a8161460a565b60208082528101612a5a8161467c565b60608101614b9582856147f1565b6111e66040830184614573565b60408101614ae88285614573565b60608101614bbe8286614573565b6149f96020830185614573565b60405181810167ffffffffffffffff81118282101715614bea57600080fd5b604052919050565b600067ffffffffffffffff821115614c0957600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b6000612a5a82614cbf565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b8061130481614d7e565b8061130481614d8b565b6dffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b6000612a5a825b6000612a5a82614c26565b6000612a5a82614c83565b6000612a5a82614c8d565b60005b83811015614d2e578181015183820152602001614d16565b838111156147c75750506000910152565b6000612a5a826000612a5a82614d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b60601b90565b60098110614d8857fe5b50565b60028110614d8857fe5b614d9e81614c26565b8114614d8857600080fd5b614d9e81614c31565b614d9e81614c80565b60028110614d8857600080fd5b614d9e81614c97565b614d9e81614caa565b614d9e81614ccb565b614d9e81614cd4565b614d9e81614cda56fea365627a7a723158201d3dcd1d0ca279a9cb2172ee13b2e12fa268a898325738b1584f3f9e3221cc0f6c6578706572696d656e74616cf564736f6c63430005100040",
1161
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c80635105ca4a1161008c57806383c88e311161006657806383c88e31146101c0578063ad22c2ae146101d3578063cb8f8f04146101e6578063fd15c891146101f9576100df565b80635105ca4a1461018357806366d555a9146101a55780636993e676146101ad576100df565b806324e43f3d116100bd57806324e43f3d146101445780632f480262146101595780634530a2d71461016e576100df565b8063032027b5146100e457806315c14a4a1461010e5780631a6e58f514610123575b600080fd5b6100f76100f2366004613f2f565b61020c565b604051610105929190614ba2565b60405180910390f35b610116610488565b6040516101059190614b28565b610136610131366004614157565b61049c565b604051610105929190614af5565b61014c61061e565b6040516101059190614b1a565b61016c610167366004614223565b61062d565b005b610176610713565b60405161010591906149d0565b6101966101913660046140a3565b610722565b60405161010593929190614bb0565b610116610b0a565b61016c6101bb36600461434b565b610b19565b6100f76101ce366004613fdf565b610c7d565b61016c6101e136600461434b565b610d4e565b61016c6101f4366004614223565b610e6c565b610136610207366004614157565b610f10565b60008082610260428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b60015460009061027a906001600160a01b03168b8b6111b5565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081529091506001600160a01b038216906323b872dd906102c690339085908d906004016149de565b602060405180830381600087803b1580156102e057600080fd5b505af11580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061031891908101906141e7565b50600080826001600160a01b0316639dc29fac8f8f6040518363ffffffff1660e01b815260040161034a929190614ada565b6040805180830381600087803b15801561036357600080fd5b505af1158015610377573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061039b919081019061431b565b9150915060006103ab8d8d6111ed565b509050806001600160a01b03168d6001600160a01b0316146103ce5781836103d1565b82825b90975095506104268a8810157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204120616d6f756e7400000000000000000000008a8e611083565b610476898710157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204220616d6f756e740000000000000000000000898d611083565b50505050509850989650505050505050565b60005461010090046001600160a01b031681565b60608061060f6040518060e001604052806040518061010001604052808b81526020016104c88b6112d5565b81526020016104d68a6112d5565b8152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815260200160006001600160a01b031681526020016000151581526020016000815260200160008152508152602001600060019054906101000a90046001600160a01b03166001600160a01b03168152602001600160009054906101000a90046001600160a01b03166001600160a01b031681526020018a6001600160a01b0316815260200160006040519080825280602002602001820160405280156105ce578160200160208202803883390190505b50815260200160006040519080825280602002602001820160405280156105ff578160200160208202803883390190505b5081526020016000815250611309565b91509150965096945050505050565b6000610628611434565b905090565b8061067e428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6040805160e081018252848152600080546001600160a01b03610100909104811660208085019190915260015490911683850152336060840152835182815290810190935261070e9260808301915b50815260200160006040519080825280602002602001820160405280156106fe578160200160208202803883390190505b5081526020016000815250611458565b505050565b6002546001600160a01b031681565b600080600083610778428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6107868b8b8b8b8b8b6114d6565b60015491955093506000906107a5906001600160a01b03168d8d6111b5565b60408051600280825260608281019093529293509091816020015b6107c8613a93565b8152602001906001900390816107c05790505090506040518060400160405280336001600160a01b031681526020018f8152508160008151811061080857fe5b60200260200101819052506040518060400160405280836001600160a01b0316815260200160008152508160018151811061083f57fe5b602002602001018190525060008060019054906101000a90046001600160a01b03166001600160a01b0316638fae3be18f6040518263ffffffff1660e01b815260040161088c91906149d0565b60206040518083038186803b1580156108a457600080fd5b505afa1580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108dc91908101906142fd565b905060008060019054906101000a90046001600160a01b03166001600160a01b0316638fae3be18f6040518263ffffffff1660e01b815260040161092091906149d0565b60206040518083038186803b15801561093857600080fd5b505afa15801561094c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061097091908101906142fd565b60408051600280825260608281019093529293509091816020015b610993613aaa565b81526020019060019003908161098b5790505090506109b660006001858c611744565b816000815181106109c357fe5b60200260200101819052506109dc60006001848b611744565b816001815181106109e957fe5b60209081029190910101526000546040517fa67a6a450000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169063a67a6a4590610a439087908590600401614af5565b600060405180830381600087803b158015610a5d57600080fd5b505af1158015610a71573d6000803e3d6000fd5b5050505050505050806001600160a01b0316636a6278428f6040518263ffffffff1660e01b8152600401610aa591906149d0565b602060405180830381600087803b158015610abf57600080fd5b505af1158015610ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610af791908101906142fd565b9250505099509950999650505050505050565b6001546001600160a01b031681565b80610b6a428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b610c746040518060e001604052806040518061010001604052808b8152602001610b938b6112d5565b8152602001610ba18a6112d5565b815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050506020808301829052604080840183905260608085018490526080948501849052948652825461010090046001600160a01b03908116878401526001541686820152339486019490945283518281529081019093529201915b5081526020016000604051908082528060200260200182016040528015610c64578160200160208202803883390190505b5081526020016000815250611815565b50505050505050565b60015460009081908190610c9b906001600160a01b03168b8b6111b5565b905060008460000151610cae5788610cb2565b6000195b9050816001600160a01b031663d505accf3330848a8a602001518b604001518c606001516040518863ffffffff1660e01b8152600401610cf89796959493929190614a06565b600060405180830381600087803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b50505050610d3a8d8d8d8d8d8d8d8d61020c565b909e909d509b505050505050505050505050565b80610d9f428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b610c746040518060e001604052806040518061010001604052808b8152602001610dc88b6112d5565b8152602001610dd68a6112d5565b815260200188888080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509385525050506020808301829052604080840183905260608085018490526080948501849052948652825461010090046001600160a01b03908116878401526001541686820152339486019490945283518281529081019093529201916106cd565b80610ebd428210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f646561646c696e652065787069726564000000000000000000000000000000008442611083565b6040805160e081018252848152600080546001600160a01b03610100909104811660208085019190915260015490911683850152336060840152835182815290810190935261070e926080830191610c33565b60608061060f6040518060e001604052806040518061010001604052808b8152602001610f3c8b6112d5565b8152602001610f4a8a6112d5565b8152602001888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050815260200160006001600160a01b031681526020016000151581526020016000815260200160008152508152602001600060019054906101000a90046001600160a01b03166001600160a01b03168152602001600160009054906101000a90046001600160a01b03166001600160a01b031681526020018a6001600160a01b031681526020016000604051908082528060200260200182016040528015611042578160200160208202803883390190505b5081526020016000604051908082528060200260200182016040528015611073578160200160208202803883390190505b5081526020016000815250611821565b846111ae5761109184611910565b7f3a200000000000000000000000000000000000000000000000000000000000006110bb85611910565b7f203c0000000000000000000000000000000000000000000000000000000000006110e5866119c6565b7f2c2000000000000000000000000000000000000000000000000000000000000061110f876119c6565b60405161114797969594939291907f3e0000000000000000000000000000000000000000000000000000000000000090602001614912565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526111a591600401614b56565b60405180910390fd5b5050505050565b60006111e38484847f1a9d5b55099d6a7ec208ab10001d5fd43c8c7736353a25c1af97ae381a093257611ab7565b90505b9392505050565b600080611250836001600160a01b0316856001600160a01b031614157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f6964656e746963616c2061646472657373657300000000000000000000000000611b48565b826001600160a01b0316846001600160a01b031610611270578284611273565b83835b90925090506112ce6001600160a01b03831615157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f7a65726f20616464726573730000000000000000000000000000000000000000611b48565b9250929050565b6112dd613afc565b60408051608081019091526001815260208101600081526020016000815260200183905290505b919050565b60608061131583611b92565b6080840181905283516020015181516000926113429291849061133457fe5b602002602001015186611c9d565b9050600061137885600001516040015186608001516001886080015151038151811061136a57fe5b602002602001015187611c9d565b9050611391856040015183876000015160600151611dfe565b60a08601819052805161142091839160001981019081106113ae57fe5b602002602001015110157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74206f757470757420616d6f756e740000000000008860a0015160018a60a0015151038151811061141257fe5b602002602001015185611083565b61142985611f2c565b935093505050915091565b7f1a9d5b55099d6a7ec208ab10001d5fd43c8c7736353a25c1af97ae381a09325790565b60608061146483611821565b9150915082602001516001600160a01b031663a67a6a4583836040518363ffffffff1660e01b815260040161149a929190614af5565b600060405180830381600087803b1580156114b457600080fd5b505af11580156114c8573d6000803e3d6000fd5b5050505061070e838361239a565b6001546040517fe6a4390500000000000000000000000000000000000000000000000000000000815260009182916001600160a01b03909116908290829063e6a439059061152a908d908d90600401614a6e565b60206040518083038186803b15801561154257600080fd5b505afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061157a9190810190613f11565b6001600160a01b03161415611624576040517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063c9c65396906115d0908c908c90600401614a6e565b602060405180830381600087803b1580156115ea57600080fd5b505af11580156115fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116229190810190613f11565b505b600080611632838c8c612875565b91509150816000148015611644575080155b1561165457889450879350611736565b60006116618a84846128b0565b90508881116116c5576116ba878210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204220616d6f756e740000000000000000000000848b611083565b899550935083611734565b60006116d28a84866128b0565b90508a8111156116de57fe5b61172e898210157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e73756666696369656e74204120616d6f756e740000000000000000000000848d611083565b95508894505b505b505050965096945050505050565b61174c613aaa565b611754613afc565b60001983141561178b57604080516080810190915260018152602081016000815260200160018152602001600081525090506117b2565b60408051608081019091526000808252602082019081526020016000815260200184905290505b6040805161010081019091528060028152602001878152602001828152602001858152602001600019815260200160006001600160a01b03168152602001868152602001604051806020016040528060008152508152509150505b949350505050565b60608061146483611309565b60608061182d83611b92565b60808401819052835160200151815160009261184c9291849061133457fe5b9050600061187485600001516040015186608001516001886080015151038151811061136a57fe5b905061188d85604001518287600001516060015161297b565b60a0860181905280516114209184916000906118a557fe5b602002602001015111157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f65786365737369766520696e70757420616d6f756e74000000000000000000008860a0015160008151811061190257fe5b602002602001015186611083565b6060808260405160200161192491906148d5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060205b80156119af5781516000199091019082908290811061197257fe5b01602001517fff0000000000000000000000000000000000000000000000000000000000000016156119aa5760010181529050611304565b611957565b505060408051600081526020810190915292915050565b606081611a07575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152611304565b8160005b8115611a1f57600101600a82049150611a0b565b6060816040519080825280601f01601f191660200182016040528015611a4c576020820181803883390190505b508593509050815b8015611aae5760001901600a840660300160f81b828281518110611a7457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350611a54565b50949350505050565b6000806000611ac686866111ed565b91509150868282604051602001611ade9291906148af565b6040516020818303038152906040528051906020012085604051602001611b079392919061498e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120979650505050505050565b8261070e57611b5682611910565b7f3a20000000000000000000000000000000000000000000000000000000000000611b8083611910565b604051602001611147939291906148ea565b60608082600001516060015151604051908082528060200260200182016040528015611bc8578160200160208202803883390190505b50905060005b83516060015151811015611c965783602001516001600160a01b0316638fae3be18560000151606001518381518110611c0357fe5b60200260200101516040518263ffffffff1660e01b8152600401611c2791906149d0565b60206040518083038186803b158015611c3f57600080fd5b505afa158015611c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c7791908101906142fd565b828281518110611c8357fe5b6020908102919091010152600101611bce565b5092915050565b60008084602001516001811115611cb057fe5b1415611cc1575060608301516111e6565b6060840151611d25906fffffffffffffffffffffffffffffffff8116147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c696420617373657420616d6f756e74000000000000000000000000611b48565b60408051808201825285511515815260608601516fffffffffffffffffffffffffffffffff1660208083019190915284015191517f56ea84b2000000000000000000000000000000000000000000000000000000008152611df3926001600160a01b0316906356ea84b290611d9e908890600401614b1a565b60606040518083038186803b158015611db657600080fd5b505afa158015611dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611dee9190810190614205565b6129a9565b6020015190506111e6565b6060611e506002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c696420706174680000000000000000000000000000000000000000611b48565b8151604051908082528060200260200182016040528015611e7b578160200160208202803883390190505b5090508281600081518110611e8c57fe5b60200260200101818152505060005b6001835103811015611f2457600080611ede87868581518110611eba57fe5b6020026020010151878660010181518110611ed157fe5b6020026020010151612875565b91509150611f00848481518110611ef157fe5b60200260200101518383612a60565b848460010181518110611f0f57fe5b60209081029190910101525050600101611e9b565b509392505050565b606080611fb16000845160200151604001516001811115611f4957fe5b148015611f6a57506000845160409081015101516001811115611f6857fe5b145b7f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206173736574207265666572656e6365000000000000000000611b48565b6060611fc98460400151856000015160600151612b6e565b90506060611fd78583612b9b565b90506060611fe6868385612d13565b8651608001519091506001600160a01b03161580159061200c5750855160c00151600019145b1561238257855160e0015160009015612026576001612029565b60005b60ff169050600082826001855103038151811061204257fe5b6020026020010151606001519050876000015160a00151156121045787602001516001600160a01b031663c190c2ec8560018751038151811061208157fe5b6020026020010151836040518363ffffffff1660e01b81526004016120a7929190614b87565b604080518083038186803b1580156120be57600080fd5b505afa1580156120d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120f69190810190614292565b6020015160c089015261237b565b80886080015160008151811061211657fe5b602002602001015114156121ef576121e58860a0015160008151811061213857fe5b602002602001015189602001516001600160a01b031663c190c2ec8760008151811061216057fe5b6020026020010151856040518363ffffffff1660e01b8152600401612186929190614b87565b604080518083038186803b15801561219d57600080fd5b505afa1580156121b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121d59190810190614292565b602001519063ffffffff6130bb16565b60c089015261237b565b60808801518051829190600019810190811061220757fe5b602002602001015114156122dc5760a088015180516121e59190600019810190811061222f57fe5b602002602001015189602001516001600160a01b031663c190c2ec8760008151811061225757fe5b6020026020010151856040518363ffffffff1660e01b815260040161227d929190614b87565b604080518083038186803b15801561229457600080fd5b505afa1580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122cc9190810190614292565b602001519063ffffffff6130fd16565b87602001516001600160a01b031663c190c2ec856000815181106122fc57fe5b6020026020010151836040518363ffffffff1660e01b8152600401612322929190614b87565b604080518083038186803b15801561233957600080fd5b505afa15801561234d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123719190810190614292565b6020015160c08901525b505061238f565b855160c090810151908701525b909350915050915091565b815160a0015180156123ad575081515115155b15612659576123ba613a93565b82602001516001600160a01b03166347d1b53c836000815181106123da57fe5b60200260200101518560800151600187608001515103815181106123fa57fe5b60200260200101516040518363ffffffff1660e01b815260040161241f929190614b87565b604080518083038186803b15801561243657600080fd5b505afa15801561244a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061246e9190810190614274565b835180516060909101518051929350909133917fb81518bcaf15a56ac0e4b0ff579f0bd8e163ac444d526743908dc22733789f06916000906124ac57fe5b6020908102919091010151865160600151805160001981019081106124cd57fe5b6020026020010151876000015160800151604051806040016040528060405180604001604052806000151581526020018c60a0015160008151811061250e57fe5b602002602001015181525081526020018a602001516001600160a01b03166347d1b53c8b60008151811061253e57fe5b60200260200101518d6080015160008151811061255757fe5b60200260200101516040518363ffffffff1660e01b815260040161257c929190614b87565b604080518083038186803b15801561259357600080fd5b505afa1580156125a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125cb9190810190614274565b905260408051608081018252600191810191825260a08c01518051919283929091606084019160001981019081106125ff57fe5b6020908102919091018101519091529082529081018a905260408051608081018252600181830190815260c08f0151606083015281529182018b90525161264b96959493929190614a89565b60405180910390a350612871565b8151511561287157612669613a93565b82602001516001600160a01b03166347d1b53c8360008151811061268957fe5b602002602001015185608001516000815181106126a257fe5b60200260200101516040518363ffffffff1660e01b81526004016126c7929190614b87565b604080518083038186803b1580156126de57600080fd5b505afa1580156126f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127169190810190614274565b835180516060909101518051929350909133917fecf4fe97b02d1620f6c04edbd484eff130a2247b31ac1ef061f54c8177b657b99160009061275457fe5b60209081029190910101518651606001518051600019810190811061277557fe5b6020026020010151876000015160800151604051806040016040528060405180604001604052806000151581526020018c60a001516000815181106127b657fe5b6020026020010151815250815260200188815250604051806040016040528060405180604001604052806001151581526020018d60a0015160018f60a0015151038151811061280157fe5b6020026020010151815250815260200161282f8c8c60008151811061282257fe5b602002602001015161313c565b905260408051608081018252600081830190815260c08e015160608301528152602081018b9052905161286796959493929190614a89565b60405180910390a3505b5050565b6000806128a4857f1a9d5b55099d6a7ec208ab10001d5fd43c8c7736353a25c1af97ae381a09325786866131e4565b91509150935093915050565b6000612900600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e7420616d6f756e7400000000000000000000000000611b48565b61295a6000841180156129135750600083115b7f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b8261296b858463ffffffff6132cd16565b8161297257fe5b04949350505050565b60606111e3847f1a9d5b55099d6a7ec208ab10001d5fd43c8c7736353a25c1af97ae381a0932578585613321565b6129b1613a93565b602083015183516fffffffffffffffffffffffffffffffff9091169015612a1d57604080518082019091526001815260208481015190820190612a129084906bffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61344916565b815250915050612a5a565b604080518082019091526000815283516020820190612a129084906bffffffffffffffffffffffff16670de0b6b3a764000063ffffffff61344916565b92915050565b6000612ab0600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e7420696e70757420616d6f756e7400000000000000611b48565b612b096000841180156129135750600083117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b6000612b1d856103e563ffffffff6132cd16565b90506000612b31828563ffffffff6132cd16565b90506000612b5783612b4b886103e863ffffffff6132cd16565b9063ffffffff6130fd16565b9050808281612b6257fe5b04979650505050505050565b60606111e6837f1a9d5b55099d6a7ec208ab10001d5fd43c8c7736353a25c1af97ae381a093257846134e6565b81516080015160609081906001600160a01b0316612bf9578251600101604051908082528060200260200182016040528015612bf157816020015b612bde613a93565b815260200190600190039081612bd65790505b509050612c79565b8251600201604051908082528060200260200182016040528015612c3757816020015b612c24613a93565b815260200190600190039081612c1c5790505b509050604051806040016040528085606001516001600160a01b03168152602001600081525081600183510381518110612c6d57fe5b60200260200101819052505b6040805180820190915260608501516001600160a01b03168152845151602082015281518290600090612ca857fe5b602090810291909101015260005b8351811015611f24576040518060400160405280858381518110612cd657fe5b60200260200101516001600160a01b031681526020016000815250828260010181518110612d0057fe5b6020908102919091010152600101612cb6565b82516080015160609081906001600160a01b0316612d6e578251604051908082528060200260200182016040528015612d6657816020015b612d53613aaa565b815260200190600190039081612d4b5790505b509050612f7c565b845160c00151612dc19015157f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206d617267696e206465706f73697400000000000000000000611b48565b845160e0015160009015612dd6576001612dd9565b60005b60ff16905080845160010101604051908082528060200260200182016040528015612e1e57816020015b612e0b613aaa565b815260200190600190039081612e035790505b50865160a0015190925015612efa81612e3b576001875103612e3e565b60005b82612e4a576000612e50565b60018851035b60208a01518a51608001516040517f8fae3be10000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691638fae3be191612e9f916004016149d0565b60206040518083038186803b158015612eb757600080fd5b505afa158015612ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612eef91908101906142fd565b8a5160c00151611744565b838360018651030381518110612f0c57fe5b60200260200101819052508160011415612f7957612f5d876000015187600081518110612f3557fe5b602002602001015160008a60800151600081518110612f5057fe5b60200260200101516135db565b83600185510381518110612f6d57fe5b60200260200101819052505b50505b60005b8351811015611aae57613014848281518110612f9757fe5b60200260200101516001600160a01b0316868360010181518110612fb757fe5b6020026020010151600001516001600160a01b0316147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206f7468657220616464726573730000000000000000000000611b48565b61309c6000826001018860800151848151811061302d57fe5b60200260200101518960800151856001018151811061304857fe5b602002602001015188868151811061305c57fe5b60200260200101518b60a00151878151811061307457fe5b60200260200101518c60a00151886001018151811061308f57fe5b6020026020010151613784565b8282815181106130a857fe5b6020908102919091010152600101612f7f565b60006111e683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613822565b6000828201838110156111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590614b67565b613144613a93565b82602001516001600160a01b03166347d1b53c8385608001516001876080015151038151811061317057fe5b60200260200101516040518363ffffffff1660e01b8152600401613195929190614b87565b604080518083038186803b1580156131ac57600080fd5b505afa1580156131c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506111e69190810190614274565b60008060006131f385856111ed565b5090506000806132058988888b611ab7565b6001600160a01b031663b432a82c6040518163ffffffff1660e01b815260040160606040518083038186803b15801561323d57600080fd5b505afa158015613251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061327591908101906142b0565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316876001600160a01b0316146132ba5780826132bd565b81815b909a909950975050505050505050565b6000826132dc57506000612a5a565b828202828482816132e957fe5b04146111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590614b77565b60606133736002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c696420706174680000000000000000000000000000000000000000611b48565b815160405190808252806020026020018201604052801561339e578160200160208202803883390190505b50905082816001835103815181106133b257fe5b60209081029190910101528151600019015b8015611aae5760008061340288888760018703815181106133e157fe5b60200260200101518887815181106133f557fe5b60200260200101516131e4565b9150915061342484848151811061341557fe5b60200260200101518383613868565b84600185038151811061343357fe5b60209081029190910101525050600019016133c4565b6000831580613456575082155b1561346d57613466600083613970565b90506111e6565b600061347f858563ffffffff6132cd16565b90506134dd6134aa6001612b4b600261349e888463ffffffff6130bb16565b9063ffffffff61397016565b6134ba838663ffffffff6139b216565b10156134c75760006134ca565b60015b60ff16612b4b838663ffffffff61397016565b95945050505050565b60606135386002835110157f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e76616c69642070617468206c656e67746800000000000000000000000000611b48565b60606001835103604051908082528060200260200182016040528015613568578160200160208202803883390190505b50905060005b6001845103811015611aae576135af8685838151811061358a57fe5b60200260200101518684600101815181106135a157fe5b602002602001015188611ab7565b8282815181106135bb57fe5b6001600160a01b039092166020928302919091019091015260010161356e565b6135e3613aaa565b60e085015161363b9063ffffffff8116147f446f6c6f6d697465416d6d526f7574657250726f7879000000000000000000007f696e76616c6964206578706972792074696d6500000000000000000000000000611b48565b604080516001808252818301909252606091816020015b61365a613b25565b81526020019060019003908161365257905050905060405180608001604052808681526020018481526020018760e0015163ffffffff16815260200160011515815250816000815181106136aa57fe5b602090810291909101015260408051610100810190915280600881526020808201879052604080516080810182526001815292019190810160008152602001600081526020016000815250815260200160001981526020016000198152602001600260009054906101000a90046001600160a01b03166001600160a01b03168152602001600019815260200160008360405160200161374a929190614b36565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290529695505050505050565b61378c613aaa565b604080516101008101909152806005815260208082018b905260408051608081018252600181529201919081016000815260200160008152602001868152508152602001878152602001868152602001856001600160a01b03168152602001888152602001836040516020016138029190614b1a565b60405160208183030381529060405281525090505b979650505050505050565b60008184841115613860576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b505050900390565b60006138b8600085117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206f757470757420616d6f756e74000000000000611b48565b6139116000841180156129135750600083117f446f6c6f6d697465416d6d4c69627261727900000000000000000000000000007f696e73756666696369656e74206c697175696469747900000000000000000000611b48565b60006139356103e8613929868863ffffffff6132cd16565b9063ffffffff6132cd16565b9050600061394f6103e5613929868963ffffffff6130bb16565b90506139666001612b4b848463ffffffff61397016565b9695505050505050565b60006111e683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139f4565b60006111e683836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250613a45565b60008183613a2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b506000838581613a3b57fe5b0495945050505050565b60008183613a80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a59190614b56565b50828481613a8a57fe5b06949350505050565b604080518082019091526000808252602082015290565b604080516101008101825260008082526020820152908101613aca613afc565b8152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001606081525090565b604080516080810190915260008082526020820190815260200160008152602001600081525090565b6040518060800160405280613b38613a93565b81526000602082018190526040820181905260609091015290565b8035612a5a81614d95565b8051612a5a81614d95565b60008083601f840112613b7b57600080fd5b50813567ffffffffffffffff811115613b9357600080fd5b6020830191508360208202830111156112ce57600080fd5b600082601f830112613bbc57600080fd5b8135613bcf613bca82614bf2565b614bcb565b91508181835260208401935060208101905083856020840282011115613bf457600080fd5b60005b83811015613c205781613c0a8882613b53565b8452506020928301929190910190600101613bf7565b5050505092915050565b8035612a5a81614da9565b8051612a5a81614da9565b8035612a5a81614db2565b8035612a5a81614dbb565b600060808284031215613c6857600080fd5b613c726080614bcb565b90506000613c808484613c2a565b8252506020613c9184848301613c4b565b6020830152506040613ca584828501613c4b565b6040830152506060613cb984828501613c40565b60608301525092915050565b600060608284031215613cd757600080fd5b613ce16060614bcb565b90506000613cef8484613f06565b8252506020613d0084848301613f06565b6020830152506040613d1484828501613ef0565b60408301525092915050565b60006101c08284031215613d3357600080fd5b613d3e610100614bcb565b90506000613d4c8484613c40565b8252506020613d5d84848301613c56565b60208301525060a0613d7184828501613c56565b60408301525061012082013567ffffffffffffffff811115613d9257600080fd5b613d9e84828501613bab565b606083015250610140613db384828501613b53565b608083015250610160613dc884828501613c2a565b60a083015250610180613ddd84828501613c40565b60c0830152506101a0613df284828501613c40565b60e08301525092915050565b600060408284031215613e1057600080fd5b613e1a6040614bcb565b90506000613e288484613c35565b8252506020613e3984848301613eda565b60208301525092915050565b600060808284031215613e5757600080fd5b613e616080614bcb565b90506000613e6f8484613c2a565b8252506020613e8084848301613efb565b6020830152506040613ca584828501613c40565b600060408284031215613ea657600080fd5b613eb06040614bcb565b90506000613ebe8484613c35565b8252506020613e3984848301613ee5565b8051612a5a81614dc8565b8051612a5a81614dd1565b8051612a5a81614db2565b8051612a5a81614dda565b8035612a5a81614de3565b8051612a5a81614dec565b600060208284031215613f2357600080fd5b600061180d8484613b5e565b600080600080600080600080610100898b031215613f4c57600080fd5b6000613f588b8b613b53565b9850506020613f698b828c01613c40565b9750506040613f7a8b828c01613b53565b9650506060613f8b8b828c01613b53565b9550506080613f9c8b828c01613c40565b94505060a0613fad8b828c01613c40565b93505060c0613fbe8b828c01613c40565b92505060e0613fcf8b828c01613c40565b9150509295985092959890939650565b60008060008060008060008060006101808a8c031215613ffe57600080fd5b600061400a8c8c613b53565b995050602061401b8c828d01613c40565b985050604061402c8c828d01613b53565b975050606061403d8c828d01613b53565b965050608061404e8c828d01613c40565b95505060a061405f8c828d01613c40565b94505060c06140708c828d01613c40565b93505060e06140818c828d01613c40565b9250506101006140938c828d01613e45565b9150509295985092959850929598565b60008060008060008060008060006101208a8c0312156140c257600080fd5b60006140ce8c8c613b53565b99505060206140df8c828d01613c40565b98505060406140f08c828d01613b53565b97505060606141018c828d01613b53565b96505060806141128c828d01613c40565b95505060a06141238c828d01613c40565b94505060c06141348c828d01613c40565b93505060e06141458c828d01613c40565b9250506101006140938c828d01613c40565b60008060008060008060a0878903121561417057600080fd5b600061417c8989613b53565b965050602061418d89828a01613c40565b955050604061419e89828a01613c40565b94505060606141af89828a01613c40565b935050608087013567ffffffffffffffff8111156141cc57600080fd5b6141d889828a01613b69565b92509250509295509295509295565b6000602082840312156141f957600080fd5b600061180d8484613c35565b60006060828403121561421757600080fd5b600061180d8484613cc5565b6000806040838503121561423657600080fd5b823567ffffffffffffffff81111561424d57600080fd5b61425985828601613d20565b925050602061426a85828601613c40565b9150509250929050565b60006040828403121561428657600080fd5b600061180d8484613dfe565b6000604082840312156142a457600080fd5b600061180d8484613e94565b6000806000606084860312156142c557600080fd5b60006142d18686613ecf565b93505060206142e286828701613ecf565b92505060406142f386828701613ef0565b9150509250925092565b60006020828403121561430f57600080fd5b600061180d8484613ee5565b6000806040838503121561432e57600080fd5b600061433a8585613ee5565b925050602061426a85828601613ee5565b60008060008060008060a0878903121561436457600080fd5b60006143708989613c40565b965050602061438189828a01613c40565b955050604061439289828a01613c40565b945050606087013567ffffffffffffffff8111156143af57600080fd5b6143bb89828a01613b69565b935093505060806143ce89828a01613c40565b9150509295509295509295565b60006111e683836146db565b60006143f383836147f1565b505060400190565b60006144078383614839565b505060a00190565b61441881614ceb565b82525050565b61441881614c26565b61441861443382614c26565b614d3f565b600061444382614c19565b61444d8185614c1d565b93508360208202850161445f85614c13565b8060005b85811015614499578484038952815161447c85826143db565b945061448783614c13565b60209a909a0199925050600101614463565b5091979650505050505050565b60006144b182614c19565b6144bb8185614c1d565b93506144c683614c13565b8060005b838110156144f45781516144de88826143e7565b97506144e983614c13565b9250506001016144ca565b509495945050505050565b600061450a82614c19565b6145148185614c1d565b935061451f83614c13565b8060005b838110156144f457815161453788826143fb565b975061454283614c13565b925050600101614523565b61441881614c31565b61441861456282614c36565b614c80565b61441861456282614c5b565b61441881614c80565b61441861456282614c80565b600061459382614c19565b61459d8185611304565b93506145ad818560208601614d13565b9290920192915050565b60006145c282614c19565b6145cc8185614c1d565b93506145dc818560208601614d13565b6145e581614d50565b9093019392505050565b61441881614cf2565b61441881614cfd565b61441881614d08565b6000614617601b83614c1d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000614650600183611304565b7fff00000000000000000000000000000000000000000000000000000000000000815260010192915050565b6000614689602183614c1d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b80516000906101608401906146f085826145f8565b5060208301516147036020860182614573565b506040830151614716604086018261477d565b50606083015161472960c0860182614573565b50608083015161473c60e0860182614573565b5060a083015161475061010086018261441e565b5060c0830151614764610120860182614573565b5060e08301518482036101408601526134dd82826145b7565b8051608083019061478e848261454d565b5060208201516147a16020850182614601565b5060408201516147b46040850182614601565b5060608201516147c76060850182614573565b50505050565b805160808301906147de8482614883565b5060208201516147c76040850182614815565b80516040830190614802848261441e565b5060208201516147c76020850182614573565b80516040830190614826848261454d565b5060208201516147c76020850182614894565b805160a083019061484a84826147f1565b50602082015161485d6040850182614573565b506040820151614870606085018261489d565b5060608201516147c7608085018261454d565b80516040830190614802848261454d565b61441881614caa565b61441881614ccb565b61441881614cd4565b60006148bb8285614427565b6014820191506148cb8284614427565b5060140192915050565b60006148e1828461457c565b50602001919050565b60006148f68286614588565b91506149028285614567565b6002820191506134dd8284614588565b600061491e828b614588565b915061492a828a614567565b60028201915061493a8289614588565b91506149468288614567565b6002820191506149568287614588565b91506149628286614567565b6002820191506149728285614588565b915061497e8284614556565b5060010198975050505050505050565b600061499982614643565b91506149a58286614427565b6014820191506149b5828561457c565b6020820191506149c5828461457c565b506020019392505050565b60208101612a5a828461441e565b606081016149ec828661440f565b6149f9602083018561441e565b61180d6040830184614573565b60e08101614a14828a61440f565b614a21602083018961441e565b614a2e6040830188614573565b614a3b6060830187614573565b614a4860808301866148a6565b614a5560a0830185614573565b614a6260c0830184614573565b98975050505050505050565b60408101614a7c828561441e565b6111e6602083018461441e565b6101e08101614a98828961441e565b614aa5602083018861441e565b614ab2604083018761441e565b614abf60608301866147cd565b614acc60e08301856147cd565b6138176101608301846147cd565b60408101614ae8828561441e565b6111e66020830184614573565b60408082528101614b0681856144a6565b905081810360208301526111e38184614438565b60208101612a5a8284614573565b60208101612a5a82846145ef565b60408101614b448285614601565b81810360208301526111e381846144ff565b602080825281016111e681846145b7565b60208082528101612a5a8161460a565b60208082528101612a5a8161467c565b60608101614b9582856147f1565b6111e66040830184614573565b60408101614ae88285614573565b60608101614bbe8286614573565b6149f96020830185614573565b60405181810167ffffffffffffffff81118282101715614bea57600080fd5b604052919050565b600067ffffffffffffffff821115614c0957600080fd5b5060209081020190565b60200190565b5190565b90815260200190565b6000612a5a82614cbf565b151590565b7fff000000000000000000000000000000000000000000000000000000000000001690565b7fffff0000000000000000000000000000000000000000000000000000000000001690565b90565b8061130481614d7e565b8061130481614d8b565b6dffffffffffffffffffffffffffff1690565b6fffffffffffffffffffffffffffffffff1690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b6000612a5a825b6000612a5a82614c26565b6000612a5a82614c83565b6000612a5a82614c8d565b60005b83811015614d2e578181015183820152602001614d16565b838111156147c75750506000910152565b6000612a5a826000612a5a82614d78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b60601b90565b60098110614d8857fe5b50565b60028110614d8857fe5b614d9e81614c26565b8114614d8857600080fd5b614d9e81614c31565b614d9e81614c80565b60028110614d8857600080fd5b614d9e81614c97565b614d9e81614caa565b614d9e81614ccb565b614d9e81614cd4565b614d9e81614cda56fea365627a7a723158201d3dcd1d0ca279a9cb2172ee13b2e12fa268a898325738b1584f3f9e3221cc0f6c6578706572696d656e74616cf564736f6c63430005100040",
1162
1162
  "sourceMap": "1235:29827:28:-;;;4059:280;8:9:-1;5:2;;;30:1;27;20:12;5:2;4059:280:28;;;;;;;;;;;;;;;;;;;;;1421:11:127;:18;;-1:-1:-1;;;;;4186:49:28;;;1421:18:127;4186:49:28;-1:-1:-1;;;;;;;;1421:18:127;;;1435:4;1421:18;;;4186:49:28;;;;;;;;4245:62;;;;;-1:-1:-1;;;;;;4245:62:28;;;;;;4317:6;:15;;;;;;;;;;;1235:29827;;5:134:-1;83:13;;101:33;83:13;101:33;;;68:71;;;;;146:535;;;;295:2;283:9;274:7;270:23;266:32;263:2;;;311:1;308;301:12;263:2;346:1;363:64;419:7;399:9;363:64;;;353:74;;325:108;464:2;482:64;538:7;529:6;518:9;514:22;482:64;;;472:74;;443:109;583:2;601:64;657:7;648:6;637:9;633:22;601:64;;;591:74;;562:109;257:424;;;;;;688:91;;-1:-1;;;;;848:54;;750:24;831:76;914:117;983:24;1001:5;983:24;;;976:5;973:35;963:2;;1022:1;1019;1012:12;963:2;957:74;;;1235:29827:28;;;;;;",
1163
1163
  "deployedSourceMap": "1235:29827:28:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1235:29827:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10450:1148;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3934:38;;;:::i;:::-;;;;;;;;7067:1141;;;;;;;;;:::i;:::-;;;;;;;;;4345:127;;;:::i;:::-;;;;;;;;13139:569;;;;;;;;;:::i;:::-;;4031:21;;;:::i;:::-;;;;;;;;4478:1494;;;;;;;;;:::i;:::-;;;;;;;;;;3978:47;;;:::i;5978:1083::-;;;;;;;;;:::i;11604:954::-;;;;;;;;;:::i;8214:1083::-;;;;;;;;;:::i;12564:569::-;;;;;;;;;:::i;9303:1141::-;;;;;;;;;:::i;10450:1148::-;10715:15;10732;10696:8;3696:164;3734:15;3722:8;:27;;3763:4;3696:164;3813:8;3835:15;3696:12;:164::i;:::-;10809:20;;10759:12;;10774:73;;-1:-1:-1;;;;;10809:20:28;10832:6;10840;10774:26;:73::i;:::-;10891:64;;;;;10759:88;;-1:-1:-1;;;;;;10891:35:28;;;;;:64;;10927:10;;10759:88;;10945:9;;10891:64;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10891:64:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10891:64:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;10891:64:28;;;;;;;;;;10967:15;10984;11020:4;-1:-1:-1;;;;;11003:27:28;;11031:2;11035:15;11003:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11003:48:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11003:48:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11003:48:28;;;;;;;;;10966:85;;;;11062:14;11081:45;11111:6;11119;11081:29;:45::i;:::-;11061:65;;;11173:6;-1:-1:-1;;;;;11163:16:28;:6;-1:-1:-1;;;;;11163:16:28;;:70;;11210:10;11222;11163:70;;;11183:10;11195;11163:70;11136:97;;-1:-1:-1;11136:97:28;-1:-1:-1;11243:169:28;11269:27;;;;11310:4;11243:169;11136:97;11283:13;11243:12;:169::i;:::-;11422;11462:13;11448:10;:27;;11489:4;11422:169;11544:10;11568:13;11422:12;:169::i;:::-;3870:1;;;;10450:1148;;;;;;;;;;;;:::o;3934:38::-;;;;;;-1:-1:-1;;;;;3934:38:28;;:::o;7067:1141::-;7293:21;7316:27;7362:839;7413:778;;;;;;;;7460:449;;;;;;;;7519:13;7460:449;;;;7565:32;7585:11;7565:19;:32::i;:::-;7460:449;;;;7631:36;7651:15;7631:19;:36::i;:::-;7460:449;;;;7701:9;;7460:449;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7460:449:28;;;;;;;;;;7755:1;-1:-1:-1;;;;;7460:449:28;;;;;7805:5;7460:449;;;;;;7848:1;7460:449;;;;7889:1;7460:449;;;7413:778;;;;7944:15;;;;;;;;;-1:-1:-1;;;;;7944:15:28;-1:-1:-1;;;;;7413:778:28;;;;;7990:20;;;;;;;;;-1:-1:-1;;;;;7990:20:28;-1:-1:-1;;;;;7413:778:28;;;;;8038:7;-1:-1:-1;;;;;7413:778:28;;;;;8087:1;8076:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;8076:13:28;;7413:778;;;;8131:1;8120:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;8120:13:28;;7413:778;;;;8175:1;7413:778;;;7362:37;:839::i;:::-;7355:846;;;;7067:1141;;;;;;;;;:::o;4345:127::-;4399:7;4425:40;:38;:40::i;:::-;4418:47;;4345:127;:::o;13139:569::-;13277:8;3696:164;3734:15;3722:8;:27;;3763:4;3696:164;3813:8;3835:15;3696:12;:164::i;:::-;13353:338;;;;;;;;;;;-1:-1:-1;13441:15:28;;-1:-1:-1;;;;;13441:15:28;;;;;;13353:338;;;;;;;;13441:15;13487:20;;;;13353:338;;;;13535:10;13353:338;;;;13576:13;;;;;;;;;;;13297:404;;13353:338;;;;13576:13;;13353:338;;;;13631:1;13620:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;13620:13:28;;13353:338;;;;13675:1;13353:338;;;13297:42;:404::i;:::-;13139:569;;;:::o;4031:21::-;;;-1:-1:-1;;;;;4031:21:28;;:::o;4478:1494::-;4790:15;4807;4824:14;4767:8;3696:164;3734:15;3722:8;:27;;3763:4;3696:164;3813:8;3835:15;3696:12;:164::i;:::-;4877:173;4904:6;4924;4944:14;4972;5000:13;5027;4877;:173::i;:::-;5110:20;;4850:200;;-1:-1:-1;4850:200:28;-1:-1:-1;5060:12:28;;5075:73;;-1:-1:-1;;;;;5110:20:28;5133:6;5141;5075:26;:73::i;:::-;5258:21;;;5277:1;5258:21;;;5225:30;5258:21;;;;;;5060:88;;-1:-1:-1;5225:30:28;;5258:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5225:54;;5307:43;;;;;;;;5320:10;-1:-1:-1;;;;;5307:43:28;;;;;5332:17;5307:43;;;5293:8;5302:1;5293:11;;;;;;;;;;;;;:57;;;;5378:21;;;;;;;;5391:4;-1:-1:-1;;;;;5378:21:28;;;;;5397:1;5378:21;;;5364:8;5373:1;5364:11;;;;;;;;;;;;;:35;;;;5414:14;5431:15;;;;;;;;;-1:-1:-1;;;;;5431:15:28;-1:-1:-1;;;;;5431:41:28;;5473:6;5431:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5431:49:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5431:49:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5431:49:28;;;;;;;;;5414:66;;5494:14;5511:15;;;;;;;;;-1:-1:-1;;;;;5511:15:28;-1:-1:-1;;;;;5511:41:28;;5553:6;5511:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5511:49:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5511:49:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5511:49:28;;;;;;;;;5613:27;;;5638:1;5613:27;;;5575:35;5613:27;;;;;;5494:66;;-1:-1:-1;5575:35:28;;5613:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5575:65;;5667:50;5689:1;5692;5695:9;5706:10;5667:21;:50::i;:::-;5654:7;5662:1;5654:10;;;;;;;;;;;;;:63;;;;5744:50;5766:1;5769;5772:9;5783:10;5744:21;:50::i;:::-;5731:7;5739:1;5731:10;;;;;;;;;;;;;;;;;:63;5808:15;;:42;;;;;:15;;;;-1:-1:-1;;;;;5808:15:28;;:23;;:42;;5832:8;;5842:7;;5808:42;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5808:42:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5808:42:28;;;;3870:1;;;;5951:4;-1:-1:-1;;;;;5934:27:28;;5962:2;5934:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5934:31:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5934:31:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;5934:31:28;;;;;;;;;5922:43;;3870:1;4478:1494;;;;;;;;;;;;;;:::o;3978:47::-;;;-1:-1:-1;;;;;3978:47:28;;:::o;5978:1083::-;6187:8;3696:164;3734:15;3722:8;:27;;3763:4;3696:164;3813:8;3835:15;3696:12;:164::i;:::-;6207:847;6263:781;;;;;;;;6310:449;;;;;;;;6369:13;6310:449;;;;6415:32;6435:11;6415:19;:32::i;:::-;6310:449;;;;6481:36;6501:15;6481:19;:36::i;:::-;6310:449;;;;6551:9;;6310:449;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;6310:449:28;;;-1:-1:-1;;;6310:449:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;6263:781;;;6794:15;;;;;-1:-1:-1;;;;;6794:15:28;;;6263:781;;;;6310:449;6840:20;;6263:781;;;;6888:10;6263:781;;;;;;;6929:13;;;;;;;;;;;6263:781;;;6929:13;;6263:781;;;;6984:1;6973:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;6973:13:28;;6263:781;;;;7028:1;6263:781;;;6207:42;:847::i;:::-;5978:1083;;;;;;;:::o;11604:954::-;11995:20;;11901:15;;;;;;11960:73;;-1:-1:-1;;;;;11995:20:28;12018:6;12026;11960:26;:73::i;:::-;11945:88;;12043:10;12056:6;:17;;;:41;;12088:9;12056:41;;;-1:-1:-1;;12056:41:28;12043:54;;12124:4;-1:-1:-1;;;;;12107:29:28;;12150:10;12182:4;12201:5;12220:8;12242:6;:8;;;12264:6;:8;;;12286:6;:8;;;12107:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12107:197:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12107:197:28;;;;12342:209;12371:2;12387:15;12416:6;12436;12456:9;12479:13;12506;12533:8;12342:15;:209::i;:::-;12315:236;;;;-1:-1:-1;11604:954:28;-1:-1:-1;;;;;;;;;;;;11604:954:28:o;8214:1083::-;8423:8;3696:164;3734:15;3722:8;:27;;3763:4;3696:164;3813:8;3835:15;3696:12;:164::i;:::-;8443:847;8499:781;;;;;;;;8546:449;;;;;;;;8605:13;8546:449;;;;8651:35;8671:14;8651:19;:35::i;:::-;8546:449;;;;8720:33;8740:12;8720:19;:33::i;:::-;8546:449;;;;8787:9;;8546:449;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;-1:-1;8546:449:28;;;-1:-1:-1;;;8546:449:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;8499:781;;;9030:15;;;;;-1:-1:-1;;;;;9030:15:28;;;8499:781;;;;8546:449;9076:20;;8499:781;;;;9124:10;8499:781;;;;;;;9165:13;;;;;;;;;;;8499:781;;;9165:13;;12564:569;12702:8;3696:164;3734:15;3722:8;:27;;3763:4;3696:164;3813:8;3835:15;3696:12;:164::i;:::-;12778:338;;;;;;;;;;;-1:-1:-1;12866:15:28;;-1:-1:-1;;;;;12866:15:28;;;;;;12778:338;;;;;;;;12866:15;12912:20;;;;12778:338;;;;12960:10;12778:338;;;;13001:13;;;;;;;;;;;12722:404;;12778:338;;;;13001:13;;9303:1141;9529:21;9552:27;9598:839;9649:778;;;;;;;;9696:449;;;;;;;;9755:13;9696:449;;;;9801:35;9821:14;9801:19;:35::i;:::-;9696:449;;;;9870:33;9890:12;9870:19;:33::i;:::-;9696:449;;;;9937:9;;9696:449;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;9696:449:28;;;;;;;;;;9991:1;-1:-1:-1;;;;;9696:449:28;;;;;10041:5;9696:449;;;;;;10084:1;9696:449;;;;10125:1;9696:449;;;9649:778;;;;10180:15;;;;;;;;;-1:-1:-1;;;;;10180:15:28;-1:-1:-1;;;;;9649:778:28;;;;;10226:20;;;;;;;;;-1:-1:-1;;;;;10226:20:28;-1:-1:-1;;;;;9649:778:28;;;;;10274:7;-1:-1:-1;;;;;9649:778:28;;;;;10323:1;10312:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10312:13:28;;9649:778;;;;10367:1;10356:13;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10356:13:28;;9649:778;;;;10411:1;9649:778;;;9598:37;:839::i;2293:663:76:-;2479:4;2474:476;;2593:24;2612:4;2593:18;:24::i;:::-;2643:5;2674:26;2693:6;2674:18;:26::i;:::-;2726:6;2758:19;2768:8;2758:9;:19::i;:::-;2803:5;2834:19;2844:8;2834:9;:19::i;:::-;2551:356;;;;;;;;;;;2879:6;;2551:356;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;2551:356:76;;;;2499:440;;;;;;;;;;;;;;;;;2474:476;2293:663;;;;;:::o;2611:238:19:-;2700:12;2731:111;2752:7;2773:6;2793;1034:66;2731:7;:111::i;:::-;2724:118;;2611:238;;;;;;:::o;2099:423::-;2174:14;2190;2216:105;2252:6;-1:-1:-1;;;;;2242:16:19;:6;-1:-1:-1;;;;;2242:16:19;;;2272:4;2216:105;:12;:105::i;:::-;2359:6;-1:-1:-1;;;;;2350:15:19;:6;-1:-1:-1;;;;;2350:15:19;;:53;;2388:6;2396;2350:53;;;2369:6;2377;2350:53;2331:72;;-1:-1:-1;2331:72:19;-1:-1:-1;2413:102:19;-1:-1:-1;;;;;2439:20:19;;;;2473:4;2413:102;:12;:102::i;:::-;2099:423;;;;;:::o;27601:281:28:-;27665:24;;:::i;:::-;27708:167;;;;;;;;;27743:4;27708:167;;;;;-1:-1:-1;27708:167:28;;;;27815:26;27708:167;;;;;;;27701:174;-1:-1:-1;27601:281:28;;;;:::o;14553:1224::-;14680:21;14711:27;14774:34;14802:5;14774:27;:34::i;:::-;14755:16;;;:53;;;14912:12;;:21;;;14935:19;;14868:16;;14887:75;;14912:21;14868:16;;14935:19;;;;;;;;;;14956:5;14887:24;:75::i;:::-;14868:94;;15022:20;15045:148;15083:5;:12;;;:22;;;15119:5;:16;;;15162:1;15136:5;:16;;;:23;:27;15119:45;;;;;;;;;;;;;;15178:5;15045:24;:148::i;:::-;15022:171;;15324:145;15381:5;:16;;;15412:11;15437:5;:12;;;:22;;;15324:35;:145::i;:::-;15305:16;;;:164;;;15523:23;;15480:248;;15555:15;;-1:-1:-1;;15523:27:28;;;15506:45;;;;;;;;;;;;:64;;15584:4;15480:248;15644:5;:16;;;15687:1;15661:5;:16;;;:23;:27;15644:45;;;;;;;;;;;;;;15703:15;15480:12;:248::i;:::-;15746:24;15764:5;15746:17;:24::i;:::-;15739:31;;;;;;14553:1224;;;:::o;1107:106:19:-;1034:66;1107:106;:::o;14183:364:28:-;14312:30;14352:35;14400:44;14438:5;14400:37;:44::i;:::-;14302:142;;;;14455:5;:20;;;-1:-1:-1;;;;;14455:28:28;;14484:8;14494:7;14455:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14455:47:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14455:47:28;;;;14513:27;14524:5;14531:8;14513:10;:27::i;22831:1861::-;23131:20;;23216:42;;;;;23046:15;;;;-1:-1:-1;;;;;23131:20:28;;;;23046:15;;23131:20;;23216:26;;:42;;23243:6;;23251;;23216:42;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23216:42:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23216:42:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23216:42:28;;;;;;;;;-1:-1:-1;;;;;23216:56:28;;23212:132;;;23288:45;;;;;-1:-1:-1;;;;;23288:29:28;;;;;:45;;23318:6;;23326;;23288:45;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23288:45:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23288:45:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23288:45:28;;;;;;;;;;23212:132;23354:16;23372;23392:124;23447:18;23480:6;23500;23392:33;:124::i;:::-;23353:163;;;;23530:11;23545:1;23530:16;:36;;;;-1:-1:-1;23550:16:28;;23530:36;23526:1160;;;23610:17;;-1:-1:-1;23629:17:28;;-1:-1:-1;23526:1160:28;;;23678:19;23700:69;23725:17;23744:11;23757;23700:24;:69::i;:::-;23678:91;;23805:17;23787:14;:35;23783:893;;23842:225;23894:13;23876:14;:31;;23929:4;23842:225;24000:14;24036:13;23842:12;:225::i;:::-;24113:17;;-1:-1:-1;24132:14:28;-1:-1:-1;24132:14:28;23783:893;;;24186:19;24208:69;24233:17;24252:11;24265;24208:24;:69::i;:::-;24186:91;;24320:17;24302:14;:35;;24295:43;;;;24356:225;24408:13;24390:14;:31;;24443:4;24356:225;24514:14;24550:13;24356:12;:225::i;:::-;24627:14;-1:-1:-1;24643:17:28;;-1:-1:-1;23783:893:28;23526:1160;;22831:1861;;;;;;;;;;;;:::o;19712:1065::-;19876:25;;:::i;:::-;19913:36;;:::i;:::-;-1:-1:-1;;19963:6:28;:19;19959:438;;;20012:162;;;;;;;;;20047:4;20012:162;;;;;-1:-1:-1;20012:162:28;;;;20114:27;20012:162;;;;20159:1;20012:162;;;19998:176;;19959:438;;;20219:167;;;;;;;;;-1:-1:-1;20219:167:28;;;;;;;;;;;20322:26;20219:167;;;;;;;20205:181;-1:-1:-1;19959:438:28;20413:357;;;;;;;;;;20459:27;20413:357;;;;20512:16;20413:357;;;;20551:11;20413:357;;;;20594:8;20413:357;;;;-1:-1:-1;;20413:357:28;;;;20682:1;-1:-1:-1;;;;;20413:357:28;;;;;20715:14;20413:357;;;;20750:9;;;;;;;;;;;;20413:357;;;20406:364;;;19712:1065;;;;;;;:::o;13813:364::-;13942:30;13982:35;14030:44;14068:5;14030:37;:44::i;15783:1177::-;15910:21;15941:27;16004:34;16032:5;16004:27;:34::i;:::-;15985:16;;;:53;;;16145:12;;:21;;;16168:19;;16098;;16120:75;;16145:21;16098:19;;16168;;;16120:75;16098:97;;16255:17;16275:148;16313:5;:12;;;:22;;;16349:5;:16;;;16392:1;16366:5;:16;;;:23;:27;16349:45;;;;;;;16275:148;16255:168;;16566:145;16622:5;:16;;;16653:12;16679:5;:12;;;:22;;;16566:34;:145::i;:::-;16547:16;;;:164;;;16747:19;;16721:190;;16770:14;;16764:1;;16747:19;;;;;;;;;;:37;;16798:4;16721:190;16854:5;:16;;;16871:1;16854:19;;;;;;;;;;;;;;16887:14;16721:12;:190::i;6359:966:76:-;6462:12;6537:19;6576:5;6559:23;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;6559:23:76;;;;-1:-1:-1;49:4;6688:571:76;6709:5;;6688:571;;6960:9;;-1:-1:-1;;6862:3:76;;;;6960:6;;6862:3;;6960:9;;;;;;;;;;;;:14;6956:293;;7015:1;7011:5;7141:22;;7148:6;-1:-1:-1;7221:13:76;;6956:293;6688:571;;;-1:-1:-1;;7306:12:76;;;7316:1;7306:12;;;;;;;;;7299:19;-1:-1:-1;;6359:966:76:o;7331:912::-;7425:12;7457:10;7453:51;;-1:-1:-1;7483:10:76;;;;;;;;;;;;;;;;;;;7453:51;7565:5;7553:9;7604:69;7611:6;;7604:69;;7633:8;;7660:2;7655:7;;;;7604:69;;;7714:17;7744:6;7734:17;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;7734:17:76;87:34:-1;135:17;;-1:-1;7734:17:76;-1:-1:-1;7843:5:76;;-1:-1:-1;7714:37:76;-1:-1:-1;7875:6:76;7858:357;7883:5;;7858:357;;-1:-1:-1;;8036:3:76;8132:2;8128:1;:6;902:2;8114:21;8103:34;;8093:4;8098:1;8093:7;;;;;;;;;;;:44;;;;;;;;;;-1:-1:-1;8202:2:76;8197:7;;;;7858:357;;;-1:-1:-1;8232:4:76;7331:912;-1:-1:-1;;;;7331:912:76:o;2855:585:19:-;3004:12;3029:14;3045;3063:26;3074:6;3082;3063:10;:26::i;:::-;3028:61;;;;3255:7;3315:6;3323;3298:32;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3298:32:19;;;3288:43;;;;;;3357:12;3180:211;;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;3180:211:19;;;3149:260;;49:4:-1;3149:260:19;;;;;2855:585;-1:-1:-1;;;;;;;2855:585:19:o;1294:426:76:-;1428:4;1423:291;;1542:24;1561:4;1542:18;:24::i;:::-;1592:5;1623:26;1642:6;1623:18;:26::i;:::-;1500:171;;;;;;;;;;;19291:415:28;19399:13;19424:24;19462:5;:12;;;:22;;;:29;19451:41;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;19451:41:28;-1:-1:-1;19424:68:28;-1:-1:-1;19507:6:28;19502:171;19523:12;;:22;;;:29;19519:33;;19502:171;;;19589:5;:20;;;-1:-1:-1;;;;;19589:46:28;;19636:5;:12;;;:22;;;19659:1;19636:25;;;;;;;;;;;;;;19589:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19589:73:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19589:73:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19589:73:28;;;;;;;;;19573:10;19584:1;19573:13;;;;;;;;;;;;;;;;;:89;19554:3;;19502:171;;;-1:-1:-1;19689:10:28;19291:415;-1:-1:-1;;19291:415:28:o;27888:673::-;28057:4;;28077:6;:19;;;:50;;;;;;;;;28073:482;;;-1:-1:-1;28150:12:28;;;;28143:19;;28073:482;28248:12;;;;28193:143;;28223:37;;;;28278:4;28193:143;:12;:143::i;:::-;28392:62;;;;;;;;28410:11;;28392:62;;;;28439:12;;;;28392:62;;;;;;;;;;28472:20;;;:52;;;;;28357:181;;-1:-1:-1;;;;;28472:42:28;;;;:52;;28515:8;;28472:52;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28472:52:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28472:52:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28472:52:28;;;;;;;;;28357:17;:181::i;:::-;:187;;;28350:194;;;;6923:578:19;7057:21;7090:98;7131:1;7116:4;:11;:16;;7146:4;7090:98;:12;:98::i;:::-;7219:4;:11;7208:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;7208:23:19;;7198:33;;7254:8;7241:7;7249:1;7241:10;;;;;;;;;;;;;:21;;;;;7277:6;7272:223;7303:1;7289:4;:11;:15;7285:1;:19;7272:223;;;7326:14;7342:15;7361:45;7376:7;7385:4;7390:1;7385:7;;;;;;;;;;;;;;7394:4;7399:1;7403;7399:5;7394:11;;;;;;;;;;;;;;7361:14;:45::i;:::-;7325:81;;;;7437:47;7450:7;7458:1;7450:10;;;;;;;;;;;;;;7462:9;7473:10;7437:12;:47::i;:::-;7420:7;7428:1;7432;7428:5;7420:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;7306:3:19;;7272:223;;;;6923:578;;;;;:::o;16966:2319:28:-;17073:21;;17148:224;17203:26;17174:12;;:21;;;:25;;;:55;;;;;;;;;:131;;;;-1:-1:-1;17279:26:28;17249:12;;:22;;;;;:26;;:56;;;;;;;;;17174:131;17319:4;17148:224;:12;:224::i;:::-;17444:22;17469:78;17505:5;:16;;;17524:5;:12;;;:22;;;17469:27;:78::i;:::-;17444:103;;17558:30;17591:43;17621:5;17628;17591:29;:43::i;:::-;17558:76;;17644:35;17682:55;17714:5;17721:8;17731:5;17682:31;:55::i;:::-;17752:12;;:25;;;17644:93;;-1:-1:-1;;;;;;17752:39:28;;;;;:82;;-1:-1:-1;17795:12:28;;:26;;;-1:-1:-1;;17795:39:28;17752:82;17748:1494;;;17875:12;;:28;;;17850:22;;17875:33;:41;;17915:1;17875:41;;;17911:1;17875:41;17850:66;;;;17930:13;17946:7;17975:17;17971:1;17954:7;:14;:18;:38;17946:47;;;;;;;;;;;;;;:63;;;17930:79;;18027:5;:12;;;:36;;;18023:1122;;;18234:5;:20;;;-1:-1:-1;;;;;18234:34:28;;18269:8;18296:1;18278:8;:15;:19;18269:29;;;;;;;;;;;;;;18300:8;18234:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18234:75:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18234:75:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18234:75:28;;;;;;;;;:81;;;18204:27;;;:111;18023:1122;;;18381:8;18358:5;:16;;;18375:1;18358:19;;;;;;;;;;;;;;:31;18354:777;;;18511:88;18579:5;:16;;;18596:1;18579:19;;;;;;;;;;;;;;18511:5;:20;;;-1:-1:-1;;;;;18511:34:28;;18546:8;18555:1;18546:11;;;;;;;;;;;;;;18559:8;18511:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18511:57:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18511:57:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18511:57:28;;;;;;;;;:63;;;;:88;:67;:88;:::i;:::-;18481:27;;;:118;18354:777;;;18628:16;;;;18645:23;;18677:8;;18628:16;-1:-1:-1;;18645:27:28;;;18628:45;;;;;;;;;;;;:57;18624:507;;;18863:16;;;;18880:23;;18795:114;;18863:16;-1:-1:-1;;18880:27:28;;;18863:45;;;;;;;;;;;;18795:5;:20;;;-1:-1:-1;;;;;18795:34:28;;18830:8;18839:1;18830:11;;;;;;;;;;;;;;18843:8;18795:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18795:57:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18795:57:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18795:57:28;;;;;;;;;:63;;;;:114;:67;:114;:::i;18624:507::-;19049:5;:20;;;-1:-1:-1;;;;;19049:34:28;;19084:8;19093:1;19084:11;;;;;;;;;;;;;;19097:8;19049:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19049:57:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19049:57:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19049:57:28;;;;;;;;;:63;;;19019:27;;;:93;18624:507;17748:1494;;;;;19205:12;;:26;;;;;19175:27;;;:56;17748:1494;19260:8;;-1:-1:-1;19270:7:28;-1:-1:-1;;16966:2319:28;;;:::o;28567:2189::-;28698:12;;:36;;;:70;;;;-1:-1:-1;28738:12:28;;:26;:30;;28698:70;28694:2056;;;28784:29;;:::i;:::-;28816:5;:20;;;-1:-1:-1;;;;;28816:34:28;;28868:8;28877:1;28868:11;;;;;;;;;;;;;;28897:5;:16;;;28940:1;28914:5;:16;;;:23;:27;28897:45;;;;;;;;;;;;;;28816:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28816:140:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28816:140:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28816:140:28;;;;;;;;;29040:12;;:26;;29084:22;;;;;:25;;28784:172;;-1:-1:-1;29040:26:28;;29012:10;;28976:806;;29040:12;;29084:25;;;;;;;;;;;;;;29127:12;;:22;;;29150:29;;-1:-1:-1;;29150:33:28;;;29127:57;;;;;;;;;;;;29202:5;:12;;;:25;;;29245:189;;;;;;;;29291:37;;;;;;;;29301:5;29291:37;;;;;;29308:5;:16;;;29325:1;29308:19;;;;;;;;;;;;;;29291:37;;;29245:189;;;;29351:5;:20;;;-1:-1:-1;;;;;29351:34:28;;29386:8;29395:1;29386:11;;;;;;;;;;;;;;29399:5;:16;;;29416:1;29399:19;;;;;;;;;;;;;;29351:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29351:68:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29351:68:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29351:68:28;;;;;;;;;29245:189;;29452:158;;;29498:62;;;;;29508:4;29452:158;;;29498:62;;;29514:16;;;;29531:23;;29452:158;;;;;;29498:62;;;;-1:-1:-1;;29531:27:28;;;29514:45;;;;;;;;;;;;;;;;;29498:62;;;29452:158;;;;;;;;;29628:140;;;29674:44;;;;;29684:4;29628:140;;;29674:44;;;29690:27;;;;29674:44;;;;29628:140;;;;;;;;28976:806;;;;;;;;29628:140;28976:806;;;;;;;;;;28694:2056;;;;29803:12;;:26;:30;29799:951;;29849:28;;:::i;:::-;29880:5;:20;;;-1:-1:-1;;;;;29880:34:28;;29915:8;29924:1;29915:11;;;;;;;;;;;;;;29928:5;:16;;;29945:1;29928:19;;;;;;;;;;;;;;29880:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29880:68:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29880:68:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29880:68:28;;;;;;;;;30033:12;;:26;;30077:22;;;;;:25;;29849:99;;-1:-1:-1;30033:26:28;;30005:10;;29968:771;;30033:12;;30077:25;;;;;;;;;;;;;;30120:12;;:22;;;30143:29;;-1:-1:-1;;30143:33:28;;;30120:57;;;;;;;;;;;;30195:5;:12;;;:25;;;30238:132;;;;;;;;30284:37;;;;;;;;30294:5;30284:37;;;;;;30301:5;:16;;;30318:1;30301:19;;;;;;;;;;;;;;30284:37;;;30238:132;;;;30344:11;30238:132;;;30388:179;;;;;;;;30434:62;;;;;;;;30444:4;30434:62;;;;;;30450:5;:16;;;30493:1;30467:5;:16;;;:23;:27;30450:45;;;;;;;;;;;;;;30434:62;;;30388:179;;;;30519:33;30533:5;30540:8;30549:1;30540:11;;;;;;;;;;;;;;30519:13;:33::i;:::-;30388:179;;30585:140;;;30631:45;;;;;-1:-1:-1;30585:140:28;;;30631:45;;;30648:27;;;;30631:45;;;;30585:140;;30631:45;30585:140;;;;;29968:771;;;;;;;;;30585:140;29968:771;;;;;;;;;;29799:951;;28567:2189;;:::o;3495:298:19:-;3621:13;;3668:118;3696:7;1034:66;3750:6;3770;3668:14;:118::i;:::-;3661:125;;;;3495:298;;;;;;:::o;5045:395::-;5127:12;5151:100;5187:1;5177:7;:11;5202:4;5151:100;:12;:100::i;:::-;5261:120;5298:1;5287:8;:12;:28;;;;;5314:1;5303:8;:12;5287:28;5329:4;5261:120;:12;:120::i;:::-;5425:8;5401:21;:7;5413:8;5401:21;:11;:21;:::i;:::-;:32;;;;;;;5045:395;-1:-1:-1;;;;5045:395:19:o;9806:301::-;9940:21;9980:120;10009:7;1034:66;10063:9;10086:4;9980:15;:120::i;3843:567:73:-;3974:16;;:::i;:::-;4035:11;;;;4061:10;;4027:20;;;;;4057:347;;;4094:130;;;;;;;;;4128:4;4094:130;;;4190:12;;;;4094:130;;;;4157:52;;:10;;:52;;1200:6;4157:52;:32;:52;:::i;:::-;4094:130;;;4087:137;;;;;4057:347;4262:131;;;;;;;;;-1:-1:-1;4262:131:73;;4359:12;;4262:131;;;;4326:52;;:10;;:52;;1200:6;4326:52;:32;:52;:::i;3843:567::-;;;;;:::o;5559:588:19:-;5652:14;5678:107;5715:1;5704:8;:12;5730:4;5678:107;:12;:107::i;:::-;5795:123;5833:1;5821:9;:13;:31;;;;;5851:1;5838:10;:14;5866:4;5795:123;:12;:123::i;:::-;5928:20;5951:17;:8;5964:3;5951:17;:12;:17;:::i;:::-;5928:40;-1:-1:-1;5978:14:19;5995:31;5928:40;6015:10;5995:31;:19;:31;:::i;:::-;5978:48;-1:-1:-1;6036:16:19;6055:40;6079:15;6055:19;:9;6069:4;6055:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;6036:59;;6129:11;6117:9;:23;;;;;;;5559:588;-1:-1:-1;;;;;;;5559:588:19:o;1219:189::-;1322:16;1357:44;1366:7;1034:66;1396:4;1357:8;:44::i;24698:716:28:-;24917:12;;:25;;;24840:21;;;;-1:-1:-1;;;;;24917:39:28;24913:271;;25006:5;:12;25002:1;:16;24983:36;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;24972:47;;24913:271;;;25084:5;:12;25080:1;:16;25061:36;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;25050:47;;25143:30;;;;;;;;25156:5;:13;;;-1:-1:-1;;;;;25143:30:28;;;;;25171:1;25143:30;;;25111:8;25138:1;25120:8;:15;:19;25111:29;;;;;;;;;;;;;:62;;;;24913:271;25208:55;;;;;;;;;25221:13;;;;-1:-1:-1;;;;;25208:55:28;;;25236:12;;:26;25208:55;;;;25194:11;;:8;;-1:-1:-1;;25194:11:28;;;;;;;;;;;;;:69;25279:6;25274:108;25295:5;:12;25291:1;:16;25274:108;;;25346:25;;;;;;;;25359:5;25365:1;25359:8;;;;;;;;;;;;;;-1:-1:-1;;;;;25346:25:28;;;;;25369:1;25346:25;;;25328:8;25337:1;25341;25337:5;25328:15;;;;;;;;;;;;;;;;;:43;25309:3;;25274:108;;25420:2175;25692:12;;:25;;;25604:27;;;;-1:-1:-1;;;;;25692:39:28;25688:1378;;25782:5;:12;25757:38;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;25747:48;;25688:1378;;;25856:12;;:26;;;25826:139;;25856:31;;25905:4;25826:139;:12;:139::i;:::-;26005:12;;:28;;;25980:22;;26005:33;:41;;26045:1;26005:41;;;26041:1;26005:41;25980:66;;;;26114:17;26095:5;:12;26110:1;26095:16;:36;26070:62;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;26237:12:28;;:36;;;26060:72;;-1:-1:-1;26236:37:28;26379:302;26236:37;26429:38;;26466:1;26448:8;:15;:19;26429:38;;;26444:1;26429:38;26494:12;:38;;26531:1;26494:38;;;26527:1;26509:8;:15;:19;26494:38;26550:20;;;;26597:12;;:25;;;26550:73;;;;;-1:-1:-1;;;;;26550:46:28;;;;;;:73;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26550:73:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26550:73:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26550:73:28;;;;;;;;;26641:12;;:26;;;26379:21;:302::i;:::-;26329:7;26358:17;26354:1;26337:7;:14;:18;:38;26329:47;;;;;;;;;;;;;:352;;;;26740:17;26761:1;26740:22;26736:320;;;26812:229;26857:5;:12;;;26891:8;26900:1;26891:11;;;;;;;;;;;;;;26924:1;26947:5;:16;;;26964:1;26947:19;;;;;;;;;;;;;;26812:23;:229::i;:::-;26782:7;26807:1;26790:7;:14;:18;26782:27;;;;;;;;;;;;;:259;;;;26736:320;25688:1378;;;27081:6;27076:488;27097:5;:12;27093:1;:16;27076:488;;;27130:140;27185:5;27191:1;27185:8;;;;;;;;;;;;;;-1:-1:-1;;;;;27160:33:28;:8;27169:1;27173;27169:5;27160:15;;;;;;;;;;;;;;:21;;;-1:-1:-1;;;;;27160:33:28;;27211:4;27130:140;:12;:140::i;:::-;27297:256;27333:1;27352;27356;27352:5;27375;:16;;;27392:1;27375:19;;;;;;;;;;;;;;27412:5;:16;;;27429:1;27433;27429:5;27412:23;;;;;;;;;;;;;;27453:5;27459:1;27453:8;;;;;;;;;;;;;;27479:5;:16;;;27496:1;27479:19;;;;;;;;;;;;;;27516:5;:16;;;27533:1;27537;27533:5;27516:23;;;;;;;;;;;;;;27297:18;:256::i;:::-;27284:7;27292:1;27284:10;;;;;;;;;;;;;;;;;:269;27111:3;;27076:488;;1274:134:122;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;;;;;;;;;;30762:297:28;30893:16;;:::i;:::-;30928:5;:20;;;-1:-1:-1;;;;;30928:34:28;;30976:7;30997:5;:16;;;31040:1;31014:5;:16;;;:23;:27;30997:45;;;;;;;;;;;;;;30928:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30928:124:28;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30928:124:28;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30928:124:28;;;;;;;;4366:569:19;4522:13;4537;4563:14;4582:26;4593:6;4601;4582:10;:26::i;:::-;4562:46;;;4619:13;4634;4682:124;4707:7;4732:6;4756;4780:12;4682:7;:124::i;:::-;-1:-1:-1;;;;;4652:179:19;;:181;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4652:181:19;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4652:181:19;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;4652:181:19;;;;;;;;;4618:215;;;;;;;;;4876:6;-1:-1:-1;;;;;4866:16:19;:6;-1:-1:-1;;;;;4866:16:19;;:62;;4909:8;4919;4866:62;;;4886:8;4896;4866:62;4843:85;;;;-1:-1:-1;4366:569:19;-1:-1:-1;;;;;;;;4366:569:19:o;2159:459:122:-;2217:7;2458:6;2454:45;;-1:-1:-1;2487:1:122;2480:8;;2454:45;2521:5;;;2525:1;2521;:5;:1;2544:5;;;;;:10;2536:56;;;;;;;;;;;;;8286:721:19;8450:21;8483:98;8524:1;8509:4;:11;:16;;8539:4;8483:98;:12;:98::i;:::-;8612:4;:11;8601:23;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;8601:23:19;;8591:33;;8664:9;8634:7;8659:1;8642:7;:14;:18;8634:27;;;;;;;;;;;;;;;;;:39;8697:11;;-1:-1:-1;;8697:15:19;8683:318;8714:5;;8683:318;;8741:14;8757:15;8776:137;8808:7;8833:12;8863:4;8872:1;8868;:5;8863:11;;;;;;;;;;;;;;8892:4;8897:1;8892:7;;;;;;;;;;;;;;8776:14;:137::i;:::-;8740:173;;;;8944:46;8956:7;8964:1;8956:10;;;;;;;;;;;;;;8968:9;8979:10;8944:11;:46::i;:::-;8927:7;8939:1;8935;:5;8927:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;8721:3:19;8683:318;;2059:724:74;2223:7;2250:11;;;:29;;-1:-1:-1;2265:14:74;;2250:29;2246:151;;;2358:28;2371:1;2374:11;2358:12;:28::i;:::-;2351:35;;;;2246:151;2406:11;2420:21;:6;2431:9;2420:21;:10;:21;:::i;:::-;2406:35;-1:-1:-1;2680:96:74;2735:32;2765:1;2735:25;2758:1;2735:18;:11;2765:1;2735:18;:15;:18;:::i;:::-;:22;:25;:22;:25;:::i;:32::-;2708:23;:6;2719:11;2708:23;:10;:23;:::i;:::-;:59;;:67;;2774:1;2708:67;;;2770:1;2708:67;2680:96;;:23;:6;2691:11;2680:23;:10;:23;:::i;:96::-;2673:103;2059:724;-1:-1:-1;;;;;2059:724:74:o;1414:579:19:-;1547:16;1575:105;1616:1;1601:4;:11;:16;;1631:4;1575:105;:12;:105::i;:::-;1691:22;1744:1;1730:4;:11;:15;1716:30;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;1716:30:19;-1:-1:-1;1691:55:19;-1:-1:-1;1761:6:19;1756:209;1791:1;1777:4;:11;:15;1773:1;:19;1756:209;;;1824:130;1849:7;1874:4;1879:1;1874:7;;;;;;;;;;;;;;1899:4;1904:1;1908;1904:5;1899:11;;;;;;;;;;;;;;1928:12;1824:7;:130::i;:::-;1813:5;1819:1;1813:8;;;;;;;;-1:-1:-1;;;;;1813:141:19;;;:8;;;;;;;;;;;:141;1794:3;;1756:209;;20783:1200:28;20980:25;;:::i;:::-;21076:22;;;;21017:145;;21043:56;;;;21113:4;21017:145;:12;:145::i;:::-;21216:29;;;21243:1;21216:29;;;;;;;;;21173:40;;21216:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21173:72;;21271:172;;;;;;;;21312:7;21271:172;;;;21340:12;21271:172;;;;21381:6;:22;;;21271:172;;;;;;21428:4;21271:172;;;;;21255:10;21266:1;21255:13;;;;;;;;;;;;;;;;;:188;21461:515;;;;;;;;;;21507:23;21461:515;;;;;;;;;;21644:83;;;;;;;21662:4;21644:83;;21461:515;;;21644:83;;;-1:-1:-1;21644:83:28;;;;21697:26;21644:83;;;;21725:1;21644:83;;;21461:515;;;;-1:-1:-1;;21461:515:28;;;;-1:-1:-1;;21461:515:28;;;;21840:6;;;;;;;;;-1:-1:-1;;;;;21840:6:28;-1:-1:-1;;;;;21461:515:28;;;;;-1:-1:-1;;21461:515:28;;;;21918:34;21954:10;21907:58;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;21907:58:28;;;21461:515;;21454:522;20783:1200;-1:-1:-1;;;;;;20783:1200:28:o;21989:836::-;22252:25;;:::i;:::-;22296:522;;;;;;;;;;22342:24;22296:522;;;;;;;;;;22484:93;;;;;;;22502:4;22484:93;;22296:522;;;22484:93;;;-1:-1:-1;22484:93:28;;;;22537:26;22484:93;;;;22565:11;22484:93;;;22296:522;;;;22609:15;22296:522;;;;22658:17;22296:522;;;;22704:13;-1:-1:-1;;;;;22296:522:28;;;;;22748:14;22296:522;;;;22794:12;22783:24;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22783:24:28;;;22296:522;;;22289:529;;21989:836;;;;;;;;;;:::o;1732:187:122:-;1818:7;1853:12;1845:6;;;;1837:29;;;;;;;;;;;;;;;-1:-1:-1;;;1888:5:122;;;1732:187::o;6265:579:19:-;6358:13;6383:109;6421:1;6409:9;:13;6436:4;6383:109;:12;:109::i;:::-;6502:123;6540:1;6528:9;:13;:31;;;;;6558:1;6545:10;:14;6573:4;6502:123;:12;:123::i;:::-;6635:14;6652:34;6681:4;6652:24;:9;6666;6652:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;6635:51;-1:-1:-1;6696:16:19;6715:34;6745:3;6715:25;:10;6730:9;6715:25;:14;:25;:::i;:34::-;6696:53;-1:-1:-1;6804:33:19;6835:1;6804:26;:9;6696:53;6804:26;:13;:26;:::i;:33::-;6793:44;6265:579;-1:-1:-1;;;;;;6265:579:19:o;3073:130:122:-;3131:7;3157:39;3161:1;3164;3157:39;;;;;;;;;;;;;;;;;:3;:39::i;4500:128::-;4558:7;4584:37;4588:1;4591;4584:37;;;;;;;;;;;;;;;;;:3;:37::i;3718:338::-;3804:7;3904:12;3897:5;3889:28;;;;;;;;;;;;;;;;3927:9;3943:1;3939;:5;;;;;;;3718:338;-1:-1:-1;;;;;3718:338:122:o;5132:163::-;5218:7;5253:12;5245:6;5237:29;;;;;;;;;;;;;;;;5287:1;5283;:5;;;;;;;5132:163;-1:-1:-1;;;;5132:163:122:o;1235:29827:28:-;;;;;;;;;;-1:-1:-1;1235:29827:28;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;1235:29827:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1235:29827:28;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;1235:29827:28;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:134;220:13;;238:33;220:13;238:33;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;-1:-1;469:20;;509:18;498:30;;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;679:699;;792:3;785:4;777:6;773:17;769:27;759:2;;810:1;807;800:12;759:2;847:6;834:20;869:76;884:60;937:6;884:60;;;869:76;;;860:85;;962:5;987:6;980:5;973:21;1017:4;1009:6;1005:17;995:27;;1039:4;1034:3;1030:14;1023:21;;1092:6;1139:3;1131:4;1123:6;1119:17;1114:3;1110:27;1107:36;1104:2;;;1156:1;1153;1146:12;1104:2;1181:1;1166:206;1191:6;1188:1;1185:13;1166:206;;;1249:3;1271:37;1304:3;1292:10;1271:37;;;1259:50;;-1:-1;1332:4;1323:14;;;;1351;;;;;1213:1;1206:9;1166:206;;;1170:14;752:626;;;;;;;;1386:124;1450:20;;1475:30;1450:20;1475:30;;1517:128;1592:13;;1610:30;1592:13;1610:30;;1652:130;1719:20;;1744:33;1719:20;1744:33;;1789:176;1879:20;;1904:56;1879:20;1904:56;;2180:804;;2295:4;2283:9;2278:3;2274:19;2270:30;2267:2;;;2313:1;2310;2303:12;2267:2;2331:20;2346:4;2331:20;;;2322:29;-1:-1;2401:1;2433:46;2475:3;2455:9;2433:46;;;2408:72;;-1:-1;2549:2;2582:72;2650:3;2626:22;;;2582:72;;;2575:4;2568:5;2564:16;2557:98;2501:165;2715:2;2748:69;2813:3;2804:6;2793:9;2789:22;2748:69;;;2741:4;2734:5;2730:16;2723:95;2676:153;2880:2;2913:49;2958:3;2949:6;2938:9;2934:22;2913:49;;;2906:4;2899:5;2895:16;2888:75;2839:135;2261:723;;;;;3019:661;;3143:4;3131:9;3126:3;3122:19;3118:30;3115:2;;;3161:1;3158;3151:12;3115:2;3179:20;3194:4;3179:20;;;3170:29;-1:-1;3251:1;3283:59;3338:3;3318:9;3283:59;;;3258:85;;-1:-1;3406:2;3439:59;3494:3;3470:22;;;3439:59;;;3432:4;3425:5;3421:16;3414:85;3364:146;3566:2;3599:59;3654:3;3645:6;3634:9;3630:22;3599:59;;;3592:4;3585:5;3581:16;3574:85;3520:150;3109:571;;;;;3744:1580;;3871:6;3859:9;3854:3;3850:19;3846:32;3843:2;;;3891:1;3888;3881:12;3843:2;3909:22;3924:6;3909:22;;;3900:31;-1:-1;3990:1;4022:49;4067:3;4047:9;4022:49;;;3997:75;;-1:-1;4137:2;4170:75;4241:3;4217:22;;;4170:75;;;4163:4;4156:5;4152:16;4145:101;4093:164;4312:3;4346:75;4417:3;4408:6;4397:9;4393:22;4346:75;;;4339:4;4332:5;4328:16;4321:101;4267:166;4516:3;4505:9;4501:19;4488:33;4541:18;4533:6;4530:30;4527:2;;;4573:1;4570;4563:12;4527:2;4608:70;4674:3;4665:6;4654:9;4650:22;4608:70;;;4601:4;4594:5;4590:16;4583:96;4443:247;4748:3;4782:49;4827:3;4818:6;4807:9;4803:22;4782:49;;;4775:4;4768:5;4764:16;4757:75;4700:143;4912:3;4946:46;4988:3;4979:6;4968:9;4964:22;4946:46;;;4939:4;4932:5;4928:16;4921:72;4853:151;5063:3;5097:49;5142:3;5133:6;5122:9;5118:22;5097:49;;;5090:4;5083:5;5079:16;5072:75;5014:144;5219:3;5253:49;5298:3;5289:6;5278:9;5274:22;5253:49;;;5246:4;5239:5;5235:16;5228:75;5168:146;3837:1487;;;;;5354:495;;5476:4;5464:9;5459:3;5455:19;5451:30;5448:2;;;5494:1;5491;5484:12;5448:2;5512:20;5527:4;5512:20;;;5503:29;-1:-1;5582:1;5614:57;5667:3;5647:9;5614:57;;;5589:83;;-1:-1;5734:2;5767:60;5823:3;5799:22;;;5767:60;;;5760:4;5753:5;5749:16;5742:86;5693:146;5442:407;;;;;5908:755;;6030:4;6018:9;6013:3;6009:19;6005:30;6002:2;;;6048:1;6045;6038:12;6002:2;6066:20;6081:4;6066:20;;;6057:29;-1:-1;6142:1;6174:46;6216:3;6196:9;6174:46;;;6149:72;;-1:-1;6279:2;6312:47;6355:3;6331:22;;;6312:47;;;6305:4;6298:5;6294:16;6287:73;6242:129;6418:2;6451:49;6496:3;6487:6;6476:9;6472:22;6451:49;;6693:495;;6815:4;6803:9;6798:3;6794:19;6790:30;6787:2;;;6833:1;6830;6823:12;6787:2;6851:20;6866:4;6851:20;;;6842:29;-1:-1;6921:1;6953:57;7006:3;6986:9;6953:57;;;6928:83;;-1:-1;7073:2;7106:60;7162:3;7138:22;;;7106:60;;7195:134;7273:13;;7291:33;7273:13;7291:33;;7336:134;7414:13;;7432:33;7414:13;7432:33;;7614:134;7692:13;;7710:33;7692:13;7710:33;;7755:132;7832:13;;7850:32;7832:13;7850:32;;7894:126;7959:20;;7984:31;7959:20;7984:31;;8027:132;8104:13;;8122:32;8104:13;8122:32;;8166:263;;8281:2;8269:9;8260:7;8256:23;8252:32;8249:2;;;8297:1;8294;8287:12;8249:2;8332:1;8349:64;8405:7;8385:9;8349:64;;8436:1121;;;;;;;;;8659:3;8647:9;8638:7;8634:23;8630:33;8627:2;;;8676:1;8673;8666:12;8627:2;8711:1;8728:53;8773:7;8753:9;8728:53;;;8718:63;;8690:97;8818:2;8836:53;8881:7;8872:6;8861:9;8857:22;8836:53;;;8826:63;;8797:98;8926:2;8944:53;8989:7;8980:6;8969:9;8965:22;8944:53;;;8934:63;;8905:98;9034:2;9052:53;9097:7;9088:6;9077:9;9073:22;9052:53;;;9042:63;;9013:98;9142:3;9161:53;9206:7;9197:6;9186:9;9182:22;9161:53;;;9151:63;;9121:99;9251:3;9270:53;9315:7;9306:6;9295:9;9291:22;9270:53;;;9260:63;;9230:99;9360:3;9379:53;9424:7;9415:6;9404:9;9400:22;9379:53;;;9369:63;;9339:99;9469:3;9488:53;9533:7;9524:6;9513:9;9509:22;9488:53;;;9478:63;;9448:99;8621:936;;;;;;;;;;;;9564:1313;;;;;;;;;;9837:3;9825:9;9816:7;9812:23;9808:33;9805:2;;;9854:1;9851;9844:12;9805:2;9889:1;9906:53;9951:7;9931:9;9906:53;;;9896:63;;9868:97;9996:2;10014:53;10059:7;10050:6;10039:9;10035:22;10014:53;;;10004:63;;9975:98;10104:2;10122:53;10167:7;10158:6;10147:9;10143:22;10122:53;;;10112:63;;10083:98;10212:2;10230:53;10275:7;10266:6;10255:9;10251:22;10230:53;;;10220:63;;10191:98;10320:3;10339:53;10384:7;10375:6;10364:9;10360:22;10339:53;;;10329:63;;10299:99;10429:3;10448:53;10493:7;10484:6;10473:9;10469:22;10448:53;;;10438:63;;10408:99;10538:3;10557:53;10602:7;10593:6;10582:9;10578:22;10557:53;;;10547:63;;10517:99;10647:3;10666:53;10711:7;10702:6;10691:9;10687:22;10666:53;;;10656:63;;10626:99;10756:3;10775:86;10853:7;10844:6;10833:9;10829:22;10775:86;;;10765:96;;10735:132;9799:1078;;;;;;;;;;;;10884:1247;;;;;;;;;;11124:3;11112:9;11103:7;11099:23;11095:33;11092:2;;;11141:1;11138;11131:12;11092:2;11176:1;11193:53;11238:7;11218:9;11193:53;;;11183:63;;11155:97;11283:2;11301:53;11346:7;11337:6;11326:9;11322:22;11301:53;;;11291:63;;11262:98;11391:2;11409:53;11454:7;11445:6;11434:9;11430:22;11409:53;;;11399:63;;11370:98;11499:2;11517:53;11562:7;11553:6;11542:9;11538:22;11517:53;;;11507:63;;11478:98;11607:3;11626:53;11671:7;11662:6;11651:9;11647:22;11626:53;;;11616:63;;11586:99;11716:3;11735:53;11780:7;11771:6;11760:9;11756:22;11735:53;;;11725:63;;11695:99;11825:3;11844:53;11889:7;11880:6;11869:9;11865:22;11844:53;;;11834:63;;11804:99;11934:3;11953:53;11998:7;11989:6;11978:9;11974:22;11953:53;;;11943:63;;11913:99;12043:3;12062:53;12107:7;12098:6;12087:9;12083:22;12062:53;;12138:899;;;;;;;12345:3;12333:9;12324:7;12320:23;12316:33;12313:2;;;12362:1;12359;12352:12;12313:2;12397:1;12414:53;12459:7;12439:9;12414:53;;;12404:63;;12376:97;12504:2;12522:53;12567:7;12558:6;12547:9;12543:22;12522:53;;;12512:63;;12483:98;12612:2;12630:53;12675:7;12666:6;12655:9;12651:22;12630:53;;;12620:63;;12591:98;12720:2;12738:53;12783:7;12774:6;12763:9;12759:22;12738:53;;;12728:63;;12699:98;12856:3;12845:9;12841:19;12828:33;12881:18;12873:6;12870:30;12867:2;;;12913:1;12910;12903:12;12867:2;12941:80;13013:7;13004:6;12993:9;12989:22;12941:80;;;12931:90;;;;12807:220;12307:730;;;;;;;;;13044:257;;13156:2;13144:9;13135:7;13131:23;13127:32;13124:2;;;13172:1;13169;13162:12;13124:2;13207:1;13224:61;13277:7;13257:9;13224:61;;13308:311;;13447:2;13435:9;13426:7;13422:23;13418:32;13415:2;;;13463:1;13460;13453:12;13415:2;13498:1;13515:88;13595:7;13575:9;13515:88;;13626:528;;;13785:2;13773:9;13764:7;13760:23;13756:32;13753:2;;;13801:1;13798;13791:12;13753:2;13836:31;;13887:18;13876:30;;13873:2;;;13919:1;13916;13909:12;13873:2;13939:91;14022:7;14013:6;14002:9;13998:22;13939:91;;;13929:101;;13815:221;14067:2;14085:53;14130:7;14121:6;14110:9;14106:22;14085:53;;;14075:63;;14046:98;13747:407;;;;;;14161:307;;14298:2;14286:9;14277:7;14273:23;14269:32;14266:2;;;14314:1;14311;14304:12;14266:2;14349:1;14366:86;14444:7;14424:9;14366:86;;14475:307;;14612:2;14600:9;14591:7;14587:23;14583:32;14580:2;;;14628:1;14625;14618:12;14580:2;14663:1;14680:86;14758:7;14738:9;14680:86;;14789:533;;;;14937:2;14925:9;14916:7;14912:23;14908:32;14905:2;;;14953:1;14950;14943:12;14905:2;14988:1;15005:64;15061:7;15041:9;15005:64;;;14995:74;;14967:108;15106:2;15124:64;15180:7;15171:6;15160:9;15156:22;15124:64;;;15114:74;;15085:109;15225:2;15243:63;15298:7;15289:6;15278:9;15274:22;15243:63;;;15233:73;;15204:108;14899:423;;;;;;15329:263;;15444:2;15432:9;15423:7;15419:23;15415:32;15412:2;;;15460:1;15457;15450:12;15412:2;15495:1;15512:64;15568:7;15548:9;15512:64;;15599:399;;;15731:2;15719:9;15710:7;15706:23;15702:32;15699:2;;;15747:1;15744;15737:12;15699:2;15782:1;15799:64;15855:7;15835:9;15799:64;;;15789:74;;15761:108;15900:2;15918:64;15974:7;15965:6;15954:9;15950:22;15918:64;;16005:899;;;;;;;16212:3;16200:9;16191:7;16187:23;16183:33;16180:2;;;16229:1;16226;16219:12;16180:2;16264:1;16281:53;16326:7;16306:9;16281:53;;;16271:63;;16243:97;16371:2;16389:53;16434:7;16425:6;16414:9;16410:22;16389:53;;;16379:63;;16350:98;16479:2;16497:53;16542:7;16533:6;16522:9;16518:22;16497:53;;;16487:63;;16458:98;16615:2;16604:9;16600:18;16587:32;16639:18;16631:6;16628:30;16625:2;;;16671:1;16668;16661:12;16625:2;16699:80;16771:7;16762:6;16751:9;16747:22;16699:80;;;16689:90;;;;16566:219;16816:3;16835:53;16880:7;16871:6;16860:9;16856:22;16835:53;;;16825:63;;16795:99;16174:730;;;;;;;;;16912:257;;17063:100;17159:3;17151:6;17063:100;;17178:253;;17303:88;17387:3;17379:6;17303:88;;;-1:-1;;17420:4;17411:14;;17296:135;17440:281;;17579:102;17677:3;17669:6;17579:102;;;-1:-1;;17710:4;17701:14;;17572:149;17729:142;17820:45;17859:5;17820:45;;;17815:3;17808:58;17802:69;;;17878:103;17951:24;17969:5;17951:24;;18108:152;18209:45;18229:24;18247:5;18229:24;;;18209:45;;18334:1048;;18529:79;18602:5;18529:79;;;18621:111;18725:6;18720:3;18621:111;;;18614:118;;18755:3;18797:4;18789:6;18785:17;18780:3;18776:27;18824:81;18899:5;18824:81;;;18925:7;18953:1;18938:405;18963:6;18960:1;18957:13;18938:405;;;19025:9;19019:4;19015:20;19010:3;19003:33;19070:6;19064:13;19092:114;19201:4;19186:13;19092:114;;;19084:122;;19223:85;19301:6;19223:85;;;19331:4;19322:14;;;;;19213:95;-1:-1;;18985:1;18978:9;18938:405;;;-1:-1;19356:4;;18508:874;-1:-1;;;;;;;18508:874;19445:842;;19628:73;19695:5;19628:73;;;19714:105;19812:6;19807:3;19714:105;;;19707:112;;19840:75;19909:5;19840:75;;;19935:7;19963:1;19948:317;19973:6;19970:1;19967:13;19948:317;;;20040:6;20034:13;20061:101;20158:3;20143:13;20061:101;;;20054:108;;20179:79;20251:6;20179:79;;;20169:89;-1:-1;;19995:1;19988:9;19948:317;;;-1:-1;20278:3;;19607:680;-1:-1;;;;;19607:680;20366:898;;20563:80;20637:5;20563:80;;;20656:112;20761:6;20756:3;20656:112;;;20649:119;;20789:82;20865:5;20789:82;;;20891:7;20919:1;20904:338;20929:6;20926:1;20923:13;20904:338;;;20996:6;20990:13;21017:115;21128:3;21113:13;21017:115;;;21010:122;;21149:86;21228:6;21149:86;;;21139:96;-1:-1;;20951:1;20944:9;20904:338;;21272:94;21339:21;21354:5;21339:21;;21373:148;21472:43;21491:23;21508:5;21491:23;;;21472:43;;21528:148;21627:43;21646:23;21663:5;21646:23;;21683:113;21766:24;21784:5;21766:24;;21803:152;21904:45;21924:24;21942:5;21924:24;;21962:356;;22090:38;22122:5;22090:38;;;22140:88;22221:6;22216:3;22140:88;;;22133:95;;22233:52;22278:6;22273:3;22266:4;22259:5;22255:16;22233:52;;;22297:16;;;;;22070:248;-1:-1;;22070:248;22325:315;;22421:34;22449:5;22421:34;;;22467:60;22520:6;22515:3;22467:60;;;22460:67;;22532:52;22577:6;22572:3;22565:4;22558:5;22554:16;22532:52;;;22605:29;22627:6;22605:29;;;22596:39;;;;22401:239;-1:-1;;;22401:239;22647:182;22758:65;22817:5;22758:65;;23019:144;23106:51;23151:5;23106:51;;23170:158;23264:58;23316:5;23264:58;;24020:327;;24180:67;24244:2;24239:3;24180:67;;;24280:29;24260:50;;24338:2;24329:12;;24166:181;-1:-1;;24166:181;24356:398;;24534:84;24616:1;24611:3;24534:84;;;24651:66;24631:87;;24746:1;24737:11;;24520:234;-1:-1;;24520:234;24763:370;;24923:67;24987:2;24982:3;24923:67;;;25023:34;25003:55;;25092:3;25087:2;25078:12;;25071:25;25124:2;25115:12;;24909:224;-1:-1;;24909:224;25202:1616;25421:23;;25202:1616;;25347:6;25338:16;;;25450:77;25342:3;25421:23;25450:77;;;25369:164;25611:4;25604:5;25600:16;25594:23;25623:63;25680:4;25675:3;25671:14;25657:12;25623:63;;;25543:149;25767:4;25760:5;25756:16;25750:23;25779:119;25892:4;25887:3;25883:14;25869:12;25779:119;;;25702:202;25988:4;25981:5;25977:16;25971:23;26000:63;26057:4;26052:3;26048:14;26034:12;26000:63;;;25914:155;26155:4;26148:5;26144:16;26138:23;26167:63;26224:4;26219:3;26215:14;26201:12;26167:63;;;26079:157;26317:4;26310:5;26306:16;26300:23;26329:65;26386:6;26381:3;26377:16;26363:12;26329:65;;;26246:154;26483:4;26476:5;26472:16;26466:23;26495:65;26552:6;26547:3;26543:16;26529:12;26495:65;;;26410:156;26639:4;26632:5;26628:16;26622:23;26693:3;26687:4;26683:14;26674:6;26669:3;26665:16;26658:40;26713:67;26775:4;26761:12;26713:67;;26884:821;27089:23;;27023:4;27014:14;;;27118:57;27018:3;27089:23;27118:57;;;27043:138;27262:4;27255:5;27251:16;27245:23;27274:84;27352:4;27347:3;27343:14;27329:12;27274:84;;;27191:173;27436:4;27429:5;27425:16;27419:23;27448:81;27523:4;27518:3;27514:14;27500:12;27448:81;;;27374:161;27609:4;27602:5;27598:16;27592:23;27621:63;27678:4;27673:3;27669:14;27655:12;27621:63;;;27545:145;26996:709;;;;27777:572;28000:23;;27930:4;27921:14;;;28029:103;27925:3;28000:23;28029:103;;;27950:188;28213:4;28206:5;28202:16;28196:23;28225:103;28322:4;28317:3;28313:14;28299:12;28225:103;;28405:475;28611:23;;28544:4;28535:14;;;28640:63;28539:3;28611:23;28640:63;;;28564:145;28784:4;28777:5;28773:16;28767:23;28796:63;28853:4;28848:3;28844:14;28830:12;28796:63;;29974:451;30163:23;;30097:4;30088:14;;;30192:57;30092:3;30163:23;30192:57;;;30117:138;30329:4;30322:5;30318:16;30312:23;30341:63;30398:4;30393:3;30389:14;30375:12;30341:63;;30497:833;30705:23;;30636:4;30627:14;;;30734:105;30631:3;30705:23;30734:105;;;30656:189;30922:4;30915:5;30911:16;30905:23;30934:63;30991:4;30986:3;30982:14;30968:12;30934:63;;;30855:148;31081:4;31074:5;31070:16;31064:23;31093:61;31148:4;31143:3;31139:14;31125:12;31093:61;;;31013:147;31240:4;31233:5;31229:16;31223:23;31252:57;31303:4;31298:3;31294:14;31280:12;31252:57;;31380:451;31569:23;;31503:4;31494:14;;;31598:57;31498:3;31569:23;31598:57;;31838:103;31911:24;31929:5;31911:24;;32178:100;32249:23;32266:5;32249:23;;32285:107;32364:22;32380:5;32364:22;;32399:383;;32546:75;32617:3;32608:6;32546:75;;;32643:2;32638:3;32634:12;32627:19;;32657:75;32728:3;32719:6;32657:75;;;-1:-1;32754:2;32745:12;;32534:248;-1:-1;;32534:248;32789:244;;32908:75;32979:3;32970:6;32908:75;;;-1:-1;33005:2;32996:12;;32896:137;-1:-1;32896:137;33040:553;;33256:93;33345:3;33336:6;33256:93;;;33249:100;;33360:73;33429:3;33420:6;33360:73;;;33455:1;33450:3;33446:11;33439:18;;33475:93;33564:3;33555:6;33475:93;;33600:1269;;33986:93;34075:3;34066:6;33986:93;;;33979:100;;34090:73;34159:3;34150:6;34090:73;;;34185:1;34180:3;34176:11;34169:18;;34205:93;34294:3;34285:6;34205:93;;;34198:100;;34309:73;34378:3;34369:6;34309:73;;;34404:1;34399:3;34395:11;34388:18;;34424:93;34513:3;34504:6;34424:93;;;34417:100;;34528:73;34597:3;34588:6;34528:73;;;34623:1;34618:3;34614:11;34607:18;;34643:93;34732:3;34723:6;34643:93;;;34636:100;;34747:73;34816:3;34807:6;34747:73;;;-1:-1;34842:1;34833:11;;33967:902;-1:-1;;;;;;;;33967:902;34876:789;;35159:148;35303:3;35159:148;;;35152:155;;35318:75;35389:3;35380:6;35318:75;;;35415:2;35410:3;35406:12;35399:19;;35429:75;35500:3;35491:6;35429:75;;;35526:2;35521:3;35517:12;35510:19;;35540:75;35611:3;35602:6;35540:75;;;-1:-1;35637:2;35628:12;;35140:525;-1:-1;;;35140:525;35672:213;35790:2;35775:18;;35804:71;35779:9;35848:6;35804:71;;35892:451;36074:2;36059:18;;36088:79;36063:9;36140:6;36088:79;;;36178:72;36246:2;36235:9;36231:18;36222:6;36178:72;;;36261;36329:2;36318:9;36314:18;36305:6;36261:72;;36350:891;36640:3;36625:19;;36655:79;36629:9;36707:6;36655:79;;;36745:72;36813:2;36802:9;36798:18;36789:6;36745:72;;;36828;36896:2;36885:9;36881:18;36872:6;36828:72;;;36911;36979:2;36968:9;36964:18;36955:6;36911:72;;;36994:69;37058:3;37047:9;37043:19;37034:6;36994:69;;;37074:73;37142:3;37131:9;37127:19;37118:6;37074:73;;;37158;37226:3;37215:9;37211:19;37202:6;37158:73;;;36611:630;;;;;;;;;;;37248:324;37394:2;37379:18;;37408:71;37383:9;37452:6;37408:71;;;37490:72;37558:2;37547:9;37543:18;37534:6;37490:72;;37579:1131;38017:3;38002:19;;38032:71;38006:9;38076:6;38032:71;;;38114:72;38182:2;38171:9;38167:18;38158:6;38114:72;;;38197;38265:2;38254:9;38250:18;38241:6;38197:72;;;38280:132;38408:2;38397:9;38393:18;38384:6;38280:132;;;38423:133;38551:3;38540:9;38536:19;38527:6;38423:133;;;38567;38695:3;38684:9;38680:19;38671:6;38567:133;;38717:324;38863:2;38848:18;;38877:71;38852:9;38921:6;38877:71;;;38959:72;39027:2;39016:9;39012:18;39003:6;38959:72;;39048:796;39382:2;39396:47;;;39367:18;;39457:146;39367:18;39589:6;39457:146;;;39449:154;;39651:9;39645:4;39641:20;39636:2;39625:9;39621:18;39614:48;39676:158;39829:4;39820:6;39676:158;;39851:213;39969:2;39954:18;;39983:71;39958:9;40027:6;39983:71;;40071:269;40217:2;40202:18;;40231:99;40206:9;40303:6;40231:99;;40617:614;40884:2;40869:18;;40898:90;40873:9;40961:6;40898:90;;;41036:9;41030:4;41026:20;41021:2;41010:9;41006:18;40999:48;41061:160;41216:4;41207:6;41061:160;;41238:301;41376:2;41390:47;;;41361:18;;41451:78;41361:18;41515:6;41451:78;;41546:407;41737:2;41751:47;;;41722:18;;41812:131;41722:18;41812:131;;41960:407;42151:2;42165:47;;;42136:18;;42226:131;42136:18;42226:131;;42374:416;42566:2;42551:18;;42580:117;42555:9;42670:6;42580:117;;;42708:72;42776:2;42765:9;42761:18;42752:6;42708:72;;43432:324;43578:2;43563:18;;43592:71;43567:9;43636:6;43592:71;;43763:435;43937:2;43922:18;;43951:71;43926:9;43995:6;43951:71;;;44033:72;44101:2;44090:9;44086:18;44077:6;44033:72;;44205:256;44267:2;44261:9;44293:17;;;44368:18;44353:34;;44389:22;;;44350:62;44347:2;;;44425:1;44422;44415:12;44347:2;44441;44434:22;44245:216;;-1:-1;44245:216;44468:300;;44623:18;44615:6;44612:30;44609:2;;;44655:1;44652;44645:12;44609:2;-1:-1;44690:4;44678:17;;;44743:15;;44546:222;44775:176;44924:4;44915:14;;44872:79;45319:162;45447:12;;45418:63;46618:203;46761:19;;;46810:4;46801:14;;46754:67;47888:91;;47950:24;47968:5;47950:24;;47986:85;48052:13;48045:21;;48028:43;48078:144;48150:66;48139:78;;48122:100;48229:144;48301:66;48290:78;;48273:100;48380:72;48442:5;48425:27;48459:138;48537:5;48543:49;48537:5;48543:49;;48604:152;48689:5;48695:56;48689:5;48695:56;;49071:109;49144:30;49133:42;;49116:64;49187:113;49260:34;49249:46;;49232:68;49307:121;-1:-1;;;;;49369:54;;49352:76;49514:88;49586:10;49575:22;;49558:44;49609:81;49680:4;49669:16;;49652:38;49697:104;49769:26;49758:38;;49741:60;49808:129;;49895:37;49926:5;49944:177;;50051:65;50110:5;50051:65;;50589:138;;50682:40;50716:5;50682:40;;50734:152;;50834:47;50875:5;50834:47;;51445:268;51510:1;51517:101;51531:6;51528:1;51525:13;51517:101;;;51598:11;;;51592:18;51579:11;;;51572:39;51553:2;51546:10;51517:101;;;51633:6;51630:1;51627:13;51624:2;;;-1:-1;;51698:1;51680:16;;51673:27;51494:219;51721:95;;51785:26;51805:5;52064:89;52128:20;52142:5;52128:20;;52160:97;52248:2;52228:14;52244:7;52224:28;;52208:49;52265:94;52339:2;52335:14;;52307:52;52367:107;52452:1;52445:5;52442:12;52432:2;;52458:9;52432:2;52426:48;;52481:114;52573:1;52566:5;52563:12;52553:2;;52579:9;52839:117;52908:24;52926:5;52908:24;;;52901:5;52898:35;52888:2;;52947:1;52944;52937:12;52963:111;53029:21;53044:5;53029:21;;53081:117;53150:24;53168:5;53150:24;;53205:117;53297:1;53290:5;53287:12;53277:2;;53313:1;53310;53303:12;53450:117;53519:24;53537:5;53519:24;;53574:117;53643:24;53661:5;53643:24;;53822:115;53890:23;53907:5;53890:23;;53944:113;54011:22;54027:5;54011:22;;54064:115;54132:23;54149:5;54132:23;",
1164
1164
  "source": "/*\n\n Copyright 2021 Dolomite.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.7;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/utils/ReentrancyGuard.sol\";\n\nimport \"../../protocol/interfaces/IDolomiteMargin.sol\";\nimport \"../../protocol/lib/Events.sol\";\n\nimport \"../../protocol/lib/Account.sol\";\nimport \"../../protocol/lib/Actions.sol\";\nimport \"../../protocol/lib/Require.sol\";\nimport \"../../protocol/lib/Types.sol\";\n\nimport \"../lib/TypedSignature.sol\";\nimport \"../lib/DolomiteAmmLibrary.sol\";\n\nimport \"../interfaces/IExpiry.sol\";\nimport \"../interfaces/IDolomiteAmmFactory.sol\";\nimport \"../interfaces/IDolomiteAmmPair.sol\";\n\n\ncontract DolomiteAmmRouterProxy is ReentrancyGuard {\n using SafeMath for uint;\n\n // ============ Constants ============\n\n bytes32 constant internal FILE = \"DolomiteAmmRouterProxy\";\n\n // ============ Structs ============\n\n struct ModifyPositionParams {\n uint accountNumber;\n Types.AssetAmount amountIn;\n Types.AssetAmount amountOut;\n address[] tokenPath;\n /// the token to be deposited/withdrawn to/from account number. To not perform any margin deposits or\n /// withdrawals, simply set this to `address(0)`\n address depositToken;\n /// a positive number means funds are deposited to `accountNumber` from accountNumber zero\n /// a negative number means funds are withdrawn from `accountNumber` and moved to accountNumber zero\n bool isPositiveMarginDeposit;\n /// the amount of the margin deposit/withdrawal, in wei\n uint marginDeposit;\n /// the amount of seconds from the time at which the position is opened to expiry. 0 for no expiration\n uint expiryTimeDelta;\n }\n\n struct ModifyPositionCache {\n ModifyPositionParams params;\n IDolomiteMargin dolomiteMargin;\n IDolomiteAmmFactory ammFactory;\n address account;\n uint[] marketPath;\n uint[] amountsWei;\n uint marginDepositDeltaWei;\n }\n\n struct PermitSignature {\n bool approveMax;\n uint8 v;\n bytes32 r;\n bytes32 s;\n }\n\n // ============ Events ============\n\n event MarginPositionOpen(\n address indexed user,\n uint indexed accountIndex,\n address inputToken,\n address outputToken,\n address depositToken,\n Events.BalanceUpdate inputBalanceUpdate, // the amount of borrow amount being sold to purchase collateral\n Events.BalanceUpdate outputBalanceUpdate, // the amount of collateral purchased by the borrowed amount\n Events.BalanceUpdate marginDepositUpdate\n );\n\n event MarginPositionClose(\n address indexed user,\n uint indexed accountIndex,\n address inputToken,\n address outputToken,\n address withdrawalToken,\n Events.BalanceUpdate inputBalanceUpdate, // the amount of held amount being sold to repay debt\n Events.BalanceUpdate outputBalanceUpdate, // the amount of borrow amount being repaid\n Events.BalanceUpdate marginWithdrawalUpdate\n );\n\n modifier ensure(uint deadline) {\n Require.that(\n deadline >= block.timestamp,\n FILE,\n \"deadline expired\",\n deadline,\n block.timestamp\n );\n _;\n }\n\n // ============ State Variables ============\n\n IDolomiteMargin public DOLOMITE_MARGIN;\n IDolomiteAmmFactory public DOLOMITE_AMM_FACTORY;\n address public EXPIRY;\n\n constructor(\n address dolomiteMargin,\n address dolomiteAmmFactory,\n address expiry\n ) public {\n DOLOMITE_MARGIN = IDolomiteMargin(dolomiteMargin);\n DOLOMITE_AMM_FACTORY = IDolomiteAmmFactory(dolomiteAmmFactory);\n EXPIRY = expiry;\n }\n\n function getPairInitCodeHash() external pure returns (bytes32) {\n return DolomiteAmmLibrary.getPairInitCodeHash();\n }\n\n function addLiquidity(\n address to,\n uint fromAccountNumber,\n address tokenA,\n address tokenB,\n uint amountADesired,\n uint amountBDesired,\n uint amountAMinWei,\n uint amountBMinWei,\n uint deadline\n )\n external\n ensure(deadline)\n returns (uint amountAWei, uint amountBWei, uint liquidity) {\n (amountAWei, amountBWei) = _addLiquidity(\n tokenA,\n tokenB,\n amountADesired,\n amountBDesired,\n amountAMinWei,\n amountBMinWei\n );\n address pair = DolomiteAmmLibrary.pairFor(address(DOLOMITE_AMM_FACTORY), tokenA, tokenB);\n\n // solium-disable indentation, arg-overflow\n {\n Account.Info[] memory accounts = new Account.Info[](2);\n accounts[0] = Account.Info(msg.sender, fromAccountNumber);\n accounts[1] = Account.Info(pair, 0);\n\n uint marketIdA = DOLOMITE_MARGIN.getMarketIdByTokenAddress(tokenA);\n uint marketIdB = DOLOMITE_MARGIN.getMarketIdByTokenAddress(tokenB);\n\n Actions.ActionArgs[] memory actions = new Actions.ActionArgs[](2);\n actions[0] = _encodeTransferAction(0, 1, marketIdA, amountAWei);\n actions[1] = _encodeTransferAction(0, 1, marketIdB, amountBWei);\n DOLOMITE_MARGIN.operate(accounts, actions);\n }\n // solium-enable indentation, arg-overflow\n\n liquidity = IDolomiteAmmPair(pair).mint(to);\n }\n\n function swapExactTokensForTokens(\n uint accountNumber,\n uint amountInWei,\n uint amountOutMinWei,\n address[] calldata tokenPath,\n uint deadline\n )\n external\n ensure(deadline) {\n _swapExactTokensForTokensAndModifyPosition(\n ModifyPositionCache({\n params : ModifyPositionParams({\n accountNumber : accountNumber,\n amountIn : _defaultAssetAmount(amountInWei),\n amountOut : _defaultAssetAmount(amountOutMinWei),\n tokenPath : tokenPath,\n depositToken : address(0),\n isPositiveMarginDeposit : false,\n marginDeposit : 0,\n expiryTimeDelta : 0\n }),\n dolomiteMargin : DOLOMITE_MARGIN,\n ammFactory : DOLOMITE_AMM_FACTORY,\n account : msg.sender,\n marketPath : new uint[](0),\n amountsWei : new uint[](0),\n marginDepositDeltaWei : 0\n })\n );\n }\n\n function getParamsForSwapExactTokensForTokens(\n address account,\n uint accountNumber,\n uint amountInWei,\n uint amountOutMinWei,\n address[] calldata tokenPath\n )\n external view returns (Account.Info[] memory, Actions.ActionArgs[] memory) {\n return _getParamsForSwapExactTokensForTokens(\n ModifyPositionCache({\n params : ModifyPositionParams({\n accountNumber : accountNumber,\n amountIn : _defaultAssetAmount(amountInWei),\n amountOut : _defaultAssetAmount(amountOutMinWei),\n tokenPath : tokenPath,\n depositToken : address(0),\n isPositiveMarginDeposit : false,\n marginDeposit : 0,\n expiryTimeDelta : 0\n }),\n dolomiteMargin : DOLOMITE_MARGIN,\n ammFactory : DOLOMITE_AMM_FACTORY,\n account : account,\n marketPath : new uint[](0),\n amountsWei : new uint[](0),\n marginDepositDeltaWei : 0\n })\n );\n }\n\n function swapTokensForExactTokens(\n uint accountNumber,\n uint amountInMaxWei,\n uint amountOutWei,\n address[] calldata tokenPath,\n uint deadline\n )\n external\n ensure(deadline) {\n _swapTokensForExactTokensAndModifyPosition(\n ModifyPositionCache({\n params : ModifyPositionParams({\n accountNumber : accountNumber,\n amountIn : _defaultAssetAmount(amountInMaxWei),\n amountOut : _defaultAssetAmount(amountOutWei),\n tokenPath : tokenPath,\n depositToken : address(0),\n isPositiveMarginDeposit : false,\n marginDeposit : 0,\n expiryTimeDelta : 0\n }),\n dolomiteMargin : DOLOMITE_MARGIN,\n ammFactory : DOLOMITE_AMM_FACTORY,\n account : msg.sender,\n marketPath : new uint[](0),\n amountsWei : new uint[](0),\n marginDepositDeltaWei : 0\n })\n );\n }\n\n function getParamsForSwapTokensForExactTokens(\n address account,\n uint accountNumber,\n uint amountInMaxWei,\n uint amountOutWei,\n address[] calldata tokenPath\n )\n external view returns (Account.Info[] memory, Actions.ActionArgs[] memory) {\n return _getParamsForSwapTokensForExactTokens(\n ModifyPositionCache({\n params : ModifyPositionParams({\n accountNumber : accountNumber,\n amountIn : _defaultAssetAmount(amountInMaxWei),\n amountOut : _defaultAssetAmount(amountOutWei),\n tokenPath : tokenPath,\n depositToken : address(0),\n isPositiveMarginDeposit : false,\n marginDeposit : 0,\n expiryTimeDelta : 0\n }),\n dolomiteMargin : DOLOMITE_MARGIN,\n ammFactory : DOLOMITE_AMM_FACTORY,\n account : account,\n marketPath : new uint[](0),\n amountsWei : new uint[](0),\n marginDepositDeltaWei : 0\n })\n );\n }\n\n function removeLiquidity(\n address to,\n uint toAccountNumber,\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMinWei,\n uint amountBMinWei,\n uint deadline\n ) public ensure(deadline) returns (uint amountAWei, uint amountBWei) {\n address pair = DolomiteAmmLibrary.pairFor(address(DOLOMITE_AMM_FACTORY), tokenA, tokenB);\n // send liquidity to pair\n IDolomiteAmmPair(pair).transferFrom(msg.sender, pair, liquidity);\n\n (uint amount0Wei, uint amount1Wei) = IDolomiteAmmPair(pair).burn(to, toAccountNumber);\n (address token0,) = DolomiteAmmLibrary.sortTokens(tokenA, tokenB);\n (amountAWei, amountBWei) = tokenA == token0 ? (amount0Wei, amount1Wei) : (amount1Wei, amount0Wei);\n Require.that(\n amountAWei >= amountAMinWei,\n FILE,\n \"insufficient A amount\",\n amountAWei,\n amountAMinWei\n );\n Require.that(\n amountBWei >= amountBMinWei,\n FILE,\n \"insufficient B amount\",\n amountBWei,\n amountBMinWei\n );\n }\n\n function removeLiquidityWithPermit(\n address to,\n uint toAccountNumber,\n address tokenA,\n address tokenB,\n uint liquidity,\n uint amountAMinWei,\n uint amountBMinWei,\n uint deadline,\n PermitSignature memory permit\n ) public returns (uint amountAWei, uint amountBWei) {\n address pair = DolomiteAmmLibrary.pairFor(address(DOLOMITE_AMM_FACTORY), tokenA, tokenB);\n uint value = permit.approveMax ? uint(- 1) : liquidity;\n IDolomiteAmmPair(pair).permit(\n msg.sender,\n address(this),\n value,\n deadline,\n permit.v,\n permit.r,\n permit.s\n );\n\n (amountAWei, amountBWei) = removeLiquidity(\n to,\n toAccountNumber,\n tokenA,\n tokenB,\n liquidity,\n amountAMinWei,\n amountBMinWei,\n deadline\n );\n }\n\n function swapExactTokensForTokensAndModifyPosition(\n ModifyPositionParams memory params,\n uint deadline\n ) public ensure(deadline) {\n _swapExactTokensForTokensAndModifyPosition(\n ModifyPositionCache({\n params : params,\n dolomiteMargin : DOLOMITE_MARGIN,\n ammFactory : DOLOMITE_AMM_FACTORY,\n account : msg.sender,\n marketPath : new uint[](0),\n amountsWei : new uint[](0),\n marginDepositDeltaWei : 0\n })\n );\n }\n\n function swapTokensForExactTokensAndModifyPosition(\n ModifyPositionParams memory params,\n uint deadline\n ) public ensure(deadline) {\n _swapTokensForExactTokensAndModifyPosition(\n ModifyPositionCache({\n params : params,\n dolomiteMargin : DOLOMITE_MARGIN,\n ammFactory : DOLOMITE_AMM_FACTORY,\n account : msg.sender,\n marketPath : new uint[](0),\n amountsWei : new uint[](0),\n marginDepositDeltaWei : 0\n })\n );\n }\n\n // *************************\n // ***** Internal Functions\n // *************************\n\n function _swapExactTokensForTokensAndModifyPosition(\n ModifyPositionCache memory cache\n ) internal {\n (\n Account.Info[] memory accounts,\n Actions.ActionArgs[] memory actions\n ) = _getParamsForSwapExactTokensForTokens(cache);\n\n cache.dolomiteMargin.operate(accounts, actions);\n\n _logEvents(cache, accounts);\n }\n\n function _swapTokensForExactTokensAndModifyPosition(\n ModifyPositionCache memory cache\n ) internal {\n (\n Account.Info[] memory accounts,\n Actions.ActionArgs[] memory actions\n ) = _getParamsForSwapTokensForExactTokens(cache);\n\n cache.dolomiteMargin.operate(accounts, actions);\n\n _logEvents(cache, accounts);\n }\n\n function _getParamsForSwapExactTokensForTokens(\n ModifyPositionCache memory cache\n ) internal view returns (\n Account.Info[] memory,\n Actions.ActionArgs[] memory\n ) {\n cache.marketPath = _getMarketPathFromTokenPath(cache);\n\n // Convert from par to wei, if necessary\n uint amountInWei = _convertAssetAmountToWei(cache.params.amountIn, cache.marketPath[0], cache);\n\n // Convert from par to wei, if necessary\n uint amountOutMinWei = _convertAssetAmountToWei(\n cache.params.amountOut,\n cache.marketPath[cache.marketPath.length - 1],\n cache\n );\n\n // amountsWei[0] == amountInWei\n // amountsWei[amountsWei.length - 1] == amountOutWei\n cache.amountsWei = DolomiteAmmLibrary.getAmountsOutWei(\n address(cache.ammFactory),\n amountInWei,\n cache.params.tokenPath\n );\n\n Require.that(\n cache.amountsWei[cache.amountsWei.length - 1] >= amountOutMinWei,\n FILE,\n \"insufficient output amount\",\n cache.amountsWei[cache.amountsWei.length - 1],\n amountOutMinWei\n );\n\n return _getParamsForSwap(cache);\n }\n\n function _getParamsForSwapTokensForExactTokens(\n ModifyPositionCache memory cache\n ) internal view returns (\n Account.Info[] memory,\n Actions.ActionArgs[] memory\n ) {\n cache.marketPath = _getMarketPathFromTokenPath(cache);\n\n // Convert from par to wei, if necessary\n uint amountInMaxWei = _convertAssetAmountToWei(cache.params.amountIn, cache.marketPath[0], cache);\n\n // Convert from par to wei, if necessary\n uint amountOutWei = _convertAssetAmountToWei(\n cache.params.amountOut,\n cache.marketPath[cache.marketPath.length - 1],\n cache\n );\n\n // cache.amountsWei[0] == amountInWei\n // cache.amountsWei[amountsWei.length - 1] == amountOutWei\n cache.amountsWei = DolomiteAmmLibrary.getAmountsInWei(\n address(cache.ammFactory),\n amountOutWei,\n cache.params.tokenPath\n );\n Require.that(\n cache.amountsWei[0] <= amountInMaxWei,\n FILE,\n \"excessive input amount\",\n cache.amountsWei[0],\n amountInMaxWei\n );\n\n return _getParamsForSwap(cache);\n }\n\n function _getParamsForSwap(\n ModifyPositionCache memory cache\n ) internal view returns (\n Account.Info[] memory,\n Actions.ActionArgs[] memory\n ) {\n Require.that(\n cache.params.amountIn.ref == Types.AssetReference.Delta &&\n cache.params.amountOut.ref == Types.AssetReference.Delta,\n FILE,\n \"invalid asset reference\"\n );\n\n // pools.length == cache.params.tokenPath.length - 1\n address[] memory pools = DolomiteAmmLibrary.getPools(address(cache.ammFactory), cache.params.tokenPath);\n\n Account.Info[] memory accounts = _getAccountsForModifyPosition(cache, pools);\n Actions.ActionArgs[] memory actions = _getActionArgsForModifyPosition(cache, accounts, pools);\n\n if (cache.params.depositToken != address(0) && cache.params.marginDeposit == uint(- 1)) {\n uint expiryActionCount = cache.params.expiryTimeDelta == 0 ? 0 : 1;\n uint marketId = actions[actions.length - 1 - expiryActionCount].primaryMarketId;\n if (cache.params.isPositiveMarginDeposit) {\n // the marginDeposit is equal to the amount of `marketId` in account 0 (which is at accounts.length - 1)\n cache.marginDepositDeltaWei = cache.dolomiteMargin.getAccountWei(accounts[accounts.length - 1], marketId).value;\n } else {\n if (cache.marketPath[0] == marketId) {\n // the trade downsizes the potential withdrawal\n cache.marginDepositDeltaWei = cache.dolomiteMargin.getAccountWei(accounts[0], marketId).value.sub(cache.amountsWei[0]);\n } else if (cache.marketPath[cache.marketPath.length - 1] == marketId) {\n // the trade upsizes the withdrawal\n cache.marginDepositDeltaWei = cache.dolomiteMargin.getAccountWei(accounts[0], marketId).value.add(cache.amountsWei[cache.amountsWei.length - 1]);\n } else {\n // the trade doesn't impact the withdrawal\n cache.marginDepositDeltaWei = cache.dolomiteMargin.getAccountWei(accounts[0], marketId).value;\n }\n }\n } else {\n cache.marginDepositDeltaWei = cache.params.marginDeposit;\n }\n\n return (accounts, actions);\n }\n\n function _getMarketPathFromTokenPath(\n ModifyPositionCache memory cache\n ) internal view returns (uint[] memory) {\n uint[] memory marketPath = new uint[](cache.params.tokenPath.length);\n for (uint i = 0; i < cache.params.tokenPath.length; i++) {\n marketPath[i] = cache.dolomiteMargin.getMarketIdByTokenAddress(cache.params.tokenPath[i]);\n }\n return marketPath;\n }\n\n function _encodeTransferAction(\n uint fromAccountIndex,\n uint toAccountIndex,\n uint marketId,\n uint amount\n ) internal pure returns (Actions.ActionArgs memory) {\n Types.AssetAmount memory assetAmount;\n if (amount == uint(- 1)) {\n assetAmount = Types.AssetAmount(\n true,\n Types.AssetDenomination.Wei,\n Types.AssetReference.Target,\n 0\n );\n } else {\n assetAmount = Types.AssetAmount(\n false,\n Types.AssetDenomination.Wei,\n Types.AssetReference.Delta,\n amount\n );\n }\n return Actions.ActionArgs({\n actionType : Actions.ActionType.Transfer,\n accountId : fromAccountIndex,\n amount : assetAmount,\n primaryMarketId : marketId,\n secondaryMarketId : uint(- 1),\n otherAddress : address(0),\n otherAccountId : toAccountIndex,\n data : bytes(\"\")\n });\n }\n\n function _encodeExpirationAction(\n ModifyPositionParams memory params,\n Account.Info memory account,\n uint accountIndex,\n uint owedMarketId\n ) internal view returns (Actions.ActionArgs memory) {\n Require.that(\n params.expiryTimeDelta == uint32(params.expiryTimeDelta),\n FILE,\n \"invalid expiry time\"\n );\n\n IExpiry.SetExpiryArg[] memory expiryArgs = new IExpiry.SetExpiryArg[](1);\n expiryArgs[0] = IExpiry.SetExpiryArg({\n account : account,\n marketId : owedMarketId,\n timeDelta : uint32(params.expiryTimeDelta),\n forceUpdate : true\n });\n\n return Actions.ActionArgs({\n actionType : Actions.ActionType.Call,\n accountId : accountIndex,\n // solium-disable-next-line arg-overflow\n amount : Types.AssetAmount(true, Types.AssetDenomination.Wei, Types.AssetReference.Delta, 0),\n primaryMarketId : uint(- 1),\n secondaryMarketId : uint(- 1),\n otherAddress : EXPIRY,\n otherAccountId : uint(- 1),\n data : abi.encode(IExpiry.CallFunctionType.SetExpiry, expiryArgs)\n });\n }\n\n function _encodeTradeAction(\n uint fromAccountIndex,\n uint toAccountIndex,\n uint primaryMarketId,\n uint secondaryMarketId,\n address traderAddress,\n uint amountInWei,\n uint amountOutWei\n ) internal pure returns (Actions.ActionArgs memory) {\n return Actions.ActionArgs({\n actionType : Actions.ActionType.Trade,\n accountId : fromAccountIndex,\n // solium-disable-next-line arg-overflow\n amount : Types.AssetAmount(true, Types.AssetDenomination.Wei, Types.AssetReference.Delta, amountInWei),\n primaryMarketId : primaryMarketId,\n secondaryMarketId : secondaryMarketId,\n otherAddress : traderAddress,\n otherAccountId : toAccountIndex,\n data : abi.encode(amountOutWei)\n });\n }\n\n function _addLiquidity(\n address tokenA,\n address tokenB,\n uint amountADesiredWei,\n uint amountBDesiredWei,\n uint amountAMinWei,\n uint amountBMinWei\n ) internal returns (uint amountAWei, uint amountBWei) {\n IDolomiteAmmFactory dolomiteAmmFactory = DOLOMITE_AMM_FACTORY;\n // create the pair if it doesn't exist yet\n if (dolomiteAmmFactory.getPair(tokenA, tokenB) == address(0)) {\n dolomiteAmmFactory.createPair(tokenA, tokenB);\n }\n (uint reserveAWei, uint reserveBWei) = DolomiteAmmLibrary.getReservesWei(\n address(dolomiteAmmFactory),\n tokenA,\n tokenB\n );\n if (reserveAWei == 0 && reserveBWei == 0) {\n (amountAWei, amountBWei) = (amountADesiredWei, amountBDesiredWei);\n } else {\n uint amountBOptimal = DolomiteAmmLibrary.quote(amountADesiredWei, reserveAWei, reserveBWei);\n if (amountBOptimal <= amountBDesiredWei) {\n Require.that(\n amountBOptimal >= amountBMinWei,\n FILE,\n \"insufficient B amount\",\n amountBOptimal,\n amountBMinWei\n );\n (amountAWei, amountBWei) = (amountADesiredWei, amountBOptimal);\n } else {\n uint amountAOptimal = DolomiteAmmLibrary.quote(amountBDesiredWei, reserveBWei, reserveAWei);\n assert(amountAOptimal <= amountADesiredWei);\n Require.that(\n amountAOptimal >= amountAMinWei,\n FILE,\n \"insufficient A amount\",\n amountAOptimal,\n amountAMinWei\n );\n (amountAWei, amountBWei) = (amountAOptimal, amountBDesiredWei);\n }\n }\n }\n\n function _getAccountsForModifyPosition(\n ModifyPositionCache memory cache,\n address[] memory pools\n ) internal pure returns (Account.Info[] memory) {\n Account.Info[] memory accounts;\n if (cache.params.depositToken == address(0)) {\n accounts = new Account.Info[](1 + pools.length);\n } else {\n accounts = new Account.Info[](2 + pools.length);\n accounts[accounts.length - 1] = Account.Info(cache.account, 0);\n }\n\n accounts[0] = Account.Info(cache.account, cache.params.accountNumber);\n\n for (uint i = 0; i < pools.length; i++) {\n accounts[i + 1] = Account.Info(pools[i], 0);\n }\n\n return accounts;\n }\n\n function _getActionArgsForModifyPosition(\n ModifyPositionCache memory cache,\n Account.Info[] memory accounts,\n address[] memory pools\n ) internal view returns (Actions.ActionArgs[] memory) {\n Actions.ActionArgs[] memory actions;\n if (cache.params.depositToken == address(0)) {\n actions = new Actions.ActionArgs[](pools.length);\n } else {\n Require.that(\n cache.params.marginDeposit != 0,\n FILE,\n \"invalid margin deposit\"\n );\n\n uint expiryActionCount = cache.params.expiryTimeDelta == 0 ? 0 : 1;\n actions = new Actions.ActionArgs[](pools.length + 1 + expiryActionCount);\n\n // `accountNumber` `0` is at index `accountsLength - 1`\n\n bool isWithdrawal = !cache.params.isPositiveMarginDeposit;\n // solium-disable indentation\n actions[actions.length - 1 - expiryActionCount] = _encodeTransferAction(\n /* from */ isWithdrawal ? 0 : accounts.length - 1,\n /* to */ isWithdrawal ? accounts.length - 1 : 0,\n cache.dolomiteMargin.getMarketIdByTokenAddress(cache.params.depositToken),\n cache.params.marginDeposit\n );\n // solium-enable indentation\n if (expiryActionCount == 1) {\n actions[actions.length - 1] = _encodeExpirationAction(\n cache.params,\n accounts[0],\n 0,\n cache.marketPath[0] /* the market at index 0 is being borrowed and traded */\n );\n }\n }\n\n for (uint i = 0; i < pools.length; i++) {\n Require.that(\n accounts[i + 1].owner == pools[i],\n FILE,\n \"invalid other address\"\n );\n actions[i] = _encodeTradeAction(\n 0,\n i + 1,\n cache.marketPath[i],\n cache.marketPath[i + 1],\n pools[i],\n cache.amountsWei[i],\n cache.amountsWei[i + 1]\n );\n }\n\n return actions;\n }\n\n function _defaultAssetAmount(uint value) internal pure returns (Types.AssetAmount memory) {\n return Types.AssetAmount({\n sign : true,\n denomination : Types.AssetDenomination.Wei,\n ref : Types.AssetReference.Delta,\n value : value\n });\n }\n\n function _convertAssetAmountToWei(\n Types.AssetAmount memory amount,\n uint marketId,\n ModifyPositionCache memory cache\n ) internal view returns (uint) {\n if (amount.denomination == Types.AssetDenomination.Wei) {\n return amount.value;\n } else {\n Require.that(\n uint128(amount.value) == amount.value,\n FILE,\n \"invalid asset amount\"\n );\n return Interest.parToWei(\n Types.Par({sign : amount.sign, value : uint128(amount.value)}),\n cache.dolomiteMargin.getMarketCurrentIndex(marketId)\n ).value;\n }\n }\n\n function _logEvents(\n ModifyPositionCache memory cache,\n Account.Info[] memory accounts\n ) internal {\n if (cache.params.isPositiveMarginDeposit && cache.params.accountNumber > 0) {\n Types.Par memory newOutputPar = cache.dolomiteMargin.getAccountPar(\n accounts[0],\n cache.marketPath[cache.marketPath.length - 1]\n );\n\n emit MarginPositionOpen(\n msg.sender,\n cache.params.accountNumber,\n cache.params.tokenPath[0],\n cache.params.tokenPath[cache.params.tokenPath.length - 1],\n cache.params.depositToken,\n Events.BalanceUpdate({\n deltaWei : Types.Wei(false, cache.amountsWei[0]),\n newPar : cache.dolomiteMargin.getAccountPar(accounts[0], cache.marketPath[0])\n }),\n Events.BalanceUpdate({\n deltaWei : Types.Wei(true, cache.amountsWei[cache.amountsWei.length - 1]),\n newPar : newOutputPar\n }),\n Events.BalanceUpdate({\n deltaWei : Types.Wei(true, cache.marginDepositDeltaWei),\n newPar : newOutputPar\n })\n );\n } else if (cache.params.accountNumber > 0) {\n Types.Par memory newInputPar = cache.dolomiteMargin.getAccountPar(accounts[0], cache.marketPath[0]);\n\n emit MarginPositionClose(\n msg.sender,\n cache.params.accountNumber,\n cache.params.tokenPath[0],\n cache.params.tokenPath[cache.params.tokenPath.length - 1],\n cache.params.depositToken,\n Events.BalanceUpdate({\n deltaWei : Types.Wei(false, cache.amountsWei[0]),\n newPar : newInputPar\n }),\n Events.BalanceUpdate({\n deltaWei : Types.Wei(true, cache.amountsWei[cache.amountsWei.length - 1]),\n newPar : _getOutputPar(cache, accounts[0])\n }),\n Events.BalanceUpdate({\n deltaWei : Types.Wei(false, cache.marginDepositDeltaWei),\n newPar : newInputPar\n })\n );\n }\n }\n\n function _getOutputPar(\n ModifyPositionCache memory cache,\n Account.Info memory account\n ) internal view returns (Types.Par memory) {\n return cache.dolomiteMargin.getAccountPar(\n account,\n cache.marketPath[cache.marketPath.length - 1]\n );\n }\n\n}\n",
1165
- "sourcePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/DolomiteAmmRouterProxy.sol",
1165
+ "sourcePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/DolomiteAmmRouterProxy.sol",
1166
1166
  "ast": {
1167
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/DolomiteAmmRouterProxy.sol",
1167
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/DolomiteAmmRouterProxy.sol",
1168
1168
  "exportedSymbols": {
1169
1169
  "DolomiteAmmRouterProxy": [
1170
1170
  11748
@@ -1216,7 +1216,7 @@
1216
1216
  "unitAlias": ""
1217
1217
  },
1218
1218
  {
1219
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol",
1219
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IDolomiteMargin.sol",
1220
1220
  "file": "../../protocol/interfaces/IDolomiteMargin.sol",
1221
1221
  "id": 9451,
1222
1222
  "nodeType": "ImportDirective",
@@ -1227,7 +1227,7 @@
1227
1227
  "unitAlias": ""
1228
1228
  },
1229
1229
  {
1230
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Events.sol",
1230
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Events.sol",
1231
1231
  "file": "../../protocol/lib/Events.sol",
1232
1232
  "id": 9452,
1233
1233
  "nodeType": "ImportDirective",
@@ -1238,7 +1238,7 @@
1238
1238
  "unitAlias": ""
1239
1239
  },
1240
1240
  {
1241
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol",
1241
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Account.sol",
1242
1242
  "file": "../../protocol/lib/Account.sol",
1243
1243
  "id": 9453,
1244
1244
  "nodeType": "ImportDirective",
@@ -1249,7 +1249,7 @@
1249
1249
  "unitAlias": ""
1250
1250
  },
1251
1251
  {
1252
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol",
1252
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Actions.sol",
1253
1253
  "file": "../../protocol/lib/Actions.sol",
1254
1254
  "id": 9454,
1255
1255
  "nodeType": "ImportDirective",
@@ -1260,7 +1260,7 @@
1260
1260
  "unitAlias": ""
1261
1261
  },
1262
1262
  {
1263
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol",
1263
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol",
1264
1264
  "file": "../../protocol/lib/Require.sol",
1265
1265
  "id": 9455,
1266
1266
  "nodeType": "ImportDirective",
@@ -1271,7 +1271,7 @@
1271
1271
  "unitAlias": ""
1272
1272
  },
1273
1273
  {
1274
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
1274
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol",
1275
1275
  "file": "../../protocol/lib/Types.sol",
1276
1276
  "id": 9456,
1277
1277
  "nodeType": "ImportDirective",
@@ -1282,7 +1282,7 @@
1282
1282
  "unitAlias": ""
1283
1283
  },
1284
1284
  {
1285
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/TypedSignature.sol",
1285
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/TypedSignature.sol",
1286
1286
  "file": "../lib/TypedSignature.sol",
1287
1287
  "id": 9457,
1288
1288
  "nodeType": "ImportDirective",
@@ -1293,7 +1293,7 @@
1293
1293
  "unitAlias": ""
1294
1294
  },
1295
1295
  {
1296
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/DolomiteAmmLibrary.sol",
1296
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/DolomiteAmmLibrary.sol",
1297
1297
  "file": "../lib/DolomiteAmmLibrary.sol",
1298
1298
  "id": 9458,
1299
1299
  "nodeType": "ImportDirective",
@@ -1304,7 +1304,7 @@
1304
1304
  "unitAlias": ""
1305
1305
  },
1306
1306
  {
1307
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IExpiry.sol",
1307
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IExpiry.sol",
1308
1308
  "file": "../interfaces/IExpiry.sol",
1309
1309
  "id": 9459,
1310
1310
  "nodeType": "ImportDirective",
@@ -1315,7 +1315,7 @@
1315
1315
  "unitAlias": ""
1316
1316
  },
1317
1317
  {
1318
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IDolomiteAmmFactory.sol",
1318
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IDolomiteAmmFactory.sol",
1319
1319
  "file": "../interfaces/IDolomiteAmmFactory.sol",
1320
1320
  "id": 9460,
1321
1321
  "nodeType": "ImportDirective",
@@ -1326,7 +1326,7 @@
1326
1326
  "unitAlias": ""
1327
1327
  },
1328
1328
  {
1329
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IDolomiteAmmPair.sol",
1329
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IDolomiteAmmPair.sol",
1330
1330
  "file": "../interfaces/IDolomiteAmmPair.sol",
1331
1331
  "id": 9461,
1332
1332
  "nodeType": "ImportDirective",
@@ -34153,7 +34153,7 @@
34153
34153
  "src": "595:30468:28"
34154
34154
  },
34155
34155
  "legacyAST": {
34156
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/proxies/DolomiteAmmRouterProxy.sol",
34156
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/proxies/DolomiteAmmRouterProxy.sol",
34157
34157
  "exportedSymbols": {
34158
34158
  "DolomiteAmmRouterProxy": [
34159
34159
  11748
@@ -34205,7 +34205,7 @@
34205
34205
  "unitAlias": ""
34206
34206
  },
34207
34207
  {
34208
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/interfaces/IDolomiteMargin.sol",
34208
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/interfaces/IDolomiteMargin.sol",
34209
34209
  "file": "../../protocol/interfaces/IDolomiteMargin.sol",
34210
34210
  "id": 9451,
34211
34211
  "nodeType": "ImportDirective",
@@ -34216,7 +34216,7 @@
34216
34216
  "unitAlias": ""
34217
34217
  },
34218
34218
  {
34219
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Events.sol",
34219
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Events.sol",
34220
34220
  "file": "../../protocol/lib/Events.sol",
34221
34221
  "id": 9452,
34222
34222
  "nodeType": "ImportDirective",
@@ -34227,7 +34227,7 @@
34227
34227
  "unitAlias": ""
34228
34228
  },
34229
34229
  {
34230
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Account.sol",
34230
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Account.sol",
34231
34231
  "file": "../../protocol/lib/Account.sol",
34232
34232
  "id": 9453,
34233
34233
  "nodeType": "ImportDirective",
@@ -34238,7 +34238,7 @@
34238
34238
  "unitAlias": ""
34239
34239
  },
34240
34240
  {
34241
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Actions.sol",
34241
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Actions.sol",
34242
34242
  "file": "../../protocol/lib/Actions.sol",
34243
34243
  "id": 9454,
34244
34244
  "nodeType": "ImportDirective",
@@ -34249,7 +34249,7 @@
34249
34249
  "unitAlias": ""
34250
34250
  },
34251
34251
  {
34252
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Require.sol",
34252
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Require.sol",
34253
34253
  "file": "../../protocol/lib/Require.sol",
34254
34254
  "id": 9455,
34255
34255
  "nodeType": "ImportDirective",
@@ -34260,7 +34260,7 @@
34260
34260
  "unitAlias": ""
34261
34261
  },
34262
34262
  {
34263
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/protocol/lib/Types.sol",
34263
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/protocol/lib/Types.sol",
34264
34264
  "file": "../../protocol/lib/Types.sol",
34265
34265
  "id": 9456,
34266
34266
  "nodeType": "ImportDirective",
@@ -34271,7 +34271,7 @@
34271
34271
  "unitAlias": ""
34272
34272
  },
34273
34273
  {
34274
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/TypedSignature.sol",
34274
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/TypedSignature.sol",
34275
34275
  "file": "../lib/TypedSignature.sol",
34276
34276
  "id": 9457,
34277
34277
  "nodeType": "ImportDirective",
@@ -34282,7 +34282,7 @@
34282
34282
  "unitAlias": ""
34283
34283
  },
34284
34284
  {
34285
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/lib/DolomiteAmmLibrary.sol",
34285
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/lib/DolomiteAmmLibrary.sol",
34286
34286
  "file": "../lib/DolomiteAmmLibrary.sol",
34287
34287
  "id": 9458,
34288
34288
  "nodeType": "ImportDirective",
@@ -34293,7 +34293,7 @@
34293
34293
  "unitAlias": ""
34294
34294
  },
34295
34295
  {
34296
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IExpiry.sol",
34296
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IExpiry.sol",
34297
34297
  "file": "../interfaces/IExpiry.sol",
34298
34298
  "id": 9459,
34299
34299
  "nodeType": "ImportDirective",
@@ -34304,7 +34304,7 @@
34304
34304
  "unitAlias": ""
34305
34305
  },
34306
34306
  {
34307
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IDolomiteAmmFactory.sol",
34307
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IDolomiteAmmFactory.sol",
34308
34308
  "file": "../interfaces/IDolomiteAmmFactory.sol",
34309
34309
  "id": 9460,
34310
34310
  "nodeType": "ImportDirective",
@@ -34315,7 +34315,7 @@
34315
34315
  "unitAlias": ""
34316
34316
  },
34317
34317
  {
34318
- "absolutePath": "/home/cdc218/projects/dolomite-protocol-v2/contracts/external/interfaces/IDolomiteAmmPair.sol",
34318
+ "absolutePath": "/Users/corey/Leavitt-Innovations/dolomite-v2-protocol/contracts/external/interfaces/IDolomiteAmmPair.sol",
34319
34319
  "file": "../interfaces/IDolomiteAmmPair.sol",
34320
34320
  "id": 9461,
34321
34321
  "nodeType": "ImportDirective",
@@ -67477,344 +67477,11 @@
67477
67477
  },
67478
67478
  "links": {},
67479
67479
  "address": "0x4bf3A7dFB3b76b5B3E169ACE65f888A4b4FCa5Ee",
67480
- "transactionHash": "0x5567c1710f5752e912f9e9914d7f07914badef3a259c5dea9a4b59c0b18137fb"
67481
- },
67482
- "80001": {
67483
- "events": {
67484
- "0xecf4fe97b02d1620f6c04edbd484eff130a2247b31ac1ef061f54c8177b657b9": {
67485
- "anonymous": false,
67486
- "inputs": [
67487
- {
67488
- "indexed": true,
67489
- "internalType": "address",
67490
- "name": "user",
67491
- "type": "address"
67492
- },
67493
- {
67494
- "indexed": true,
67495
- "internalType": "uint256",
67496
- "name": "accountIndex",
67497
- "type": "uint256"
67498
- },
67499
- {
67500
- "indexed": false,
67501
- "internalType": "address",
67502
- "name": "inputToken",
67503
- "type": "address"
67504
- },
67505
- {
67506
- "indexed": false,
67507
- "internalType": "address",
67508
- "name": "outputToken",
67509
- "type": "address"
67510
- },
67511
- {
67512
- "indexed": false,
67513
- "internalType": "address",
67514
- "name": "withdrawalToken",
67515
- "type": "address"
67516
- },
67517
- {
67518
- "components": [
67519
- {
67520
- "components": [
67521
- {
67522
- "internalType": "bool",
67523
- "name": "sign",
67524
- "type": "bool"
67525
- },
67526
- {
67527
- "internalType": "uint256",
67528
- "name": "value",
67529
- "type": "uint256"
67530
- }
67531
- ],
67532
- "internalType": "struct Types.Wei",
67533
- "name": "deltaWei",
67534
- "type": "tuple"
67535
- },
67536
- {
67537
- "components": [
67538
- {
67539
- "internalType": "bool",
67540
- "name": "sign",
67541
- "type": "bool"
67542
- },
67543
- {
67544
- "internalType": "uint128",
67545
- "name": "value",
67546
- "type": "uint128"
67547
- }
67548
- ],
67549
- "internalType": "struct Types.Par",
67550
- "name": "newPar",
67551
- "type": "tuple"
67552
- }
67553
- ],
67554
- "indexed": false,
67555
- "internalType": "struct Events.BalanceUpdate",
67556
- "name": "inputBalanceUpdate",
67557
- "type": "tuple"
67558
- },
67559
- {
67560
- "components": [
67561
- {
67562
- "components": [
67563
- {
67564
- "internalType": "bool",
67565
- "name": "sign",
67566
- "type": "bool"
67567
- },
67568
- {
67569
- "internalType": "uint256",
67570
- "name": "value",
67571
- "type": "uint256"
67572
- }
67573
- ],
67574
- "internalType": "struct Types.Wei",
67575
- "name": "deltaWei",
67576
- "type": "tuple"
67577
- },
67578
- {
67579
- "components": [
67580
- {
67581
- "internalType": "bool",
67582
- "name": "sign",
67583
- "type": "bool"
67584
- },
67585
- {
67586
- "internalType": "uint128",
67587
- "name": "value",
67588
- "type": "uint128"
67589
- }
67590
- ],
67591
- "internalType": "struct Types.Par",
67592
- "name": "newPar",
67593
- "type": "tuple"
67594
- }
67595
- ],
67596
- "indexed": false,
67597
- "internalType": "struct Events.BalanceUpdate",
67598
- "name": "outputBalanceUpdate",
67599
- "type": "tuple"
67600
- },
67601
- {
67602
- "components": [
67603
- {
67604
- "components": [
67605
- {
67606
- "internalType": "bool",
67607
- "name": "sign",
67608
- "type": "bool"
67609
- },
67610
- {
67611
- "internalType": "uint256",
67612
- "name": "value",
67613
- "type": "uint256"
67614
- }
67615
- ],
67616
- "internalType": "struct Types.Wei",
67617
- "name": "deltaWei",
67618
- "type": "tuple"
67619
- },
67620
- {
67621
- "components": [
67622
- {
67623
- "internalType": "bool",
67624
- "name": "sign",
67625
- "type": "bool"
67626
- },
67627
- {
67628
- "internalType": "uint128",
67629
- "name": "value",
67630
- "type": "uint128"
67631
- }
67632
- ],
67633
- "internalType": "struct Types.Par",
67634
- "name": "newPar",
67635
- "type": "tuple"
67636
- }
67637
- ],
67638
- "indexed": false,
67639
- "internalType": "struct Events.BalanceUpdate",
67640
- "name": "marginWithdrawalUpdate",
67641
- "type": "tuple"
67642
- }
67643
- ],
67644
- "name": "MarginPositionClose",
67645
- "type": "event"
67646
- },
67647
- "0xb81518bcaf15a56ac0e4b0ff579f0bd8e163ac444d526743908dc22733789f06": {
67648
- "anonymous": false,
67649
- "inputs": [
67650
- {
67651
- "indexed": true,
67652
- "internalType": "address",
67653
- "name": "user",
67654
- "type": "address"
67655
- },
67656
- {
67657
- "indexed": true,
67658
- "internalType": "uint256",
67659
- "name": "accountIndex",
67660
- "type": "uint256"
67661
- },
67662
- {
67663
- "indexed": false,
67664
- "internalType": "address",
67665
- "name": "inputToken",
67666
- "type": "address"
67667
- },
67668
- {
67669
- "indexed": false,
67670
- "internalType": "address",
67671
- "name": "outputToken",
67672
- "type": "address"
67673
- },
67674
- {
67675
- "indexed": false,
67676
- "internalType": "address",
67677
- "name": "depositToken",
67678
- "type": "address"
67679
- },
67680
- {
67681
- "components": [
67682
- {
67683
- "components": [
67684
- {
67685
- "internalType": "bool",
67686
- "name": "sign",
67687
- "type": "bool"
67688
- },
67689
- {
67690
- "internalType": "uint256",
67691
- "name": "value",
67692
- "type": "uint256"
67693
- }
67694
- ],
67695
- "internalType": "struct Types.Wei",
67696
- "name": "deltaWei",
67697
- "type": "tuple"
67698
- },
67699
- {
67700
- "components": [
67701
- {
67702
- "internalType": "bool",
67703
- "name": "sign",
67704
- "type": "bool"
67705
- },
67706
- {
67707
- "internalType": "uint128",
67708
- "name": "value",
67709
- "type": "uint128"
67710
- }
67711
- ],
67712
- "internalType": "struct Types.Par",
67713
- "name": "newPar",
67714
- "type": "tuple"
67715
- }
67716
- ],
67717
- "indexed": false,
67718
- "internalType": "struct Events.BalanceUpdate",
67719
- "name": "inputBalanceUpdate",
67720
- "type": "tuple"
67721
- },
67722
- {
67723
- "components": [
67724
- {
67725
- "components": [
67726
- {
67727
- "internalType": "bool",
67728
- "name": "sign",
67729
- "type": "bool"
67730
- },
67731
- {
67732
- "internalType": "uint256",
67733
- "name": "value",
67734
- "type": "uint256"
67735
- }
67736
- ],
67737
- "internalType": "struct Types.Wei",
67738
- "name": "deltaWei",
67739
- "type": "tuple"
67740
- },
67741
- {
67742
- "components": [
67743
- {
67744
- "internalType": "bool",
67745
- "name": "sign",
67746
- "type": "bool"
67747
- },
67748
- {
67749
- "internalType": "uint128",
67750
- "name": "value",
67751
- "type": "uint128"
67752
- }
67753
- ],
67754
- "internalType": "struct Types.Par",
67755
- "name": "newPar",
67756
- "type": "tuple"
67757
- }
67758
- ],
67759
- "indexed": false,
67760
- "internalType": "struct Events.BalanceUpdate",
67761
- "name": "outputBalanceUpdate",
67762
- "type": "tuple"
67763
- },
67764
- {
67765
- "components": [
67766
- {
67767
- "components": [
67768
- {
67769
- "internalType": "bool",
67770
- "name": "sign",
67771
- "type": "bool"
67772
- },
67773
- {
67774
- "internalType": "uint256",
67775
- "name": "value",
67776
- "type": "uint256"
67777
- }
67778
- ],
67779
- "internalType": "struct Types.Wei",
67780
- "name": "deltaWei",
67781
- "type": "tuple"
67782
- },
67783
- {
67784
- "components": [
67785
- {
67786
- "internalType": "bool",
67787
- "name": "sign",
67788
- "type": "bool"
67789
- },
67790
- {
67791
- "internalType": "uint128",
67792
- "name": "value",
67793
- "type": "uint128"
67794
- }
67795
- ],
67796
- "internalType": "struct Types.Par",
67797
- "name": "newPar",
67798
- "type": "tuple"
67799
- }
67800
- ],
67801
- "indexed": false,
67802
- "internalType": "struct Events.BalanceUpdate",
67803
- "name": "marginDepositUpdate",
67804
- "type": "tuple"
67805
- }
67806
- ],
67807
- "name": "MarginPositionOpen",
67808
- "type": "event"
67809
- }
67810
- },
67811
- "links": {},
67812
- "address": "0x705DD555603dbdf8593Ec9d3176d2ebCa839b8e1",
67813
- "transactionHash": "0x80d91ebf730e0564bbf7d7a4c3ce6eeabfe7822f5cb9d5da5abe2adcf40d8c37"
67480
+ "transactionHash": "0x2f8ef932c76aa0d8ff704ed529265a80661c35cf975c24b5c9e5fa1b12cb14a7"
67814
67481
  }
67815
67482
  },
67816
67483
  "schemaVersion": "3.0.23",
67817
- "updatedAt": "2022-01-25T06:59:14.243Z",
67484
+ "updatedAt": "2022-01-29T21:54:40.620Z",
67818
67485
  "devdoc": {
67819
67486
  "methods": {}
67820
67487
  },