[ { "inputs": [], "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": "uint8", "name": "protocolId", "type": "uint8" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assetsGet", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "flashloanSelector", "type": "uint256" } ], "name": "DeleverageWithdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "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": 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": false, "internalType": "uint256", "name": "oldDeleverageExitFeeRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newDeleverageExitFeeRate", "type": "uint256" } ], "name": "UpdateDeleverageExitFeeRate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldExitFeeRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newExitFeeRate", "type": "uint256" } ], "name": "UpdateExitFeeRate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldFeeReceiver", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newFeeReceiver", "type": "address" } ], "name": "UpdateFeeReceiver", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldManagementFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newManagementFee", "type": "uint256" } ], "name": "UpdateManagementFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldCapacityLimit", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newCapacityLimit", "type": "uint256" } ], "name": "UpdateMarketCapacity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldStrategy", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newStrategy", "type": "address" } ], "name": "UpdateStrategy", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "ETH_ADDR", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STETH_ADDR", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "WETH_ADDR", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "WSTETH_ADDR", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "balance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentManagementFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": [], "name": "deleverageExitFeeRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_protocolId", "type": "uint8" }, { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_assets", "type": "uint256" }, { "internalType": "bytes", "name": "_swapData", "type": "bytes" }, { "internalType": "uint256", "name": "_swapGetMin", "type": "uint256" }, { "internalType": "uint256", "name": "_flashloanSelector", "type": "uint256" }, { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "deleverageWithdraw", "outputs": [ { "internalType": "uint256", "name": "shares_", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares_", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "exitFeeRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeReceiver", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_stETHAmount", "type": "uint256" }, { "internalType": "bool", "name": "_isETH", "type": "bool" }, { "internalType": "uint8", "name": "_protocolId", "type": "uint8" } ], "name": "getDeleverageWithdrawAmount", "outputs": [ { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_stETHAmount", "type": "uint256" } ], "name": "getDeleverageWithdrawFee", "outputs": [ { "internalType": "uint256", "name": "withdrawFee_", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVersion", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_stETHAmount", "type": "uint256" } ], "name": "getWithdrawFee", "outputs": [ { "internalType": "uint256", "name": "withdrawFee_", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "implementationAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": "_strategy", "type": "address" }, { "internalType": "address", "name": "_feeReceiver", "type": "address" }, { "internalType": "uint256", "name": "_marketCapacity", "type": "uint256" }, { "internalType": "uint256", "name": "_managementFeePercentage", "type": "uint256" }, { "internalType": "uint256", "name": "_exitFeeRate", "type": "uint256" }, { "internalType": "uint256", "name": "_deleverageExitFeeRate", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "managementFeeAcc", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "managementFeeClaim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "managementFeePercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "managementFeePercentagePerSec", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "managementFeeSettle", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "marketCapacity", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "assets_", "type": "uint256" } ], "stateMutability": "nonpayable", "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": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingManagementFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "assetsAfterFee_", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "resetManagementFeeTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "strategy", "outputs": [ { "internalType": "contract IStrategy", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "sweep", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_deleverageExitFeeRate", "type": "uint256" } ], "name": "updateDeleverageExitFeeRate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_exitFeeRate", "type": "uint256" } ], "name": "updateExitFeeRate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_feeReceiver", "type": "address" } ], "name": "updateFeeReceiver", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newManagementFeePercentage", "type": "uint256" } ], "name": "updateManagementFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newCapacityLimit", "type": "uint256" } ], "name": "updateMarketCapacity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newStrategy", "type": "address" } ], "name": "updateStrategy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "shares_", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60a060405234801561001057600080fd5b50306080526080516148d561003760003960008181610a330152611c1d01526148d56000f3fe6080604052600436106103fd5760003560e01c8063818d81491161020d578063b6106f3f11610128578063d03bd1ea116100bb578063e107e0271161008a578063f2fde38b1161006f578063f2fde38b14610b9a578063f7b205fe14610bba578063ff29375c14610bda57600080fd5b8063e107e02714610b72578063ef8b30f714610a9557600080fd5b8063d03bd1ea14610ad5578063d905777e14610aec578063daccaf6314610b0c578063dd62ed3e14610b2c57600080fd5b8063c63d75b6116100f7578063c63d75b6146106e7578063c69bebe414610a75578063c6e6f59214610a95578063ce96cb7714610ab557600080fd5b8063b6106f3f146109f5578063b69ef8a814610a0c578063b97a231914610a21578063ba08765214610a5557600080fd5b8063a3714c2d116101a0578063a9059cbb1161016f578063a9059cbb14610974578063b3d7f6b914610994578063b3f00674146109b4578063b460af94146109d557600080fd5b8063a3714c2d146108fc578063a457c2d714610913578063a4c611ab14610933578063a8c62e761461095357600080fd5b80638762c623116101dc5780638762c623146108945780638da5cb5b146108a957806394bf804d146108c757806395d89b41146108e757600080fd5b8063818d81491461082257806382dfc5f7146108375780638456cb591461085f57806386489ba91461087457600080fd5b806329c23e4a116103185780634ddfc01e116102ab57806370a082311161027a578063734ae6381161025f578063734ae638146107c35780637753f47b146107da5780637f6c81b71461080257600080fd5b806370a0823114610778578063715018a6146107ae57600080fd5b80634ddfc01e146107095780635c975abb1461072057806365ae14b5146107385780636e553f651461075857600080fd5b806339509351116102e757806339509351146106b25780633f4ba83a146106d2578063402d267d146106e75780634cdad5061461049557600080fd5b806329c23e4a14610638578063304e34fc14610658578063313ce5671461066d57806338d52e0f1461069457600080fd5b80630d8e6e2c1161039057806323b872dd1161035f57806323b872dd146105a357806325bd4142146105c357806327dd5153146105e35780632973e0ee146105f857600080fd5b80630d8e6e2c1461051a57806318160ddd1461056057806319d8ac61146105755780631dc518871461058c57600080fd5b806307a2d13a116103cc57806307a2d13a14610495578063095ea7b3146104b55780630a28a477146104e55780630cfc44d61461050557600080fd5b806301681a621461040957806301e1d1141461042b578063030d624a1461045357806306fdde031461047357600080fd5b3661040457005b600080fd5b34801561041557600080fd5b506104296104243660046140a5565b610bfa565b005b34801561043757600080fd5b50610440610cd5565b6040519081526020015b60405180910390f35b34801561045f57600080fd5b5061042961046e3660046140c0565b610d7a565b34801561047f57600080fd5b50610488610e67565b60405161044a9190614147565b3480156104a157600080fd5b506104406104b03660046140c0565b610ef9565b3480156104c157600080fd5b506104d56104d036600461415a565b610f0c565b604051901515815260200161044a565b3480156104f157600080fd5b506104406105003660046140c0565b610f24565b34801561051157600080fd5b50610429610f31565b34801561052657600080fd5b5060408051808201909152600681527f76302e302e3100000000000000000000000000000000000000000000000000006020820152610488565b34801561056c57600080fd5b5060cb54610440565b34801561058157600080fd5b506104406101345481565b34801561059857600080fd5b506104406101335481565b3480156105af57600080fd5b506104d56105be366004614184565b610fa8565b3480156105cf57600080fd5b506104296105de3660046140c0565b610fce565b3480156105ef57600080fd5b50610440611077565b34801561060457600080fd5b5061062073ae7ab96520de3a18e5e111b5eaab095312d7fe8481565b6040516001600160a01b03909116815260200161044a565b34801561064457600080fd5b506104406106533660046140c0565b61108f565b34801561066457600080fd5b506104296110ad565b34801561067957600080fd5b50610682611208565b60405160ff909116815260200161044a565b3480156106a057600080fd5b5060fb546001600160a01b0316610620565b3480156106be57600080fd5b506104d56106cd36600461415a565b611233565b3480156106de57600080fd5b50610429611272565b3480156106f357600080fd5b506104406107023660046140a5565b5060001990565b34801561071557600080fd5b506104406101355481565b34801561072c57600080fd5b5060655460ff166104d5565b34801561074457600080fd5b50610440610753366004614200565b611284565b34801561076457600080fd5b5061044061077336600461432f565b6118fc565b34801561078457600080fd5b506104406107933660046140a5565b6001600160a01b0316600090815260c9602052604090205490565b3480156107ba57600080fd5b506104296119bc565b3480156107cf57600080fd5b5061044061012f5481565b3480156107e657600080fd5b5061062073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b34801561080e57600080fd5b5061042961081d3660046140c0565b6119ce565b34801561082e57600080fd5b50610440611a6b565b34801561084357600080fd5b5061062073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561086b57600080fd5b50610429611af9565b34801561088057600080fd5b5061042961088f36600461435b565b611b09565b3480156108a057600080fd5b506104296120ba565b3480156108b557600080fd5b506033546001600160a01b0316610620565b3480156108d357600080fd5b506104406108e236600461432f565b612170565b3480156108f357600080fd5b5061048861218c565b34801561090857600080fd5b506104406101305481565b34801561091f57600080fd5b506104d561092e36600461415a565b61219b565b34801561093f57600080fd5b5061042961094e3660046140c0565b612250565b34801561095f57600080fd5b5061012d54610620906001600160a01b031681565b34801561098057600080fd5b506104d561098f36600461415a565b61231f565b3480156109a057600080fd5b506104406109af3660046140c0565b61232d565b3480156109c057600080fd5b5061012e54610620906001600160a01b031681565b3480156109e157600080fd5b506104406109f03660046143b0565b61233a565b348015610a0157600080fd5b506104406101325481565b348015610a1857600080fd5b50610440612487565b348015610a2d57600080fd5b506106207f000000000000000000000000000000000000000000000000000000000000000081565b348015610a6157600080fd5b50610440610a703660046143b0565b61250f565b348015610a8157600080fd5b50610429610a903660046140a5565b612650565b348015610aa157600080fd5b50610440610ab03660046140c0565b6126e3565b348015610ac157600080fd5b50610440610ad03660046140a5565b6126f0565b348015610ae157600080fd5b506104406101315481565b348015610af857600080fd5b50610440610b073660046140a5565b612714565b348015610b1857600080fd5b50610429610b273660046140a5565b612732565b348015610b3857600080fd5b50610440610b473660046143ec565b6001600160a01b03918216600090815260ca6020908152604080832093909416825291909152205490565b348015610b7e57600080fd5b50610620737f39c581f595b53c5cb19bd0b3f8da6c935e2ca081565b348015610ba657600080fd5b50610429610bb53660046140a5565b612813565b348015610bc657600080fd5b50610440610bd5366004614424565b6128a0565b348015610be657600080fd5b50610440610bf53660046140c0565b612964565b610c02612978565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c869190614459565b9050610cae610c9d6033546001600160a01b031690565b6001600160a01b03841690836129d2565b478015610cd057610cd0610cca6033546001600160a01b031690565b82612a99565b505050565b6000670de0b6b3a7640000610ce960cb5490565b61012d60009054906101000a90046001600160a01b03166001600160a01b0316639e65741e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d619190614459565b610d6b91906144a1565b610d7591906144e7565b905090565b610d82612978565b60c8811115610dfe5760405162461bcd60e51b815260206004820152602160248201527f4d616e6167656d656e7420666565206578636565647320746865206c696d697460448201527f210000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6101305460408051918252602082018390527f29b9d7a7d8a7a3ac22c295e4517723bc4e386eea60173e59e6da1dbd460cb409910160405180910390a1644979cb9e00610e5382670de0b6b3a76400006144a1565b610e5d91906144e7565b6101315561013055565b606060cc8054610e7690614522565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea290614522565b8015610eef5780601f10610ec457610100808354040283529160200191610eef565b820191906000526020600020905b815481529060010190602001808311610ed257829003601f168201915b5050505050905090565b6000610f06826000612bb2565b92915050565b600033610f1a818585612bec565b5060019392505050565b6000610f06826001612d44565b6033546001600160a01b0316331480610f55575061012e546001600160a01b031633145b610fa15760405162461bcd60e51b815260206004820152600b60248201527f21417574686f72697a65640000000000000000000000000000000000000000006044820152606401610df5565b4261013455565b600033610fb6858285612d74565b610fc1858585612e06565b60019150505b9392505050565b610fd6612978565b60018110158015610fe8575060788111155b6110345760405162461bcd60e51b815260206004820152601b60248201527f4578697420666565206578636565647320746865206c696d69742100000000006044820152606401610df5565b6101325460408051918252602082018390527f394967f6fe403cda0905b23e81b928c5ca79107000b1404c6b3185442f05213c910160405180910390a161013255565b6000611081611a6b565b61013554610d759190614575565b600061271061013254836110a391906144a1565b610f0691906144e7565b6033546001600160a01b03163314806110d1575061012e546001600160a01b031633145b61111d5760405162461bcd60e51b815260206004820152600b60248201527f21417574686f72697a65640000000000000000000000000000000000000000006044820152606401610df5565b6111256120ba565b600061113361013554610ef9565b61012d546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390529192506000916001600160a01b0390911690632e1a7d4d906024016020604051808303816000875af115801561119e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c29190614459565b90506111d13061013554612ffa565b60006101355561012e546112049073ae7ab96520de3a18e5e111b5eaab095312d7fe84906001600160a01b0316836129d2565b5050565b60008060fb54610d75919074010000000000000000000000000000000000000000900460ff16614588565b33600081815260ca602090815260408083206001600160a01b0387168452909152812054909190610f1a908290869061126d908790614575565b612bec565b61127a612978565b611282613165565b565b600061128e6131d5565b611296613228565b61012d54604080517fcc4a015800000000000000000000000000000000000000000000000000000000815281516000936001600160a01b03169263cc4a015892600480820193918290030181865afa1580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a91906145a1565b50905060001988036113365761132f846126f0565b975061138e565b61133f846126f0565b88111561138e5760405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606401610df5565b61139788610f24565b915060006113a489612964565b6113ae908a6145c5565b9050336001600160a01b038616146113cb576113cb853385612d74565b60006001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148061141457506001600160a01b038b1673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2145b61141f576000611422565b60015b9050600061012d60009054906101000a90046001600160a01b03166001600160a01b03166368454b7a8e858d8d878e6040518763ffffffff1660e01b8152600401611472969594939291906145d8565b6020604051808303816000875af1158015611491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b59190614459565b9050828111156115075760405162461bcd60e51b815260206004820152601560248201527f556e6578706563746564206f7065726174696f6e2100000000000000000000006044820152606401610df5565b6115118786612ffa565b7fffffffffffffffffffffffff5185469adf21c5e71a1eee4a1554f6aced28017c6001600160a01b038d16016115655761156073ae7ab96520de3a18e5e111b5eaab095312d7fe8487836129d2565b61179d565b7fffffffffffffffffffffffff80c63a7e0a6a4ac3a34e642f4c0725936ca1d3606001600160a01b038d160161164e576040517fea598cb000000000000000000000000000000000000000000000000000000000815260048101829052600090737f39c581f595b53c5cb19bd0b3f8da6c935e2ca09063ea598cb0906024016020604051808303816000875af1158015611603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116279190614459565b9050611648737f39c581f595b53c5cb19bd0b3f8da6c935e2ca088836129d2565b5061179d565b7fffffffffffffffffffffffff3fd555c64ddc0172f5f1a3b0d81526f7c38a933e6001600160a01b038d160161169d5761156073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc287836129d2565b7fffffffffffffffffffffffff11111111111111111111111111111111111111126001600160a01b038d1601611755576040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b15801561173357600080fd5b505af1158015611747573d6000803e3d6000fd5b505050506115608682612a99565b60405162461bcd60e51b815260206004820152600c60248201527f546f6b656e206572726f722e00000000000000000000000000000000000000006044820152606401610df5565b6040805160ff8f1681526001600160a01b038981166020830152888116828401528e1660608201526080810183905260a0810187905260c081018a905290517fbf42197cea68e17a6606f4c97561623fe935aa499de73253b38e5b0c5cbbc1a99181900360e00190a1505061012d54604080517fcc4a01580000000000000000000000000000000000000000000000000000000081528151600094506001600160a01b039093169263cc4a0158926004808401939192918290030181865afa15801561186d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189191906145a1565b509050808211156118e45760405162461bcd60e51b815260206004820181905260248201527f556e65787065637465642063757272656e7445786368616e67655072696365216044820152606401610df5565b50506118f06001609755565b98975050505050505050565b60006119066131d5565b61190e613228565b60001983036119a6576040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482015273ae7ab96520de3a18e5e111b5eaab095312d7fe84906370a0823190602401602060405180830381865afa15801561197f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a39190614459565b92505b6119b08383613281565b9050610f066001609755565b6119c4612978565b611282600061329b565b6119d6612978565b61012f548111611a285760405162461bcd60e51b815260206004820152600c60248201527f556e737570706f727465642100000000000000000000000000000000000000006044820152606401610df5565b61012f5460408051918252602082018390527f7f3306669f28a6aa13d0f709be2bd4f3e21d2f37aee9358846a50e1988ee4832910160405180910390a161012f55565b6000611a7660cb5490565b1580611a83575061013054155b15611a8e5750600090565b60006101345442611a9f91906145c5565b905060008111611ab0576000611af3565b670de0b6b3a7640000610131548261013554611acb60cb5490565b611ad591906145c5565b611adf91906144a1565b611ae991906144a1565b611af391906144e7565b91505090565b611b01612978565b611282613305565b600054610100900460ff1615808015611b295750600054600160ff909116105b80611b435750303b158015611b43575060005460ff166001145b611bb55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610df5565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611c1357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611c8b5760405162461bcd60e51b815260206004820152600660248201527f2170726f787900000000000000000000000000000000000000000000000000006044820152606401610df5565b611c93613360565b611d076040518060400160405280601c81526020017f4349414e204554482d737445544820737472617465677920706f6f6c000000008152506040518060400160405280600581526020017f63694554480000000000000000000000000000000000000000000000000000008152506133e5565b611d2473ae7ab96520de3a18e5e111b5eaab095312d7fe8461346c565b61012d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03898116919091179091558616611dd05760405162461bcd60e51b8152602060048201526024808201527f4665652072656365697665722063616e6e6f74206265207a65726f206164647260448201527f65737321000000000000000000000000000000000000000000000000000000006064820152608401610df5565b61012e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03881617905568056bc75e2d631000008511611e5c5760405162461bcd60e51b815260206004820152601560248201527f57726f6e67206d61726b657443617061636974792100000000000000000000006044820152606401610df5565b61012f85905560c8841115611ed95760405162461bcd60e51b815260206004820152602160248201527f4d616e6167656d656e7420666565206578636565647320746865206c696d697460448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608401610df5565b610130849055644979cb9e00611ef785670de0b6b3a76400006144a1565b611f0191906144e7565b6101315560018310801590611f17575060788311155b611f635760405162461bcd60e51b815260206004820152601b60248201527f4578697420666565206578636565647320746865206c696d69742100000000006044820152606401610df5565b61013283905560018210801590611f7b575060788211155b611fed5760405162461bcd60e51b815260206004820152602660248201527f44656c657665726167652045786974206665652065786365656473207468652060448201527f6c696d69742100000000000000000000000000000000000000000000000000006064820152608401610df5565b61013382905561201473ae7ab96520de3a18e5e111b5eaab095312d7fe84886000196134f2565b61204973ae7ab96520de3a18e5e111b5eaab095312d7fe84737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06000196134f2565b426101345580156120b157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6033546001600160a01b03163314806120de575061012e546001600160a01b031633145b61212a5760405162461bcd60e51b815260206004820152600b60248201527f21417574686f72697a65640000000000000000000000000000000000000000006044820152606401610df5565b610130541561128257600061213d611a6b565b9050801561216d5761214f30826135d1565b8061013560008282546121629190614575565b909155505042610134555b50565b600061217a6131d5565b612182613228565b6119b08383613692565b606060cd8054610e7690614522565b33600081815260ca602090815260408083206001600160a01b0387168452909152812054909190838110156122385760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610df5565b6122458286868403612bec565b506001949350505050565b612258612978565b6001811015801561226a575060788111155b6122dc5760405162461bcd60e51b815260206004820152602660248201527f44656c657665726167652045786974206665652065786365656473207468652060448201527f6c696d69742100000000000000000000000000000000000000000000000000006064820152608401610df5565b6101335460408051918252602082018390527fb96285ed1b61973efc25abef1b7e839fba579e6ff4aa89f46caf0ad6a532e958910160405180910390a161013355565b600033610f1a818585612e06565b6000610f06826001612bb2565b60006123446131d5565b61234c613228565b60001984036123655761235e826126f0565b93506123bd565b61236e826126f0565b8411156123bd5760405162461bcd60e51b815260206004820152601f60248201527f455243343632363a207769746864726177206d6f7265207468616e206d6178006044820152606401610df5565b6123c684610f24565b905060006123d38561108f565b6123dd90866145c5565b61012d546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390529192506000916001600160a01b0390911690632e1a7d4d906024016020604051808303816000875af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246c9190614459565b905061247b33868684876136ac565b5050610fc76001609755565b61012d54604080517f08bb5fb000000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916308bb5fb09160048083019260209291908290030181865afa1580156124eb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d759190614459565b60006125196131d5565b612521613228565b600019840361253a5761253382612714565b9350612592565b61254382612714565b8411156125925760405162461bcd60e51b815260206004820152601d60248201527f455243343632363a2072656465656d206d6f7265207468616e206d61780000006044820152606401610df5565b600061259d85610ef9565b90506125a88161108f565b6125b290826145c5565b61012d546040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018390529193506000916001600160a01b0390911690632e1a7d4d906024016020604051808303816000875af115801561261d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126419190614459565b905061247b338686848a6136ac565b612658612978565b6126606110ad565b61012e54604080516001600160a01b03928316815291831660208301527f2861448678f0be67f11bfb5481b3e3b4cfeb3acc6126ad60a05f95bfc6530666910160405180910390a161012e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000610f06826000612d44565b6001600160a01b038116600090815260c96020526040812054610f06906000612bb2565b6001600160a01b038116600090815260c96020526040812054610f06565b61273a612978565b6001600160a01b0381166127905760405162461bcd60e51b815260206004820152600f60248201527f5374726174656779206572726f722100000000000000000000000000000000006044820152606401610df5565b61012d54604080516001600160a01b03928316815291831660208301527f1e0f9bc8b0f77d9ae5d0ad2b0a996f775d47a5d0b473e464166e7d559f384734910160405180910390a161012d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61281b612978565b6001600160a01b0381166128975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610df5565b61216d8161329b565b6000806128ac85612964565b6128b690866145c5565b61012d546040517f335f438b0000000000000000000000000000000000000000000000000000000081526004810183905260ff861660248201529192506001600160a01b03169063335f438b90604401602060405180830381865afa158015612923573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129479190614459565b9150831561295c576129598183614575565b91505b509392505050565b600061271061013354836110a391906144a1565b6033546001600160a01b031633146112825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610df5565b6040516001600160a01b038316602482015260448101829052610cd09084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613758565b80471015612ae95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610df5565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612b36576040519150601f19603f3d011682016040523d82523d6000602084013e612b3b565b606091505b5050905080610cd05760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610df5565b6000610fc7612bbf610cd5565b612bca906001614575565b612bd66000600a6146fc565b60cb54612be39190614575565b85919085613840565b6001600160a01b038316612c675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610df5565b6001600160a01b038216612ce35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610df5565b6001600160a01b03838116600081815260ca602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610fc7612d5482600a6146fc565b60cb54612d619190614575565b612d69610cd5565b612be3906001614575565b6001600160a01b03838116600090815260ca60209081526040808320938616835292905220546000198114612e005781811015612df35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610df5565b612e008484848403612bec565b50505050565b6001600160a01b038316612e825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610df5565b6001600160a01b038216612efe5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610df5565b6001600160a01b038316600090815260c9602052604090205481811015612f8d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610df5565b6001600160a01b03808516600081815260c9602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612fed9086815260200190565b60405180910390a3612e00565b6001600160a01b0382166130765760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610df5565b6001600160a01b038216600090815260c96020526040902054818110156131055760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610df5565b6001600160a01b038316600081815260c960209081526040808320868603905560cb80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b61316d61389f565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60655460ff16156112825760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610df5565b60026097540361327a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610df5565b6002609755565b60008061328d846126e3565b9050610fc7338486846138f1565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61330d6131d5565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586131b83390565b600054610100900460ff166133dd5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610df5565b611282613a65565b600054610100900460ff166134625760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610df5565b6112048282613aeb565b600054610100900460ff166134e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610df5565b61216d81613b81565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa15801561355b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357f9190614459565b9050612e00847f095ea7b300000000000000000000000000000000000000000000000000000000856135b18686614575565b6040516001600160a01b0390921660248301526044820152606401612a17565b6001600160a01b0382166136275760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610df5565b8060cb60008282546136399190614575565b90915550506001600160a01b038216600081815260c960209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60008061369e8461232d565b9050610fc7338483876138f1565b826001600160a01b0316856001600160a01b0316146136d0576136d0838683612d74565b6136da8382612ffa565b60fb546136f1906001600160a01b031685846129d2565b826001600160a01b0316846001600160a01b0316866001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8585604051613749929190918252602082015260400190565b60405180910390a45050505050565b60006137ad826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613c9d9092919063ffffffff16565b90508051600014806137ce5750808060200190518101906137ce919061470b565b610cd05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610df5565b60008061384e868686613cac565b9050600183600281111561386457613864614728565b14801561388157506000848061387c5761387c6144b8565b868809115b1561389457613891600182614575565b90505b90505b949350505050565b60655460ff166112825760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610df5565b61012f546138fd610cd5565b6139079084614575565b11156139555760405162461bcd60e51b815260206004820152601a60248201527f457863656564696e67206d61726b65742063617061636974792e0000000000006044820152606401610df5565b61397573ae7ab96520de3a18e5e111b5eaab095312d7fe84853085613d9e565b61397f83826135d1565b61012d546040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b039091169063b6b55f25906024016020604051808303816000875af11580156139e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a089190614459565b50826001600160a01b0316846001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78484604051613a57929190918252602082015260400190565b60405180910390a350505050565b600054610100900460ff16613ae25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610df5565b6112823361329b565b600054610100900460ff16613b685760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610df5565b60cc613b7483826147a5565b5060cd610cd082826147a5565b600054610100900460ff16613bfe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610df5565b600080613c0a83613def565b9150915081613c1a576012613c1c565b805b60fb80546001600160a01b039095167fffffffffffffffffffffffff000000000000000000000000000000000000000060ff939093167401000000000000000000000000000000000000000002929092167fffffffffffffffffffffff00000000000000000000000000000000000000000090951694909417179092555050565b60606138978484600085613ef9565b6000808060001985870985870292508281108382030391505080600003613ce657838281613cdc57613cdc6144b8565b0492505050610fc7565b808411613d355760405162461bcd60e51b815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f7700000000000000000000006044820152606401610df5565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040516001600160a01b0380851660248301528316604482015260648101829052612e009085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612a17565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290516000918291829182916001600160a01b03871691613e6491614883565b600060405180830381855afa9150503d8060008114613e9f576040519150601f19603f3d011682016040523d82523d6000602084013e613ea4565b606091505b5091509150818015613eb857506020815110155b15613eec57600081806020019051810190613ed39190614459565b905060ff8111613eea576001969095509350505050565b505b5060009485945092505050565b606082471015613f715760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610df5565b600080866001600160a01b03168587604051613f8d9190614883565b60006040518083038185875af1925050503d8060008114613fca576040519150601f19603f3d011682016040523d82523d6000602084013e613fcf565b606091505b5091509150613fe087838387613feb565b979650505050505050565b6060831561405a578251600003614053576001600160a01b0385163b6140535760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610df5565b5081613897565b613897838381511561406f5781518083602001fd5b8060405162461bcd60e51b8152600401610df59190614147565b80356001600160a01b03811681146140a057600080fd5b919050565b6000602082840312156140b757600080fd5b610fc782614089565b6000602082840312156140d257600080fd5b5035919050565b60005b838110156140f45781810151838201526020016140dc565b50506000910152565b600081518084526141158160208601602086016140d9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610fc760208301846140fd565b6000806040838503121561416d57600080fd5b61417683614089565b946020939093013593505050565b60008060006060848603121561419957600080fd5b6141a284614089565b92506141b060208501614089565b9150604084013590509250925092565b803560ff811681146140a057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080600080600080610100898b03121561421d57600080fd5b614226896141c0565b975061423460208a01614089565b965060408901359550606089013567ffffffffffffffff8082111561425857600080fd5b818b0191508b601f83011261426c57600080fd5b81358181111561427e5761427e6141d1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156142c4576142c46141d1565b816040528281528e60208487010111156142dd57600080fd5b8260208601602083013760006020848301015280995050505050506080890135935060a0890135925061431260c08a01614089565b915061432060e08a01614089565b90509295985092959890939650565b6000806040838503121561434257600080fd5b8235915061435260208401614089565b90509250929050565b60008060008060008060c0878903121561437457600080fd5b61437d87614089565b955061438b60208801614089565b95989597505050506040840135936060810135936080820135935060a0909101359150565b6000806000606084860312156143c557600080fd5b833592506143d560208501614089565b91506143e360408501614089565b90509250925092565b600080604083850312156143ff57600080fd5b61440883614089565b915061435260208401614089565b801515811461216d57600080fd5b60008060006060848603121561443957600080fd5b83359250602084013561444b81614416565b91506143e3604085016141c0565b60006020828403121561446b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610f0657610f06614472565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c9082168061453657607f821691505b60208210810361456f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80820180821115610f0657610f06614472565b60ff8181168382160190811115610f0657610f06614472565b600080604083850312156145b457600080fd5b505080516020909101519092909150565b81810381811115610f0657610f06614472565b60ff8716815285602082015260c0604082015260006145fa60c08301876140fd565b606083019590955250911515608083015260a0909101529392505050565b600181815b8085111561465357816000190482111561463957614639614472565b8085161561464657918102915b93841c939080029061461d565b509250929050565b60008261466a57506001610f06565b8161467757506000610f06565b816001811461468d5760028114614697576146b3565b6001915050610f06565b60ff8411156146a8576146a8614472565b50506001821b610f06565b5060208310610133831016604e8410600b84101617156146d6575081810a610f06565b6146e08383614618565b80600019048211156146f4576146f4614472565b029392505050565b6000610fc760ff84168361465b565b60006020828403121561471d57600080fd5b8151610fc781614416565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b601f821115610cd057600081815260208120601f850160051c8101602086101561477e5750805b601f850160051c820191505b8181101561479d5782815560010161478a565b505050505050565b815167ffffffffffffffff8111156147bf576147bf6141d1565b6147d3816147cd8454614522565b84614757565b602080601f83116001811461480857600084156147f05750858301515b600019600386901b1c1916600185901b17855561479d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561485557888601518255948401946001909101908401614836565b50858210156148735787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082516148958184602087016140d9565b919091019291505056fea26469706673582212201a908401599d973b5ef4e957fdf897386bdbc43af63d96e4f190f6bcd238805664736f6c63430008130033