0x60806040526004805460ff60a01b19908116909155600a805461ffff19169055611f40600b55610fa0600c55600d8054909116905534801561004057600080fd5b5061004a33610053565b600180556100a3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61220c806100b26000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063807731691161012a578063bafb2d06116100bd578063d372d50d1161008c578063e93a7b1711610071578063e93a7b1714610485578063f2fde38b1461048e578063fbfa77cf146104a157600080fd5b8063d372d50d1461045e578063d99a7d7f1461047157600080fd5b8063bafb2d0614610427578063bb485b881461043a578063c4ae316814610443578063d002f28a1461044b57600080fd5b806392cbf98d116100f957806392cbf98d146103e45780639abc8320146103f75780639d9425971461040c5780639ee347fc1461041f57600080fd5b806380773169146103a457806384017e52146103b75780638da5cb5b146103ca5780639139f751146103db57600080fd5b806351605e6c116101bd5780635f8a958c1161018c578063715018a611610171578063715018a61461036957806372756b611461037157806379c312171461038457600080fd5b80635f8a958c1461034957806370a082311461035657600080fd5b806351605e6c146102f15780635165b2401461030457806358178168146103175780635c975abb1461033557600080fd5b806328bfb406116101f957806328bfb4061461029057806330f54e14146102b2578063372c12b1146102c5578063421cbe9c146102e857600080fd5b80630983040f1461022b57806313966db51461024057806317d70f7c1461025c5780632153d8d014610265575b600080fd5b61023e610239366004611c3a565b6104b4565b005b61024960035481565b6040519081526020015b60405180910390f35b61024960055481565b600d54610278906001600160a01b031681565b6040516001600160a01b039091168152602001610253565b600a546102a290610100900460ff1681565b6040519015158152602001610253565b61023e6102c0366004611cbf565b610766565b6102a26102d3366004611da3565b60076020526000908152604090205460ff1681565b61024960095481565b600254610278906001600160a01b031681565b61023e610312366004611da3565b610943565b610278610325366004611c3a565b506002546001600160a01b031690565b6004546102a290600160a01b900460ff1681565b600a546102a29060ff1681565b610249610364366004611da3565b6109bd565b61023e610a41565b61023e61037f366004611e56565b610a95565b610249610392366004611da3565b600f6020526000908152604090205481565b61023e6103b2366004611e56565b610b45565b61023e6103c5366004611c3a565b610f0a565b6000546001600160a01b0316610278565b610249600c5481565b61023e6103f2366004611c3a565b610f8e565b6103ff61100e565b6040516102539190611ee7565b61023e61041a366004611e56565b61109c565b61023e611272565b61023e610435366004611c3a565b611288565b610249600b5481565b61023e6112d5565b601054610278906001600160a01b031681565b61023e61046c366004611efa565b61139e565b600d546102a290600160a01b900460ff1681565b61024960085481565b61023e61049c366004611da3565b611562565b600454610278906001600160a01b031681565b6000546001600160a01b031633146105015760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064015b60405180910390fd5b600254604051634f558e7960e01b8152600481018390526001600160a01b0390911690634f558e7990602401602060405180830381600087803b15801561054757600080fd5b505af115801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190611fbc565b156105cc5760405162461bcd60e51b815260206004820152601960248201527f6572723a20746f6b656e20616c7265616479206578697374730000000000000060448201526064016104f8565b60025460405163ddd838df60e01b815260048101839052602481018390526001600160a01b039091169063ddd838df90604401600060405180830381600087803b15801561061957600080fd5b505af115801561062d573d6000803e3d6000fd5b50506002546001600160a01b0316915063bba25b7b905082600661065082611632565b604051602001610661929190612035565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161068d9291906120dc565b600060405180830381600087803b1580156106a757600080fd5b505af11580156106bb573d6000803e3d6000fd5b505050507f5388e5304907434c979387c4b001c2bfd9bfaa91d7a8448bfc5c8f4d2228e167816040516106f091815260200190565b60405180910390a16002546040516323b872dd60e01b8152306004820152336024820152604481018390526001600160a01b03909116906323b872dd906064015b600060405180830381600087803b15801561074b57600080fd5b505af115801561075f573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146107ae5760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064016104f8565b600280546001600160a01b0319166001600160a01b03851617905560038790556008869055600985905583516107eb906006906020870190611ba1565b50600480546001600160a01b0319166001600160a01b03848116919091178255600254604051638e0273bb60e01b815230938101939093521690638e0273bb90602401600060405180830381600087803b15801561084857600080fd5b505af115801561085c573d6000803e3d6000fd5b5050601080546001600160a01b0319166001600160a01b038581169190911790915560028054604080516318160ddd60e01b81529051929550921692506318160ddd91600480820192602092909190829003018186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f791906120f5565b6109019190612124565b6005556003546040519081527f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c769060200160405180910390a150505050505050565b6000546001600160a01b0316331461098b5760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064016104f8565b60025460405163f2fde38b60e01b81526001600160a01b0383811660048301529091169063f2fde38b90602401610731565b6002546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a082319060240160206040518083038186803b158015610a0357600080fd5b505afa158015610a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3b91906120f5565b92915050565b6000546001600160a01b03163314610a895760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064016104f8565b610a936000611750565b565b6000546001600160a01b03163314610add5760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064016104f8565b60005b8151811015610b41576001600e6000848481518110610b0157610b0161213b565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610b3990612151565b915050610ae0565b5050565b6000546001600160a01b03163314610b8d5760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064016104f8565b60005b8151811015610b415760025482516001600160a01b0390911690634f558e7990849084908110610bc257610bc261213b565b60200260200101516040518263ffffffff1660e01b8152600401610be891815260200190565b602060405180830381600087803b158015610c0257600080fd5b505af1158015610c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3a9190611fbc565b15610c875760405162461bcd60e51b815260206004820152601960248201527f6572723a20746f6b656e20616c7265616479206578697374730000000000000060448201526064016104f8565b60025482516001600160a01b039091169063ddd838df90849084908110610cb057610cb061213b565b6020026020010151848481518110610cca57610cca61213b565b60200260200101516040518363ffffffff1660e01b8152600401610cf8929190918252602082015260400190565b600060405180830381600087803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b505060025484516001600160a01b03909116925063bba25b7b9150849084908110610d5357610d5361213b565b60200260200101516006610d7f868681518110610d7257610d7261213b565b6020026020010151611632565b604051602001610d90929190612035565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610dbc9291906120dc565b600060405180830381600087803b158015610dd657600080fd5b505af1158015610dea573d6000803e3d6000fd5b505050507f5388e5304907434c979387c4b001c2bfd9bfaa91d7a8448bfc5c8f4d2228e167828281518110610e2157610e2161213b565b6020026020010151604051610e3891815260200190565b60405180910390a160025482516001600160a01b03909116906323b872dd9030903390869086908110610e6d57610e6d61213b565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015610edf57600080fd5b505af1158015610ef3573d6000803e3d6000fd5b505050508080610f0290612151565b915050610b90565b6000546001600160a01b03163314610f525760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064016104f8565b60038190556040518181527f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c76906020015b60405180910390a150565b6000546001600160a01b03163314610fd65760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064016104f8565b60088190556003546040519081527fb673cdefc7a33d29359abf9a5cf1f2f564ce57df55aaf5a20301cdba458f0cc390602001610f83565b6006805461101b90611fde565b80601f016020809104026020016040519081016040528092919081815260200182805461104790611fde565b80156110945780601f1061106957610100808354040283529160200191611094565b820191906000526020600020905b81548152906001019060200180831161107757829003601f168201915b505050505081565b60005b8151811015610b4157600254825133916001600160a01b031690636352211e908590859081106110d1576110d161213b565b60200260200101516040518263ffffffff1660e01b81526004016110f791815260200190565b60206040518083038186803b15801561110f57600080fd5b505afa158015611123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611147919061216c565b6001600160a01b031614156112605760025482516001600160a01b039091169063bba25b7b9084908490811061117f5761117f61213b565b6020026020010151600661119e868681518110610d7257610d7261213b565b6040516020016111af929190612035565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016111db9291906120dc565b600060405180830381600087803b1580156111f557600080fd5b505af1158015611209573d6000803e3d6000fd5b505050507f30e09704af8770a52b182c0f9c3933bf094f3a8c62a33cd445042005864602ab8282815181106112405761124061213b565b602002602001015160405161125791815260200190565b60405180910390a15b8061126a81612151565b91505061109f565b600454610a93906001600160a01b0316476117a0565b6000546001600160a01b031633146112d05760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064016104f8565b600b55565b6000546001600160a01b0316331461131d5760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064016104f8565b6004805460ff600160a01b80830482161581027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90931692909217928390556040517f6c44c1c6e888a23752ec9c1d8f194bfb0ea295ccdb49b3da95d5be50c9db9769936113949390049091161515815260200190565b60405180910390a1565b6000546001600160a01b031633146113e65760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064016104f8565b600260015414156114395760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104f8565b6002600155600554612710116114915760405162461bcd60e51b815260206004820152601b60248201527f6572723a20616c6c2070726964652070756e6b73206d696e746564000000000060448201526064016104f8565b80518251146114e25760405162461bcd60e51b815260206004820152601a60248201527f6572723a206172726179206c656e677468206d69736d6174636800000000000060448201526064016104f8565b60005b82518110156115595760005b8282815181106115035761150361213b565b6020026020010151811015611546576115348483815181106115275761152761213b565b60200260200101516118be565b8061153e81612151565b9150506114f1565b508061155181612151565b9150506114e5565b50506001805550565b6000546001600160a01b031633146115aa5760405162461bcd60e51b815260206004820181905260248201526000805160206121e083398151915260448201526064016104f8565b6001600160a01b0381166116265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104f8565b61162f81611750565b50565b6060816116565750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611680578061166a81612151565b91506116799050600a8361219f565b915061165a565b60008167ffffffffffffffff81111561169b5761169b611c53565b6040519080825280601f01601f1916602001820160405280156116c5576020820181803683370190505b5090505b8415611748576116da600183612124565b91506116e7600a866121b3565b6116f29060306121c7565b60f81b8183815181106117075761170761213b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611741600a8661219f565b94506116c9565b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b804710156117f05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016104f8565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461183d576040519150601f19603f3d011682016040523d82523d6000602084013e611842565b606091505b50509050806118b95760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016104f8565b505050565b612710600554106119115760405162461bcd60e51b815260206004820152601b60248201527f6572723a20616c6c2070726964652070756e6b73206d696e746564000000000060448201526064016104f8565b611919611adc565b60025460055460405163ddd838df60e01b81526001600160a01b039092169163ddd838df91611955918190600401918252602082015260400190565b600060405180830381600087803b15801561196f57600080fd5b505af1158015611983573d6000803e3d6000fd5b50506002546005546001600160a01b03909116925063bba25b7b915060066119aa82611632565b6040516020016119bb929190612035565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016119e79291906120dc565b600060405180830381600087803b158015611a0157600080fd5b505af1158015611a15573d6000803e3d6000fd5b505050507f5388e5304907434c979387c4b001c2bfd9bfaa91d7a8448bfc5c8f4d2228e167600554604051611a4c91815260200190565b60405180910390a16002546005546040516323b872dd60e01b81523060048201526001600160a01b03848116602483015260448201929092529116906323b872dd90606401600060405180830381600087803b158015611aab57600080fd5b505af1158015611abf573d6000803e3d6000fd5b505060058054925090506000611ad483612151565b919050555050565b600254600554604051634f558e7960e01b81526001600160a01b0390921691634f558e7991611b119160040190815260200190565b602060405180830381600087803b158015611b2b57600080fd5b505af1158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b639190611fbc565b80611b7f57506005546000908152600e602052604090205460ff165b15610a935760058054906000611b9483612151565b9190505550610a93611adc565b828054611bad90611fde565b90600052602060002090601f016020900481019282611bcf5760008555611c15565b82601f10611be857805160ff1916838001178555611c15565b82800160010185558215611c15579182015b82811115611c15578251825591602001919060010190611bfa565b50611c21929150611c25565b5090565b5b80821115611c215760008155600101611c26565b600060208284031215611c4c57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611c9257611c92611c53565b604052919050565b6001600160a01b038116811461162f57600080fd5b8035611cba81611c9a565b919050565b600080600080600080600060e0888a031215611cda57600080fd5b87359650602080890135965060408901359550606089013567ffffffffffffffff80821115611d0857600080fd5b818b0191508b601f830112611d1c57600080fd5b813581811115611d2e57611d2e611c53565b611d40601f8201601f19168501611c69565b91508082528c84828501011115611d5657600080fd5b8084840185840137600084828401015250809650505050611d7960808901611caf565b9250611d8760a08901611caf565b9150611d9560c08901611caf565b905092959891949750929550565b600060208284031215611db557600080fd5b8135611dc081611c9a565b9392505050565b600067ffffffffffffffff821115611de157611de1611c53565b5060051b60200190565b600082601f830112611dfc57600080fd5b81356020611e11611e0c83611dc7565b611c69565b82815260059290921b84018101918181019086841115611e3057600080fd5b8286015b84811015611e4b5780358352918301918301611e34565b509695505050505050565b600060208284031215611e6857600080fd5b813567ffffffffffffffff811115611e7f57600080fd5b61174884828501611deb565b60005b83811015611ea6578181015183820152602001611e8e565b83811115611eb5576000848401525b50505050565b60008151808452611ed3816020860160208601611e8b565b601f01601f19169290920160200192915050565b602081526000611dc06020830184611ebb565b60008060408385031215611f0d57600080fd5b823567ffffffffffffffff80821115611f2557600080fd5b818501915085601f830112611f3957600080fd5b81356020611f49611e0c83611dc7565b82815260059290921b84018101918181019089841115611f6857600080fd5b948201945b83861015611f8f578535611f8081611c9a565b82529482019490820190611f6d565b96505086013592505080821115611fa557600080fd5b50611fb285828601611deb565b9150509250929050565b600060208284031215611fce57600080fd5b81518015158114611dc057600080fd5b600181811c90821680611ff257607f821691505b6020821081141561201357634e487b7160e01b600052602260045260246000fd5b50919050565b6000815161202b818560208601611e8b565b9290920192915050565b600080845481600182811c91508083168061205157607f831692505b602080841082141561207157634e487b7160e01b86526022600452602486fd5b8180156120855760018114612096576120c3565b60ff198616895284890196506120c3565b60008b81526020902060005b868110156120bb5781548b8201529085019083016120a2565b505084890196505b5050505050506120d38185612019565b95945050505050565b8281526040602082015260006117486040830184611ebb565b60006020828403121561210757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156121365761213661210e565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156121655761216561210e565b5060010190565b60006020828403121561217e57600080fd5b8151611dc081611c9a565b634e487b7160e01b600052601260045260246000fd5b6000826121ae576121ae612189565b500490565b6000826121c2576121c2612189565b500690565b600082198211156121da576121da61210e565b50019056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a164736f6c6343000809000a