[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "increaseShares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalShares", "type": "uint256" } ], "name": "BuyShares", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "address", "name": "assetTo", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "baseAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "quoteAmount", "type": "uint256" } ], "name": "DODOFlashLoan", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "fromToken", "type": "address" }, { "indexed": false, "internalType": "address", "name": "toToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "fromAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "trader", "type": "address" }, { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" } ], "name": "DODOSwap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newI", "type": "uint256" } ], "name": "IChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newMtFee", "type": "uint256" } ], "name": "MtFeeRateChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "enum PMMPricing.RState", "name": "newRState", "type": "uint8" } ], "name": "RChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "decreaseShares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalShares", "type": "uint256" } ], "name": "SellShares", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "WithdrawMtFee", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_ADMIN_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_PRICE_CUMULATIVE_LAST_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_RESERVE_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_TARGET_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_TOKEN_", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BLOCK_TIMESTAMP_LAST_", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_IS_OPEN_TWAP_", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_I_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_K_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_LP_FEE_RATE_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MAINTAINER_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MT_FEE_BASE_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MT_FEE_QUOTE_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MT_FEE_RATE_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MT_FEE_RATE_MODEL_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_PRICE_LIMIT_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_QUOTE_RESERVE_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_QUOTE_TARGET_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_QUOTE_TOKEN_", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_RState_", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_addr", "type": "address" } ], "name": "addressToShortString", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "mtFeeRate", "type": "uint256" } ], "name": "adjustMtFeeRate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "i", "type": "uint256" } ], "name": "adjustPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "priceLimit", "type": "uint256" } ], "name": "adjustPriceLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "buildDomainSeparator", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "buyShares", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "baseInput", "type": "uint256" }, { "internalType": "uint256", "name": "quoteInput", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "correctRState", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "baseAmount", "type": "uint256" }, { "internalType": "uint256", "name": "quoteAmount", "type": "uint256" }, { "internalType": "address", "name": "assetTo", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "flashLoan", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getBaseInput", "outputs": [ { "internalType": "uint256", "name": "input", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMidPrice", "outputs": [ { "internalType": "uint256", "name": "midPrice", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMtFeeTotal", "outputs": [ { "internalType": "uint256", "name": "mtFeeBase", "type": "uint256" }, { "internalType": "uint256", "name": "mtFeeQuote", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPMMState", "outputs": [ { "components": [ { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "K", "type": "uint256" }, { "internalType": "uint256", "name": "B", "type": "uint256" }, { "internalType": "uint256", "name": "Q", "type": "uint256" }, { "internalType": "uint256", "name": "B0", "type": "uint256" }, { "internalType": "uint256", "name": "Q0", "type": "uint256" }, { "internalType": "enum PMMPricing.RState", "name": "R", "type": "uint8" } ], "internalType": "struct PMMPricing.PMMState", "name": "state", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPMMStateForCall", "outputs": [ { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "K", "type": "uint256" }, { "internalType": "uint256", "name": "B", "type": "uint256" }, { "internalType": "uint256", "name": "Q", "type": "uint256" }, { "internalType": "uint256", "name": "B0", "type": "uint256" }, { "internalType": "uint256", "name": "Q0", "type": "uint256" }, { "internalType": "uint256", "name": "R", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getQuoteInput", "outputs": [ { "internalType": "uint256", "name": "input", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getUserFeeRate", "outputs": [ { "internalType": "uint256", "name": "lpFeeRate", "type": "uint256" }, { "internalType": "uint256", "name": "mtFeeRate", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVaultReserve", "outputs": [ { "internalType": "uint256", "name": "baseReserve", "type": "uint256" }, { "internalType": "uint256", "name": "quoteReserve", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "maintainer", "type": "address" }, { "internalType": "address", "name": "admin", "type": "address" }, { "internalType": "address", "name": "baseTokenAddress", "type": "address" }, { "internalType": "address", "name": "quoteTokenAddress", "type": "address" }, { "internalType": "uint256", "name": "lpFeeRate", "type": "uint256" }, { "internalType": "uint256", "name": "mtFeeRate", "type": "uint256" }, { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "k", "type": "uint256" }, { "internalType": "uint256", "name": "priceLimit", "type": "uint256" }, { "internalType": "bool", "name": "isOpenTWAP", "type": "bool" } ], "name": "init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "uint256", "name": "payBaseAmount", "type": "uint256" } ], "name": "querySellBase", "outputs": [ { "internalType": "uint256", "name": "receiveQuoteAmount", "type": "uint256" }, { "internalType": "uint256", "name": "mtFee", "type": "uint256" }, { "internalType": "enum PMMPricing.RState", "name": "newRState", "type": "uint8" }, { "internalType": "uint256", "name": "newBaseTarget", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "uint256", "name": "payQuoteAmount", "type": "uint256" } ], "name": "querySellQuote", "outputs": [ { "internalType": "uint256", "name": "receiveBaseAmount", "type": "uint256" }, { "internalType": "uint256", "name": "mtFee", "type": "uint256" }, { "internalType": "enum PMMPricing.RState", "name": "newRState", "type": "uint8" }, { "internalType": "uint256", "name": "newQuoteTarget", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "sellBase", "outputs": [ { "internalType": "uint256", "name": "receiveQuoteAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "sellQuote", "outputs": [ { "internalType": "uint256", "name": "receiveBaseAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareAmount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "baseMinAmount", "type": "uint256" }, { "internalType": "uint256", "name": "quoteMinAmount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "sellShares", "outputs": [ { "internalType": "uint256", "name": "baseAmount", "type": "uint256" }, { "internalType": "uint256", "name": "quoteAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "withdrawMtFeeTotal", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040526001805461ff0019169055601780546001600160a01b031916905534801561002b57600080fd5b5060016000556149b5806100406000396000f3fe608060405234801561001057600080fd5b506004361061038e5760003560e01c8063880a4d87116101de578063d505accf1161010f578063ee27c689116100ad578063fcf709f71161007c578063fcf709f714610841578063fd1ed7e91461084c578063fe24cb7f14610889578063fff6cae91461089257600080fd5b8063ee27c68914610815578063f5346aea1461081d578063f6b06e7014610825578063f811d6921461083857600080fd5b8063e539ef49116100e9578063e539ef49146107de578063e6485c8e146107f1578063eb99da6a14610804578063ec2fd46d1461080c57600080fd5b8063d505accf1461077f578063dd62ed3e14610792578063dd93f59a146107cb57600080fd5b8063bbf5ce781161017c578063bfdbd72311610156578063bfdbd72314610747578063c0ffa17814610750578063d0a494e414610759578063d4b970461461076c57600080fd5b8063bbf5ce7814610703578063bd6015b41461071d578063bf357dae1461073057600080fd5b8063a9059cbb116101b8578063a9059cbb146106c1578063ab44a7a3146106d4578063b56ceaa6146106dd578063b59b8555146106f057600080fd5b8063880a4d871461067857806395d89b41146106a4578063a382d1b9146106ac57600080fd5b806347bbad2e116102c357806370a082311161026157806377f586571161023057806377f586571461060057806379a04876146106325780637d721504146106455780637ecebe001461065857600080fd5b806370a08231146105b457806371f9100c146105dd57806372bf079e146105e557806373d74cf8146105f857600080fd5b806354fd4d501161029d57806354fd4d501461055157806363ab59931461057657806365f6fcbb1461058957806366410a211461059157600080fd5b806347bbad2e146105075780634a248d2a146105105780634c85b4251461052357600080fd5b806330adf81f116103305780633644e5151161030a5780633644e515146104ab5780633afdfeba146104b45780634322ec83146104bd57806344096609146104ee57600080fd5b806330adf81f14610438578063313ce5671461045f57806336223ce91461047e57600080fd5b8063171019401161036c57806317101940146103e957806318160ddd146103fc57806323b872dd146104135780632df6cb481461042657600080fd5b8063039658d11461039357806306fdde03146103a8578063095ea7b3146103c6575b600080fd5b6103a66103a1366004614109565b61089a565b005b6103b0610b34565b6040516103bd91906141c8565b60405180910390f35b6103d96103d43660046141fb565b610bc2565b60405190151581526020016103bd565b6103b06103f7366004614225565b610bd9565b610405600b5481565b6040519081526020016103bd565b6103d9610421366004614240565b610d5c565b6001546103d990610100900460ff1681565b6104057f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60095461046c9060ff1681565b60405160ff90911681526020016103bd565b6005546001600160701b0380821691600160701b9004165b604080519283526020830191909152016103bd565b610405600e5481565b61040560145481565b6001546104d6906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016103bd565b6104966104fc366004614225565b506011546010549091565b61040560165481565b6003546104d6906001600160a01b031681565b610536610531366004614225565b610f0c565b604080519384526020840192909252908201526060016103bd565b60408051808201909152600981526847535020312e302e3160b81b60208201526103b0565b6002546104d6906001600160a01b031681565b610405611376565b6105a461059f3660046141fb565b61140e565b6040516103bd94939291906142b4565b6104056105c2366004614225565b6001600160a01b03166000908152600c602052604090205490565b610405611477565b6103a66105f33660046142de565b6114c5565b6103a66115e0565b60075461061a90600160701b90046001600160701b031681565b6040516001600160701b0390911681526020016103bd565b6105a46106403660046141fb565b611697565b60055461061a906001600160701b031681565b610405610666366004614225565b600f6020526000908152604090205481565b60055461068f90600160e01b900463ffffffff1681565b60405163ffffffff90911681526020016103bd565b6103b0611700565b6106b461170d565b6040516103bd91906142f7565b6103d96106cf3660046141fb565b6117af565b61040560115481565b6104966106eb366004614390565b61189b565b6103a66106fe3660046142de565b611c75565b60055461061a90600160701b90046001600160701b031681565b61040561072b366004614225565b611d4e565b60075461068f90600160e01b900463ffffffff1681565b61040560155481565b61040560105481565b6103a661076736600461440a565b611fc7565b6004546104d6906001600160a01b031681565b6103a661078d366004614481565b612587565b6104056107a03660046144ee565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b6104056107d9366004614225565b61279d565b60075461061a906001600160701b031681565b6103a66107ff3660046142de565b612a0a565b6103a6612aa8565b61040560125481565b610405612bdc565b610405612bee565b6017546104d6906001600160a01b031681565b61040560135481565b601554601654610496565b610854612cf6565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016103bd565b61040560065481565b6103a6612d58565b60015460ff16156108e45760405162461bcd60e51b815260206004820152600f60248201526e11d4d417d253925512505312569151608a1b60448201526064015b60405180910390fd5b6001805460ff1916811790556001600160a01b038088169089160361094b5760405162461bcd60e51b815260206004820152601a60248201527f424153455f51554f54455f43414e5f4e4f545f42455f53414d4500000000000060448201526064016108db565b600380546001600160a01b03808b166001600160a01b03199283161790925560048054928a1692909116919091179055831580159061099957506ec097ce7bc90715b34b9f10000000008411155b6109a257600080fd5b6013849055670de0b6b3a76400008311156109bc57600080fd5b60128390556011869055601085905560018054600280546001600160a01b038d81166001600160a01b031990921691909117909155601485905561ff0019908d16620100000216610100600160b01b0319909116178155604080518082018252918252605f60f81b6020808401919091528151808301909252600382526204753560ec1b908201528082610a4f30610bd9565b604051602001610a6193929190614521565b604051602081830303815290604052600a9081610a7e9190614602565b506040805180820190915260038152620474c560ec1b6020820152600890610aa69082614602565b50896001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0991906146c2565b6009805460ff191660ff92909216919091179055610b25612bee565b50505050505050505050505050565b600a8054610b419061457a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6d9061457a565b8015610bba5780601f10610b8f57610100808354040283529160200191610bba565b820191906000526020600020905b815481529060010190602001808311610b9d57829003601f168201915b505050505081565b6000610bcf338484612d72565b5060015b92915050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b6020820152815160088082528184019093526060926001600160a01b038516929160009160208201818036833701905050905060005b6004811015610d535782600485610c4884600c6146f5565b60208110610c5857610c58614708565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110610c7e57610c7e614708565b01602001516001600160f81b03191682610c9983600261471e565b81518110610ca957610ca9614708565b60200101906001600160f81b031916908160001a9053508284610ccd83600c6146f5565b60208110610cdd57610cdd614708565b825191901a600f16908110610cf457610cf4614708565b01602001516001600160f81b03191682610d0f83600261471e565b610d1a9060016146f5565b81518110610d2a57610d2a614708565b60200101906001600160f81b031916908160001a90535080610d4b8161473d565b915050610c30565b50949350505050565b6001600160a01b0383166000908152600c6020526040812054821115610db95760405162461bcd60e51b81526020600482015260126024820152710848298829c868abe9c9ea8be8a9c9eaa8e960731b60448201526064016108db565b6001600160a01b0384166000908152600d60209081526040808320338452909152902054821115610e235760405162461bcd60e51b815260206004820152601460248201527308298989eae829c868abe9c9ea8be8a9c9eaa8e960631b60448201526064016108db565b6001600160a01b0384166000908152600c6020526040902054610e47908390614756565b6001600160a01b038086166000908152600c60205260408082209390935590851681522054610e779083906146f5565b6001600160a01b038085166000908152600c60209081526040808320949094559187168152600d82528281203382529091522054610eb6908390614756565b6001600160a01b038581166000818152600d602090815260408083203384528252918290209490945551858152918616929091600080516020614920833981519152910160405180910390a35060019392505050565b6000806000610f19612dd3565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015610f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8a9190614769565b610f949190614756565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100a9190614769565b6110149190614756565b6005549091506001600160701b0380821691600160701b9004166110388285614756565b95506110448184614756565b9450600086116110865760405162461bcd60e51b815260206004820152600d60248201526c1393d7d09054d157d253941555609a1b60448201526064016108db565b600b546000036111ff57600083116110d45760405162461bcd60e51b815260206004820152601160248201527016915493d7d45553d51157d05353d55395607a1b60448201526064016108db565b6110e084601354612e2c565b83106110ec57836110f8565b6110f883601354612e52565b600780546001600160701b0319166001600160701b038316179055601354909750611124908890612e2c565b60078054600160701b600160e01b031916600160701b6001600160701b03938416810291909117918290559004166111955760405162461bcd60e51b815260206004820152601460248201527351554f54455f5441524745545f49535f5a45524f60601b60448201526064016108db565b6107d187116111df5760405162461bcd60e51b815260206004820152601660248201527509a929ca8be829a9eaa9ca8be9c9ea8be8a9c9eaa8e960531b60448201526064016108db565b6111ec60006103e9612e67565b6111f86103e988614756565b96506112f6565b60008211801561120f5750600081115b156112f65760006112208784612e52565b9050600061122e8784612e52565b9050600082821061123f5782611241565b815b905061124f600b5482612e2c565b600754909a50611268906001600160701b031682612e2c565b60075461127e91906001600160701b03166146f5565b600780546001600160701b0319166001600160701b0392831617908190556112af91600160701b9091041682612e2c565b6007546112cc9190600160701b90046001600160701b03166146f5565b6007600e6101000a8154816001600160701b0302191690836001600160701b031602179055505050505b6113008888612e67565b61130a8484612f71565b6001600160a01b0388166000818152600c60209081526040918290205482519384529083018a905282820152517f1c172440bdebb59cd92a7f08f4227903a3305ab6f880cb25f93eddb66843a1029181900360600190a15050505061136f6001600055565b9193909250565b6015546005546003546040516370a0823160e01b8152306004820152600093926001600160701b0316916001600160a01b0316906370a08231906024015b602060405180830381865afa1580156113d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f59190614769565b6113ff9190614756565b6114099190614756565b905090565b600080600080600061141e61170d565b905061142a8187612fdc565b601154601054929750909450906114418782612e2c565b95508561144e8884612e2c565b6114589089614756565b6114629190614756565b96508260a00151935050505092959194509250565b601654600554600480546040516370a0823160e01b8152309281019290925260009392600160701b90046001600160701b0316916001600160a01b03909116906370a08231906024016113b4565b6002546001600160a01b031633146115155760405162461bcd60e51b8152602060048201526013602482015272105113525397d050d0d154d4d7d11153925151606a1b60448201526064016108db565b60006013548211611533578160135461152e9190614756565b611540565b6013546115409083614756565b905060145460135482620f4240611557919061471e565b6115619190614798565b11156115a45760405162461bcd60e51b8152602060048201526012602482015271115610d1515117d4149250d157d31253525560721b60448201526064016108db565b60138290556040518281527f0caf6249df528dcb5afe9adf7a20744e990b338c3d1ca3adedd6362d2db048449060200160405180910390a15050565b60075463ffffffff600160e01b90910416600214801561161057506007546005546001600160701b039182169116105b1561163557600554600160701b8082046001600160701b039081169091029116176007555b60075463ffffffff600160e01b90910416600114801561167057506007546005546001600160701b03600160701b9283900481169290910416105b1561169557600554600160701b8082046001600160701b039081169091029116176007555b565b60008060008060006116a761170d565b90506116b381876130d1565b601154601054929750909450906116ca8782612e2c565b9550856116d78884612e2c565b6116e19089614756565b6116eb9190614756565b96508260800151935050505092959194509250565b60088054610b419061457a565b611715614097565b601354815260125460208201526005546001600160701b038082166040840152600160701b918290048116606084015260075480821660808501529182041660a0830152600160e01b900463ffffffff1660028111156117775761177761427c565b8160c00190600281111561178d5761178d61427c565b908160028111156117a0576117a061427c565b9052506117ac816131ce565b90565b336000908152600c60205260408120548211156118035760405162461bcd60e51b81526020600482015260126024820152710848298829c868abe9c9ea8be8a9c9eaa8e960731b60448201526064016108db565b336000908152600c602052604090205461181e908390614756565b336000908152600c6020526040808220929092556001600160a01b0385168152205461184b9083906146f5565b6001600160a01b0384166000818152600c60205260409081902092909255905133906000805160206149208339815191529061188a9086815260200190565b60405180910390a350600192915050565b6000806118a6612dd3565b428310156118e55760405162461bcd60e51b815260206004820152600c60248201526b1512535157d156141254915160a21b60448201526064016108db565b336000908152600c60205260409020548911156119355760405162461bcd60e51b815260206004820152600e60248201526d08e98a0be9c9ea8be8a9c9eaa8e960931b60448201526064016108db565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015611982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a69190614769565b6119b09190614756565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa158015611a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a269190614769565b611a309190614756565b600b5490915080611a418d8561471e565b611a4b9190614798565b945080611a588d8461471e565b611a629190614798565b600754909450611a8690611a80908e906001600160701b031661471e565b82613272565b600754611a9c91906001600160701b0316614756565b600780546001600160701b0319166001600160701b039283161790819055611ad291611a80918f91600160701b9091041661471e565b600754611aef9190600160701b90046001600160701b0316614756565b6007600e6101000a8154816001600160701b0302191690836001600160701b03160217905550898510158015611b255750888410155b611b675760405162461bcd60e51b81526020600482015260136024820152720ae92a89088a482aebe9c9ea8be8a9c9eaa8e9606b1b60448201526064016108db565b611b71338d6132bb565b611b7b8b86613373565b611b858b85613394565b611b8d6133b1565b8615611bfc578a6001600160a01b0316632411d338338e88888d8d6040518763ffffffff1660e01b8152600401611bc9969594939291906147e3565b600060405180830381600087803b158015611be357600080fd5b505af1158015611bf7573d6000803e3d6000fd5b505050505b336000818152600c60209081526040918290205482519384526001600160a01b038f16918401919091528282018f90526060830152517f55caccde83781f39bfc1296eff45655b6496729443a7d48958b18b3b685600a59181900360800190a1505050611c696001600055565b97509795505050505050565b6001546201000090046001600160a01b03163314611cc55760405162461bcd60e51b815260206004820152600d60248201526c1050d0d154d4d7d11153925151609a1b60448201526064016108db565b670de0b6b3a7640000811115611d135760405162461bcd60e51b8152602060048201526013602482015272494e56414c49445f4d545f4645455f5241544560681b60448201526064016108db565b60108190556040518181527fc9ec0c7a5c9e8424f73dce9c8a6ad565757953517e4f472e243c0955aa11322e9060200160405180910390a150565b6000611d58612dd3565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015611da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc99190614769565b611dd39190614756565b600554909150600090611def906001600160701b031683614756565b90506000806000611e003285611697565b9298509094509092509050611e158787613394565b82601654611e2391906146f5565b601655806002811115611e3857611e3861427c565b600754600160e01b900463ffffffff908116911614611eeb576001600160701b03821115611e785760405162461bcd60e51b81526004016108db90614823565b600780546001600160701b0319166001600160701b038416179055806002811115611ea557611ea561427c565b6007601c6101000a81548163ffffffff021916908363ffffffff16021790555060008051602061494083398151915281604051611ee29190614845565b60405180910390a15b601654600480546040516370a0823160e01b81523092810192909252611f7292889290916001600160a01b0316906370a0823190602401602060405180830381865afa158015611f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f639190614769565b611f6d9190614756565b612f71565b60035460045460405160008051602061496083398151915292611fab926001600160a01b039182169291169088908b9033908e90614853565b60405180910390a15050505050611fc26001600055565b919050565b611fcf612dd3565b611fd98386613373565b611fe38385613394565b80156120505760405163d5b9979760e01b81526001600160a01b0384169063d5b997979061201d903390899089908890889060040161488d565b600060405180830381600087803b15801561203757600080fd5b505af115801561204b573d6000803e3d6000fd5b505050505b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa15801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c19190614769565b6120cb9190614756565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa15801561211d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121419190614769565b61214b9190614756565b6005549091506001600160701b03168210158061217a5750600554600160701b90046001600160701b03168110155b6121965760405162461bcd60e51b81526004016108db906148bb565b6005546001600160701b031682101561235a576005546000906121c990600160701b90046001600160701b031683614756565b90506000806000806121db328661140e565b6005549397509195509350915084906121fe9089906001600160701b0316614756565b111561221c5760405162461bcd60e51b81526004016108db906148bb565b8260155461222a91906146f5565b60155581600281111561223f5761223f61427c565b600754600160e01b900463ffffffff9081169116146122fb576001600160701b0381111561227f5760405162461bcd60e51b81526004016108db90614823565b60078054600160701b600160e01b031916600160701b6001600160701b038416021790558160028111156122b5576122b561427c565b6007601c6101000a81548163ffffffff021916908363ffffffff160217905550600080516020614940833981519152826040516122f29190614845565b60405180910390a15b600080516020614960833981519152600460009054906101000a90046001600160a01b0316600360009054906101000a90046001600160a01b03168787338f60405161234c96959493929190614853565b60405180910390a150505050505b600554600160701b90046001600160701b031681101561251c5760055460009061238d906001600160701b031684614756565b905060008060008061239f3286611697565b6005549397509195509350915084906123c9908890600160701b90046001600160701b0316614756565b11156123e75760405162461bcd60e51b81526004016108db906148bb565b826016546123f591906146f5565b60165581600281111561240a5761240a61427c565b600754600160e01b900463ffffffff9081169116146124bd576001600160701b0381111561244a5760405162461bcd60e51b81526004016108db90614823565b600780546001600160701b0319166001600160701b0383161790558160028111156124775761247761427c565b6007601c6101000a81548163ffffffff021916908363ffffffff160217905550600080516020614940833981519152826040516124b49190614845565b60405180910390a15b600080516020614960833981519152600360009054906101000a90046001600160a01b0316600460009054906101000a90046001600160a01b03168787338f60405161250e96959493929190614853565b60405180910390a150505050505b6125246133b1565b604080513381526001600160a01b0387166020820152908101889052606081018790527f0b82e93068db15abd9fbb2682c65462ea8a0a10582dce93a5664818e296f54eb9060800160405180910390a150506125806001600055565b5050505050565b428410156125ce5760405162461bcd60e51b81526020600482015260146024820152731113d113d7d1d4d417d3140e881156141254915160621b60448201526064016108db565b600e546001600160a01b0388166000908152600f6020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b9190876126218361473d565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161269a92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015612705573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061273b5750886001600160a01b0316816001600160a01b0316145b6127875760405162461bcd60e51b815260206004820152601e60248201527f444f444f5f4753505f4c503a20494e56414c49445f5349474e4154555245000060448201526064016108db565b612792898989612d72565b505050505050505050565b60006127a7612dd3565b601654600480546040516370a0823160e01b81523092810192909252600092916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156127f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281d9190614769565b6128279190614756565b60055490915060009061284a90600160701b90046001600160701b031683614756565b9050600080600061285b328561140e565b92985090945090925090506128708787613373565b8260155461287e91906146f5565b6015558060028111156128935761289361427c565b600754600160e01b900463ffffffff90811691161461294f576001600160701b038211156128d35760405162461bcd60e51b81526004016108db90614823565b60078054600160701b600160e01b031916600160701b6001600160701b038516021790558060028111156129095761290961427c565b6007601c6101000a81548163ffffffff021916908363ffffffff160217905550600080516020614940833981519152816040516129469190614845565b60405180910390a15b6015546003546040516370a0823160e01b81523060048201526129d192916001600160a01b0316906370a0823190602401602060405180830381865afa15801561299d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c19190614769565b6129cb9190614756565b86612f71565b60045460035460405160008051602061496083398151915292611fab926001600160a01b039182169291169088908b9033908e90614853565b6002546001600160a01b03163314612a5a5760405162461bcd60e51b8152602060048201526013602482015272105113525397d050d0d154d4d7d11153925151606a1b60448201526064016108db565b620f4240811115612aa35760405162461bcd60e51b81526020600482015260136024820152721253959053125117d4149250d157d312535255606a1b60448201526064016108db565b601455565b612ab0612dd3565b6001546201000090046001600160a01b03163314612b005760405162461bcd60e51b815260206004820152600d60248201526c1050d0d154d4d7d11153925151609a1b60448201526064016108db565b601680546015546000909255600154909190612b2b906201000090046001600160a01b031683613394565b6000601555600154612b4c906201000090046001600160a01b031682613373565b6004546040518381526001600160a01b03909116907fe9b6b9af52fdb56b6ac34a0639bcf8e407008374741c7a0e187da490755b6bfc9060200160405180910390a26003546040518281526001600160a01b03909116907fe9b6b9af52fdb56b6ac34a0639bcf8e407008374741c7a0e187da490755b6bfc9060200160405180910390a250506116956001600055565b6000611409612be961170d565b613559565b60408051808201825260018152605f60f81b6020808301919091528251808401909352600383526204753560ec1b90830152600091828183612c2f30610bd9565b604051602001612c4193929190614521565b60408051601f198184030181528282528051602091820120838301835260018452603160f81b9382019390935281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81830152808301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608401524660808401523060a0808501919091528251808503909101815260c09093019091528151910120600e819055949350505050565b600080600080600080600080612d0a61170d565b905080600001519750806020015196508060400151955080606001519450806080015193508060a0015192508060c001516002811115612d4c57612d4c61427c565b91505090919293949596565b612d60612dd3565b612d686133b1565b6116956001600055565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600260005403612e255760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108db565b6002600055565b6000670de0b6b3a7640000612e41838561471e565b612e4b9190614798565b9392505050565b600081612e4184670de0b6b3a764000061471e565b6103e88111612eb15760405162461bcd60e51b815260206004820152601660248201527509a929ca8be829a9eaa9ca8be9c9ea8be8a9c9eaa8e960531b60448201526064016108db565b6001600160a01b0382166000908152600c6020526040902054612ed59082906146f5565b6001600160a01b0383166000908152600c6020526040902055600b54612efc9082906146f5565b600b556040518181526001600160a01b038316907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859060200160405180910390a26040518181526001600160a01b03831690600090600080516020614920833981519152906020015b60405180910390a35050565b6001600160701b038211801590612f8f57506001600160701b038111155b612fab5760405162461bcd60e51b81526004016108db90614823565b600580546001600160701b03928316600160701b026001600160e01b03199091169290931691909117919091179055565b600080808460c001516002811115612ff657612ff661427c565b03613010576130058484613658565b9150600190506130ca565b60018460c0015160028111156130285761302861427c565b0361303757613005848461367f565b600084606001518560a0015161304d9190614756565b90506000856080015186604001516130659190614756565b90508185101561309057613079868661369c565b9350600292508084111561308b578093505b6130c7565b8185036130a357809350600092506130c7565b6130b6866130b18488614756565b613658565b6130c090826146f5565b9350600192505b50505b9250929050565b600080808460c0015160028111156130eb576130eb61427c565b03613105576130fa84846136d0565b9150600290506130ca565b60018460c00151600281111561311d5761311d61427c565b036131b9576000846040015185608001516131389190614756565b905060008560a0015186606001516131509190614756565b90508185101561317b5761316486866136ef565b93506001925080841115613176578093505b6131b2565b81850361318e57809350600092506131b2565b6131a18661319c8488614756565b6136d0565b6131ab90826146f5565b9350600292505b50506130ca565b6131c3848461371a565b946002945092505050565b60028160c0015160028111156131e6576131e661427c565b0361321b576132138160600151826080015183604001516132079190614756565b83516020850151613739565b60a082015250565b60018160c0015160028111156132335761323361427c565b0361326f5761326981604001518260a0015183606001516132549190614756565b835161325f90613871565b8460200151613739565b60808201525b50565b60008061327f8385614798565b9050600061328d848361471e565b6132979086614756565b905080156132b3576132aa8260016146f5565b92505050610bd3565b509050610bd3565b6001600160a01b0382166000908152600c60205260409020546132df908290614756565b6001600160a01b0383166000908152600c6020526040902055600b54613306908290614756565b600b556040518181526001600160a01b038316907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59060200160405180910390a26040518181526000906001600160a01b0384169060008051602061492083398151915290602001612f65565b801561339057600354613390906001600160a01b0316838361388c565b5050565b801561339057600454613390906001600160a01b0316838361388c565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa1580156133fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134229190614769565b61342c9190614756565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa15801561347e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a29190614769565b6134ac9190614756565b90506001600160701b0382118015906134cc57506001600160701b038111155b6134e85760405162461bcd60e51b81526004016108db90614823565b6005546001600160701b0316821461351657600580546001600160701b0319166001600160701b0384161790555b600554600160701b90046001600160701b0316811461339057600580546001600160701b038316600160701b02600160701b600160e01b03199091161790555050565b600060028260c0015160028111156135735761357361427c565b036135e857606082015160a08301516000916135a791613593908061471e565b61359d9190614798565b8460600151612e52565b90506135b7836020015182612e2c565b60208401516135ce90670de0b6b3a7640000614756565b6135d891906146f5565b9050612e4b836000015182612e52565b6040820151608083015160009161361791613603908061471e565b61360d9190614798565b8460400151612e52565b9050613627836020015182612e2c565b602084015161363e90670de0b6b3a7640000614756565b61364891906146f5565b9050612e4b836000015182612e2c565b6000612e4b83608001518460800151846136758760000151613871565b87602001516138e3565b6000612e4b83608001518460400151846136758760000151613871565b6000612e4b8360a001518385606001516136b691906146f5565b606086015186516136c690613871565b8760200151613bf5565b6000612e4b8360a001518460a0015184866000015187602001516138e3565b6000612e4b836080015183856040015161370991906146f5565b604086015186516020880151613bf5565b6000612e4b8360a00151846060015184866000015187602001516138e3565b60008160000361375e5761374d8385612e2c565b61375790866146f5565b9050613869565b8460000361376e57506000613869565b6000808461377d85600461471e565b613787919061471e565b9050806000036137a157670de0b6b3a76400009150613825565b85816137ad828261471e565b6137b79190614798565b036137fa576137f36ec097ce7bc90715b34b9f1000000000886137da898561471e565b6137e49190614798565b6137ee91906146f5565b613cf0565b9150613825565b6138226ec097ce7bc90715b34b9f1000000000876138188a85614798565b6137e4919061471e565b91505b6000670de0b6b3a764000061384d61383d8286614756565b61384888600261471e565b612e52565b61385791906146f5565b90506138638882612e2c565b93505050505b949350505050565b6000610bd3826ec097ce7bc90715b34b9f1000000000614798565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526138de908490613dd8565b505050565b60008086116139255760405162461bcd60e51b815260206004820152600e60248201526d5441524745545f49535f5a45524f60901b60448201526064016108db565b8360000361393557506000613bec565b8160000361396557846139488486612e2c565b1161395c576139578385612e2c565b61395e565b845b9050613bec565b670de0b6b3a76400008203613a3157600080613981868661471e565b9050806000036139945760009150613a02565b86816139a0828261471e565b6139aa9190614798565b036139d4576139b9888061471e565b6139c3888361471e565b6139cd9190614798565b9150613a02565b8785816139e18a8a61471e565b6139eb9190614798565b6139f5919061471e565b6139ff9190614798565b91505b613a14670de0b6b3a7640000836146f5565b613a1e838961471e565b613a289190614798565b92505050613bec565b6000613a3d858561471e565b8787613a49828761471e565b613a539190614798565b613a5d919061471e565b613a6791906146f5565b9050600086613a7e85670de0b6b3a7640000614756565b613a88919061471e565b90506000828210613aa857613a9d8383614756565b915060009050613ab9565b613ab28284614756565b9150600190505b613acb670de0b6b3a764000083614798565b91506000613b09613ae487670de0b6b3a7640000614756565b613aef90600461471e565b8b613afa898e612e2c565b613b04919061471e565b612e2c565b9050613b19816137e4858061471e565b90506000613b2f87670de0b6b3a7640000614756565b613b3a90600261471e565b905060008315613ba557613b4e8584614756565b905080600003613ba05760405162461bcd60e51b815260206004820152601960248201527f444f444f4d6174683a2073686f756c64206e6f7420626520300000000000000060448201526064016108db565b613bb2565b613baf83866146f5565b90505b6000613bbe8284613ead565b90508b811115613bd8576000975050505050505050613bec565b613be2818d614756565b9750505050505050505b95945050505050565b6000808611613c375760405162461bcd60e51b815260206004820152600e60248201526d5441524745545f49535f5a45524f60901b60448201526064016108db565b6000613c438587614756565b613c4d908561471e565b905082600003613c7157613c69670de0b6b3a764000082614798565b915050613bec565b6000613c9187613c818a8061471e565b613c8b9190614798565b87612e52565b90506000613c9f8583612e2c565b90506ec097ce7bc90715b34b9f10000000008382613cc588670de0b6b3a7640000614756565b613ccf91906146f5565b613cd9919061471e565b613ce39190614798565b9998505050505050505050565b600081600003613d0257506000919050565b60006001613d0f84613eca565b901c6001901b90506001818481613d2857613d28614782565b048201901c90506001818481613d4057613d40614782565b048201901c90506001818481613d5857613d58614782565b048201901c90506001818481613d7057613d70614782565b048201901c90506001818481613d8857613d88614782565b048201901c90506001818481613da057613da0614782565b048201901c90506001818481613db857613db8614782565b048201901c9050612e4b81828581613dd257613dd2614782565b04613f5e565b6000613e2d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613f749092919063ffffffff16565b9050805160001480613e4e575080806020019051810190613e4e91906148e6565b6138de5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108db565b6000612e4b613ec484670de0b6b3a764000061471e565b83613272565b600080608083901c15613edf57608092831c92015b604083901c15613ef157604092831c92015b602083901c15613f0357602092831c92015b601083901c15613f1557601092831c92015b600883901c15613f2757600892831c92015b600483901c15613f3957600492831c92015b600283901c15613f4b57600292831c92015b600183901c15610bd35760010192915050565b6000818310613f6d5781612e4b565b5090919050565b6060613869848460008585600080866001600160a01b03168587604051613f9b9190614903565b60006040518083038185875af1925050503d8060008114613fd8576040519150601f19603f3d011682016040523d82523d6000602084013e613fdd565b606091505b5091509150613fee87838387613ff9565b979650505050505050565b60608315614068578251600003614061576001600160a01b0385163b6140615760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108db565b5081613869565b613869838381511561407d5781518083602001fd5b8060405162461bcd60e51b81526004016108db91906141c8565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060028111156140df576140df61427c565b905290565b80356001600160a01b0381168114611fc257600080fd5b801515811461326f57600080fd5b6000806000806000806000806000806101408b8d03121561412957600080fd5b6141328b6140e4565b995061414060208c016140e4565b985061414e60408c016140e4565b975061415c60608c016140e4565b965060808b0135955060a08b0135945060c08b0135935060e08b013592506101008b013591506101208b0135614191816140fb565b809150509295989b9194979a5092959850565b60005b838110156141bf5781810151838201526020016141a7565b50506000910152565b60208152600082518060208401526141e78160408501602087016141a4565b601f01601f19169190910160400192915050565b6000806040838503121561420e57600080fd5b614217836140e4565b946020939093013593505050565b60006020828403121561423757600080fd5b612e4b826140e4565b60008060006060848603121561425557600080fd5b61425e846140e4565b925061426c602085016140e4565b9150604084013590509250925092565b634e487b7160e01b600052602160045260246000fd5b600381106142b057634e487b7160e01b600052602160045260246000fd5b9052565b84815260208101849052608081016142cf6040830185614292565b82606083015295945050505050565b6000602082840312156142f057600080fd5b5035919050565b600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015161434760c0840182614292565b5092915050565b60008083601f84011261436057600080fd5b50813567ffffffffffffffff81111561437857600080fd5b6020830191508360208285010111156130ca57600080fd5b600080600080600080600060c0888a0312156143ab57600080fd5b873596506143bb602089016140e4565b95506040880135945060608801359350608088013567ffffffffffffffff8111156143e557600080fd5b6143f18a828b0161434e565b989b979a5095989497959660a090950135949350505050565b60008060008060006080868803121561442257600080fd5b8535945060208601359350614439604087016140e4565b9250606086013567ffffffffffffffff81111561445557600080fd5b6144618882890161434e565b969995985093965092949392505050565b60ff8116811461326f57600080fd5b600080600080600080600060e0888a03121561449c57600080fd5b6144a5886140e4565b96506144b3602089016140e4565b9550604088013594506060880135935060808801356144d181614472565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561450157600080fd5b61450a836140e4565b9150614518602084016140e4565b90509250929050565b600084516145338184602089016141a4565b8451908301906145478183602089016141a4565b845191019061455a8183602088016141a4565b0195945050505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061458e57607f821691505b6020821081036145ae57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156138de57600081815260208120601f850160051c810160208610156145db5750805b601f850160051c820191505b818110156145fa578281556001016145e7565b505050505050565b815167ffffffffffffffff81111561461c5761461c614564565b6146308161462a845461457a565b846145b4565b602080601f831160018114614665576000841561464d5750858301515b600019600386901b1c1916600185901b1785556145fa565b600085815260208120601f198616915b8281101561469457888601518255948401946001909101908401614675565b50858210156146b25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156146d457600080fd5b8151612e4b81614472565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bd357610bd36146df565b634e487b7160e01b600052603260045260246000fd5b6000816000190483118215151615614738576147386146df565b500290565b60006001820161474f5761474f6146df565b5060010190565b81810381811115610bd357610bd36146df565b60006020828403121561477b57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826147b557634e487b7160e01b600052601260045260246000fd5b500490565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015284604082015283606082015260a06080820152600061481760a0830184866147ba565b98975050505050505050565b6020808252600890820152674f564552464c4f5760c01b604082015260600190565b60208101610bd38284614292565b6001600160a01b0396871681529486166020860152604085019390935260608401919091528316608083015290911660a082015260c00190565b60018060a01b0386168152846020820152836040820152608060608201526000613fee6080830184866147ba565b60208082526011908201527011931054d217d313d05397d19052531151607a1b604082015260600190565b6000602082840312156148f857600080fd5b8151612e4b816140fb565b600082516149158184602087016141a4565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efdf176ad18be4f9f32efaa32f06e9d1175476504739a745f1399a6d3fa4b75917c2c0245e056d5fb095f04cd6373bc770802ebd1e6c918eb78fdef843cdb37b0fa2646970667358221220c9fca18272ef31813de4775d351f1ed030ec0649a1b0a5f58ce5b652e49a2fba64736f6c63430008100033