[ { "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": "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" } ]
60806040526001805461ff00191690556103e8601455601780546001600160a01b031916905534801561003157600080fd5b5060016000556149a4806100466000396000f3fe608060405234801561001057600080fd5b506004361061038e5760003560e01c8063880a4d87116101de578063d505accf1161010f578063ee27c689116100ad578063fcf709f71161007c578063fcf709f714610841578063fd1ed7e91461084c578063fe24cb7f14610889578063fff6cae91461089257600080fd5b8063ee27c68914610815578063f5346aea1461081d578063f6b06e7014610825578063f811d6921461083857600080fd5b8063e539ef49116100e9578063e539ef49146107de578063e6485c8e146107f1578063eb99da6a14610804578063ec2fd46d1461080c57600080fd5b8063d505accf1461077f578063dd62ed3e14610792578063dd93f59a146107cb57600080fd5b8063bbf5ce781161017c578063bfdbd72311610156578063bfdbd72314610747578063c0ffa17814610750578063d0a494e414610759578063d4b970461461076c57600080fd5b8063bbf5ce7814610703578063bd6015b41461071d578063bf357dae1461073057600080fd5b8063a9059cbb116101b8578063a9059cbb146106c1578063ab44a7a3146106d4578063b56ceaa6146106dd578063b59b8555146106f057600080fd5b8063880a4d871461067857806395d89b41146106a4578063a382d1b9146106ac57600080fd5b806347bbad2e116102c357806370a082311161026157806377f586571161023057806377f586571461060057806379a04876146106325780637d721504146106455780637ecebe001461065857600080fd5b806370a08231146105b457806371f9100c146105dd57806372bf079e146105e557806373d74cf8146105f857600080fd5b806354fd4d501161029d57806354fd4d501461055157806363ab59931461057657806365f6fcbb1461058957806366410a211461059157600080fd5b806347bbad2e146105075780634a248d2a146105105780634c85b4251461052357600080fd5b806330adf81f116103305780633644e5151161030a5780633644e515146104ab5780633afdfeba146104b45780634322ec83146104bd57806344096609146104ee57600080fd5b806330adf81f14610438578063313ce5671461045f57806336223ce91461047e57600080fd5b8063171019401161036c57806317101940146103e957806318160ddd146103fc57806323b872dd146104135780632df6cb481461042657600080fd5b806304b621bc1461039357806306fdde03146103a8578063095ea7b3146103c6575b600080fd5b6103a66103a1366004614103565b61089a565b005b6103b0610b2e565b6040516103bd91906141b7565b60405180910390f35b6103d96103d43660046141ea565b610bbc565b60405190151581526020016103bd565b6103b06103f7366004614214565b610bd3565b610405600b5481565b6040519081526020016103bd565b6103d961042136600461422f565b610d56565b6001546103d990610100900460ff1681565b6104057f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60095461046c9060ff1681565b60405160ff90911681526020016103bd565b6005546001600160701b0380821691600160701b9004165b604080519283526020830191909152016103bd565b610405600e5481565b61040560145481565b6001546104d6906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016103bd565b6104966104fc366004614214565b506011546010549091565b61040560165481565b6003546104d6906001600160a01b031681565b610536610531366004614214565b610f06565b604080519384526020840192909252908201526060016103bd565b60408051808201909152600981526847535020312e302e3160b81b60208201526103b0565b6002546104d6906001600160a01b031681565b610405611370565b6105a461059f3660046141ea565b611408565b6040516103bd94939291906142a3565b6104056105c2366004614214565b6001600160a01b03166000908152600c602052604090205490565b610405611471565b6103a66105f33660046142cd565b6114bf565b6103a66115da565b60075461061a90600160701b90046001600160701b031681565b6040516001600160701b0390911681526020016103bd565b6105a46106403660046141ea565b611691565b60055461061a906001600160701b031681565b610405610666366004614214565b600f6020526000908152604090205481565b60055461068f90600160e01b900463ffffffff1681565b60405163ffffffff90911681526020016103bd565b6103b06116fa565b6106b4611707565b6040516103bd91906142e6565b6103d96106cf3660046141ea565b6117a9565b61040560115481565b6104966106eb36600461437f565b611895565b6103a66106fe3660046142cd565b611c6f565b60055461061a90600160701b90046001600160701b031681565b61040561072b366004614214565b611d48565b60075461068f90600160e01b900463ffffffff1681565b61040560155481565b61040560105481565b6103a66107673660046143f9565b611fc1565b6004546104d6906001600160a01b031681565b6103a661078d366004614470565b612581565b6104056107a03660046144dd565b6001600160a01b039182166000908152600d6020908152604080832093909416825291909152205490565b6104056107d9366004614214565b612797565b60075461061a906001600160701b031681565b6103a66107ff3660046142cd565b612a04565b6103a6612aa2565b61040560125481565b610405612bd6565b610405612be8565b6017546104d6906001600160a01b031681565b61040560135481565b601554601654610496565b610854612cf0565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016103bd565b61040560065481565b6103a6612d52565b60015460ff16156108e45760405162461bcd60e51b815260206004820152600f60248201526e11d4d417d253925512505312569151608a1b60448201526064015b60405180910390fd5b6001805460ff1916811790556001600160a01b038087169088160361094b5760405162461bcd60e51b815260206004820152601a60248201527f424153455f51554f54455f43414e5f4e4f545f42455f53414d4500000000000060448201526064016108db565b600380546001600160a01b03808a166001600160a01b0319928316179092556004805492891692909116919091179055821580159061099957506ec097ce7bc90715b34b9f10000000008311155b6109a257600080fd5b6013839055670de0b6b3a76400008211156109bc57600080fd5b60128290556011859055601084905560018054600280546001600160a01b038c81166001600160a01b03199092169190911790915561ff0019908c16620100000216610100600160b01b0319909116178155604080518082018252918252605f60f81b6020808401919091528151808301909252600382526204753560ec1b908201528082610a4a30610bd3565b604051602001610a5c93929190614510565b604051602081830303815290604052600a9081610a7991906145f1565b506040805180820190915260038152620474c560ec1b6020820152600890610aa190826145f1565b50886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0491906146b1565b6009805460ff191660ff92909216919091179055610b20612be8565b505050505050505050505050565b600a8054610b3b90614569565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6790614569565b8015610bb45780601f10610b8957610100808354040283529160200191610bb4565b820191906000526020600020905b815481529060010190602001808311610b9757829003601f168201915b505050505081565b6000610bc9338484612d6c565b5060015b92915050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b6020820152815160088082528184019093526060926001600160a01b038516929160009160208201818036833701905050905060005b6004811015610d4d5782600485610c4284600c6146e4565b60208110610c5257610c526146f7565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110610c7857610c786146f7565b01602001516001600160f81b03191682610c9383600261470d565b81518110610ca357610ca36146f7565b60200101906001600160f81b031916908160001a9053508284610cc783600c6146e4565b60208110610cd757610cd76146f7565b825191901a600f16908110610cee57610cee6146f7565b01602001516001600160f81b03191682610d0983600261470d565b610d149060016146e4565b81518110610d2457610d246146f7565b60200101906001600160f81b031916908160001a90535080610d458161472c565b915050610c2a565b50949350505050565b6001600160a01b0383166000908152600c6020526040812054821115610db35760405162461bcd60e51b81526020600482015260126024820152710848298829c868abe9c9ea8be8a9c9eaa8e960731b60448201526064016108db565b6001600160a01b0384166000908152600d60209081526040808320338452909152902054821115610e1d5760405162461bcd60e51b815260206004820152601460248201527308298989eae829c868abe9c9ea8be8a9c9eaa8e960631b60448201526064016108db565b6001600160a01b0384166000908152600c6020526040902054610e41908390614745565b6001600160a01b038086166000908152600c60205260408082209390935590851681522054610e719083906146e4565b6001600160a01b038085166000908152600c60209081526040808320949094559187168152600d82528281203382529091522054610eb0908390614745565b6001600160a01b038581166000818152600d60209081526040808320338452825291829020949094555185815291861692909160008051602061490f833981519152910160405180910390a35060019392505050565b6000806000610f13612dcd565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015610f60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f849190614758565b610f8e9190614745565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110049190614758565b61100e9190614745565b6005549091506001600160701b0380821691600160701b9004166110328285614745565b955061103e8184614745565b9450600086116110805760405162461bcd60e51b815260206004820152600d60248201526c1393d7d09054d157d253941555609a1b60448201526064016108db565b600b546000036111f957600083116110ce5760405162461bcd60e51b815260206004820152601160248201527016915493d7d45553d51157d05353d55395607a1b60448201526064016108db565b6110da84601354612e26565b83106110e657836110f2565b6110f283601354612e4c565b600780546001600160701b0319166001600160701b03831617905560135490975061111e908890612e26565b60078054600160701b600160e01b031916600160701b6001600160701b039384168102919091179182905590041661118f5760405162461bcd60e51b815260206004820152601460248201527351554f54455f5441524745545f49535f5a45524f60601b60448201526064016108db565b6107d187116111d95760405162461bcd60e51b815260206004820152601660248201527509a929ca8be829a9eaa9ca8be9c9ea8be8a9c9eaa8e960531b60448201526064016108db565b6111e660006103e9612e61565b6111f26103e988614745565b96506112f0565b6000821180156112095750600081115b156112f057600061121a8784612e4c565b905060006112288784612e4c565b90506000828210611239578261123b565b815b9050611249600b5482612e26565b600754909a50611262906001600160701b031682612e26565b60075461127891906001600160701b03166146e4565b600780546001600160701b0319166001600160701b0392831617908190556112a991600160701b9091041682612e26565b6007546112c69190600160701b90046001600160701b03166146e4565b6007600e6101000a8154816001600160701b0302191690836001600160701b031602179055505050505b6112fa8888612e61565b6113048484612f6b565b6001600160a01b0388166000818152600c60209081526040918290205482519384529083018a905282820152517f1c172440bdebb59cd92a7f08f4227903a3305ab6f880cb25f93eddb66843a1029181900360600190a1505050506113696001600055565b9193909250565b6015546005546003546040516370a0823160e01b8152306004820152600093926001600160701b0316916001600160a01b0316906370a08231906024015b602060405180830381865afa1580156113cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ef9190614758565b6113f99190614745565b6114039190614745565b905090565b6000806000806000611418611707565b90506114248187612fd6565b6011546010549297509094509061143b8782612e26565b9550856114488884612e26565b6114529089614745565b61145c9190614745565b96508260a00151935050505092959194509250565b601654600554600480546040516370a0823160e01b8152309281019290925260009392600160701b90046001600160701b0316916001600160a01b03909116906370a08231906024016113ae565b6002546001600160a01b0316331461150f5760405162461bcd60e51b8152602060048201526013602482015272105113525397d050d0d154d4d7d11153925151606a1b60448201526064016108db565b6000601354821161152d57816013546115289190614745565b61153a565b60135461153a9083614745565b905060145460135482620f4240611551919061470d565b61155b9190614787565b111561159e5760405162461bcd60e51b8152602060048201526012602482015271115610d1515117d4149250d157d31253525560721b60448201526064016108db565b60138290556040518281527f0caf6249df528dcb5afe9adf7a20744e990b338c3d1ca3adedd6362d2db048449060200160405180910390a15050565b60075463ffffffff600160e01b90910416600214801561160a57506007546005546001600160701b039182169116105b1561162f57600554600160701b8082046001600160701b039081169091029116176007555b60075463ffffffff600160e01b90910416600114801561166a57506007546005546001600160701b03600160701b9283900481169290910416105b1561168f57600554600160701b8082046001600160701b039081169091029116176007555b565b60008060008060006116a1611707565b90506116ad81876130cb565b601154601054929750909450906116c48782612e26565b9550856116d18884612e26565b6116db9089614745565b6116e59190614745565b96508260800151935050505092959194509250565b60088054610b3b90614569565b61170f614091565b601354815260125460208201526005546001600160701b038082166040840152600160701b918290048116606084015260075480821660808501529182041660a0830152600160e01b900463ffffffff1660028111156117715761177161426b565b8160c0019060028111156117875761178761426b565b9081600281111561179a5761179a61426b565b9052506117a6816131c8565b90565b336000908152600c60205260408120548211156117fd5760405162461bcd60e51b81526020600482015260126024820152710848298829c868abe9c9ea8be8a9c9eaa8e960731b60448201526064016108db565b336000908152600c6020526040902054611818908390614745565b336000908152600c6020526040808220929092556001600160a01b038516815220546118459083906146e4565b6001600160a01b0384166000818152600c602052604090819020929092559051339060008051602061490f833981519152906118849086815260200190565b60405180910390a350600192915050565b6000806118a0612dcd565b428310156118df5760405162461bcd60e51b815260206004820152600c60248201526b1512535157d156141254915160a21b60448201526064016108db565b336000908152600c602052604090205489111561192f5760405162461bcd60e51b815260206004820152600e60248201526d08e98a0be9c9ea8be8a9c9eaa8e960931b60448201526064016108db565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa15801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a09190614758565b6119aa9190614745565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa1580156119fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a209190614758565b611a2a9190614745565b600b5490915080611a3b8d8561470d565b611a459190614787565b945080611a528d8461470d565b611a5c9190614787565b600754909450611a8090611a7a908e906001600160701b031661470d565b8261326c565b600754611a9691906001600160701b0316614745565b600780546001600160701b0319166001600160701b039283161790819055611acc91611a7a918f91600160701b9091041661470d565b600754611ae99190600160701b90046001600160701b0316614745565b6007600e6101000a8154816001600160701b0302191690836001600160701b03160217905550898510158015611b1f5750888410155b611b615760405162461bcd60e51b81526020600482015260136024820152720ae92a89088a482aebe9c9ea8be8a9c9eaa8e9606b1b60448201526064016108db565b611b6b338d6132b5565b611b758b8661336d565b611b7f8b8561338e565b611b876133ab565b8615611bf6578a6001600160a01b0316632411d338338e88888d8d6040518763ffffffff1660e01b8152600401611bc3969594939291906147d2565b600060405180830381600087803b158015611bdd57600080fd5b505af1158015611bf1573d6000803e3d6000fd5b505050505b336000818152600c60209081526040918290205482519384526001600160a01b038f16918401919091528282018f90526060830152517f55caccde83781f39bfc1296eff45655b6496729443a7d48958b18b3b685600a59181900360800190a1505050611c636001600055565b97509795505050505050565b6001546201000090046001600160a01b03163314611cbf5760405162461bcd60e51b815260206004820152600d60248201526c1050d0d154d4d7d11153925151609a1b60448201526064016108db565b670de0b6b3a7640000811115611d0d5760405162461bcd60e51b8152602060048201526013602482015272494e56414c49445f4d545f4645455f5241544560681b60448201526064016108db565b60108190556040518181527fc9ec0c7a5c9e8424f73dce9c8a6ad565757953517e4f472e243c0955aa11322e9060200160405180910390a150565b6000611d52612dcd565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015611d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc39190614758565b611dcd9190614745565b600554909150600090611de9906001600160701b031683614745565b90506000806000611dfa3285611691565b9298509094509092509050611e0f878761338e565b82601654611e1d91906146e4565b601655806002811115611e3257611e3261426b565b600754600160e01b900463ffffffff908116911614611ee5576001600160701b03821115611e725760405162461bcd60e51b81526004016108db90614812565b600780546001600160701b0319166001600160701b038416179055806002811115611e9f57611e9f61426b565b6007601c6101000a81548163ffffffff021916908363ffffffff16021790555060008051602061492f83398151915281604051611edc9190614834565b60405180910390a15b601654600480546040516370a0823160e01b81523092810192909252611f6c92889290916001600160a01b0316906370a0823190602401602060405180830381865afa158015611f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5d9190614758565b611f679190614745565b612f6b565b60035460045460405160008051602061494f83398151915292611fa5926001600160a01b039182169291169088908b9033908e90614842565b60405180910390a15050505050611fbc6001600055565b919050565b611fc9612dcd565b611fd3838661336d565b611fdd838561338e565b801561204a5760405163d5b9979760e01b81526001600160a01b0384169063d5b9979790612017903390899089908890889060040161487c565b600060405180830381600087803b15801561203157600080fd5b505af1158015612045573d6000803e3d6000fd5b505050505b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015612097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bb9190614758565b6120c59190614745565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa158015612117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213b9190614758565b6121459190614745565b6005549091506001600160701b0316821015806121745750600554600160701b90046001600160701b03168110155b6121905760405162461bcd60e51b81526004016108db906148aa565b6005546001600160701b0316821015612354576005546000906121c390600160701b90046001600160701b031683614745565b90506000806000806121d53286611408565b6005549397509195509350915084906121f89089906001600160701b0316614745565b11156122165760405162461bcd60e51b81526004016108db906148aa565b8260155461222491906146e4565b6015558160028111156122395761223961426b565b600754600160e01b900463ffffffff9081169116146122f5576001600160701b038111156122795760405162461bcd60e51b81526004016108db90614812565b60078054600160701b600160e01b031916600160701b6001600160701b038416021790558160028111156122af576122af61426b565b6007601c6101000a81548163ffffffff021916908363ffffffff16021790555060008051602061492f833981519152826040516122ec9190614834565b60405180910390a15b60008051602061494f833981519152600460009054906101000a90046001600160a01b0316600360009054906101000a90046001600160a01b03168787338f60405161234696959493929190614842565b60405180910390a150505050505b600554600160701b90046001600160701b031681101561251657600554600090612387906001600160701b031684614745565b90506000806000806123993286611691565b6005549397509195509350915084906123c3908890600160701b90046001600160701b0316614745565b11156123e15760405162461bcd60e51b81526004016108db906148aa565b826016546123ef91906146e4565b6016558160028111156124045761240461426b565b600754600160e01b900463ffffffff9081169116146124b7576001600160701b038111156124445760405162461bcd60e51b81526004016108db90614812565b600780546001600160701b0319166001600160701b0383161790558160028111156124715761247161426b565b6007601c6101000a81548163ffffffff021916908363ffffffff16021790555060008051602061492f833981519152826040516124ae9190614834565b60405180910390a15b60008051602061494f833981519152600360009054906101000a90046001600160a01b0316600460009054906101000a90046001600160a01b03168787338f60405161250896959493929190614842565b60405180910390a150505050505b61251e6133ab565b604080513381526001600160a01b0387166020820152908101889052606081018790527f0b82e93068db15abd9fbb2682c65462ea8a0a10582dce93a5664818e296f54eb9060800160405180910390a1505061257a6001600055565b5050505050565b428410156125c85760405162461bcd60e51b81526020600482015260146024820152731113d113d7d1d4d417d3140e881156141254915160621b60448201526064016108db565b600e546001600160a01b0388166000908152600f6020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91908761261b8361472c565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161269492919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156126ff573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906127355750886001600160a01b0316816001600160a01b0316145b6127815760405162461bcd60e51b815260206004820152601e60248201527f444f444f5f4753505f4c503a20494e56414c49445f5349474e4154555245000060448201526064016108db565b61278c898989612d6c565b505050505050505050565b60006127a1612dcd565b601654600480546040516370a0823160e01b81523092810192909252600092916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156127f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128179190614758565b6128219190614745565b60055490915060009061284490600160701b90046001600160701b031683614745565b905060008060006128553285611408565b929850909450909250905061286a878761336d565b8260155461287891906146e4565b60155580600281111561288d5761288d61426b565b600754600160e01b900463ffffffff908116911614612949576001600160701b038211156128cd5760405162461bcd60e51b81526004016108db90614812565b60078054600160701b600160e01b031916600160701b6001600160701b038516021790558060028111156129035761290361426b565b6007601c6101000a81548163ffffffff021916908363ffffffff16021790555060008051602061492f833981519152816040516129409190614834565b60405180910390a15b6015546003546040516370a0823160e01b81523060048201526129cb92916001600160a01b0316906370a0823190602401602060405180830381865afa158015612997573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bb9190614758565b6129c59190614745565b86612f6b565b60045460035460405160008051602061494f83398151915292611fa5926001600160a01b039182169291169088908b9033908e90614842565b6002546001600160a01b03163314612a545760405162461bcd60e51b8152602060048201526013602482015272105113525397d050d0d154d4d7d11153925151606a1b60448201526064016108db565b620f4240811115612a9d5760405162461bcd60e51b81526020600482015260136024820152721253959053125117d4149250d157d312535255606a1b60448201526064016108db565b601455565b612aaa612dcd565b6001546201000090046001600160a01b03163314612afa5760405162461bcd60e51b815260206004820152600d60248201526c1050d0d154d4d7d11153925151609a1b60448201526064016108db565b601680546015546000909255600154909190612b25906201000090046001600160a01b03168361338e565b6000601555600154612b46906201000090046001600160a01b03168261336d565b6004546040518381526001600160a01b03909116907fe9b6b9af52fdb56b6ac34a0639bcf8e407008374741c7a0e187da490755b6bfc9060200160405180910390a26003546040518281526001600160a01b03909116907fe9b6b9af52fdb56b6ac34a0639bcf8e407008374741c7a0e187da490755b6bfc9060200160405180910390a2505061168f6001600055565b6000611403612be3611707565b613553565b60408051808201825260018152605f60f81b6020808301919091528251808401909352600383526204753560ec1b90830152600091828183612c2930610bd3565b604051602001612c3b93929190614510565b60408051601f198184030181528282528051602091820120838301835260018452603160f81b9382019390935281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81830152808301939093527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608401524660808401523060a0808501919091528251808503909101815260c09093019091528151910120600e819055949350505050565b600080600080600080600080612d04611707565b905080600001519750806020015196508060400151955080606001519450806080015193508060a0015192508060c001516002811115612d4657612d4661426b565b91505090919293949596565b612d5a612dcd565b612d626133ab565b61168f6001600055565b6001600160a01b038381166000818152600d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600260005403612e1f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108db565b6002600055565b6000670de0b6b3a7640000612e3b838561470d565b612e459190614787565b9392505050565b600081612e3b84670de0b6b3a764000061470d565b6103e88111612eab5760405162461bcd60e51b815260206004820152601660248201527509a929ca8be829a9eaa9ca8be9c9ea8be8a9c9eaa8e960531b60448201526064016108db565b6001600160a01b0382166000908152600c6020526040902054612ecf9082906146e4565b6001600160a01b0383166000908152600c6020526040902055600b54612ef69082906146e4565b600b556040518181526001600160a01b038316907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859060200160405180910390a26040518181526001600160a01b0383169060009060008051602061490f833981519152906020015b60405180910390a35050565b6001600160701b038211801590612f8957506001600160701b038111155b612fa55760405162461bcd60e51b81526004016108db90614812565b600580546001600160701b03928316600160701b026001600160e01b03199091169290931691909117919091179055565b600080808460c001516002811115612ff057612ff061426b565b0361300a57612fff8484613652565b9150600190506130c4565b60018460c0015160028111156130225761302261426b565b0361303157612fff8484613679565b600084606001518560a001516130479190614745565b905060008560800151866040015161305f9190614745565b90508185101561308a576130738686613696565b93506002925080841115613085578093505b6130c1565b81850361309d57809350600092506130c1565b6130b0866130ab8488614745565b613652565b6130ba90826146e4565b9350600192505b50505b9250929050565b600080808460c0015160028111156130e5576130e561426b565b036130ff576130f484846136ca565b9150600290506130c4565b60018460c0015160028111156131175761311761426b565b036131b3576000846040015185608001516131329190614745565b905060008560a00151866060015161314a9190614745565b9050818510156131755761315e86866136e9565b93506001925080841115613170578093505b6131ac565b81850361318857809350600092506131ac565b61319b866131968488614745565b6136ca565b6131a590826146e4565b9350600292505b50506130c4565b6131bd8484613714565b946002945092505050565b60028160c0015160028111156131e0576131e061426b565b036132155761320d8160600151826080015183604001516132019190614745565b83516020850151613733565b60a082015250565b60018160c00151600281111561322d5761322d61426b565b036132695761326381604001518260a00151836060015161324e9190614745565b83516132599061386b565b8460200151613733565b60808201525b50565b6000806132798385614787565b90506000613287848361470d565b6132919086614745565b905080156132ad576132a48260016146e4565b92505050610bcd565b509050610bcd565b6001600160a01b0382166000908152600c60205260409020546132d9908290614745565b6001600160a01b0383166000908152600c6020526040902055600b54613300908290614745565b600b556040518181526001600160a01b038316907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59060200160405180910390a26040518181526000906001600160a01b0384169060008051602061490f83398151915290602001612f5f565b801561338a5760035461338a906001600160a01b03168383613886565b5050565b801561338a5760045461338a906001600160a01b03168383613886565b6015546003546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa1580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c9190614758565b6134269190614745565b601654600480546040516370a0823160e01b815230928101929092529293506000926001600160a01b0316906370a0823190602401602060405180830381865afa158015613478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061349c9190614758565b6134a69190614745565b90506001600160701b0382118015906134c657506001600160701b038111155b6134e25760405162461bcd60e51b81526004016108db90614812565b6005546001600160701b0316821461351057600580546001600160701b0319166001600160701b0384161790555b600554600160701b90046001600160701b0316811461338a57600580546001600160701b038316600160701b02600160701b600160e01b03199091161790555050565b600060028260c00151600281111561356d5761356d61426b565b036135e257606082015160a08301516000916135a19161358d908061470d565b6135979190614787565b8460600151612e4c565b90506135b1836020015182612e26565b60208401516135c890670de0b6b3a7640000614745565b6135d291906146e4565b9050612e45836000015182612e4c565b60408201516080830151600091613611916135fd908061470d565b6136079190614787565b8460400151612e4c565b9050613621836020015182612e26565b602084015161363890670de0b6b3a7640000614745565b61364291906146e4565b9050612e45836000015182612e26565b6000612e45836080015184608001518461366f876000015161386b565b87602001516138dd565b6000612e45836080015184604001518461366f876000015161386b565b6000612e458360a001518385606001516136b091906146e4565b606086015186516136c09061386b565b8760200151613bef565b6000612e458360a001518460a0015184866000015187602001516138dd565b6000612e45836080015183856040015161370391906146e4565b604086015186516020880151613bef565b6000612e458360a00151846060015184866000015187602001516138dd565b600081600003613758576137478385612e26565b61375190866146e4565b9050613863565b8460000361376857506000613863565b6000808461377785600461470d565b613781919061470d565b90508060000361379b57670de0b6b3a7640000915061381f565b85816137a7828261470d565b6137b19190614787565b036137f4576137ed6ec097ce7bc90715b34b9f1000000000886137d4898561470d565b6137de9190614787565b6137e891906146e4565b613cea565b915061381f565b61381c6ec097ce7bc90715b34b9f1000000000876138128a85614787565b6137de919061470d565b91505b6000670de0b6b3a76400006138476138378286614745565b61384288600261470d565b612e4c565b61385191906146e4565b905061385d8882612e26565b93505050505b949350505050565b6000610bcd826ec097ce7bc90715b34b9f1000000000614787565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526138d8908490613dd2565b505050565b600080861161391f5760405162461bcd60e51b815260206004820152600e60248201526d5441524745545f49535f5a45524f60901b60448201526064016108db565b8360000361392f57506000613be6565b8160000361395f57846139428486612e26565b11613956576139518385612e26565b613958565b845b9050613be6565b670de0b6b3a76400008203613a2b5760008061397b868661470d565b90508060000361398e57600091506139fc565b868161399a828261470d565b6139a49190614787565b036139ce576139b3888061470d565b6139bd888361470d565b6139c79190614787565b91506139fc565b8785816139db8a8a61470d565b6139e59190614787565b6139ef919061470d565b6139f99190614787565b91505b613a0e670de0b6b3a7640000836146e4565b613a18838961470d565b613a229190614787565b92505050613be6565b6000613a37858561470d565b8787613a43828761470d565b613a4d9190614787565b613a57919061470d565b613a6191906146e4565b9050600086613a7885670de0b6b3a7640000614745565b613a82919061470d565b90506000828210613aa257613a978383614745565b915060009050613ab3565b613aac8284614745565b9150600190505b613ac5670de0b6b3a764000083614787565b91506000613b03613ade87670de0b6b3a7640000614745565b613ae990600461470d565b8b613af4898e612e26565b613afe919061470d565b612e26565b9050613b13816137de858061470d565b90506000613b2987670de0b6b3a7640000614745565b613b3490600261470d565b905060008315613b9f57613b488584614745565b905080600003613b9a5760405162461bcd60e51b815260206004820152601960248201527f444f444f4d6174683a2073686f756c64206e6f7420626520300000000000000060448201526064016108db565b613bac565b613ba983866146e4565b90505b6000613bb88284613ea7565b90508b811115613bd2576000975050505050505050613be6565b613bdc818d614745565b9750505050505050505b95945050505050565b6000808611613c315760405162461bcd60e51b815260206004820152600e60248201526d5441524745545f49535f5a45524f60901b60448201526064016108db565b6000613c3d8587614745565b613c47908561470d565b905082600003613c6b57613c63670de0b6b3a764000082614787565b915050613be6565b6000613c8b87613c7b8a8061470d565b613c859190614787565b87612e4c565b90506000613c998583612e26565b90506ec097ce7bc90715b34b9f10000000008382613cbf88670de0b6b3a7640000614745565b613cc991906146e4565b613cd3919061470d565b613cdd9190614787565b9998505050505050505050565b600081600003613cfc57506000919050565b60006001613d0984613ec4565b901c6001901b90506001818481613d2257613d22614771565b048201901c90506001818481613d3a57613d3a614771565b048201901c90506001818481613d5257613d52614771565b048201901c90506001818481613d6a57613d6a614771565b048201901c90506001818481613d8257613d82614771565b048201901c90506001818481613d9a57613d9a614771565b048201901c90506001818481613db257613db2614771565b048201901c9050612e4581828581613dcc57613dcc614771565b04613f58565b6000613e27826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613f6e9092919063ffffffff16565b9050805160001480613e48575080806020019051810190613e4891906148d5565b6138d85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108db565b6000612e45613ebe84670de0b6b3a764000061470d565b8361326c565b600080608083901c15613ed957608092831c92015b604083901c15613eeb57604092831c92015b602083901c15613efd57602092831c92015b601083901c15613f0f57601092831c92015b600883901c15613f2157600892831c92015b600483901c15613f3357600492831c92015b600283901c15613f4557600292831c92015b600183901c15610bcd5760010192915050565b6000818310613f675781612e45565b5090919050565b6060613863848460008585600080866001600160a01b03168587604051613f9591906148f2565b60006040518083038185875af1925050503d8060008114613fd2576040519150601f19603f3d011682016040523d82523d6000602084013e613fd7565b606091505b5091509150613fe887838387613ff3565b979650505050505050565b6060831561406257825160000361405b576001600160a01b0385163b61405b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108db565b5081613863565b61386383838151156140775781518083602001fd5b8060405162461bcd60e51b81526004016108db91906141b7565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060028111156140d9576140d961426b565b905290565b80356001600160a01b0381168114611fbc57600080fd5b801515811461326957600080fd5b60008060008060008060008060006101208a8c03121561412257600080fd5b61412b8a6140de565b985061413960208b016140de565b975061414760408b016140de565b965061415560608b016140de565b955060808a0135945060a08a0135935060c08a0135925060e08a013591506101008a0135614182816140f5565b809150509295985092959850929598565b60005b838110156141ae578181015183820152602001614196565b50506000910152565b60208152600082518060208401526141d6816040850160208701614193565b601f01601f19169190910160400192915050565b600080604083850312156141fd57600080fd5b614206836140de565b946020939093013593505050565b60006020828403121561422657600080fd5b612e45826140de565b60008060006060848603121561424457600080fd5b61424d846140de565b925061425b602085016140de565b9150604084013590509250925092565b634e487b7160e01b600052602160045260246000fd5b6003811061429f57634e487b7160e01b600052602160045260246000fd5b9052565b84815260208101849052608081016142be6040830185614281565b82606083015295945050505050565b6000602082840312156142df57600080fd5b5035919050565b600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015161433660c0840182614281565b5092915050565b60008083601f84011261434f57600080fd5b50813567ffffffffffffffff81111561436757600080fd5b6020830191508360208285010111156130c457600080fd5b600080600080600080600060c0888a03121561439a57600080fd5b873596506143aa602089016140de565b95506040880135945060608801359350608088013567ffffffffffffffff8111156143d457600080fd5b6143e08a828b0161433d565b989b979a5095989497959660a090950135949350505050565b60008060008060006080868803121561441157600080fd5b8535945060208601359350614428604087016140de565b9250606086013567ffffffffffffffff81111561444457600080fd5b6144508882890161433d565b969995985093965092949392505050565b60ff8116811461326957600080fd5b600080600080600080600060e0888a03121561448b57600080fd5b614494886140de565b96506144a2602089016140de565b9550604088013594506060880135935060808801356144c081614461565b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156144f057600080fd5b6144f9836140de565b9150614507602084016140de565b90509250929050565b60008451614522818460208901614193565b845190830190614536818360208901614193565b8451910190614549818360208801614193565b0195945050505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061457d57607f821691505b60208210810361459d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156138d857600081815260208120601f850160051c810160208610156145ca5750805b601f850160051c820191505b818110156145e9578281556001016145d6565b505050505050565b815167ffffffffffffffff81111561460b5761460b614553565b61461f816146198454614569565b846145a3565b602080601f831160018114614654576000841561463c5750858301515b600019600386901b1c1916600185901b1785556145e9565b600085815260208120601f198616915b8281101561468357888601518255948401946001909101908401614664565b50858210156146a15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156146c357600080fd5b8151612e4581614461565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bcd57610bcd6146ce565b634e487b7160e01b600052603260045260246000fd5b6000816000190483118215151615614727576147276146ce565b500290565b60006001820161473e5761473e6146ce565b5060010190565b81810381811115610bcd57610bcd6146ce565b60006020828403121561476a57600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b6000826147a457634e487b7160e01b600052601260045260246000fd5b500490565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015284604082015283606082015260a06080820152600061480660a0830184866147a9565b98975050505050505050565b6020808252600890820152674f564552464c4f5760c01b604082015260600190565b60208101610bcd8284614281565b6001600160a01b0396871681529486166020860152604085019390935260608401919091528316608083015290911660a082015260c00190565b60018060a01b0386168152846020820152836040820152608060608201526000613fe86080830184866147a9565b60208082526011908201527011931054d217d313d05397d19052531151607a1b604082015260600190565b6000602082840312156148e757600080fd5b8151612e45816140f5565b60008251614904818460208701614193565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efdf176ad18be4f9f32efaa32f06e9d1175476504739a745f1399a6d3fa4b75917c2c0245e056d5fb095f04cd6373bc770802ebd1e6c918eb78fdef843cdb37b0fa264697066735822122051895c0ab736fc3a00a4811727eba097895a7a6aafd866b9c8cbf018d5eb73f264736f6c63430008100033