0x60806040526004361061014f5760003560e01c806395d89b41116100b6578063e669b70c1161006f578063e669b70c146103f1578063ea6e7ada14610413578063eb3be19e14610428578063ec32f13914610448578063f2fde38b14610468578063f74ae7221461048857610168565b806395d89b411461032c5780639dc29fac14610341578063a457c2d714610361578063a9059cbb14610381578063d2b559b0146103a1578063dd62ed3e146103d157610168565b806340c10f191161010857806340c10f19146102505780634bbf179b146102705780635b662f051461028f57806370a08231146102af578063715018a6146102e55780638da5cb5b146102fa57610168565b806306fdde031461017a578063095ea7b3146101a557806318160ddd146101d557806323b872dd146101f4578063313ce56714610214578063395093511461023057610168565b366101685761016633678ac7230489e800006104a8565b005b61016633678ac7230489e800006104a8565b34801561018657600080fd5b5061018f61058c565b60405161019c919061121b565b60405180910390f35b3480156101b157600080fd5b506101c56101c036600461128c565b61061e565b604051901515815260200161019c565b3480156101e157600080fd5b506002545b60405190815260200161019c565b34801561020057600080fd5b506101c561020f3660046112b6565b610636565b34801561022057600080fd5b506040516012815260200161019c565b34801561023c57600080fd5b506101c561024b36600461128c565b61065a565b34801561025c57600080fd5b5061016661026b36600461128c565b61067c565b34801561027c57600080fd5b506101e66a52b7d2dcc80cd2e400000081565b34801561029b57600080fd5b506101666102aa3660046112f2565b6106cd565b3480156102bb57600080fd5b506101e66102ca366004611325565b6001600160a01b031660009081526020819052604090205490565b3480156102f157600080fd5b50610166610840565b34801561030657600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161019c565b34801561033857600080fd5b5061018f610854565b34801561034d57600080fd5b5061016661035c36600461128c565b610863565b34801561036d57600080fd5b506101c561037c36600461128c565b6108ac565b34801561038d57600080fd5b506101c561039c36600461128c565b610927565b3480156103ad57600080fd5b506101c56103bc366004611325565b60076020526000908152604090205460ff1681565b3480156103dd57600080fd5b506101e66103ec3660046112f2565b610935565b3480156103fd57600080fd5b50610406610960565b60405161019c9190611347565b34801561041f57600080fd5b506006546101e6565b34801561043457600080fd5b50610166610443366004611325565b6109c1565b34801561045457600080fd5b50610166610463366004611325565b610a91565b34801561047457600080fd5b50610166610483366004611325565b610c12565b34801561049457600080fd5b506103146104a3366004611394565b610c8b565b6001600160a01b0382166105035760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b806002600082825461051591906113c3565b90915550506001600160a01b038216600090815260208190526040812080548392906105429084906113c3565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60606003805461059b906113db565b80601f01602080910402602001604051908101604052809291908181526020018280546105c7906113db565b80156106145780601f106105e957610100808354040283529160200191610614565b820191906000526020600020905b8154815290600101906020018083116105f757829003601f168201915b5050505050905090565b60003361062c818585610cb5565b5060019392505050565b600033610644858285610dd9565b61064f858585610e53565b506001949350505050565b60003361062c81858561066d8383610935565b61067791906113c3565b610cb5565b61068682826104a8565b604080516001600160a01b0384168152602081018390527fc21b9e3e0e32bd16e5dd3e87760dbbcda85718fe33de110d8d35790b3e949da591015b60405180910390a15050565b6106d5611021565b816001600160a01b0381166106fc5760405162461bcd60e51b81526004016104fa90611416565b828260005b60065481101561079257856001600160a01b0316600682815481106107285761072861144d565b6000918252602090912001546001600160a01b0316141561078a5784600682815481106107575761075761144d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610792565b600101610701565b506001600160a01b038581166000818152600760209081526040808320805460ff199081169091559489168352918290208054909416600117909355519081527f2510a38dd73d400feb7d41e4c9fd7fab5a40fd8b56a538d24d5d78fa980d64b6910160405180910390a16040516001600160a01b03851681527fb51c887fb3fd34805d23d6b04d242235504b80083b154054458d10cf33d604fc9060200160405180910390a15050505050565b610848611021565b610852600061107b565b565b60606004805461059b906113db565b61086d82826110cd565b604080516001600160a01b0384168152602081018390527f55e621df2b6b20896903f0e6d2752b86d6a8eba2cdafbc286c8221e949c1acd691016106c1565b600033816108ba8286610935565b90508381101561091a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104fa565b61064f8286868403610cb5565b60003361062c818585610e53565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600680548060200260200160405190810160405280929190818152602001828054801561061457602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161099a575050505050905090565b6109c9611021565b806001600160a01b0381166109f05760405162461bcd60e51b81526004016104fa90611416565b6001600160a01b0382166000818152600760209081526040808320805460ff191660019081179091556006805491820181559093527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90920180546001600160a01b03191684179055905191825283917f2510a38dd73d400feb7d41e4c9fd7fab5a40fd8b56a538d24d5d78fa980d64b691015b60405180910390a1505050565b610a99611021565b806001600160a01b038116610ac05760405162461bcd60e51b81526004016104fa90611416565b8160005b600654811015610bc057836001600160a01b031660068281548110610aeb57610aeb61144d565b6000918252602090912001546001600160a01b03161415610bb85760068054610b1690600190611463565b81548110610b2657610b2661144d565b600091825260209091200154600680546001600160a01b039092169183908110610b5257610b5261144d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506006805480610b9157610b9161147a565b600082815260209020810160001990810180546001600160a01b0319169055019055610bc0565b600101610ac4565b506001600160a01b038316600081815260076020908152604091829020805460ff1916905590519182527fb51c887fb3fd34805d23d6b04d242235504b80083b154054458d10cf33d604fc9101610a84565b610c1a611021565b6001600160a01b038116610c7f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104fa565b610c888161107b565b50565b60068181548110610c9b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b038316610d175760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104fa565b6001600160a01b038216610d785760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104fa565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610de58484610935565b90506000198114610e4d5781811015610e405760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104fa565b610e4d8484848403610cb5565b50505050565b6001600160a01b038316610eb75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104fa565b6001600160a01b038216610f195760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104fa565b6001600160a01b03831660009081526020819052604090205481811015610f915760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104fa565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610fc89084906113c3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161101491815260200190565b60405180910390a3610e4d565b6005546001600160a01b031633146108525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104fa565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661112d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104fa565b6001600160a01b038216600090815260208190526040902054818110156111a15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104fa565b6001600160a01b03831660009081526020819052604081208383039055600280548492906111d0908490611463565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600060208083528351808285015260005b818110156112485785810183015185820160400152820161122c565b8181111561125a576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461128757600080fd5b919050565b6000806040838503121561129f57600080fd5b6112a883611270565b946020939093013593505050565b6000806000606084860312156112cb57600080fd5b6112d484611270565b92506112e260208501611270565b9150604084013590509250925092565b6000806040838503121561130557600080fd5b61130e83611270565b915061131c60208401611270565b90509250929050565b60006020828403121561133757600080fd5b61134082611270565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156113885783516001600160a01b031683529284019291840191600101611363565b50909695505050505050565b6000602082840312156113a657600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156113d6576113d66113ad565b500190565b600181811c908216806113ef57607f821691505b6020821081141561141057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601d908201527f57243a2044494f5320416464726573732063616e6e6f7420626520302e000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600082821015611475576114756113ad565b500390565b634e487b7160e01b600052603160045260246000fdfea264697066735822122009b3b954cc42ba74d80183d925dc7ebaaebfe4e2320ca10c92d7bb2faca0e73364736f6c63430008090033