[ { "inputs": [ { "internalType": "contract IVault", "name": "vault", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "contract IERC20[]", "name": "tokens", "type": "address[]" }, { "internalType": "uint256", "name": "amplificationParameter", "type": "uint256" }, { "internalType": "uint256", "name": "swapFeePercentage", "type": "uint256" }, { "internalType": "uint256", "name": "pauseWindowDuration", "type": "uint256" }, { "internalType": "uint256", "name": "bufferPeriodDuration", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "startValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "name": "AmpUpdateStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "currentValue", "type": "uint256" } ], "name": "AmpUpdateStopped", "type": "event" }, { "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": "bool", "name": "paused", "type": "bool" } ], "name": "PausedStateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "swapFeePercentage", "type": "uint256" } ], "name": "SwapFeePercentageChanged", "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" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "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": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "getActionId", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAmplificationParameter", "outputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bool", "name": "isUpdating", "type": "bool" }, { "internalType": "uint256", "name": "precision", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAuthorizer", "outputs": [ { "internalType": "contract IAuthorizer", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPausedState", "outputs": [ { "internalType": "bool", "name": "paused", "type": "bool" }, { "internalType": "uint256", "name": "pauseWindowEndTime", "type": "uint256" }, { "internalType": "uint256", "name": "bufferPeriodEndTime", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPoolId", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSwapFeePercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVault", "outputs": [ { "internalType": "contract IVault", "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": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, { "internalType": "uint256", "name": "lastChangeBlock", "type": "uint256" }, { "internalType": "uint256", "name": "protocolSwapFeePercentage", "type": "uint256" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "name": "onExitPool", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, { "internalType": "uint256", "name": "lastChangeBlock", "type": "uint256" }, { "internalType": "uint256", "name": "protocolSwapFeePercentage", "type": "uint256" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "name": "onJoinPool", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum IVault.SwapKind", "name": "kind", "type": "uint8" }, { "internalType": "contract IERC20", "name": "tokenIn", "type": "address" }, { "internalType": "contract IERC20", "name": "tokenOut", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, { "internalType": "uint256", "name": "lastChangeBlock", "type": "uint256" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "internalType": "struct IPoolSwapStructs.SwapRequest", "name": "swapRequest", "type": "tuple" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, { "internalType": "uint256", "name": "indexIn", "type": "uint256" }, { "internalType": "uint256", "name": "indexOut", "type": "uint256" } ], "name": "onSwap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum IVault.SwapKind", "name": "kind", "type": "uint8" }, { "internalType": "contract IERC20", "name": "tokenIn", "type": "address" }, { "internalType": "contract IERC20", "name": "tokenOut", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, { "internalType": "uint256", "name": "lastChangeBlock", "type": "uint256" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "internalType": "struct IPoolSwapStructs.SwapRequest", "name": "request", "type": "tuple" }, { "internalType": "uint256", "name": "balanceTokenIn", "type": "uint256" }, { "internalType": "uint256", "name": "balanceTokenOut", "type": "uint256" } ], "name": "onSwap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, { "internalType": "uint256", "name": "lastChangeBlock", "type": "uint256" }, { "internalType": "uint256", "name": "protocolSwapFeePercentage", "type": "uint256" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "name": "queryExit", "outputs": [ { "internalType": "uint256", "name": "bptIn", "type": "uint256" }, { "internalType": "uint256[]", "name": "amountsOut", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, { "internalType": "uint256", "name": "lastChangeBlock", "type": "uint256" }, { "internalType": "uint256", "name": "protocolSwapFeePercentage", "type": "uint256" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "name": "queryJoin", "outputs": [ { "internalType": "uint256", "name": "bptOut", "type": "uint256" }, { "internalType": "uint256[]", "name": "amountsIn", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "bytes", "name": "poolConfig", "type": "bytes" } ], "name": "setAssetManagerPoolConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "paused", "type": "bool" } ], "name": "setPaused", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "swapFeePercentage", "type": "uint256" } ], "name": "setSwapFeePercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "rawEndValue", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "name": "startAmplificationParameterUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stopAmplificationParameterUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
6103e06040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120523480156200003757600080fd5b50604051620056cc380380620056cc8339810160408190526200005a9162000bf3565b8886516002146200006d57600062000070565b60025b8989898a516001600160401b03811180156200008b57600080fd5b50604051908082528060200260200182016040528015620000b6578160200160208202803683370190505b506040805180820190915260018152603160f81b602080830191909152336080526001600160601b031960608a901b1660a05285518c928c928c928c92859285928c928c92849283929183918691620001159160039185019062000a11565b5080516200012b90600490602084019062000a11565b50506005805460ff1916601217905550815160209283012060c052805191012060e05250507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010052506200018a6276a70083111561019462000699565b6200019e62278d0082111561019562000699565b4290910161014081905201610160528551620001c0906002111560c862000699565b620001d860088751111560c96200069960201b60201c565b620001ee86620006ae60201b62000f831760201c565b620001f984620006ba565b6040516309b2760f60e01b81526000906001600160a01b038c16906309b2760f906200022a908d9060040162000d8f565b602060405180830381600087803b1580156200024557600080fd5b505af11580156200025a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000280919062000bda565b604051633354e3e960e11b81529091506001600160a01b038c16906366a9c7d290620002b59084908b908b9060040162000cf3565b600060405180830381600087803b158015620002d057600080fd5b505af1158015620002e5573d6000803e3d6000fd5b505088516001600160601b031960608f901b16610180526101a08490526101c0819052915050806200031957600062000330565b876000815181106200032757fe5b60200260200101515b60601b6001600160601b0319166101e052600181116200035257600062000369565b876001815181106200036057fe5b60200260200101515b60601b6001600160601b03191661020052600281116200038b576000620003a2565b876002815181106200039957fe5b60200260200101515b60601b6001600160601b0319166102205260038111620003c4576000620003db565b87600381518110620003d257fe5b60200260200101515b60601b6001600160601b0319166102405260048111620003fd57600062000414565b876004815181106200040b57fe5b60200260200101515b60601b6001600160601b0319166102605260058111620004365760006200044d565b876005815181106200044457fe5b60200260200101515b60601b6001600160601b03191661028052600681116200046f57600062000486565b876006815181106200047d57fe5b60200260200101515b60601b6001600160601b0319166102a05260078111620004a8576000620004bf565b87600781518110620004b657fe5b60200260200101515b60601b6001600160601b0319166102c05280620004de57600062000504565b6200050488600081518110620004f057fe5b60200260200101516200072960201b60201c565b6102e05260018111620005195760006200052b565b6200052b88600181518110620004f057fe5b61030052600281116200054057600062000552565b6200055288600281518110620004f057fe5b61032052600381116200056757600062000579565b6200057988600381518110620004f057fe5b61034052600481116200058e576000620005a0565b620005a088600481518110620004f057fe5b6103605260058111620005b5576000620005c7565b620005c788600581518110620004f057fe5b6103805260068111620005dc576000620005ee565b620005ee88600681518110620004f057fe5b6103a052600781116200060357600062000615565b6200061588600781518110620004f057fe5b6103c05250508f516200063c9a5060051015985061012f9750506200069995505050505050565b6200064e600186101561012c62000699565b6200066161138886111561012d62000699565b60006200067c866103e8620007d560201b62000f8d1760201c565b9050620006898162000806565b5050505050505050505062000e11565b81620006aa57620006aa8162000845565b5050565b80620006aa8162000898565b620006cf64e8d4a5100082101560cb62000699565b620006e767016345785d8a000082111560ca62000699565b60088190556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906200071e90839062000da4565b60405180910390a150565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200076657600080fd5b505afa1580156200077b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a1919062000cd0565b60ff1690506000620007c06012836200092560201b62000fb11760201c565b600a0a670de0b6b3a764000002949350505050565b6000828202620007fd841580620007f5575083858381620007f257fe5b04145b600362000699565b90505b92915050565b62000814818042806200093d565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516200071e919062000da4565b62461bcd60e51b6000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b600281511015620008a95762000922565b600081600081518110620008b957fe5b602002602001015190506000600190505b82518110156200091f576000838281518110620008e357fe5b6020026020010151905062000914816001600160a01b0316846001600160a01b03161060656200069960201b60201c565b9150600101620008ca565b50505b50565b60006200093783831115600162000699565b50900390565b6200095e816001600160401b031660c062000a0d60201b62000fc71760201c565b6200097f836001600160401b0316608062000a0d60201b62000fc71760201c565b620009a0856001600160401b0316604062000a0d60201b62000fc71760201c565b620009c1876001600160401b0316600062000a0d60201b62000fc71760201c565b1717176009556040517f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf290620009ff90869086908690869062000dad565b60405180910390a150505050565b1b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000a5457805160ff191683800117855562000a84565b8280016001018555821562000a84579182015b8281111562000a8457825182559160200191906001019062000a67565b5062000a9292915062000a96565b5090565b5b8082111562000a92576000815560010162000a97565b8051620008008162000dfb565b600082601f83011262000acb578081fd5b81516001600160401b0381111562000ae1578182fd5b602080820262000af382820162000dc8565b8381529350818401858301828701840188101562000b1057600080fd5b600092505b8483101562000b4057805162000b2b8162000dfb565b82526001929092019190830190830162000b15565b505050505092915050565b600082601f83011262000b5c578081fd5b81516001600160401b0381111562000b72578182fd5b602062000b88601f8301601f1916820162000dc8565b9250818352848183860101111562000b9f57600080fd5b60005b8281101562000bbf57848101820151848201830152810162000ba2565b8281111562000bd15760008284860101525b50505092915050565b60006020828403121562000bec578081fd5b5051919050565b60008060008060008060008060006101208a8c03121562000c12578485fd5b62000c1e8b8b62000aad565b60208b01519099506001600160401b038082111562000c3b578687fd5b62000c498d838e0162000b4b565b995060408c015191508082111562000c5f578687fd5b62000c6d8d838e0162000b4b565b985060608c015191508082111562000c83578687fd5b5062000c928c828d0162000aba565b96505060808a0151945060a08a0151935060c08a0151925060e08a0151915062000cc18b6101008c0162000aad565b90509295985092959850929598565b60006020828403121562000ce2578081fd5b815160ff81168114620007fd578182fd5b60006060820185835260206060818501528186518084526080860191508288019350845b8181101562000d3f5762000d2c855162000def565b8352938301939183019160010162000d17565b505084810360408601528551808252908201925081860190845b8181101562000d815762000d6e835162000def565b8552938301939183019160010162000d59565b509298975050505050505050565b602081016003831062000d9e57fe5b91905290565b90815260200190565b93845260208401929092526040830152606082015260800190565b6040518181016001600160401b038111828210171562000de757600080fd5b604052919050565b6001600160a01b031690565b6001600160a01b03811681146200092257600080fd5b60805160a05160601c60c05160e051610100516101205161014051610160516101805160601c6101a0516101c0516101e05160601c6102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c05160601c6102e05161030051610320516103405161036051610380516103a0516103c05161475462000f786000398061124b528061221a52508061120852806121b95250806111c5528061215852508061118252806120f752508061113f52806120965250806110fc52806120355250806110b95280611fd45250806110685280611f735250806121df52508061217e52508061211d5250806120bc52508061205b525080611ffa525080611f99525080611f385280612b73525080610fcd5250806107b5525080610ae15250806114f15250806114cd525080610cf352508061174a52508061178c52508061176b525080610abd525080610a4752506147546000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c80636daccffa1161012a57806395d89b41116100bd578063aaabadc51161008c578063d5c096c411610071578063d5c096c41461046f578063dd62ed3e14610482578063eb0f24d61461049557610226565b8063aaabadc514610454578063d505accf1461045c57610226565b806395d89b41146104135780639d2c110c1461041b578063a457c2d71461042e578063a9059cbb1461044157610226565b8063851c1bb3116100f9578063851c1bb3146103d057806387ec6817146103e3578063893d20e8146103f65780638d928af81461040b57610226565b80636daccffa1461037257806370a082311461038957806374f3b0091461039c5780637ecebe00146103bd57610226565b8063313ce567116101bd578063395093511161018c57806355c676281161017157806355c67628146103415780636028bfd414610349578063679aefce1461036a57610226565b8063395093511461031b57806350dd6ed91461032e57610226565b8063313ce567146102e35780633644e515146102f857806338e9922e1461030057806338fff2d01461031357610226565b806318160ddd116101f957806318160ddd1461029e5780631c0de051146102a657806323b872dd146102bd5780632f1a0bc9146102d057610226565b806301ec954a1461022b57806306fdde0314610254578063095ea7b31461026957806316c38b3c14610289575b600080fd5b61023e6102393660046142d9565b61049d565b60405161024b9190614566565b60405180910390f35b61025c6104fc565b60405161024b919061463c565b61027c610277366004613f52565b6105b1565b60405161024b9190614543565b61029c610297366004614049565b6105c8565b005b61023e6105dc565b6102ae6105e2565b60405161024b9392919061454e565b61027c6102cb366004613e9d565b61060b565b61029c6102de3660046143ae565b61069f565b6102eb610782565b60405161024b9190614699565b61023e61078b565b61029c61030e366004614396565b61079a565b61023e6107b3565b61027c610329366004613f52565b6107d7565b61029c61033c366004614180565b610812565b61023e610830565b61035c610357366004614081565b610836565b60405161024b92919061464f565b61023e61086d565b61037a61094b565b60405161024b93929190614668565b61023e610397366004613e49565b610966565b6103af6103aa366004614081565b610985565b60405161024b92919061451e565b61023e6103cb366004613e49565b610a28565b61023e6103de366004614124565b610a43565b61035c6103f1366004614081565b610a95565b6103fe610abb565b60405161024b919061450a565b6103fe610adf565b61025c610b03565b61023e61042936600461434a565b610b82565b61027c61043c366004613f52565b610c69565b61027c61044f366004613f52565b610ca7565b6103fe610cb4565b61029c61046a366004613edd565b610cbe565b6103af61047d366004614081565b610e07565b61023e610490366004613e65565b610f2c565b61029c610f57565b60006104b183836104ac610fcb565b610fef565b60606104bb61100c565b90506000865160018111156104cc57fe5b146104e3576104de8686868685611289565b6104f0565b6104f08686868685611300565b9150505b949350505050565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105a65780601f1061057b576101008083540402835291602001916105a6565b820191906000526020600020905b81548152906001019060200180831161058957829003601f168201915b505050505090505b90565b60006105be338484611364565b5060015b92915050565b6105d06113cc565b6105d981611412565b50565b60025490565b60008060006105ef6114ae565b1592506105fa6114cb565b91506106046114ef565b9050909192565b6000806106188533610f2c565b905061063c336001600160a01b03871614806106345750838210155b61019e611513565b610647858585611521565b336001600160a01b0386161480159061068057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b15610692576106928533858403611364565b60019150505b9392505050565b6106a76113cc565b6106b7600183101561012c611513565b6106c861138883111561012d611513565b60006106d48242610fb1565b90506106e86201518082101561013d611513565b6000806106f3611601565b91509150610704811561013e611513565b6000610712866103e8610f8d565b905060008382116107415761073c61072d6201518086610f8d565b6107378488610f8d565b611675565b61075b565b61075b6107516201518084610f8d565b6107378688610f8d565b905061076d600282111561013f611513565b610779848342896116a8565b50505050505050565b60055460ff1690565b6000610795611746565b905090565b6107a26113cc565b6107aa6117e3565b6105d9816117f8565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105be91859061080d9086611856565b611364565b61081a6113cc565b6108226117e3565b61082c8282611868565b5050565b60085490565b6000606061084c8651610847610fcb565b611980565b6108618989898989898961198d611a31611a92565b97509795505050505050565b60006060610879610adf565b6001600160a01b031663f94d466861088f6107b3565b6040518263ffffffff1660e01b81526004016108ab9190614566565b60006040518083038186803b1580156108c357600080fd5b505afa1580156108d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108ff9190810190613f7d565b50915050600061090d611601565b5090506109218261091c61100c565b611c22565b600061092f82846000611c83565b905061094361093c6105dc565b8290611e1f565b935050505090565b6000806000610958611601565b90949093506103e892509050565b6001600160a01b0381166000908152602081905260409020545b919050565b606080886109af610994610adf565b6001600160a01b0316336001600160a01b03161460cd611513565b6109c46109ba6107b3565b82146101f4611513565b60606109ce61100c565b90506109da8882611c22565b60006060806109ef8e8e8e8e8e8e8a8f61198d565b9250925092506109ff8d84611e70565b610a098285611a31565b610a138185611a31565b909550935050505b5097509795505050505050565b6001600160a01b031660009081526006602052604090205490565b60007f000000000000000000000000000000000000000000000000000000000000000082604051602001610a78929190614494565b604051602081830303815290604052805190602001209050919050565b60006060610aa68651610847610fcb565b61086189898989898989611e7a611ed3611a92565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105a65780601f1061057b576101008083540402835291602001916105a6565b600080610b928560200151611f34565b90506000610ba38660400151611f34565b9050600086516001811115610bb457fe5b1415610c1a57610bc78660600151612249565b6060870152610bd6858361226d565b9450610be2848261226d565b9350610bf286606001518361226d565b60608701526000610c04878787612279565b9050610c1081836122bd565b9350505050610698565b610c24858361226d565b9450610c30848261226d565b9350610c4086606001518261226d565b60608701526000610c528787876122c9565b9050610c5e81846122f8565b9050610c1081612304565b600080610c763385610f2c565b9050808310610c9057610c8b33856000611364565b610c9d565b610c9d3385858403611364565b5060019392505050565b60006105be338484611521565b600061079561232d565b610ccc8442111560d1611513565b6001600160a01b0387166000908152600660209081526040808320549051909291610d23917f0000000000000000000000000000000000000000000000000000000000000000918c918c918c9188918d910161458e565b6040516020818303038152906040528051906020012090506000610d46826123a7565b9050600060018288888860405160008152602001604052604051610d6d949392919061461e565b6020604051602081039080840390855afa158015610d8f573d6000803e3d6000fd5b5050604051601f1901519150610dd190506001600160a01b03821615801590610dc957508b6001600160a01b0316826001600160a01b0316145b6101f8611513565b6001600160a01b038b166000908152600660205260409020600185019055610dfa8b8b8b611364565b5050505050505050505050565b60608088610e16610994610adf565b610e216109ba6107b3565b6060610e2b61100c565b9050610e356105dc565b610edc5760006060610e4a8d8d8d868b6123c3565b91509150610e5f620f424083101560cc611513565b610e6d6000620f4240612452565b610e7c8b620f42408403612452565b610e868184611ed3565b80610e8f610fcb565b67ffffffffffffffff81118015610ea557600080fd5b50604051908082528060200260200182016040528015610ecf578160200160208202803683370190505b5095509550505050610a1b565b610ee68882611c22565b6000606080610efb8e8e8e8e8e8e8a8f611e7a565b925092509250610f0b8c84612452565b610f158285611ed3565b610f1f8185611a31565b9095509350610a1b915050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610f5f6113cc565b600080610f6a611601565b91509150610f7a81610140611513565b61082c8261245c565b8061082c81612497565b6000828202610698841580610faa575083858381610fa757fe5b04145b6003611513565b6000610fc1838311156001611513565b50900390565b1b90565b7f000000000000000000000000000000000000000000000000000000000000000090565b611007818410801561100057508183105b6064611513565b505050565b60606000611018610fcb565b905060608167ffffffffffffffff8111801561103357600080fd5b5060405190808252806020026020018201604052801561105d578160200160208202803683370190505b50905081156110a5577f00000000000000000000000000000000000000000000000000000000000000008160008151811061109457fe5b6020026020010181815250506110ae565b91506105ae9050565b60018211156110a5577f0000000000000000000000000000000000000000000000000000000000000000816001815181106110e557fe5b60200260200101818152505060028211156110a5577f00000000000000000000000000000000000000000000000000000000000000008160028151811061112857fe5b60200260200101818152505060038211156110a5577f00000000000000000000000000000000000000000000000000000000000000008160038151811061116b57fe5b60200260200101818152505060048211156110a5577f0000000000000000000000000000000000000000000000000000000000000000816004815181106111ae57fe5b60200260200101818152505060058211156110a5577f0000000000000000000000000000000000000000000000000000000000000000816005815181106111f157fe5b60200260200101818152505060068211156110a5577f00000000000000000000000000000000000000000000000000000000000000008160068151811061123457fe5b60200260200101818152505060078211156110a5577f00000000000000000000000000000000000000000000000000000000000000008160078151811061127757fe5b60200260200101818152505091505090565b60006112958583611c22565b6112b686606001518385815181106112a957fe5b602002602001015161226d565b606087015260006112c987878787612510565b90506112e8818487815181106112db57fe5b60200260200101516122f8565b90506112f381612304565b9150505b95945050505050565b600061130f8660600151612249565b606087015261131e8583611c22565b61133286606001518386815181106112a957fe5b606087015260006113458787878761253a565b90506112f38184868151811061135757fe5b60200260200101516122bd565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906113bf908590614566565b60405180910390a3505050565b60006113fb6000357fffffffff0000000000000000000000000000000000000000000000000000000016610a43565b90506105d961140a8233612564565b610191611513565b80156114325761142d6114236114cb565b4210610193611513565b611447565b61144761143d6114ef565b42106101a9611513565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be64906114a3908390614543565b60405180910390a150565b60006114b86114ef565b42118061079557505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b8161082c5761082c81612654565b6115386001600160a01b0384161515610198611513565b61154f6001600160a01b0383161515610199611513565b61155a838383611007565b6001600160a01b03831660009081526020819052604090205461158090826101a06126c1565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546115af9082611856565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113bf908590614566565b6000806000806000806116126126d7565b93509350935093508042101561166557600194508383111561164957818103824203858503028161163f57fe5b0484019550611660565b818103824203848603028161165a57fe5b04840395505b61166d565b600094508295505b505050509091565b60006116848215156004611513565b82611691575060006105c2565b81600184038161169d57fe5b0460010190506105c2565b6116bd8167ffffffffffffffff1660c0610fc7565b6116d28367ffffffffffffffff166080610fc7565b6116e78567ffffffffffffffff166040610fc7565b6116fc8767ffffffffffffffff166000610fc7565b1717176009556040517f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf29061173890869086908690869061467e565b60405180910390a150505050565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006117b361272e565b306040516020016117c89594939291906145c2565b60405160208183030381529060405280519060200120905090565b6117f66117ee6114ae565b610192611513565b565b61180b64e8d4a5100082101560cb611513565b61182167016345785d8a000082111560ca611513565b60088190556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc906114a3908390614566565b60008282016106988482101583611513565b60006118726107b3565b9050600061187e610adf565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b81526004016118ab929190614607565b60806040518083038186803b1580156118c357600080fd5b505afa1580156118d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fb91906143cf565b6040517f18e736d40000000000000000000000000000000000000000000000000000000081529094506001600160a01b03851693506318e736d492506119489150859087906004016145ee565b600060405180830381600087803b15801561196257600080fd5b505af1158015611976573d6000803e3d6000fd5b5050505050505050565b61082c8183146067611513565b600060608061199a6114ae565b156119bd576119a98887612732565b90506119b88882610fb161281f565b611a09565b6119c5610fcb565b67ffffffffffffffff811180156119db57600080fd5b50604051908082528060200260200182016040528015611a05578160200160208202803683370190505b5090505b611a1488868661288a565b9093509150611a2388836128f6565b985098509895505050505050565b60005b611a3c610fcb565b81101561100757611a73838281518110611a5257fe5b6020026020010151838381518110611a6657fe5b6020026020010151611e1f565b838281518110611a7f57fe5b6020908102919091010152600101611a34565b333014611b81576000306001600160a01b0316600036604051611ab69291906144c4565b6000604051808303816000865af19150503d8060008114611af3576040519150601f19603f3d011682016040523d82523d6000602084013e611af8565b606091505b505090508060008114611b0757fe5b60046000803e6000517fffffffff00000000000000000000000000000000000000000000000000000000167f43adbafb000000000000000000000000000000000000000000000000000000008114611b63573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b6060611b8b61100c565b9050611b978782611c22565b60006060611baf8c8c8c8c8c8c898d8d63ffffffff16565b5091509150611bc281848663ffffffff16565b8051601f1982018390526343adbafb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08301526020027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc82016044820181fd5b60005b611c2d610fcb565b81101561100757611c64838281518110611c4357fe5b6020026020010151838381518110611c5757fe5b6020026020010151612925565b838281518110611c7057fe5b6020908102919091010152600101611c25565b81516000908190815b81811015611cc457611cba868281518110611ca357fe5b60200260200101518461185690919063ffffffff16565b9250600101611c8c565b5081611cd557600092505050610698565b600082878302825b60ff811015611e07576000858a600081518110611cf657fe5b60200260200101510290506000600190505b86811015611d4a57611d40611d39611d33848e8581518110611d2657fe5b6020026020010151610f8d565b89610f8d565b868c612951565b9150600101611d08565b50839450611dbd611d8c611d73611d6a611d64878c610f8d565b85610f8d565b6103e88d612951565b611d86611d808a89610f8d565b88610f8d565b90611856565b611db7611daa611da06103e8880386610f8d565b6103e88e15612951565b611d868a60010189610f8d565b8b612951565b935084841115611de557600185850311611de05783975050505050505050610698565b611dfe565b600184860311611dfe5783975050505050505050610698565b50600101611cdd565b50611e13610142612654565b50505050509392505050565b6000611e2e8215156004611513565b82611e3b575060006105c2565b670de0b6b3a764000083810290611e5e90858381611e5557fe5b04146005611513565b828181611e6757fe5b049150506105c2565b61082c8282612971565b6000606080611e876117e3565b6060611e938988612732565b9050611ea28982610fb161281f565b60006060611eb18b8989612a2d565b91509150611ebf8b82612a86565b909d909c50909a5098505050505050505050565b60005b611ede610fcb565b81101561100757611f15838281518110611ef457fe5b6020026020010151838381518110611f0857fe5b6020026020010151612a93565b838281518110611f2157fe5b6020908102919091010152600101611ed6565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611f9757507f0000000000000000000000000000000000000000000000000000000000000000610980565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611ff857507f0000000000000000000000000000000000000000000000000000000000000000610980565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561205957507f0000000000000000000000000000000000000000000000000000000000000000610980565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156120ba57507f0000000000000000000000000000000000000000000000000000000000000000610980565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561211b57507f0000000000000000000000000000000000000000000000000000000000000000610980565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561217c57507f0000000000000000000000000000000000000000000000000000000000000000610980565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156121dd57507f0000000000000000000000000000000000000000000000000000000000000000610980565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561223e57507f0000000000000000000000000000000000000000000000000000000000000000610980565b610980610135612654565b60008061226160085484612ae190919063ffffffff16565b90506106988382610fb1565b60006106988383612925565b6000612290612286610fcb565b60021460d2611513565b60606000806122a0878787612b3b565b9250925092506122b28784848461253a565b979650505050505050565b60006106988383611e1f565b60006122d6612286610fcb565b60606000806122e6878787612b3b565b9250925092506122b287848484612510565b60006106988383612a93565b60006105c2612326600854670de0b6b3a7640000610fb190919063ffffffff16565b8390612a93565b6000612337610adf565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b15801561236f57600080fd5b505afa158015612383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107959190614164565b60006123b1611746565b82604051602001610a789291906144d4565b600060606123cf6117e3565b60006123da84612c28565b90506123f560008260028111156123ed57fe5b1460ce611513565b606061240085612c3e565b905061240f8151610847610fcb565b6124198187611c22565b6000612423611601565b509050600061243482846001611c83565b9050806124418184612c54565b9b929a509198505050505050505050565b61082c8282612c5f565b612468818242426116a8565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516114a39190614566565b6002815110156124a6576105d9565b6000816000815181106124b557fe5b602002602001015190506000600190505b82518110156110075760008382815181106124dd57fe5b60200260200101519050612506816001600160a01b0316846001600160a01b0316106065611513565b91506001016124c6565b600061251a6117e3565b6000612524611601565b50905060006122b2828787878b60600151612ced565b60006125446117e3565b600061254e611601565b50905060006122b2828787878b60600151612db1565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b612583610abb565b6001600160a01b03161415801561259e575061259e83612e59565b156125c6576125ab610abb565b6001600160a01b0316336001600160a01b03161490506105c2565b6125ce61232d565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016125fd9392919061456f565b60206040518083038186803b15801561261557600080fd5b505afa158015612629573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264d9190614065565b90506105c2565b7f08c379a0000000000000000000000000000000000000000000000000000000006000908152602060045260076024526642414c23000030600a808404818106603090810160081b95839006959095019082900491820690940160101b939093010160c81b604452606490fd5b60006126d08484111583611513565b5050900390565b6000806000806126f36000600954612ec790919063ffffffff16565b600954909450612704906040612ec7565b600954909350612715906080612ec7565b6009549092506127269060c0612ec7565b905090919293565b4690565b60608061273d610fcb565b67ffffffffffffffff8111801561275357600080fd5b5060405190808252806020026020018201604052801561277d578160200160208202803683370190505b5090508261278c5790506105c2565b6000808560008151811061279c57fe5b602002602001015190506000600190505b6127b5610fcb565b8110156127ec5760008782815181106127ca57fe5b60200260200101519050828111156127e3578193508092505b506001016127ad565b506127fe600b5487600a548589612ed5565b83838151811061280a57fe5b60209081029190910101525090949350505050565b60005b61282a610fcb565b8110156128845761286584828151811061284057fe5b602002602001015184838151811061285457fe5b60200260200101518463ffffffff16565b84828151811061287157fe5b6020908102919091010152600101612822565b50505050565b60006060600061289984612c28565b905060008160028111156128a957fe5b14156128c3576128b98685612f49565b92509250506128ee565b60018160028111156128d157fe5b14156128e1576128b9868561300f565b6128b9868686613041565b505b935093915050565b6129038282610fb161281f565b600061290d611601565b50905061100761291f82856001611c83565b82612c54565b600082820261293f841580610faa575083858381610fa757fe5b670de0b6b3a764000090049392505050565b6000816129675761296284846130b8565b6104f4565b6104f48484611675565b6129886001600160a01b038316151561019b611513565b61299482600083611007565b6001600160a01b0382166000908152602081905260409020546129ba90826101a16126c1565b6001600160a01b0383166000908152602081905260409020556002546129e090826130d8565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a21908590614566565b60405180910390a35050565b600060606000612a3c84612c28565b90506001816002811115612a4c57fe5b1415612a5d576128b98686866130e6565b6002816002811115612a6b57fe5b1415612a7b576128b9868561314b565b6128ec610136612654565b612903828261185661281f565b6000612aa28215156004611513565b82612aaf575060006105c2565b670de0b6b3a764000083810290612ac990858381611e5557fe5b826001820381612ad557fe5b046001019150506105c2565b6000828202612afb841580610faa575083858381610fa757fe5b80612b0a5760009150506105c2565b670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201612ad5565b6040805160028082526060828101909352600091829181602001602082028036833701905050925085602001516001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415612be25760009150600190508483600081518110612bb757fe5b6020026020010181815250508383600181518110612bd157fe5b602002602001018181525050612c1f565b60009050600191508383600081518110612bf857fe5b6020026020010181815250508483600181518110612c1257fe5b6020026020010181815250505b93509350939050565b6000818060200190518101906105c291906141ce565b6060818060200190518101906106989190614294565b600a91909155600b55565b612c6b60008383611007565b600254612c789082611856565b6002556001600160a01b038216600090815260208190526040902054612c9e9082611856565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a21908590614566565b600080612cfc87876001611c83565b9050612d2483878681518110612d0e57fe5b6020026020010151610fb190919063ffffffff16565b868581518110612d3057fe5b6020026020010181815250506000612d4a888884896131db565b905083878681518110612d5957fe5b602002602001015101878681518110612d6e57fe5b602002602001018181525050612da56001611d86898981518110612d8e57fe5b602002602001015184610fb190919063ffffffff16565b98975050505050505050565b600080612dc087876001611c83565b9050612de883878781518110612dd257fe5b602002602001015161185690919063ffffffff16565b868681518110612df457fe5b6020026020010181815250506000612e0e888884886131db565b905083878781518110612e1d57fe5b602002602001015103878781518110612e3257fe5b602002602001018181525050612da56001612e53838a8981518110612d0e57fe5b90610fb1565b6000612e847f2f1a0bc900000000000000000000000000000000000000000000000000000000610a43565b821480612eb85750612eb57feb0f24d600000000000000000000000000000000000000000000000000000000610a43565b82145b806105c257506105c28261338b565b1c67ffffffffffffffff1690565b600080612ee4878787876131db565b905080868581518110612ef357fe5b602002602001015111612f0a5760009150506112f7565b600081878681518110612f1957fe5b6020026020010151039050612da5670de0b6b3a7640000612f43868461292590919063ffffffff16565b90611e1f565b60006060612f556117e3565b600080612f61856133ef565b91509150612f79612f70610fcb565b82106064611513565b6060612f83610fcb565b67ffffffffffffffff81118015612f9957600080fd5b50604051908082528060200260200182016040528015612fc3578160200160208202803683370190505b5090506000612fd0611601565b509050612fea81898587612fe26105dc565b600854613411565b828481518110612ff657fe5b6020908102919091010152509196919550909350505050565b60006060600061301e8461352d565b90506060613034868361302f6105dc565b613543565b9196919550909350505050565b6000606061304d6117e3565b6060600061305a856135f5565b9150915061306b8251610847610fcb565b6130758287611c22565b600061307f611601565b509050600061309a828a866130926105dc565b60085461360d565b90506130aa8382111560cf611513565b989297509195505050505050565b60006130c78215156004611513565b8183816130d057fe5b049392505050565b6000610698838360016126c1565b600060608060006130f6856135f5565b9150915061310c613105610fcb565b8351611980565b6131168287611c22565b6000613120611601565b509050600061313b828a866131336105dc565b6008546138a3565b90506130aa8382101560d0611513565b6000606060008061315b856133ef565b9150915061316a612f70610fcb565b6060613174610fcb565b67ffffffffffffffff8111801561318a57600080fd5b506040519080825280602002602001820160405280156131b4578160200160208202803683370190505b50905060006131c1611601565b509050612fea818985876131d36105dc565b600854613b32565b6000808451860290506000856000815181106131f357fe5b60200260200101519050600086518760008151811061320e57fe5b60200260200101510290506000600190505b87518110156132675761324c61324661323f848b8581518110611d2657fe5b8a51610f8d565b886130b8565b915061325d888281518110611ca357fe5b9250600101613220565b5086858151811061327457fe5b602002602001015182039150600061328c8788610f8d565b905060006132b86132ac6132a4846107378988610f8d565b6103e8610f8d565b8a8981518110611d2657fe5b905060006132d36132cc6132a48b896130b8565b8690611856565b90506000806132ef6132e58686611856565b6107378d86611856565b905060005b60ff81101561336f5781925061332461331186611d868586610f8d565b6107378e612e5388611d86886002610f8d565b91508282111561334d57600183830311613348575097506104f49650505050505050565b613367565b600182840311613367575097506104f49650505050505050565b6001016132f4565b5061337b610142612654565b5050505050505050949350505050565b60006133b67f38e9922e00000000000000000000000000000000000000000000000000000000610a43565b8214806105c257506133e77f50dd6ed900000000000000000000000000000000000000000000000000000000610a43565b909114919050565b60008082806020019051810190613406919061425e565b909590945092505050565b60008061342088886001611c83565b905060006134428261343c87613436818b610fb1565b90612a93565b90612ae1565b905060006134528a8a848b6131db565b90506000613466828b8b81518110612d0e57fe5b90506000805b8b518110156134a55761349b8c828151811061348457fe5b60200260200101518361185690919063ffffffff16565b915060010161346c565b5060006134ce828d8d815181106134b857fe5b6020026020010151611e1f90919063ffffffff16565b905060006134db82613c0f565b905060006134e98583612ae1565b905060006134f78683610fb1565b905061351861351183670de0b6b3a76400008e9003612925565b8290611856565b99505050505050505050509695505050505050565b6000818060200190518101906106989190614231565b606060006135518484611e1f565b90506060855167ffffffffffffffff8111801561356d57600080fd5b50604051908082528060200260200182016040528015613597578160200160208202803683370190505b50905060005b86518110156135eb576135cc838883815181106135b657fe5b602002602001015161292590919063ffffffff16565b8282815181106135d857fe5b602090810291909101015260010161359d565b5095945050505050565b606060008280602001905181019061340691906141ea565b600080805b86518110156136345761362a87828151811061348457fe5b9150600101613612565b506060855167ffffffffffffffff8111801561364f57600080fd5b50604051908082528060200260200182016040528015613679578160200160208202803683370190505b5090506000805b88518110156137405760006136b1858b848151811061369b57fe5b6020026020010151612a9390919063ffffffff16565b90506136ed8a83815181106136c257fe5b60200260200101516134368b85815181106136d957fe5b60200260200101518d8681518110612d0e57fe5b8483815181106136f957fe5b60200260200101818152505061373561372e8286858151811061371857fe5b6020026020010151612ae190919063ffffffff16565b8490611856565b925050600101613680565b506060885167ffffffffffffffff8111801561375b57600080fd5b50604051908082528060200260200182016040528015613785578160200160208202803683370190505b50905060005b89518110156138505760008482815181106137a257fe5b60200260200101518411156138095760006137cb6137bf86613c0f565b8d85815181106135b657fe5b905060006137df828d8681518110612d0e57fe5b90506138006137f982670de0b6b3a76400008d9003612a93565b8390611856565b92505050613820565b89828151811061381557fe5b602002602001015190505b613830818c8481518110612d0e57fe5b83838151811061383c57fe5b60209081029190910101525060010161378b565b50600061385f8b8b6001611c83565b9050600061386f8c846000611c83565b9050600061387d8284611e1f565b905061389261388b82613c0f565b8b90612ae1565b9d9c50505050505050505050505050565b600080805b86518110156138ca576138c087828151811061348457fe5b91506001016138a8565b506060855167ffffffffffffffff811180156138e557600080fd5b5060405190808252806020026020018201604052801561390f578160200160208202803683370190505b5090506000805b88518110156139a3576000613931858b84815181106134b857fe5b905061396d8a838151811061394257fe5b6020026020010151612f438b858151811061395957fe5b60200260200101518d8681518110612dd257fe5b84838151811061397957fe5b60200260200101818152505061399861372e828685815181106135b657fe5b925050600101613916565b506060885167ffffffffffffffff811180156139be57600080fd5b506040519080825280602002602001820160405280156139e8578160200160208202803683370190505b50905060005b8951811015613aa957600083858381518110613a0657fe5b60200260200101511115613a62576000613a2b6137bf86670de0b6b3a7640000610fb1565b90506000613a3f828d8681518110612d0e57fe5b9050613a596137f982670de0b6b3a76400008d9003612925565b92505050613a79565b898281518110613a6e57fe5b602002602001015190505b613a89818c8481518110612dd257fe5b838381518110613a9557fe5b6020908102919091010152506001016139ee565b506000613ab88b8b6001611c83565b90506000613ac88c846000611c83565b90506000613ad68284611e1f565b9050670de0b6b3a7640000811115613b2257613b148a7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c00008301612925565b9750505050505050506112f7565b60009750505050505050506112f7565b600080613b4188886001611c83565b90506000613b578261343c87613436818b611856565b90506000613b678a8a848b6131db565b90506000613b918a8a81518110613b7a57fe5b602002602001015183610fb190919063ffffffff16565b90506000805b8b51811015613bb957613baf8c828151811061348457fe5b9150600101613b97565b506000613bcc828d8d815181106134b857fe5b90506000613bd982613c0f565b90506000613be78583612ae1565b90506000613bf58683610fb1565b905061351861351183670de0b6b3a76400008e9003612a93565b6000670de0b6b3a76400008210613c275760006105c2565b50670de0b6b3a76400000390565b80356105c2816146ee565b600082601f830112613c50578081fd5b8135613c63613c5e826146ce565b6146a7565b818152915060208083019084810181840286018201871015613c8457600080fd5b60005b84811015613ca357813584529282019290820190600101613c87565b505050505092915050565b600082601f830112613cbe578081fd5b8151613ccc613c5e826146ce565b818152915060208083019084810181840286018201871015613ced57600080fd5b60005b84811015613ca357815184529282019290820190600101613cf0565b600082601f830112613d1c578081fd5b813567ffffffffffffffff811115613d32578182fd5b613d456020601f19601f840116016146a7565b9150808252836020828501011115613d5c57600080fd5b8060208401602084013760009082016020015292915050565b8035600281106105c257600080fd5b6000610120808385031215613d97578182fd5b613da0816146a7565b915050613dad8383613d75565b8152613dbc8360208401613c35565b6020820152613dce8360408401613c35565b6040820152606082013560608201526080820135608082015260a082013560a0820152613dfe8360c08401613c35565b60c0820152613e108360e08401613c35565b60e08201526101008083013567ffffffffffffffff811115613e3157600080fd5b613e3d85828601613d0c565b82840152505092915050565b600060208284031215613e5a578081fd5b8135610698816146ee565b60008060408385031215613e77578081fd5b8235613e82816146ee565b91506020830135613e92816146ee565b809150509250929050565b600080600060608486031215613eb1578081fd5b8335613ebc816146ee565b92506020840135613ecc816146ee565b929592945050506040919091013590565b600080600080600080600060e0888a031215613ef7578283fd5b8735613f02816146ee565b96506020880135613f12816146ee565b95506040880135945060608801359350608088013560ff81168114613f35578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215613f64578182fd5b8235613f6f816146ee565b946020939093013593505050565b600080600060608486031215613f91578081fd5b835167ffffffffffffffff80821115613fa8578283fd5b818601915086601f830112613fbb578283fd5b8151613fc9613c5e826146ce565b80828252602080830192508086018b828387028901011115613fe9578788fd5b8796505b84871015614014578051614000816146ee565b845260019690960195928101928101613fed565b50890151909750935050508082111561402b578283fd5b5061403886828701613cae565b925050604084015190509250925092565b60006020828403121561405a578081fd5b813561069881614703565b600060208284031215614076578081fd5b815161069881614703565b600080600080600080600060e0888a03121561409b578081fd5b8735965060208801356140ad816146ee565b955060408801356140bd816146ee565b9450606088013567ffffffffffffffff808211156140d9578283fd5b6140e58b838c01613c40565b955060808a0135945060a08a0135935060c08a0135915080821115614108578283fd5b506141158a828b01613d0c565b91505092959891949750929550565b600060208284031215614135578081fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610698578182fd5b600060208284031215614175578081fd5b8151610698816146ee565b60008060408385031215614192578182fd5b823561419d816146ee565b9150602083013567ffffffffffffffff8111156141b8578182fd5b6141c485828601613d0c565b9150509250929050565b6000602082840312156141df578081fd5b815161069881614711565b6000806000606084860312156141fe578081fd5b835161420981614711565b602085015190935067ffffffffffffffff811115614225578182fd5b61403886828701613cae565b60008060408385031215614243578182fd5b825161424e81614711565b6020939093015192949293505050565b600080600060608486031215614272578081fd5b835161427d81614711565b602085015160409095015190969495509392505050565b600080604083850312156142a6578182fd5b82516142b181614711565b602084015190925067ffffffffffffffff8111156142cd578182fd5b6141c485828601613cae565b600080600080608085870312156142ee578182fd5b843567ffffffffffffffff80821115614305578384fd5b61431188838901613d84565b95506020870135915080821115614326578384fd5b5061433387828801613c40565b949794965050505060408301359260600135919050565b60008060006060848603121561435e578081fd5b833567ffffffffffffffff811115614374578182fd5b61438086828701613d84565b9660208601359650604090950135949350505050565b6000602082840312156143a7578081fd5b5035919050565b600080604083850312156143c0578182fd5b50508035926020909101359150565b600080600080608085870312156143e4578182fd5b8451935060208501519250604085015191506060850151614404816146ee565b939692955090935050565b6000815180845260208085019450808401835b8381101561443e57815187529582019590820190600101614422565b509495945050505050565b60008151808452815b8181101561446e57602081850181015186830182015201614452565b8181111561447f5782602083870101525b50601f01601f19169290920160200192915050565b9182527fffffffff0000000000000000000000000000000000000000000000000000000016602082015260240190565b6000828483379101908152919050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b600060408252614531604083018561440f565b82810360208401526112f7818561440f565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000838252604060208301526104f46040830184614449565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526106986020830184614449565b6000838252604060208301526104f4604083018461440f565b9283529015156020830152604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156146c657600080fd5b604052919050565b600067ffffffffffffffff8211156146e4578081fd5b5060209081020190565b6001600160a01b03811681146105d957600080fd5b80151581146105d957600080fd5b600381106105d957600080fdfea264697066735822122074699730ea8aa4fa00d2702d985bebe2cf30c6abf09e7ee52a1750d232c882ff64736f6c63430007010033000000000000000000000000ad68ea482860cd7077a5d0684313dd3a9bc70fbb0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000000000071a8fd0000000000000000000000000000000000000000000000000000000000278d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d555344432e652f555344542e6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b55534443652d55534454650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a7d7079b0fead91f3e65f86e8915cb59c1a4c664000000000000000000000000c7198437980c041c805a1edcba50c1ce5db95118