60a060405234801561000f575f5ffd5b50604051610ef3380380610ef383398101604081905261002e9161022c565b6040518060400160405280600981526020016822b3b3902a37b5b2b760b91b8152506040518060400160405280600381526020016245474760e81b815250816003908161007b9190610304565b5060046100888282610304565b5050506001600160a01b038084166080528116156100aa576100aa81836100b2565b5050506103e3565b6001600160a01b0382166100e05760405163ec442f0560e01b81525f60048201526024015b60405180910390fd5b6100eb5f83836100ef565b5050565b6001600160a01b038316610119578060025f82825461010e91906103be565b909155506101899050565b6001600160a01b0383165f908152602081905260409020548181101561016b5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016100d7565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166101a5576002805482900390556101c3565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161020891815260200190565b60405180910390a3505050565b6001600160a01b0381168114610229575f5ffd5b50565b5f5f5f6060848603121561023e575f5ffd5b835161024981610215565b60208501516040860151919450925061026181610215565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061029457607f821691505b6020821081036102b257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156102ff57805f5260205f20601f840160051c810160208510156102dd5750805b601f840160051c820191505b818110156102fc575f81556001016102e9565b50505b505050565b81516001600160401b0381111561031d5761031d61026c565b6103318161032b8454610280565b846102b8565b6020601f821160018114610363575f831561034c5750848201515b5f19600385901b1c1916600184901b1784556102fc565b5f84815260208120601f198516915b828110156103925787850151825560209485019460019092019101610372565b50848210156103af57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156103dd57634e487b7160e01b5f52601160045260245ffd5b92915050565b608051610ae36104105f395f81816102bb01528181610400015281816104a6015261054c0152610ae35ff3fe608060405234801561000f575f5ffd5b50600436106100ad575f3560e01c806306fdde03146100b1578063095ea7b3146100cf57806318160ddd146100f257806323b872dd14610104578063313ce5671461011757806340c10f191461012657806342966c681461013b57806370a082311461014e57806379cc67901461017657806395d89b4114610189578063a9059cbb14610191578063dd62ed3e146101a4578063ffa1ad74146101b7575b5f5ffd5b6100b96101d8565b6040516100c691906108e9565b60405180910390f35b6100e26100dd366004610948565b610268565b60405190151581526020016100c6565b6002545b6040519081526020016100c6565b6100e2610112366004610972565b610281565b604051601281526020016100c6565b610139610134366004610948565b6102a4565b005b6101396101493660046109b0565b61036f565b6100f661015c3660046109c7565b6001600160a01b03165f9081526020819052604090205490565b610139610184366004610948565b61037c565b6100b9610391565b6100e261019f366004610948565b6103a0565b6100f66101b23660046109e9565b6103ad565b6040805180820190915260058152640302e342e360dc1b60208201526100b9565b6060600380546101e790610a20565b80601f016020809104026020016040519081016040528092919081815260200182805461021390610a20565b801561025e5780601f106102355761010080835404028352916020019161025e565b820191905f5260205f20905b81548152906001019060200180831161024157829003601f168201915b5050505050905090565b5f336102758185856103d7565b60019150505b92915050565b5f3361028e8582856103e9565b6102998585856105eb565b506001949350505050565b60405163fda1213b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fda1213b906102f190600190600401610a58565b602060405180830381865afa15801561030c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103309190610a67565b6001600160a01b0316336001600160a01b03161461036157604051636a468d6f60e01b815260040160405180910390fd5b61036b8282610651565b5050565b6103793382610685565b50565b6103878233836103e9565b61036b8282610685565b6060600480546101e790610a20565b5f336102758185856105eb565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6103e483838360016106b9565b505050565b60405163fda1213b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fda1213b9061043690600190600401610a58565b602060405180830381865afa158015610451573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104759190610a67565b6001600160a01b0316336001600160a01b0316148061052f575060405163fda1213b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fda1213b906104db906004908101610a58565b602060405180830381865afa1580156104f6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051a9190610a67565b6001600160a01b0316336001600160a01b0316145b806105d6575060405163fda1213b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063fda1213b9061058290600290600401610a58565b602060405180830381865afa15801561059d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c19190610a67565b6001600160a01b0316336001600160a01b0316145b156105e057505050565b6103e483838361078c565b6001600160a01b03831661061d575f604051634b637e8f60e11b81526004016106149190610a82565b60405180910390fd5b6001600160a01b038216610646575f60405163ec442f0560e01b81526004016106149190610a82565b6103e48383836107d6565b6001600160a01b03821661067a575f60405163ec442f0560e01b81526004016106149190610a82565b61036b5f83836107d6565b6001600160a01b0382166106ae575f604051634b637e8f60e11b81526004016106149190610a82565b61036b825f836107d6565b6001600160a01b0384166106e2575f60405163e602df0560e01b81526004016106149190610a82565b6001600160a01b03831661070b575f604051634a1406b160e11b81526004016106149190610a82565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561078657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161077d91815260200190565b60405180910390a35b50505050565b5f61079784846103ad565b90505f19811461078657818110156107c857828183604051637dc7a0d960e11b815260040161061493929190610a96565b61078684848484035f6106b9565b6001600160a01b038316610800578060025f8282546107f59190610ab7565b9091555061085d9050565b6001600160a01b0383165f908152602081905260409020548181101561083f5783818360405163391434e360e21b815260040161061493929190610a96565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661087957600280548290039055610897565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108dc91815260200190565b60405180910390a3505050565b602081525f82518060208401525f5b8181101561091557602081860181015160408684010152016108f8565b505f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610379575f5ffd5b5f5f60408385031215610959575f5ffd5b823561096481610934565b946020939093013593505050565b5f5f5f60608486031215610984575f5ffd5b833561098f81610934565b9250602084013561099f81610934565b929592945050506040919091013590565b5f602082840312156109c0575f5ffd5b5035919050565b5f602082840312156109d7575f5ffd5b81356109e281610934565b9392505050565b5f5f604083850312156109fa575f5ffd5b8235610a0581610934565b91506020830135610a1581610934565b809150509250929050565b600181811c90821680610a3457607f821691505b602082108103610a5257634e487b7160e01b5f52602260045260245ffd5b50919050565b61ffff91909116815260200190565b5f60208284031215610a77575f5ffd5b81516109e281610934565b6001600160a01b0391909116815260200190565b6001600160a01b039390931683526020830191909152604082015260600190565b8082018082111561027b57634e487b7160e01b5f52601160045260245ffdfea164736f6c634300081b000a000000000000000000000000ff1de7d7a4813ef2d649d5e2e023abadaa660edf00000000000000000000000000000000000000000000021e19e0c9bab2400000000000000000000000000000a8e5d8553f584b8f62b065de783c696e925fd8e0