0x60806040526004361061018f5760003560e01c806365b61b77116100d6578063a9059cbb1161007f578063e82bef2911610059578063e82bef2914610493578063efdcd974146104b8578063f2fde38b146104d857600080fd5b8063a9059cbb1461040d578063b9d2326e1461042d578063dd62ed3e1461044d57600080fd5b8063715018a6116100b0578063715018a6146103c55780638da5cb5b146103da57806395d89b41146103f857600080fd5b806365b61b771461035a5780636c5808011461037a57806370a082311461038f57600080fd5b8063313ce5671161013857806340b9a54b1161011257806340b9a54b146102f65780634bf28fd01461030c578063590f897e1461034457600080fd5b8063313ce5671461027457806336b2e027146102965780633ecad271146102c657600080fd5b806318160ddd1161016957806318160ddd1461021357806323b872dd146102325780632b0b1b401461025257600080fd5b8063064a59d01461019b57806306fdde03146101d1578063095ea7b3146101f357600080fd5b3661019657005b600080fd5b3480156101a757600080fd5b50600d546101bc90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156101dd57600080fd5b506101e66104f8565b6040516101c8919061102f565b3480156101ff57600080fd5b506101bc61020e366004611095565b61058a565b34801561021f57600080fd5b506007545b6040519081526020016101c8565b34801561023e57600080fd5b506101bc61024d3660046110c1565b6105a1565b34801561025e57600080fd5b5061027261026d366004611102565b610638565b005b34801561028057600080fd5b5060055460405160ff90911681526020016101c8565b3480156102a257600080fd5b506101bc6102b1366004611140565b60066020526000908152604090205460ff1681565b3480156102d257600080fd5b506101bc6102e1366004611140565b60096020526000908152604090205460ff1681565b34801561030257600080fd5b50610224600b5481565b34801561031857600080fd5b50600d5461032c906001600160a01b031681565b6040516001600160a01b0390911681526020016101c8565b34801561035057600080fd5b50610224600c5481565b34801561036657600080fd5b5060085461032c906001600160a01b031681565b34801561038657600080fd5b506102726106b6565b34801561039b57600080fd5b506102246103aa366004611140565b6001600160a01b031660009081526001602052604090205490565b3480156103d157600080fd5b50610272610773565b3480156103e657600080fd5b506000546001600160a01b031661032c565b34801561040457600080fd5b506101e661080b565b34801561041957600080fd5b506101bc610428366004611095565b61081a565b34801561043957600080fd5b50610272610448366004611164565b610827565b34801561045957600080fd5b50610224610468366004611186565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561049f57600080fd5b5060055461032c9061010090046001600160a01b031681565b3480156104c457600080fd5b506102726104d3366004611140565b6108fd565b3480156104e457600080fd5b506102726104f3366004611140565b610980565b606060038054610507906111b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610533906111b4565b80156105805780601f1061055557610100808354040283529160200191610580565b820191906000526020600020905b81548152906001019060200180831161056357829003601f168201915b5050505050905090565b6000610597338484610a6a565b5060015b92915050565b60006105ae848484610acb565b6001600160a01b03841660009081526002602090815260408083203384529091529020546000191461062e576001600160a01b0384166000908152600260209081526040808320338452909152902054610609908390611204565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6000546001600160a01b0316331461068b5760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b60448201526064015b60405180910390fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146107045760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b6044820152606401610682565b600d54600160a01b900460ff161561075e5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610682565b600d805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146107c15760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b6044820152606401610682565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b606060048054610507906111b4565b6000610597338484610acb565b6000546001600160a01b031633146108755760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b6044820152606401610682565b600c819055600b82905560fa8211156108bb5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401610682565b60fa600c5411156108f95760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401610682565b5050565b6000546001600160a01b0316331461094b5760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b6044820152606401610682565b600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6000546001600160a01b031633146109ce5760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b6044820152606401610682565b6001600160a01b038116610a0f5760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401610682565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600d54600160a01b900460ff16610b67576001600160a01b03831660009081526006602052604090205460ff1680610b1b57506001600160a01b03821660009081526006602052604090205460ff165b610b675760405162461bcd60e51b815260206004820152601760248201527f54726164696e67204e6f742059657420537461727465640000000000000000006044820152606401610682565b6001600160a01b03831660009081526001602052604090205481811015610bc35760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401610682565b6001600160a01b038316600090815260096020526040812054819060ff168015610bf05750600a5460ff16155b8015610c1557506001600160a01b03861660009081526006602052604090205460ff16155b8015610c3a57506001600160a01b03851660009081526006602052604090205460ff16155b15610c7457306000908152600160205260409020548015610c725784818111610c635780610c65565b815b9050610c7081610d09565b505b505b6001600160a01b03861660009081526006602052604090205460ff16158015610cb657506001600160a01b03851660009081526006602052604090205460ff16155b8015610cc55750600a5460ff16155b15610ccf57600191505b6001600160a01b03851660009081526009602052604090205460ff1615610cf4575060015b610d018686868585610e9e565b505050505050565b600a805460ff191660011790556040805160028082526060820183526000926020830190803683370190505090503081600081518110610d4b57610d4b611217565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc8919061122d565b81600181518110610ddb57610ddb611217565b6001600160a01b03928316602091820292909201015260085460055460405163791ac94760e01b81529183169263791ac94792610e2c9287926000928892610100900490911690429060040161124a565b600060405180830381600087803b158015610e4657600080fd5b505af1925050508015610e57575060015b610e9057604051600081527fbdf1a66ac2980d0df84c6c5344b4d62f3f4578219817cf4bcb8d8a983bbe6f169060200160405180910390a15b5050600a805460ff19169055565b6001600160a01b038516600090815260016020526040902054610ec2908490611204565b6001600160a01b0386166000908152600160205260408120919091558215610f9f5760008215610ef55750600c54610efa565b50600b545b60006064610f0883886112bb565b610f1291906112d2565b90508015610f9c57610f2481846112f4565b30600090815260016020526040902054909350610f429082906112f4565b30600081815260016020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f939085815260200190565b60405180910390a35b50505b610fa98185611204565b6001600160a01b038616600090815260016020526040902054610fcc91906112f4565b6001600160a01b0380871660008181526001602052604090209290925587167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6110168488611204565b60405190815260200160405180910390a3505050505050565b600060208083528351808285015260005b8181101561105c57858101830151858201604001528201611040565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461109257600080fd5b50565b600080604083850312156110a857600080fd5b82356110b38161107d565b946020939093013593505050565b6000806000606084860312156110d657600080fd5b83356110e18161107d565b925060208401356110f18161107d565b929592945050506040919091013590565b6000806040838503121561111557600080fd5b82356111208161107d565b91506020830135801515811461113557600080fd5b809150509250929050565b60006020828403121561115257600080fd5b813561115d8161107d565b9392505050565b6000806040838503121561117757600080fd5b50508035926020909101359150565b6000806040838503121561119957600080fd5b82356111a48161107d565b915060208301356111358161107d565b600181811c908216806111c857607f821691505b6020821081036111e857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561059b5761059b6111ee565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561123f57600080fd5b815161115d8161107d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561129a5784516001600160a01b031683529383019391830191600101611275565b50506001600160a01b03969096166060850152505050608001529392505050565b808202811582820484141761059b5761059b6111ee565b6000826112ef57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561059b5761059b6111ee56fea264697066735822122009e5118c115d17c134c1f49e4f0050b29e3ec7e7f8c3e30ff17b98099c1abe9664736f6c63430008130033
0x60806040526002600b556002600c553480156200001b57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060408051808201909152600c81526b2334b9329023b2b739b632b960a11b60208201526003906200008f908262000442565b50604080518082019091526008815267464952454741525960c01b6020820152600490620000be908262000442565b506005805460ff19166009179055600880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915530600090815260026020908152604080832084845282528083206000199055805163c45a015560e01b8152905164174876e800949392849263c45a015592600480830193928290030181865afa15801562000154573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017a91906200050e565b90506000816001600160a01b031663c9c6539630856001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f391906200050e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026791906200050e565b600d80546001600160a01b0319166001600160a01b038381169182179092556000908152600960209081526040808320805460ff19908116600190811790925530855260069093528184208054841682179055338085528285208054851683179055600580546101009004871686528386208054861684179055958a16855291909320805490921690921790559054919250906200030a9060ff16600a62000655565b62000316908662000666565b60078190556001600160a01b038216600081815260016020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055506200068092505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620003c857607f821691505b602082108103620003e957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200043d57600081815260208120601f850160051c81016020861015620004185750805b601f850160051c820191505b81811015620004395782815560010162000424565b5050505b505050565b81516001600160401b038111156200045e576200045e6200039d565b62000476816200046f8454620003b3565b84620003ef565b602080601f831160018114620004ae5760008415620004955750858301515b600019600386901b1c1916600185901b17855562000439565b600085815260208120601f198616915b82811015620004df57888601518255948401946001909101908401620004be565b5085821015620004fe5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200052157600080fd5b81516001600160a01b03811681146200053957600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005975781600019048211156200057b576200057b62000540565b808516156200058957918102915b93841c93908002906200055b565b509250929050565b600082620005b0575060016200064f565b81620005bf575060006200064f565b8160018114620005d85760028114620005e35762000603565b60019150506200064f565b60ff841115620005f757620005f762000540565b50506001821b6200064f565b5060208310610133831016604e8410600b841016171562000628575081810a6200064f565b62000634838362000556565b80600019048211156200064b576200064b62000540565b0290505b92915050565b60006200053960ff8416836200059f565b80820281158282048414176200064f576200064f62000540565b61133d80620006906000396000f3fe60806040526004361061018f5760003560e01c806365b61b77116100d6578063a9059cbb1161007f578063e82bef2911610059578063e82bef2914610493578063efdcd974146104b8578063f2fde38b146104d857600080fd5b8063a9059cbb1461040d578063b9d2326e1461042d578063dd62ed3e1461044d57600080fd5b8063715018a6116100b0578063715018a6146103c55780638da5cb5b146103da57806395d89b41146103f857600080fd5b806365b61b771461035a5780636c5808011461037a57806370a082311461038f57600080fd5b8063313ce5671161013857806340b9a54b1161011257806340b9a54b146102f65780634bf28fd01461030c578063590f897e1461034457600080fd5b8063313ce5671461027457806336b2e027146102965780633ecad271146102c657600080fd5b806318160ddd1161016957806318160ddd1461021357806323b872dd146102325780632b0b1b401461025257600080fd5b8063064a59d01461019b57806306fdde03146101d1578063095ea7b3146101f357600080fd5b3661019657005b600080fd5b3480156101a757600080fd5b50600d546101bc90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156101dd57600080fd5b506101e66104f8565b6040516101c8919061102f565b3480156101ff57600080fd5b506101bc61020e366004611095565b61058a565b34801561021f57600080fd5b506007545b6040519081526020016101c8565b34801561023e57600080fd5b506101bc61024d3660046110c1565b6105a1565b34801561025e57600080fd5b5061027261026d366004611102565b610638565b005b34801561028057600080fd5b5060055460405160ff90911681526020016101c8565b3480156102a257600080fd5b506101bc6102b1366004611140565b60066020526000908152604090205460ff1681565b3480156102d257600080fd5b506101bc6102e1366004611140565b60096020526000908152604090205460ff1681565b34801561030257600080fd5b50610224600b5481565b34801561031857600080fd5b50600d5461032c906001600160a01b031681565b6040516001600160a01b0390911681526020016101c8565b34801561035057600080fd5b50610224600c5481565b34801561036657600080fd5b5060085461032c906001600160a01b031681565b34801561038657600080fd5b506102726106b6565b34801561039b57600080fd5b506102246103aa366004611140565b6001600160a01b031660009081526001602052604090205490565b3480156103d157600080fd5b50610272610773565b3480156103e657600080fd5b506000546001600160a01b031661032c565b34801561040457600080fd5b506101e661080b565b34801561041957600080fd5b506101bc610428366004611095565b61081a565b34801561043957600080fd5b50610272610448366004611164565b610827565b34801561045957600080fd5b50610224610468366004611186565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561049f57600080fd5b5060055461032c9061010090046001600160a01b031681565b3480156104c457600080fd5b506102726104d3366004611140565b6108fd565b3480156104e457600080fd5b506102726104f3366004611140565b610980565b606060038054610507906111b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610533906111b4565b80156105805780601f1061055557610100808354040283529160200191610580565b820191906000526020600020905b81548152906001019060200180831161056357829003601f168201915b5050505050905090565b6000610597338484610a6a565b5060015b92915050565b60006105ae848484610acb565b6001600160a01b03841660009081526002602090815260408083203384529091529020546000191461062e576001600160a01b0384166000908152600260209081526040808320338452909152902054610609908390611204565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6000546001600160a01b0316331461068b5760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b60448201526064015b60405180910390fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146107045760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b6044820152606401610682565b600d54600160a01b900460ff161561075e5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610682565b600d805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146107c15760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b6044820152606401610682565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b606060048054610507906111b4565b6000610597338484610acb565b6000546001600160a01b031633146108755760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b6044820152606401610682565b600c819055600b82905560fa8211156108bb5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401610682565b60fa600c5411156108f95760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401610682565b5050565b6000546001600160a01b0316331461094b5760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b6044820152606401610682565b600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6000546001600160a01b031633146109ce5760405162461bcd60e51b81526020600482015260116024820152703cb7ba9030b932903737ba1037bbb732b960791b6044820152606401610682565b6001600160a01b038116610a0f5760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401610682565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600d54600160a01b900460ff16610b67576001600160a01b03831660009081526006602052604090205460ff1680610b1b57506001600160a01b03821660009081526006602052604090205460ff165b610b675760405162461bcd60e51b815260206004820152601760248201527f54726164696e67204e6f742059657420537461727465640000000000000000006044820152606401610682565b6001600160a01b03831660009081526001602052604090205481811015610bc35760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401610682565b6001600160a01b038316600090815260096020526040812054819060ff168015610bf05750600a5460ff16155b8015610c1557506001600160a01b03861660009081526006602052604090205460ff16155b8015610c3a57506001600160a01b03851660009081526006602052604090205460ff16155b15610c7457306000908152600160205260409020548015610c725784818111610c635780610c65565b815b9050610c7081610d09565b505b505b6001600160a01b03861660009081526006602052604090205460ff16158015610cb657506001600160a01b03851660009081526006602052604090205460ff16155b8015610cc55750600a5460ff16155b15610ccf57600191505b6001600160a01b03851660009081526009602052604090205460ff1615610cf4575060015b610d018686868585610e9e565b505050505050565b600a805460ff191660011790556040805160028082526060820183526000926020830190803683370190505090503081600081518110610d4b57610d4b611217565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc8919061122d565b81600181518110610ddb57610ddb611217565b6001600160a01b03928316602091820292909201015260085460055460405163791ac94760e01b81529183169263791ac94792610e2c9287926000928892610100900490911690429060040161124a565b600060405180830381600087803b158015610e4657600080fd5b505af1925050508015610e57575060015b610e9057604051600081527fbdf1a66ac2980d0df84c6c5344b4d62f3f4578219817cf4bcb8d8a983bbe6f169060200160405180910390a15b5050600a805460ff19169055565b6001600160a01b038516600090815260016020526040902054610ec2908490611204565b6001600160a01b0386166000908152600160205260408120919091558215610f9f5760008215610ef55750600c54610efa565b50600b545b60006064610f0883886112bb565b610f1291906112d2565b90508015610f9c57610f2481846112f4565b30600090815260016020526040902054909350610f429082906112f4565b30600081815260016020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f939085815260200190565b60405180910390a35b50505b610fa98185611204565b6001600160a01b038616600090815260016020526040902054610fcc91906112f4565b6001600160a01b0380871660008181526001602052604090209290925587167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6110168488611204565b60405190815260200160405180910390a3505050505050565b600060208083528351808285015260005b8181101561105c57858101830151858201604001528201611040565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461109257600080fd5b50565b600080604083850312156110a857600080fd5b82356110b38161107d565b946020939093013593505050565b6000806000606084860312156110d657600080fd5b83356110e18161107d565b925060208401356110f18161107d565b929592945050506040919091013590565b6000806040838503121561111557600080fd5b82356111208161107d565b91506020830135801515811461113557600080fd5b809150509250929050565b60006020828403121561115257600080fd5b813561115d8161107d565b9392505050565b6000806040838503121561117757600080fd5b50508035926020909101359150565b6000806040838503121561119957600080fd5b82356111a48161107d565b915060208301356111358161107d565b600181811c908216806111c857607f821691505b6020821081036111e857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561059b5761059b6111ee565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561123f57600080fd5b815161115d8161107d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561129a5784516001600160a01b031683529383019391830191600101611275565b50506001600160a01b03969096166060850152505050608001529392505050565b808202811582820484141761059b5761059b6111ee565b6000826112ef57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561059b5761059b6111ee56fea264697066735822122009e5118c115d17c134c1f49e4f0050b29e3ec7e7f8c3e30ff17b98099c1abe9664736f6c63430008130033