Loading
[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "enum VaultStrategy", "name": "_strategy", "type": "uint8" }, { "internalType": "address", "name": "_tokenA", "type": "address" }, { "internalType": "address", "name": "_tokenB", "type": "address" }, { "internalType": "contract IChainLinkOracle", "name": "_priceOracle", "type": "address" }, { "components": [ { "internalType": "bool", "name": "isNativeAsset", "type": "bool" }, { "internalType": "uint256", "name": "targetLeverage", "type": "uint256" }, { "internalType": "uint256", "name": "tokenADebtRatio", "type": "uint256" }, { "internalType": "uint256", "name": "tokenBDebtRatio", "type": "uint256" } ], "internalType": "struct PangolinYieldFarmVault.VaultConfig", "name": "_vaultConfig", "type": "tuple" }, { "internalType": "uint256", "name": "_capacityValue", "type": "uint256" }, { "internalType": "uint256", "name": "_mgmtFeePerSecond", "type": "uint256" }, { "internalType": "uint256", "name": "_perfFee", "type": "uint256" }, { "internalType": "address", "name": "_treasury", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "vault", "type": "address" } ], "name": "Compound", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assetAmt", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "sharesAmt", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "svTokenValue", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "svTokenValueBefore", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "svTokenValueAfter", "type": "uint256" } ], "name": "Rebalance", "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": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assetAmt", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "sharesAmt", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "svTokenValue", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "SAFE_MULTIPLIER", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "capacityValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "compound", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amt", "type": "uint256" }, { "internalType": "bool", "name": "_isNative", "type": "bool" } ], "name": "deposit", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "emergencyShutDown", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shareAmt", "type": "uint256" }, { "internalType": "bool", "name": "_isNative", "type": "bool" } ], "name": "emergencyWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "keepers", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastFeeCollected", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "manager", "outputs": [ { "internalType": "contract IPangolinYieldFarmManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mgmtFeePerSecond", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingMgmtFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "perfFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "priceOracle", "outputs": [ { "internalType": "contract IChainLinkOracle", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reader", "outputs": [ { "internalType": "contract IPangolinYieldFarmReader", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "enum ManagerAction", "name": "_action", "type": "uint8" }, { "internalType": "uint256", "name": "_lpAmt", "type": "uint256" }, { "internalType": "uint256", "name": "_borrowTokenAAmt", "type": "uint256" }, { "internalType": "uint256", "name": "_borrowTokenBAmt", "type": "uint256" }, { "internalType": "uint256", "name": "_repayTokenAAmt", "type": "uint256" }, { "internalType": "uint256", "name": "_repayTokenBAmt", "type": "uint256" } ], "name": "rebalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "strategy", "outputs": [ { "internalType": "enum VaultStrategy", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "svTokenValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenA", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenB", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_capacityValue", "type": "uint256" } ], "name": "updateCapacity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_keeper", "type": "address" }, { "internalType": "bool", "name": "_approval", "type": "bool" } ], "name": "updateKeeper", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IPangolinYieldFarmManager", "name": "_manager", "type": "address" } ], "name": "updateManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_mgmtFeePerSecond", "type": "uint256" } ], "name": "updateMgmtFeePerSecond", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_perfFee", "type": "uint256" } ], "name": "updatePerfFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IPangolinYieldFarmReader", "name": "_reader", "type": "address" } ], "name": "updateReader", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bool", "name": "isNativeAsset", "type": "bool" }, { "internalType": "uint256", "name": "targetLeverage", "type": "uint256" }, { "internalType": "uint256", "name": "tokenADebtRatio", "type": "uint256" }, { "internalType": "uint256", "name": "tokenBDebtRatio", "type": "uint256" } ], "internalType": "struct PangolinYieldFarmVault.VaultConfig", "name": "_vaultConfig", "type": "tuple" } ], "name": "updateVaultConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "users", "outputs": [ { "internalType": "uint256", "name": "totalDeposit", "type": "uint256" }, { "internalType": "uint256", "name": "totalWithdrawal", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "uint256", "name": "_currentEquity", "type": "uint256" } ], "name": "valueToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vaultConfig", "outputs": [ { "internalType": "bool", "name": "isNativeAsset", "type": "bool" }, { "internalType": "uint256", "name": "targetLeverage", "type": "uint256" }, { "internalType": "uint256", "name": "tokenADebtRatio", "type": "uint256" }, { "internalType": "uint256", "name": "tokenBDebtRatio", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shareAmt", "type": "uint256" }, { "internalType": "bool", "name": "_isNative", "type": "bool" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b506040516200641438038062006414833981810160405281019062000037919062000679565b8a8a81600390816200004a919062000a06565b5080600490816200005c919062000a06565b5050506200007f620000736200024460201b60201c565b6200024c60201b60201c565b60016006819055506000600760006101000a81548160ff02191690831515021790555088600760016101000a81548160ff02191690836002811115620000ca57620000c962000aed565b5b021790555087600760026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600c60008201518160000160006101000a81548160ff02191690831515021790555060208201518160010155604082015181600201556060820151816003015590505083601481905550826010819055508160118190555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042601381905550505050505050505050505062000b1c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200037b8262000330565b810181811067ffffffffffffffff821117156200039d576200039c62000341565b5b80604052505050565b6000620003b262000312565b9050620003c0828262000370565b919050565b600067ffffffffffffffff821115620003e357620003e262000341565b5b620003ee8262000330565b9050602081019050919050565b60005b838110156200041b578082015181840152602081019050620003fe565b60008484015250505050565b60006200043e6200043884620003c5565b620003a6565b9050828152602081018484840111156200045d576200045c6200032b565b5b6200046a848285620003fb565b509392505050565b600082601f8301126200048a576200048962000326565b5b81516200049c84826020860162000427565b91505092915050565b60038110620004b357600080fd5b50565b600081519050620004c781620004a5565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004fa82620004cd565b9050919050565b6200050c81620004ed565b81146200051857600080fd5b50565b6000815190506200052c8162000501565b92915050565b60006200053f82620004ed565b9050919050565b620005518162000532565b81146200055d57600080fd5b50565b600081519050620005718162000546565b92915050565b600080fd5b60008115159050919050565b62000593816200057c565b81146200059f57600080fd5b50565b600081519050620005b38162000588565b92915050565b6000819050919050565b620005ce81620005b9565b8114620005da57600080fd5b50565b600081519050620005ee81620005c3565b92915050565b6000608082840312156200060d576200060c62000577565b5b620006196080620003a6565b905060006200062b84828501620005a2565b60008301525060206200064184828501620005dd565b60208301525060406200065784828501620005dd565b60408301525060606200066d84828501620005dd565b60608301525092915050565b60008060008060008060008060008060006101c08c8e031215620006a257620006a16200031c565b5b60008c015167ffffffffffffffff811115620006c357620006c262000321565b5b620006d18e828f0162000472565b9b505060208c015167ffffffffffffffff811115620006f557620006f462000321565b5b620007038e828f0162000472565b9a50506040620007168e828f01620004b6565b9950506060620007298e828f016200051b565b98505060806200073c8e828f016200051b565b97505060a06200074f8e828f0162000560565b96505060c0620007628e828f01620005f4565b955050610140620007768e828f01620005dd565b9450506101606200078a8e828f01620005dd565b9350506101806200079e8e828f01620005dd565b9250506101a0620007b28e828f016200051b565b9150509295989b509295989b9093969950565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200081857607f821691505b6020821081036200082e576200082d620007d0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000859565b620008a4868362000859565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008e7620008e1620008db84620005b9565b620008bc565b620005b9565b9050919050565b6000819050919050565b6200090383620008c6565b6200091b6200091282620008ee565b84845462000866565b825550505050565b600090565b6200093262000923565b6200093f818484620008f8565b505050565b5b8181101562000967576200095b60008262000928565b60018101905062000945565b5050565b601f821115620009b657620009808162000834565b6200098b8462000849565b810160208510156200099b578190505b620009b3620009aa8562000849565b83018262000944565b50505b505050565b600082821c905092915050565b6000620009db60001984600802620009bb565b1980831691505092915050565b6000620009f68383620009c8565b9150826002028217905092915050565b62000a1182620007c5565b67ffffffffffffffff81111562000a2d5762000a2c62000341565b5b62000a398254620007ff565b62000a468282856200096b565b600060209050601f83116001811462000a7e576000841562000a69578287015190505b62000a758582620009e8565b86555062000ae5565b601f19841662000a8e8662000834565b60005b8281101562000ab85784890151825560018201915060208501945060208101905062000a91565b8683101562000ad8578489015162000ad4601f891682620009c8565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6158e88062000b2c6000396000f3fe6080604052600436106102815760003560e01c80635f704f1e1161014f578063a87430ba116100c1578063d4fc42c61161007a578063d4fc42c6146109a2578063dc7e0ce8146109cd578063dd62ed3e146109f8578063e4e6a86a14610a35578063f2fde38b14610a5e578063f69e204614610a8757610288565b8063a87430ba14610881578063a8c62e76146108bf578063a9059cbb146108ea578063b91a3caa14610927578063bb5b3edc14610950578063d30578771461097957610288565b80637cc34bb4116101135780637cc34bb41461077957806388e5735e146107a75780638da5cb5b146107d257806395d89b41146107fd5780639a40832114610828578063a457c2d71461084457610288565b80635f704f1e1461069257806361d027b3146106cf57806370a08231146106fa578063715018a614610737578063750290da1461074e57610288565b80632e61b474116101f3578063481c6a75116101ac578063481c6a75146105945780634e6aafd3146105bf578063561a5d07146105ea57806358aba00f146106135780635c975abb1461063c5780635f64b55b1461066757610288565b80632e61b47414610472578063313ce5671461049b578063317ed1b7146104c657806338d07436146104f1578063395093511461051a5780633bbd64bc1461055757610288565b80631681cfe6116102455780631681cfe61461037457806318160ddd1461038b5780631a95530a146103b657806322b2ba73146103df57806323b872dd1461040a5780632630c12f1461044757610288565b8063054f96571461028d57806306fdde03146102b6578063095ea7b3146102e15780630fc63d101461031e57806315c381fb1461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613f8f565b610a9e565b005b3480156102c257600080fd5b506102cb610aed565b6040516102d8919061403b565b60405180910390f35b3480156102ed57600080fd5b50610308600480360381019061030391906140bb565b610b7f565b604051610315919061410a565b60405180910390f35b34801561032a57600080fd5b50610333610ba2565b6040516103409190614134565b60405180910390f35b34801561035557600080fd5b5061035e610bc8565b60405161036b919061415e565b60405180910390f35b34801561038057600080fd5b50610389610d39565b005b34801561039757600080fd5b506103a0610f1b565b6040516103ad919061415e565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190614179565b610f25565b005b3480156103eb57600080fd5b506103f4610f37565b604051610401919061415e565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c91906141a6565b610f3d565b60405161043e919061410a565b60405180910390f35b34801561045357600080fd5b5061045c610f6c565b6040516104699190614258565b60405180910390f35b34801561047e57600080fd5b50610499600480360381019061049491906142b1565b610f92565b005b3480156104a757600080fd5b506104b0610fde565b6040516104bd91906142fa565b60405180910390f35b3480156104d257600080fd5b506104db610fe7565b6040516104e8919061415e565b60405180910390f35b3480156104fd57600080fd5b5061051860048036038101906105139190614315565b610fed565b005b34801561052657600080fd5b50610541600480360381019061053c91906140bb565b61124b565b60405161054e919061410a565b60405180910390f35b34801561056357600080fd5b5061057e60048036038101906105799190614355565b611282565b60405161058b919061410a565b60405180910390f35b3480156105a057600080fd5b506105a96112a2565b6040516105b691906143a3565b60405180910390f35b3480156105cb57600080fd5b506105d46112c8565b6040516105e1919061415e565b60405180910390f35b3480156105f657600080fd5b50610611600480360381019061060c9190614179565b611314565b005b34801561061f57600080fd5b5061063a600480360381019061063591906143fc565b611326565b005b34801561064857600080fd5b50610651611372565b60405161065e919061410a565b60405180910390f35b34801561067357600080fd5b5061067c611389565b6040516106899190614134565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190614429565b6113af565b6040516106c6919061415e565b60405180910390f35b3480156106db57600080fd5b506106e4611400565b6040516106f19190614134565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c9190614355565b611426565b60405161072e919061415e565b60405180910390f35b34801561074357600080fd5b5061074c61146e565b005b34801561075a57600080fd5b50610763611482565b604051610770919061415e565b60405180910390f35b34801561078557600080fd5b5061078e611488565b60405161079e9493929190614469565b60405180910390f35b3480156107b357600080fd5b506107bc6114b3565b6040516107c9919061415e565b60405180910390f35b3480156107de57600080fd5b506107e76114b9565b6040516107f49190614134565b60405180910390f35b34801561080957600080fd5b506108126114e3565b60405161081f919061403b565b60405180910390f35b610842600480360381019061083d9190614315565b611575565b005b34801561085057600080fd5b5061086b600480360381019061086691906140bb565b61198d565b604051610878919061410a565b60405180910390f35b34801561088d57600080fd5b506108a860048036038101906108a39190614355565b611a04565b6040516108b69291906144ae565b60405180910390f35b3480156108cb57600080fd5b506108d4611a28565b6040516108e1919061454e565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c91906140bb565b611a3b565b60405161091e919061410a565b60405180910390f35b34801561093357600080fd5b5061094e6004803603810190610949919061458e565b611a5e565b005b34801561095c57600080fd5b5061097760048036038101906109729190614315565b611be5565b005b34801561098557600080fd5b506109a0600480360381019061099b919061461b565b611f47565b005b3480156109ae57600080fd5b506109b7611faa565b6040516109c4919061467c565b60405180910390f35b3480156109d957600080fd5b506109e2611fd0565b6040516109ef919061415e565b60405180910390f35b348015610a0457600080fd5b50610a1f6004803603810190610a1a9190614697565b611fdc565b604051610a2c919061415e565b60405180910390f35b348015610a4157600080fd5b50610a5c6004803603810190610a579190614179565b612063565b005b348015610a6a57600080fd5b50610a856004803603810190610a809190614355565b612075565b005b348015610a9357600080fd5b50610a9c6120f8565b005b610aa66121b3565b80600c60008201518160000160006101000a81548160ff02191690831515021790555060208201518160010155604082015181600201556060820151816003015590505050565b606060038054610afc90614706565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2890614706565b8015610b755780601f10610b4a57610100808354040283529160200191610b75565b820191906000526020600020905b815481529060010190602001808311610b5857829003601f168201915b5050505050905090565b600080610b8a612231565b9050610b97818585612239565b600191505092915050565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335978f2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5c919061474c565b1480610c6f57506000610c6d610f1b565b145b15610c7d5760009050610d36565b610c85610f1b565b670de0b6b3a7640000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335978f2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1f919061474c565b610d2991906147a8565b610d339190614819565b90505b90565b610d416121b3565b610d49612402565b610d5161244c565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d7279816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de4919061474c565b9050600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d9661986040518163ffffffff1660e01b81526004016040805180830381865afa158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e79919061484a565b91509150600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d3b3db960018560008087876040518763ffffffff1660e01b8152600401610ee49695949392919061490d565b600060405180830381600087803b158015610efe57600080fd5b505af1158015610f12573d6000803e3d6000fd5b50505050505050565b6000600254905090565b610f2d6121b3565b8060108190555050565b60115481565b600080610f48612231565b9050610f558582856124af565b610f6085858561253b565b60019150509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f9a6121b3565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b60145481565b600260065403611032576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611029906149ba565b60405180910390fd5b6002600681905550611042612402565b61104a6127ba565b611053826127f6565b6000806002811115611068576110676144d7565b5b600760019054906101000a900460ff16600281111561108a576110896144d7565b5b14806110c857506002808111156110a4576110a36144d7565b5b600760019054906101000a900460ff1660028111156110c6576110c56144d7565b5b145b156110f757600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611159565b6001600281111561110b5761110a6144d7565b5b600760019054906101000a900460ff16600281111561112d5761112c6144d7565b5b0361115857600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111949190614134565b602060405180830381865afa1580156111b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d5919061474c565b90506111e2828285612b31565b3373ffffffffffffffffffffffffffffffffffffffff167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f838387611225610bc8565b60405161123594939291906149da565b60405180910390a2505060016006819055505050565b600080611256612231565b90506112778185856112688589611fdc565b6112729190614a1f565b612239565b600191505092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080601354426112d99190614a53565b9050670de0b6b3a7640000816010546112f0610f1b565b6112fa91906147a8565b61130491906147a8565b61130e9190614819565b91505090565b61131c6121b3565b8060118190555050565b61132e6121b3565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760009054906101000a900460ff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806113ba6112c8565b6113c2610f1b565b6113cc9190614a1f565b9050600081036113df57839150506113fa565b8281856113ec91906147a8565b6113f69190614819565b9150505b92915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114766121b3565b6114806000612d30565b565b60135481565b600c8060000160009054906101000a900460ff16908060010154908060020154908060030154905084565b60105481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114f290614706565b80601f016020809104026020016040519081016040528092919081815260200182805461151e90614706565b801561156b5780601f106115405761010080835404028352916020019161156b565b820191906000526020600020905b81548152906001019060200180831161154e57829003601f168201915b5050505050905090565b6002600654036115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906149ba565b60405180910390fd5b60026006819055506115ca612402565b6115d26127ba565b600081156116f957600c60000160009054906101000a900460ff1661162c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162390614ad3565b60405180910390fd5b34831461166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590614b3f565b60405180910390fd5b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156116db57600080fd5b505af11580156116ef573d6000803e3d6000fd5b505050505061182c565b6000600281111561170d5761170c6144d7565b5b600760019054906101000a900460ff16600281111561172f5761172e6144d7565b5b148061176d5750600280811115611749576117486144d7565b5b600760019054906101000a900460ff16600281111561176b5761176a6144d7565b5b145b1561179c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506117fe565b600160028111156117b0576117af6144d7565b5b600760019054906101000a900460ff1660028111156117d2576117d16144d7565b5b036117fd57600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b5b61182b3330858473ffffffffffffffffffffffffffffffffffffffff16612df6909392919063ffffffff16565b5b611879600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848373ffffffffffffffffffffffffffffffffffffffff16612e7f9092919063ffffffff16565b600061192284600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f182178385886040518363ffffffff1660e01b81526004016118dc929190614b5f565b602060405180830381865afa1580156118f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191d919061474c565b612f05565b90503373ffffffffffffffffffffffffffffffffffffffff167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f6838684611967610bc8565b60405161197794939291906149da565b60405180910390a2505060016006819055505050565b600080611998612231565b905060006119a68286611fdc565b9050838110156119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e290614bfa565b60405180910390fd5b6119f88286868403612239565b60019250505092915050565b60156020528060005260406000206000915090508060000154908060010154905082565b600760019054906101000a900460ff1681565b600080611a46612231565b9050611a5381858561253b565b600191505092915050565b60011515601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae890614c66565b60405180910390fd5b611af96127ba565b6000611b03610bc8565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d3b3db98888888888886040518763ffffffff1660e01b8152600401611b6a96959493929190614c86565b600060405180830381600087803b158015611b8457600080fd5b505af1158015611b98573d6000803e3d6000fd5b505050507f0b33d39bbef101ecc4f5ef04e6d3a125c9fb745a418dac380e2a9460f8200dc881611bc6610bc8565b604051611bd49291906144ae565b60405180910390a150505050505050565b600260065403611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c21906149ba565b60405180910390fd5b6002600681905550611c3a613804565b60008211611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7490614d33565b60405180910390fd5b611c8633611426565b821115611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90614d9f565b60405180910390fd5b600a670de0b6b3a76400006001611cdf91906147a8565b611ce99190614819565b82611cf333611426565b611cfd9190614a53565b1015611d0f57611d0c33611426565b91505b6000611d19610f1b565b670de0b6b3a764000084611d2d91906147a8565b611d379190614819565b9050611d43338461384d565b6000806002811115611d5857611d576144d7565b5b600760019054906101000a900460ff166002811115611d7a57611d796144d7565b5b1480611db85750600280811115611d9457611d936144d7565b5b600760019054906101000a900460ff166002811115611db657611db56144d7565b5b145b15611de757600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611e49565b60016002811115611dfb57611dfa6144d7565b5b600760019054906101000a900460ff166002811115611e1d57611e1c6144d7565b5b03611e4857600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e849190614134565b602060405180830381865afa158015611ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec5919061474c565b83611ed091906147a8565b9050611edd828286612b31565b3373ffffffffffffffffffffffffffffffffffffffff167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f838388611f20610bc8565b604051611f3094939291906149da565b60405180910390a250505060016006819055505050565b611f4f6121b3565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b670de0b6b3a764000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61206b6121b3565b8060148190555050565b61207d6121b3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e390614e31565b60405180910390fd5b6120f581612d30565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f69e20466040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561216257600080fd5b505af1158015612176573d6000803e3d6000fd5b505050507fda323bd96658b18a6ce813e824305dc61760462bad6aaf52c65aebb8c8c9faa1306040516121a99190614134565b60405180910390a1565b6121bb612231565b73ffffffffffffffffffffffffffffffffffffffff166121d96114b9565b73ffffffffffffffffffffffffffffffffffffffff161461222f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222690614e9d565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f90614f2f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230e90614fc1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123f5919061415e565b60405180910390a3505050565b61240a611372565b1561244a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124419061502d565b60405180910390fd5b565b612454612402565b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612498612231565b6040516124a59190614134565b60405180910390a1565b60006124bb8484611fdc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125355781811015612527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251e90615099565b60405180910390fd5b6125348484848403612239565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a19061512b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612610906151bd565b60405180910390fd5b612624838383613a23565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a19061524f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461273d9190614a1f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127a1919061415e565b60405180910390a36127b4848484613a28565b50505050565b6127ed601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166127e86112c8565b613a2d565b42601381905550565b60008111612839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283090614d33565b60405180910390fd5b61284233611426565b811115612884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287b90614d9f565b60405180910390fd5b600a670de0b6b3a7640000600161289b91906147a8565b6128a59190614819565b816128af33611426565b6128b99190614a53565b10156128cb576128c833611426565b90505b60006128d5610f1b565b670de0b6b3a7640000836128e991906147a8565b6128f39190614819565b90506128ff338361384d565b600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d9661986040518163ffffffff1660e01b81526004016040805180830381865afa15801561296e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612992919061484a565b915091506000670de0b6b3a7640000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d7279816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a32919061474c565b85612a3d91906147a8565b612a479190614819565b90506000670de0b6b3a76400008486612a6091906147a8565b612a6a9190614819565b90506000670de0b6b3a76400008487612a8391906147a8565b612a8d9190614819565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d3b3db960018560008087876040518763ffffffff1660e01b8152600401612af69695949392919061490d565b600060405180830381600087803b158015612b1057600080fd5b505af1158015612b24573d6000803e3d6000fd5b5050505050505050505050565b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254612b839190614a1f565b925050819055508015612cff57600c60000160009054906101000a900460ff16612be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd990614ad3565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b8152600401612c1b919061415e565b600060405180830381600087803b158015612c3557600080fd5b505af1158015612c49573d6000803e3d6000fd5b5050505060003373ffffffffffffffffffffffffffffffffffffffff1683604051612c73906152a0565b60006040518083038185875af1925050503d8060008114612cb0576040519150601f19603f3d011682016040523d82523d6000602084013e612cb5565b606091505b5050905080612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf090615301565b60405180910390fd5b50612d2b565b612d2a33838573ffffffffffffffffffffffffffffffffffffffff16612e7f9092919063ffffffff16565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612e79846323b872dd60e01b858585604051602401612e1793929190615321565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613b8c565b50505050565b612f008363a9059cbb60e01b8484604051602401612e9e929190614b5f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613b8c565b505050565b6000808311612f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f40906153a4565b60405180910390fd5b60145482600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335978f2f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fde919061474c565b612fe89190614a1f565b1115613029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302090615410565b60405180910390fd5b82601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825461307b9190614a1f565b925050819055506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335978f2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613115919061474c565b90506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375b5bcbf600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016131969190614134565b602060405180830381865afa1580156131b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d7919061474c565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663283583c6600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016132549190614134565b602060405180830381865afa158015613271573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613295919061474c565b600c60020154670de0b6b3a76400008060016132b191906147a8565b600c600101546132c19190614a53565b6132cb9190614819565b876132d691906147a8565b6132e091906147a8565b6132ea9190614819565b6132f49190614819565b90506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375b5bcbf600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016133759190614134565b602060405180830381865afa158015613392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b6919061474c565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663283583c6600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016134339190614134565b602060405180830381865afa158015613450573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613474919061474c565b600c60030154670de0b6b3a764000080600161349091906147a8565b600c600101546134a09190614a53565b6134aa9190614819565b886134b591906147a8565b6134bf91906147a8565b6134c99190614819565b6134d39190614819565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d3b3db960008085856000806040518763ffffffff1660e01b815260040161353c96959493929190615430565b600060405180830381600087803b15801561355657600080fd5b505af115801561356a573d6000803e3d6000fd5b50505050600083600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166335978f2f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613602919061474c565b61360c9190614a53565b9050600061361a82866113af565b90506136263382613a2d565b61370e33600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016136859190614134565b602060405180830381865afa1580156136a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c6919061474c565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e7f9092919063ffffffff16565b6137f633600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161376d9190614134565b602060405180830381865afa15801561378a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137ae919061474c565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612e7f9092919063ffffffff16565b809550505050505092915050565b61380c611372565b61384b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613842906154dd565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036138bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b39061556f565b60405180910390fd5b6138c882600083613a23565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561394e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394590615601565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546139a59190614a53565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a0a919061415e565b60405180910390a3613a1e83600084613a28565b505050565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a939061566d565b60405180910390fd5b613aa860008383613a23565b8060026000828254613aba9190614a1f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b0f9190614a1f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613b74919061415e565b60405180910390a3613b8860008383613a28565b5050565b6000613bee826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613c539092919063ffffffff16565b9050600081511115613c4e5780806020019051810190613c0e91906156a2565b613c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4490615741565b60405180910390fd5b5b505050565b6060613c628484600085613c6b565b90509392505050565b606082471015613cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ca7906157d3565b60405180910390fd5b613cb985613d7f565b613cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cef9061583f565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d21919061589b565b60006040518083038185875af1925050503d8060008114613d5e576040519150601f19603f3d011682016040523d82523d6000602084013e613d63565b606091505b5091509150613d73828286613da2565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315613db257829050613e02565b600083511115613dc55782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613df9919061403b565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613e6682613e1d565b810181811067ffffffffffffffff82111715613e8557613e84613e2e565b5b80604052505050565b6000613e98613e09565b9050613ea48282613e5d565b919050565b60008115159050919050565b613ebe81613ea9565b8114613ec957600080fd5b50565b600081359050613edb81613eb5565b92915050565b6000819050919050565b613ef481613ee1565b8114613eff57600080fd5b50565b600081359050613f1181613eeb565b92915050565b600060808284031215613f2d57613f2c613e18565b5b613f376080613e8e565b90506000613f4784828501613ecc565b6000830152506020613f5b84828501613f02565b6020830152506040613f6f84828501613f02565b6040830152506060613f8384828501613f02565b60608301525092915050565b600060808284031215613fa557613fa4613e13565b5b6000613fb384828501613f17565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ff6578082015181840152602081019050613fdb565b60008484015250505050565b600061400d82613fbc565b6140178185613fc7565b9350614027818560208601613fd8565b61403081613e1d565b840191505092915050565b600060208201905081810360008301526140558184614002565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140888261405d565b9050919050565b6140988161407d565b81146140a357600080fd5b50565b6000813590506140b58161408f565b92915050565b600080604083850312156140d2576140d1613e13565b5b60006140e0858286016140a6565b92505060206140f185828601613f02565b9150509250929050565b61410481613ea9565b82525050565b600060208201905061411f60008301846140fb565b92915050565b61412e8161407d565b82525050565b60006020820190506141496000830184614125565b92915050565b61415881613ee1565b82525050565b6000602082019050614173600083018461414f565b92915050565b60006020828403121561418f5761418e613e13565b5b600061419d84828501613f02565b91505092915050565b6000806000606084860312156141bf576141be613e13565b5b60006141cd868287016140a6565b93505060206141de868287016140a6565b92505060406141ef86828701613f02565b9150509250925092565b6000819050919050565b600061421e6142196142148461405d565b6141f9565b61405d565b9050919050565b600061423082614203565b9050919050565b600061424282614225565b9050919050565b61425281614237565b82525050565b600060208201905061426d6000830184614249565b92915050565b600061427e8261407d565b9050919050565b61428e81614273565b811461429957600080fd5b50565b6000813590506142ab81614285565b92915050565b6000602082840312156142c7576142c6613e13565b5b60006142d58482850161429c565b91505092915050565b600060ff82169050919050565b6142f4816142de565b82525050565b600060208201905061430f60008301846142eb565b92915050565b6000806040838503121561432c5761432b613e13565b5b600061433a85828601613f02565b925050602061434b85828601613ecc565b9150509250929050565b60006020828403121561436b5761436a613e13565b5b6000614379848285016140a6565b91505092915050565b600061438d82614225565b9050919050565b61439d81614382565b82525050565b60006020820190506143b86000830184614394565b92915050565b60006143c98261407d565b9050919050565b6143d9816143be565b81146143e457600080fd5b50565b6000813590506143f6816143d0565b92915050565b60006020828403121561441257614411613e13565b5b6000614420848285016143e7565b91505092915050565b600080604083850312156144405761443f613e13565b5b600061444e85828601613f02565b925050602061445f85828601613f02565b9150509250929050565b600060808201905061447e60008301876140fb565b61448b602083018661414f565b614498604083018561414f565b6144a5606083018461414f565b95945050505050565b60006040820190506144c3600083018561414f565b6144d0602083018461414f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110614517576145166144d7565b5b50565b600081905061452882614506565b919050565b60006145388261451a565b9050919050565b6145488161452d565b82525050565b6000602082019050614563600083018461453f565b92915050565b6004811061457657600080fd5b50565b60008135905061458881614569565b92915050565b60008060008060008060c087890312156145ab576145aa613e13565b5b60006145b989828a01614579565b96505060206145ca89828a01613f02565b95505060406145db89828a01613f02565b94505060606145ec89828a01613f02565b93505060806145fd89828a01613f02565b92505060a061460e89828a01613f02565b9150509295509295509295565b6000806040838503121561463257614631613e13565b5b6000614640858286016140a6565b925050602061465185828601613ecc565b9150509250929050565b600061466682614225565b9050919050565b6146768161465b565b82525050565b6000602082019050614691600083018461466d565b92915050565b600080604083850312156146ae576146ad613e13565b5b60006146bc858286016140a6565b92505060206146cd858286016140a6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061471e57607f821691505b602082108103614731576147306146d7565b5b50919050565b60008151905061474681613eeb565b92915050565b60006020828403121561476257614761613e13565b5b600061477084828501614737565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147b382613ee1565b91506147be83613ee1565b92508282026147cc81613ee1565b915082820484148315176147e3576147e2614779565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061482482613ee1565b915061482f83613ee1565b92508261483f5761483e6147ea565b5b828204905092915050565b6000806040838503121561486157614860613e13565b5b600061486f85828601614737565b925050602061488085828601614737565b9150509250929050565b6004811061489b5761489a6144d7565b5b50565b60008190506148ac8261488a565b919050565b60006148bc8261489e565b9050919050565b6148cc816148b1565b82525050565b6000819050919050565b60006148f76148f26148ed846148d2565b6141f9565b613ee1565b9050919050565b614907816148dc565b82525050565b600060c08201905061492260008301896148c3565b61492f602083018861414f565b61493c60408301876148fe565b61494960608301866148fe565b614956608083018561414f565b61496360a083018461414f565b979650505050505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006149a4601f83613fc7565b91506149af8261496e565b602082019050919050565b600060208201905081810360008301526149d381614997565b9050919050565b60006080820190506149ef6000830187614125565b6149fc602083018661414f565b614a09604083018561414f565b614a16606083018461414f565b95945050505050565b6000614a2a82613ee1565b9150614a3583613ee1565b9250828201905080821115614a4d57614a4c614779565b5b92915050565b6000614a5e82613ee1565b9150614a6983613ee1565b9250828203905081811115614a8157614a80614779565b5b92915050565b7f5661756c74206173736574206e6f74206e617469766520746f6b656e00000000600082015250565b6000614abd601c83613fc7565b9150614ac882614a87565b602082019050919050565b60006020820190508181036000830152614aec81614ab0565b9050919050565b7f416d7420213d206d73672e76616c756500000000000000000000000000000000600082015250565b6000614b29601083613fc7565b9150614b3482614af3565b602082019050919050565b60006020820190508181036000830152614b5881614b1c565b9050919050565b6000604082019050614b746000830185614125565b614b81602083018461414f565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614be4602583613fc7565b9150614bef82614b88565b604082019050919050565b60006020820190508181036000830152614c1381614bd7565b9050919050565b7f4b6565706572206e6f7420617070726f76656400000000000000000000000000600082015250565b6000614c50601383613fc7565b9150614c5b82614c1a565b602082019050919050565b60006020820190508181036000830152614c7f81614c43565b9050919050565b600060c082019050614c9b60008301896148c3565b614ca8602083018861414f565b614cb5604083018761414f565b614cc2606083018661414f565b614ccf608083018561414f565b614cdc60a083018461414f565b979650505050505050565b7f5175616e74697479206d757374206265203e2030000000000000000000000000600082015250565b6000614d1d601483613fc7565b9150614d2882614ce7565b602082019050919050565b60006020820190508181036000830152614d4c81614d10565b9050919050565b7f576974686472617720616d7420657863656564732062616c616e636500000000600082015250565b6000614d89601c83613fc7565b9150614d9482614d53565b602082019050919050565b60006020820190508181036000830152614db881614d7c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e1b602683613fc7565b9150614e2682614dbf565b604082019050919050565b60006020820190508181036000830152614e4a81614e0e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614e87602083613fc7565b9150614e9282614e51565b602082019050919050565b60006020820190508181036000830152614eb681614e7a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f19602483613fc7565b9150614f2482614ebd565b604082019050919050565b60006020820190508181036000830152614f4881614f0c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fab602283613fc7565b9150614fb682614f4f565b604082019050919050565b60006020820190508181036000830152614fda81614f9e565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000615017601083613fc7565b915061502282614fe1565b602082019050919050565b600060208201905081810360008301526150468161500a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000615083601d83613fc7565b915061508e8261504d565b602082019050919050565b600060208201905081810360008301526150b281615076565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615115602583613fc7565b9150615120826150b9565b604082019050919050565b6000602082019050818103600083015261514481615108565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151a7602383613fc7565b91506151b28261514b565b604082019050919050565b600060208201905081810360008301526151d68161519a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615239602683613fc7565b9150615244826151dd565b604082019050919050565b600060208201905081810360008301526152688161522c565b9050919050565b600081905092915050565b50565b600061528a60008361526f565b91506152958261527a565b600082019050919050565b60006152ab8261527d565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006152eb601083613fc7565b91506152f6826152b5565b602082019050919050565b6000602082019050818103600083015261531a816152de565b9050919050565b60006060820190506153366000830186614125565b6153436020830185614125565b615350604083018461414f565b949350505050565b7f416d74206d757374206265203e20300000000000000000000000000000000000600082015250565b600061538e600f83613fc7565b915061539982615358565b602082019050919050565b600060208201905081810360008301526153bd81615381565b9050919050565b7f4578636565646564206361706163697479000000000000000000000000000000600082015250565b60006153fa601183613fc7565b9150615405826153c4565b602082019050919050565b60006020820190508181036000830152615429816153ed565b9050919050565b600060c08201905061544560008301896148c3565b61545260208301886148fe565b61545f604083018761414f565b61546c606083018661414f565b61547960808301856148fe565b61548660a08301846148fe565b979650505050505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006154c7601483613fc7565b91506154d282615491565b602082019050919050565b600060208201905081810360008301526154f6816154ba565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615559602183613fc7565b9150615564826154fd565b604082019050919050565b600060208201905081810360008301526155888161554c565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006155eb602283613fc7565b91506155f68261558f565b604082019050919050565b6000602082019050818103600083015261561a816155de565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000615657601f83613fc7565b915061566282615621565b602082019050919050565b600060208201905081810360008301526156868161564a565b9050919050565b60008151905061569c81613eb5565b92915050565b6000602082840312156156b8576156b7613e13565b5b60006156c68482850161568d565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b600061572b602a83613fc7565b9150615736826156cf565b604082019050919050565b6000602082019050818103600083015261575a8161571e565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006157bd602683613fc7565b91506157c882615761565b604082019050919050565b600060208201905081810360008301526157ec816157b0565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000615829601d83613fc7565b9150615834826157f3565b602082019050919050565b600060208201905081810360008301526158588161581c565b9050919050565b600081519050919050565b60006158758261585f565b61587f818561526f565b935061588f818560208601613fd8565b80840191505092915050565b60006158a7828461586a565b91508190509291505056fea2646970667358221220cdfcff5fcde61ecb55ddb70ef12bafd14af548db1ed6e817b7bb4e71f92bb3b064736f6c6343000811003300000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e000000000000000000000000577a46ab4f106eae3dff7521c80c01169f1d8704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029a2241af62c00000000000000000000000000000000000000000000000000000a688906bd8b000000000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000010f0cf064dd592000000000000000000000000000000000000000000000000000000000000025cd0f8000000000000000000000000000000000000000000000000002c68af0bb140000000000000000000000000000069c5d006378e4a2cf14c4491ef443debb0094bf000000000000000000000000000000000000000000000000000000000000001d3358204e65757472616c20415641582d555344432050616e676f6c696e000000000000000000000000000000000000000000000000000000000000000000000f334e2d41564158555344432d504e470000000000000000000000000000000000