60806040526006805460ff1916600117905534801561001c575f80fd5b5061002633610098565b60408051808201909152600b81526a149a5d1cdd48141bda5b9d60aa1b60208201526004906100559082610263565b50604080518082019091526002815261052560f41b602082015260059061007c9082610263565b50610093336b204fce5e3e250261100000006100e7565b610342565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166101415760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060035f828254610152919061031d565b90915550506001600160a01b0382165f908152600160205260408120805483929061017e90849061031d565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101f457607f821691505b60208210810361021257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101c757805f5260205f20601f840160051c8101602085101561023d5750805b601f840160051c820191505b8181101561025c575f8155600101610249565b5050505050565b81516001600160401b0381111561027c5761027c6101cc565b6102908161028a84546101e0565b84610218565b6020601f8211600181146102c2575f83156102ab5750848201515b5f19600385901b1c1916600184901b17845561025c565b5f84815260208120601f198516915b828110156102f157878501518255602094850194600190920191016102d1565b508482101561030e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561033c57634e487b7160e01b5f52601160045260245ffd5b92915050565b61159d8061034f5f395ff3fe608060405234801561000f575f80fd5b506004361061016e575f3560e01c8063715018a6116100d2578063a79854bc11610088578063dfad15da11610063578063dfad15da14610341578063f2fde38b1461034e578063faa85eb714610361575f80fd5b8063a79854bc146102c7578063a9059cbb146102e9578063dd62ed3e146102fc575f80fd5b806395d89b41116100b857806395d89b41146102995780639dc29fac146102a1578063a457c2d7146102b4575f80fd5b8063715018a61461026a5780638da5cb5b14610272575f80fd5b80633950935111610127578063531847f41161010d578063531847f41461020f5780635a4462151461022257806370a0823114610235575f80fd5b806339509351146101e757806340c10f19146101fa575f80fd5b806318160ddd1161015757806318160ddd146101b357806323b872dd146101c5578063313ce567146101d8575f80fd5b806306fdde0314610172578063095ea7b314610190575b5f80fd5b61017a610374565b6040516101879190611073565b60405180910390f35b6101a361019e366004611104565b610404565b6040519015158152602001610187565b6003545b604051908152602001610187565b6101a36101d336600461112c565b61041d565b60405160128152602001610187565b6101a36101f5366004611104565b610440565b61020d610208366004611104565b61048b565b005b61020d61021d366004611175565b6104a1565b61020d61023036600461129b565b6104fe565b6101b7610243366004611300565b73ffffffffffffffffffffffffffffffffffffffff165f9081526001602052604090205490565b61020d610524565b5f5460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610187565b61017a610537565b61020d6102af366004611104565b610546565b6101a36102c2366004611104565b610558565b6101a36102d5366004611300565b60076020525f908152604090205460ff1681565b6101a36102f7366004611104565b61062d565b6101b761030a366004611320565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260026020908152604080832093909416825291909152205490565b6006546101a39060ff1681565b61020d61035c366004611300565b61063a565b61020d61036f366004611348565b6106f1565b60606004805461038390611361565b80601f01602080910402602001604051908101604052809291908181526020018280546103af90611361565b80156103fa5780601f106103d1576101008083540402835291602001916103fa565b820191905f5260205f20905b8154815290600101906020018083116103dd57829003601f168201915b5050505050905090565b5f3361041181858561072a565b60019150505b92915050565b5f3361042a8582856108dc565b6104358585856109b2565b506001949350505050565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919061041190829086906104869087906113df565b61072a565b610493610c5c565b61049d8282610cf8565b5050565b6104a9610c5c565b73ffffffffffffffffffffffffffffffffffffffff919091165f90815260076020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b610506610c5c565b6004610512838261143d565b50600561051f828261143d565b505050565b61052c610c5c565b6105355f610e15565b565b60606005805461038390611361565b61054e610c5c565b61049d8282610e89565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610435828686840361072a565b5f336104118185856109b2565b610642610c5c565b73ffffffffffffffffffffffffffffffffffffffff81166106e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610617565b6106ee81610e15565b50565b6106f9610c5c565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b73ffffffffffffffffffffffffffffffffffffffff83166107cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610617565b73ffffffffffffffffffffffffffffffffffffffff821661086f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610617565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600260209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109ac578181101561099f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610617565b6109ac848484840361072a565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610617565b60065460ff1615610af157335f9081526007602052604090205460ff1680610a8b5750325f9081526007602052604090205460ff165b610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526974737520506f696e74206973206e6f74207472616e7366657261626c65006044820152606401610617565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526001602052604090205481811015610ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610617565b73ffffffffffffffffffffffffffffffffffffffff8085165f90815260016020526040808220858503905591851681529081208054849290610be99084906113df565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c4f91815260200190565b60405180910390a36109ac565b33610c7b5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610617565b73ffffffffffffffffffffffffffffffffffffffff8216610d75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610617565b8060035f828254610d8691906113df565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290610dbf9084906113df565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610f2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610617565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604090205481811015610fe1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610617565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260016020526040812083830390556003805484929061101c908490611554565b90915550506040518281525f9073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b602081525f82518060208401525f5b8181101561109f5760208186018101516040868401015201611082565b505f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146110ff575f80fd5b919050565b5f8060408385031215611115575f80fd5b61111e836110dc565b946020939093013593505050565b5f805f6060848603121561113e575f80fd5b611147846110dc565b9250611155602085016110dc565b929592945050506040919091013590565b803580151581146110ff575f80fd5b5f8060408385031215611186575f80fd5b61118f836110dc565b915061119d60208401611166565b90509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126111e2575f80fd5b813567ffffffffffffffff8111156111fc576111fc6111a6565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715611268576112686111a6565b60405281815283820160200185101561127f575f80fd5b816020850160208301375f918101602001919091529392505050565b5f80604083850312156112ac575f80fd5b823567ffffffffffffffff8111156112c2575f80fd5b6112ce858286016111d3565b925050602083013567ffffffffffffffff8111156112ea575f80fd5b6112f6858286016111d3565b9150509250929050565b5f60208284031215611310575f80fd5b611319826110dc565b9392505050565b5f8060408385031215611331575f80fd5b61133a836110dc565b915061119d602084016110dc565b5f60208284031215611358575f80fd5b61131982611166565b600181811c9082168061137557607f821691505b6020821081036113ac577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115610417576104176113b2565b601f82111561051f57805f5260205f20601f840160051c810160208510156114175750805b601f840160051c820191505b81811015611436575f8155600101611423565b5050505050565b815167ffffffffffffffff811115611457576114576111a6565b61146b816114658454611361565b846113f2565b6020601f8211600181146114bc575f83156114865750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611436565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b8281101561150957878501518255602094850194600190920191016114e9565b508482101561154557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b81810381811115610417576104176113b256fea26469706673582212201033bc54dcb314d46b0f48cb6ef6c0cc4ef824f9acba660cfdfe54747f5b488b64736f6c634300081a0033