0x608060405234801561001057600080fd5b50600436106101735760003560e01c806397aba7f9116100de578063c76b45ec11610097578063dfcceb8811610071578063dfcceb881461035f578063ed672f8414610379578063f2fde38b1461038c578063fa5408011461039f57600080fd5b8063c76b45ec14610326578063cd6ef9b114610339578063d2b0737b1461034c57600080fd5b806397aba7f9146102965780639870d7fe146102a95780639b0ef9ed146102bc578063a7bb5803146102cf578063ac8a584a14610300578063b124eda91461031357600080fd5b806357ad5a311161013057806357ad5a31146102235780635b7633d014610236578063715018a61461026157806380d8af6d14610269578063817b1cd21461027c5780638da5cb5b1461028557600080fd5b8063046dc1661461017857806313e7c9d81461018d57806318b85d2a146101c55780631e9ab754146101cd57806339f60ca8146101e0578063417243c91461020e575b600080fd5b61018b610186366004611bc0565b6103b2565b005b6101b061019b366004611bc0565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61018b610462565b61018b6101db366004611bc0565b610505565b6102006101ee366004611bc0565b60056020526000908152604090205481565b6040519081526020016101bc565b61021661059b565b6040516101bc9190611e7f565b61018b610231366004611ca2565b6105ac565b600354610249906001600160a01b031681565b6040516001600160a01b0390911681526020016101bc565b61018b61074e565b6101b0610277366004611bdb565b610762565b61020060045481565b6000546001600160a01b0316610249565b6102496102a4366004611cbb565b6107a9565b61018b6102b7366004611bc0565b610829565b61018b6102ca366004611d9f565b61087e565b6102e26102dd366004611d02565b610a41565b60408051938452602084019290925260ff16908201526060016101bc565b61018b61030e366004611bc0565b610ab5565b61018b610321366004611bc0565b610b04565b600254610249906001600160a01b031681565b61018b610347366004611d9f565b610bec565b61020061035a366004611c4d565b610e9a565b610367610eea565b6040516101bc96959493929190611f47565b61018b610387366004611ca2565b6111d5565b61018b61039a366004611bc0565b611366565b6102006103ad366004611ca2565b6113df565b3360009081526001602052604090205460ff166103ea5760405162461bcd60e51b81526004016103e190611ec5565b60405180910390fd5b6001600160a01b0381166104405760405162461bcd60e51b815260206004820152601960248201527f5369676e6572206164647265737320697320696e76616c69640000000000000060448201526064016103e1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600061046e6006611432565b905060005b815181101561050157600082828151811061049057610490612090565b60200260200101519050806001600160a01b0316630a108faf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104d557600080fd5b505af11580156104e9573d6000803e3d6000fd5b505050505080806104f990612049565b915050610473565b5050565b3360009081526001602052604090205460ff166105345760405162461bcd60e51b81526004016103e190611ec5565b61053f60068261143f565b15156001146105905760405162461bcd60e51b815260206004820152601c60248201527f5374616b6520636f6e7472616374206973206e6f74206578697374730000000060448201526064016103e1565b610501600682611461565b60606105a76006611432565b905090565b3360009081526001602052604090205460ff16806105e35750336105d86000546001600160a01b031690565b6001600160a01b0316145b61062f5760405162461bcd60e51b815260206004820181905260248201527f4f776e65724f70657261746f723a20216f70657261746f722c20216f776e657260448201526064016103e1565b600254604051636eb1769f60e11b81523360048201523060248201526001600160a01b03909116908290829063dd62ed3e9060440160206040518083038186803b15801561067c57600080fd5b505afa158015610690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b49190611d86565b10156106fb5760405162461bcd60e51b8152602060048201526016602482015275105b1b1bddd85b98d9481a5b9cdd59999a58da595b9d60521b60448201526064016103e1565b6107106001600160a01b038216333085611476565b60408051338152602081018490527f426e676495b8444c5a7942d1d1b20440fe1b90c5bb3774bd894a150244790f4d91015b60405180910390a15050565b6107566114e7565b6107606000611541565b565b600080610770868686610e9a565b9050600061077d826113df565b9050876001600160a01b031661079382866107a9565b6001600160a01b03161498975050505050505050565b6000806000806107b885610a41565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015610813573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b6108316114e7565b6001600160a01b0381166108575760405162461bcd60e51b81526004016103e190611efc565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b600354610897906001600160a01b031633858585610762565b6108da5760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b60448201526064016103e1565b600254604051636eb1769f60e11b81523360048201523060248201526001600160a01b03909116908490829063dd62ed3e9060440160206040518083038186803b15801561092757600080fd5b505afa15801561093b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095f9190611d86565b10156109a65760405162461bcd60e51b8152602060048201526016602482015275105b1b1bddd85b98d9481a5b9cdd59999a58da595b9d60521b60448201526064016103e1565b6109bb6001600160a01b038216333087611476565b33600090815260056020526040812080548692906109da908490611fad565b9250508190555083600460008282546109f39190611fad565b90915550610a02905033611591565b60408051338152602081018690527fee1c5a297c6127ab2403486b73254bcc1dd91a0da12802fa55fb8ac423c39b70910160405180910390a150505050565b60008060008351604114610a975760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e677468000000000000000060448201526064016103e1565b50505060208101516040820151606090920151909260009190911a90565b610abd6114e7565b6001600160a01b038116610ae35760405162461bcd60e51b81526004016103e190611efc565b6001600160a01b03166000908152600160205260409020805460ff19169055565b3360009081526001602052604090205460ff16610b335760405162461bcd60e51b81526004016103e190611ec5565b6001600160a01b038116610b895760405162461bcd60e51b815260206004820152601960248201527f5374616b6520636f6e747261637420697320696e76616c69640000000000000060448201526064016103e1565b610b9460068261143f565b15610be15760405162461bcd60e51b815260206004820152601e60248201527f5374616b6520636f6e747261637420697320616c72656164792075736564000060448201526064016103e1565b6105016006826116bd565b600354610c05906001600160a01b031633858585610762565b610c485760405162461bcd60e51b815260206004820152601460248201527314da59db985d1d5c99481a5cc81a5b9d985b1a5960621b60448201526064016103e1565b3360009081526005602052604090205480841115610ca85760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742062616c616e636520757365720000000000000060448201526064016103e1565b6002546040516370a0823160e01b81523060048201526001600160a01b0390911690859082906370a082319060240160206040518083038186803b158015610cef57600080fd5b505afa158015610d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d279190611d86565b1015610d6c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016103e1565b60405163095ea7b360e01b8152336004820152602481018690526001600160a01b0382169063095ea7b390604401602060405180830381600087803b158015610db457600080fd5b505af1158015610dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dec9190611c80565b50610e016001600160a01b03821633876116d2565b3360009081526005602052604081208054879290610e20908490612006565b9091555050600454610e329086611702565b60045533600090815260056020526040902054610e5a57336000908152600560205260408120555b60408051338152602081018790527fcf2eb3f1c381efd5863bf6d0d09484b51a4ad9d778ba23edeb14a10c56aa41b9910160405180910390a15050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260348101839052605481018290526000906074016040516020818303038152906040528051906020012090505b9392505050565b336000818152600560205260408120549091829160609182918291829186610f126006611432565b90506000815167ffffffffffffffff811115610f3057610f306120a6565b604051908082528060200260200182016040528015610f59578160200160208202803683370190505b5090506000825167ffffffffffffffff811115610f7857610f786120a6565b604051908082528060200260200182016040528015610fa1578160200160208202803683370190505b5090506000835167ffffffffffffffff811115610fc057610fc06120a6565b604051908082528060200260200182016040528015610fe9578160200160208202803683370190505b50905060005b84518110156111bd57600085828151811061100c5761100c612090565b602090810291909101015160405163bd1e629960e01b81526001600160a01b038a8116600483015291925060009183169063bd1e629990602401604080518083038186803b15801561105d57600080fd5b505afa158015611071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110959190611d37565b905080600001518684815181106110ae576110ae612090565b6020026020010181815250506000826001600160a01b031663f2a383a06040518163ffffffff1660e01b815260040160206040518083038186803b1580156110f557600080fd5b505afa158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d9190611d86565b90508086858151811061114257611142612090565b6020026020010181815250506000600454600014611187576004546111849061117e670de0b6b3a764000061117886606461170e565b9061170e565b9061171a565b90505b8086868151811061119a5761119a612090565b6020026020010181815250505050505080806111b590612049565b915050610fef565b50600454949c949b5092995090975095509350915050565b3360009081526001602052604090205460ff168061120c5750336112016000546001600160a01b031690565b6001600160a01b0316145b6112585760405162461bcd60e51b815260206004820181905260248201527f4f776e65724f70657261746f723a20216f70657261746f722c20216f776e657260448201526064016103e1565b6002546040516370a0823160e01b81523060048201526001600160a01b0390911690829082906370a082319060240160206040518083038186803b15801561129f57600080fd5b505afa1580156112b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d79190611d86565b101561131c5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016103e1565b6113306001600160a01b03821633846116d2565b60408051338152602081018490527f95ea388bb6943cecdb73b243dd803b3df392d17b179f45cb6ace97d64688be6a9101610742565b61136e6114e7565b6001600160a01b0381166113d35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103e1565b6113dc81611541565b50565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60606000610ee383611726565b6001600160a01b03811660009081526001830160205260408120541515610ee3565b6000610ee3836001600160a01b038416611782565b6040516001600160a01b03808516602483015283166044820152606481018290526114e19085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611875565b50505050565b6000546001600160a01b031633146107605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103e1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061159d6006611432565b905060005b81518110156116b85760008282815181106115bf576115bf612090565b602090810291909101015160405162ff815b60e01b81526001600160a01b0386811660048301529192509082169062ff815b9060240160206040518083038186803b15801561160d57600080fd5b505afa158015611621573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116459190611c80565b6116a557604051631148304b60e21b81526001600160a01b038581166004830152821690634520c12c90602401600060405180830381600087803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505b50806116b081612049565b9150506115a2565b505050565b6000610ee3836001600160a01b038416611947565b6040516001600160a01b0383166024820152604481018290526116b890849063a9059cbb60e01b906064016114aa565b6000610ee38284612006565b6000610ee38284611fe7565b6000610ee38284611fc5565b60608160000180548060200260200160405190810160405280929190818152602001828054801561177657602002820191906000526020600020905b815481526020019060010190808311611762575b50505050509050919050565b6000818152600183016020526040812054801561186b5760006117a6600183612006565b85549091506000906117ba90600190612006565b905081811461181f5760008660000182815481106117da576117da612090565b90600052602060002001549050808760000184815481106117fd576117fd612090565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806118305761183061207a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610823565b6000915050610823565b60006118ca826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119969092919063ffffffff16565b8051909150156116b857808060200190518101906118e89190611c80565b6116b85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103e1565b600081815260018301602052604081205461198e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610823565b506000610823565b60606119a584846000856119ad565b949350505050565b606082471015611a0e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103e1565b6001600160a01b0385163b611a655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103e1565b600080866001600160a01b03168587604051611a819190611e63565b60006040518083038185875af1925050503d8060008114611abe576040519150601f19603f3d011682016040523d82523d6000602084013e611ac3565b606091505b5091509150611ad3828286611ade565b979650505050505050565b60608315611aed575081610ee3565b825115611afd5782518084602001fd5b8160405162461bcd60e51b81526004016103e19190611e92565b80356001600160a01b0381168114611b2e57600080fd5b919050565b600082601f830112611b4457600080fd5b813567ffffffffffffffff80821115611b5f57611b5f6120a6565b604051601f8301601f19908116603f01168101908282118183101715611b8757611b876120a6565b81604052838152866020858801011115611ba057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215611bd257600080fd5b610ee382611b17565b600080600080600060a08688031215611bf357600080fd5b611bfc86611b17565b9450611c0a60208701611b17565b93506040860135925060608601359150608086013567ffffffffffffffff811115611c3457600080fd5b611c4088828901611b33565b9150509295509295909350565b600080600060608486031215611c6257600080fd5b611c6b84611b17565b95602085013595506040909401359392505050565b600060208284031215611c9257600080fd5b81518015158114610ee357600080fd5b600060208284031215611cb457600080fd5b5035919050565b60008060408385031215611cce57600080fd5b82359150602083013567ffffffffffffffff811115611cec57600080fd5b611cf885828601611b33565b9150509250929050565b600060208284031215611d1457600080fd5b813567ffffffffffffffff811115611d2b57600080fd5b6119a584828501611b33565b600060408284031215611d4957600080fd5b6040516040810181811067ffffffffffffffff82111715611d6c57611d6c6120a6565b604052825181526020928301519281019290925250919050565b600060208284031215611d9857600080fd5b5051919050565b600080600060608486031215611db457600080fd5b8335925060208401359150604084013567ffffffffffffffff811115611dd957600080fd5b611de586828701611b33565b9150509250925092565b600081518084526020808501945080840160005b83811015611e285781516001600160a01b031687529582019590820190600101611e03565b509495945050505050565b600081518084526020808501945080840160005b83811015611e2857815187529582019590820190600101611e47565b60008251611e7581846020870161201d565b9190910192915050565b602081526000610ee36020830184611def565b6020815260008251806020840152611eb181604085016020870161201d565b601f01601f19169190910160400192915050565b60208082526018908201527f4f776e65724f70657261746f723a20216f70657261746f720000000000000000604082015260600190565b6020808252602b908201527f4f776e65724f70657261746f723a206f70657261746f7220697320746865207a60408201526a65726f206164647265737360a81b606082015260800190565b86815285602082015260c060408201526000611f6660c0830187611def565b8281036060840152611f788187611e33565b90508281036080840152611f8c8186611e33565b905082810360a0840152611fa08185611e33565b9998505050505050505050565b60008219821115611fc057611fc0612064565b500190565b600082611fe257634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561200157612001612064565b500290565b60008282101561201857612018612064565b500390565b60005b83811015612038578181015183820152602001612020565b838111156114e15750506000910152565b600060001982141561205d5761205d612064565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220e08311a8dd876a0dea4356a38e852f4355a3e21e0261601ad78105b57c411cd064736f6c63430008070033