60806040526000600455620000176012600a62000d0c565b6200002790633b9aca0062000d1d565b620000359060001962000d55565b620000439060001962000d6c565b60095560408051606080820183526103e88083526105dc60208085019190915292840152600a805465ffffffffffff19166503e805dc03e8178155835160808101855260068152600f81850181905260048287015260199190930152600b80546001600160401b03191666190004000f000617905583518085019094527371f70b247f26f18dcda672757f416d916d6c7f618085527317ba5701a9e387b86b794cffdba76b1cadd86e6694909301849052600e80546001600160a01b0319908116909417905581549092169092179091556010805461ff0019169055600060115561271090620001369060129062000d0c565b6200014690633b9aca0062000d1d565b6200015390601962000d1d565b6200015f919062000d86565b601555612710620001736012600a62000d0c565b6200018390633b9aca0062000d1d565b6200019090604b62000d1d565b6200019c919062000d86565b6016556017805461ffff19169055620001b86012600a62000d0c565b620001c890633b9aca0062000d1d565b336000818152600260205260408120929092559060008051602062004c24833981519152620001fa6012600a62000d0c565b6200020a90633b9aca0062000d1d565b60405190815260200160405180910390a3600080546001600160a01b0319163317905560384614156200026357600c80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000359565b46606114156200029957600c80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000359565b4660011480620002a95750466004145b80620002b55750466003145b15620002e757600c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000359565b4661a86a14156200031e57600c80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000359565b4660fa14156200035457600c80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000359565b600080fd5b600c60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d3919062000d9d565b6001600160a01b031663c9c65396600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045b919062000d9d565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620004a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ce919062000d9d565b600d80546001600160a01b0319166001600160a01b039283169081179091556000908152600360205260408120805460ff1916600117905554600c546200051d929182169116600019620005fb565b600c54620005399030906001600160a01b0316600019620005fb565b600080546001600160a01b0390811682526006602090815260408084208054600160ff19918216811790925530865282862080548216831790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e228054821683179055855485168652600890935290842080549092161790559054620005f4911661dead600a620005cc60128262000d0c565b620005dc90633b9aca0062000d1d565b620005e8919062000d86565b600080806001620006fc565b5062000e0e565b6001600160a01b0383166200064d5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200069b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000644565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601754600090610100900460ff1662000798576200071b888862000913565b601754610100900460ff161580156200073b57506200073b888862000a49565b15620007985760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b606482015260840162000644565b620007a4888862000a49565b15620008445760175460405163ecd07a5360e01b81526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af19250505080156200082b575060408051601f3d908101601f19168201909252620008289181019062000dcf565b60015b6200083557600080fd5b9050806200084257600080fd5b505b6001600160a01b038816600090815260026020526040812080548892906200086e90849062000d6c565b90915550600090508562000883578662000891565b620008918986868a62000b27565b6001600160a01b038916600090815260026020526040812080549293508392909190620008c090849062000df3565b92505081905550876001600160a01b0316896001600160a01b031660008051602062004c2483398151915283604051620008fc91815260200190565b60405180910390a350600198975050505050505050565b601754610100900460ff1615620009795760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b606482015260840162000644565b62000985828262000a49565b158015620009a05750600d546001600160a01b038281169116145b1562000a45576001600160a01b038083166000908152600860205260409020805460ff191660011790556017805461ff00191661010017908190556201000090041662000a01576017805462010000600160b01b0319163062010000021790555b6010805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15b5050565b600080546001600160a01b0384811691161480159062000a7757506000546001600160a01b03838116911614155b801562000a8f57506000546001600160a01b03163214155b801562000ab557506001600160a01b03821660009081526008602052604090205460ff16155b801562000adb57506001600160a01b03831660009081526008602052604090205460ff16155b801562000af357506001600160a01b03821661dead14155b801562000b0857506001600160a01b03821615155b801562000b1e57506001600160a01b0383163014155b90505b92915050565b600080841562000b3f5750600a5461ffff1662000b6b565b831562000b5a5750600a5462010000900461ffff1662000b6b565b50600a54640100000000900461ffff165b600061271062000b7c838662000d1d565b62000b88919062000d86565b3060009081526002602052604081208054929350839290919062000bae90849062000df3565b909155505060405181815230906001600160a01b0389169060008051602062004c248339815191529060200160405180910390a362000bee818562000d6c565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000c5057816000190482111562000c345762000c3462000bf9565b8085161562000c4257918102915b93841c939080029062000c14565b509250929050565b60008262000c695750600162000b21565b8162000c785750600062000b21565b816001811462000c91576002811462000c9c5762000cbc565b600191505062000b21565b60ff84111562000cb05762000cb062000bf9565b50506001821b62000b21565b5060208310610133831016604e8410600b841016171562000ce1575081810a62000b21565b62000ced838362000c0f565b806000190482111562000d045762000d0462000bf9565b029392505050565b600062000b1e60ff84168362000c58565b600081600019048311821515161562000d3a5762000d3a62000bf9565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262000d675762000d6762000d3f565b500690565b60008282101562000d815762000d8162000bf9565b500390565b60008262000d985762000d9862000d3f565b500490565b60006020828403121562000db057600080fd5b81516001600160a01b038116811462000dc857600080fd5b9392505050565b60006020828403121562000de257600080fd5b8151801515811462000dc857600080fd5b6000821982111562000e095762000e0962000bf9565b500190565b613e068062000e1e6000396000f3fe60806040526004361061034e5760003560e01c806350a8e016116101bb578063aa22b172116100f7578063e4fcfd1811610095578063eec2744e1161006f578063eec2744e146109e6578063f94aa1b414610a06578063fdb78c0e14610a4d578063fe575a8714610a6c57600080fd5b8063e4fcfd181461099b578063eafb5a3c146109b1578063ee5d9c2d146109d157600080fd5b8063cab5ebea116100d1578063cab5ebea146108aa578063cf847706146108ca578063d3f6a15714610935578063dd62ed3e1461095557600080fd5b8063aa22b1721461088a578063b1b08f711461058f578063b3d514fb1461058f57600080fd5b8063715018a6116101645780638a63bd9b1161013e5780638a63bd9b146108405780638a8c523c1461085557806395d89b4114610429578063a9059cbb1461086a57600080fd5b8063715018a6146107ed57806380c581d114610802578063893d20e81461082257600080fd5b80635cce86cd116101955780635cce86cd146107695780636ebd0078146107a257806370a08231146107b757600080fd5b806350a8e0161461070a578063590ffdce146107295780635c24b0741461074957600080fd5b806329dd87981161028a57806334cd826011610233578063452ed4f11161020d578063452ed4f1146106775780634ada218b146106975780634fb2e45d146106b15780634fbee193146106d157600080fd5b806334cd82601461061757806336fddb04146106375780633f3cf56c1461065757600080fd5b8063313ce56711610264578063313ce567146105bb57806332cde664146105d757806333251a0b146105f757600080fd5b806329dd87981461056f5780632b28fc7a1461058f5780632e8fa821146105a557600080fd5b806309231602116102f757806318160ddd116102d157806318160ddd146104fa57806323b872dd1461050f578063260039571461052f5780632610eaca1461054f57600080fd5b80630923160214610495578063095ea7b3146104b55780630fa604e4146104e557600080fd5b8063069d955f11610328578063069d955f146103d357806306fdde03146104295780630758d9241461047557600080fd5b806303fd2a451461035a5780630445b6671461038d57806305bbedb6146103b157600080fd5b3661035557005b600080fd5b34801561036657600080fd5b5061037061dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561039957600080fd5b506103a360135481565b604051908152602001610384565b3480156103bd57600080fd5b506103d16103cc3660046136f0565b610a8c565b005b3480156103df57600080fd5b50600a546104049061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610384565b34801561043557600080fd5b50604080518082018252600481527f4e45524400000000000000000000000000000000000000000000000000000000602082015290516103849190613742565b34801561048157600080fd5b50600c54610370906001600160a01b031681565b3480156104a157600080fd5b506103d16104b0366004613797565b610b65565b3480156104c157600080fd5b506104d56104d03660046137b0565b610c85565b6040519015158152602001610384565b3480156104f157600080fd5b506103a3610c9c565b34801561050657600080fd5b506103a3610cbc565b34801561051b57600080fd5b506104d561052a3660046137dc565b610cfb565b34801561053b57600080fd5b506103d161054a36600461381d565b610d73565b34801561055b57600080fd5b506103d161056a36600461383f565b610ec3565b34801561057b57600080fd5b506103d161058a3660046138fa565b610fe4565b34801561059b57600080fd5b506103a36109c481565b3480156105b157600080fd5b506103a360145481565b3480156105c757600080fd5b5060405160128152602001610384565b3480156105e357600080fd5b506103d16105f236600461396d565b6110cd565b34801561060357600080fd5b506103d16106123660046139b0565b611208565b34801561062357600080fd5b506103d16106323660046139cd565b6112a8565b34801561064357600080fd5b506103d1610652366004613a08565b611365565b34801561066357600080fd5b506103d161067236600461381d565b6113de565b34801561068357600080fd5b50600d54610370906001600160a01b031681565b3480156106a357600080fd5b506017546104d59060ff1681565b3480156106bd57600080fd5b506103d16106cc3660046139b0565b61152e565b3480156106dd57600080fd5b506104d56106ec3660046139b0565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561071657600080fd5b506017546104d590610100900460ff1681565b34801561073557600080fd5b506103d1610744366004613a08565b611747565b34801561075557600080fd5b506103d16107643660046139b0565b6117c0565b34801561077557600080fd5b506104d56107843660046139b0565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107ae57600080fd5b506103a36118bc565b3480156107c357600080fd5b506103a36107d23660046139b0565b6001600160a01b031660009081526002602052604090205490565b3480156107f957600080fd5b506103d16118d7565b34801561080e57600080fd5b506103d161081d366004613a08565b611992565b34801561082e57600080fd5b506000546001600160a01b0316610370565b34801561084c57600080fd5b506104d5611b3d565b34801561086157600080fd5b506103d1611bac565b34801561087657600080fd5b506104d56108853660046137b0565b611df9565b34801561089657600080fd5b506103d16108a536600461396d565b611e10565b3480156108b657600080fd5b506103d16108c5366004613a36565b611f23565b3480156108d657600080fd5b50600b546109079061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610384565b34801561094157600080fd5b506103d1610950366004613a53565b611fc5565b34801561096157600080fd5b506103a3610970366004613a53565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109a757600080fd5b506103a360115481565b3480156109bd57600080fd5b506103d16109cc3660046139b0565b612059565b3480156109dd57600080fd5b506103d1612429565b3480156109f257600080fd5b506103d1610a01366004613a08565b61250c565b348015610a1257600080fd5b50600e54600f54610a2d916001600160a01b03908116911682565b604080516001600160a01b03938416815292909116602083015201610384565b348015610a5957600080fd5b506010546104d590610100900460ff1681565b348015610a7857600080fd5b506104d5610a873660046139b0565b6125b4565b6000546001600160a01b03163314610adf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b6017546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610b2f9085908590600401613ac5565b600060405180830381600087803b158015610b4957600080fd5b505af1158015610b5d573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610bb35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b61012c811015610c055760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610ad6565b6017546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610c6a57600080fd5b505af1158015610c7e573d6000803e3d6000fd5b5050505050565b6000610c92338484612642565b5060015b92915050565b6000610caa6012600a613bfc565b601654610cb79190613c0b565b905090565b6000610cca6012600a613bfc565b610cd890633b9aca00613c46565b610ce157600080fd5b610ced6012600a613bfc565b610cb790633b9aca00613c46565b6001600160a01b038316600090815260056020908152604080832033845290915281205460001914610d60576001600160a01b038416600090815260056020908152604080832033845290915281208054849290610d5a908490613c65565b90915550505b610d6b84848461274f565b949350505050565b6000546001600160a01b03163314610dc15760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b6103e8610dd06012600a613bfc565b610dde90633b9aca00613c46565b610de89190613c0b565b8183610df66012600a613bfc565b610e0490633b9aca00613c46565b610e0e9190613c46565b610e189190613c0b565b1015610e8c5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610ad6565b8082610e9a6012600a613bfc565b610ea890633b9aca00613c46565b610eb29190613c46565b610ebc9190613c0b565b6016555050565b8051825114610f145760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610ad6565b60005b82518160ff161015610fdf57818160ff1681518110610f3857610f38613c7c565b6020026020010151610f5f336001600160a01b031660009081526002602052604090205490565b1015610f6a57600080fd5b610fcc33848360ff1681518110610f8357610f83613c7c565b60200260200101516012600a610f999190613bfc565b858560ff1681518110610fae57610fae613c7c565b6020026020010151610fc09190613c46565b60008060006001612c04565b5080610fd781613cab565b915050610f17565b505050565b6000546001600160a01b031633146110325760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b6017546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b0316331461111b5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b6109c48361ffff161115801561113757506109c48261ffff1611155b801561114957506109c48161ffff1611155b6111955760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610ad6565b600a805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b031633146112565760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b6017546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610c50565b6000546001600160a01b031633146112f65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b83856113046012600a613bfc565b61131290633b9aca00613c46565b61131c9190613c46565b6113269190613c0b565b60135581836113376012600a613bfc565b61134590633b9aca00613c46565b61134f9190613c46565b6113599190613c0b565b60145560115550505050565b6000546001600160a01b031633146113b35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461142c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b6103e861143b6012600a613bfc565b61144990633b9aca00613c46565b6114539190613c0b565b81836114616012600a613bfc565b61146f90633b9aca00613c46565b6114799190613c46565b6114839190613c0b565b10156114f75760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610ad6565b80826115056012600a613bfc565b61151390633b9aca00613c46565b61151d9190613c46565b6115279190613c0b565b6015555050565b6000546001600160a01b0316331461157c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b6001600160a01b0381166115f85760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ad6565b6001600160a01b03811661dead14156116795760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610ad6565b60008054611692916001600160a01b0390911690611747565b61169d816001611747565b600080546001600160a01b0316815260026020526040902054156116e457600080546001600160a01b031680825260026020526040909120546116e29190839061274f565b505b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146117955760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461180e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b601754610100900460ff161561182357600080fd5b6001600160a01b03811630141561187c5760405162461bcd60e51b815260206004820152600e60248201527f43616e27742062652073656c662e0000000000000000000000000000000000006044820152606401610ad6565b601780546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60006118ca6012600a613bfc565b601554610cb79190613c0b565b6000546001600160a01b031633146119255760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b6000805461193e916001600160a01b0390911690611747565b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146119e05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b80611a57576001600160a01b03828116600081815260036020526040808220805460ff1916905560175490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610b2f565b60045415611abe576203f48060045442611a719190613c65565b11611abe5760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610ad6565b6001600160a01b0382811660008181526003602052604090819020805460ff1916600190811790915542600490815560175492517f80c581d1000000000000000000000000000000000000000000000000000000008152908101939093526024830152620100009004909116906380c581d190604401610b2f565b5050565b600080546001600160a01b03163314611b8c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b600c54611ba69030906001600160a01b0316600019612642565b50600190565b6000546001600160a01b03163314611bfa5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b60175460ff1615611c4d5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610ad6565b601754610100900460ff16611ca45760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610ad6565b6017546201000090046001600160a01b0316611cea57601780547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601754600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260126064820152620100009092041690636c115c3490608401600060405180830381600087803b158015611d7557600080fd5b505af1925050508015611d86575060015b506017805460ff19166001179055600d546001600160a01b03166000908152600260205260409020546103e890611dbd9190613c0b565b601355600d546001600160a01b03166000908152600260205260409020546103e890611dea906002613c46565b611df49190613c0b565b601455565b6000611e0633848461274f565b5060019392505050565b6000546001600160a01b03163314611e5e5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b600b805461ffff838116640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff86831662010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000090941692881692909217929092171617905580611ed68385613ccb565b611ee09190613ccb565b600b805461ffff929092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055505050565b6000546001600160a01b03163314611f715760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b601080548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f914105325790611fba90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146120135760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b600f80546001600160a01b039384167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600e8054929093169116179055565b6000546001600160a01b031633146120a75760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121109190613cf1565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121819190613cf1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156121e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122089190613cf1565b90506001600160a01b0381166123b157816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227a9190613cf1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122eb9190613cf1565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612350573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123749190613cf1565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556123e5565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790555b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155610fdf903090600019612642565b6000546001600160a01b031633146124775760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b601754610100900460ff16156124cf5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610ad6565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015612509573d6000803e3d6000fd5b50565b6000546001600160a01b0316331461255a5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610ad6565b6017546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610b2f565b6017546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa15801561261e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c969190613d0e565b6001600160a01b0383166126985760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ad6565b6001600160a01b0382166126ee5760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610ad6565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166127cd5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610ad6565b6001600160a01b0383166128495760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610ad6565b600082116128bf5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610ad6565b6001600160a01b0384166000908152600360205260408120548190819060ff16156128ed576001925061291b565b6001600160a01b03861660009081526003602052604090205460ff1615612917576001915061291b565b5060015b6129258787612e44565b15612b2b5760175460ff1661297c5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610ad6565b82806129855750815b15612a49576001600160a01b03871660009081526007602052604090205460ff161580156129cc57506001600160a01b03861660009081526007602052604090205460ff16155b15612a4957601554851115612a495760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610ad6565b600c546001600160a01b03878116911614801590612a65575081155b15612b2b576001600160a01b03861660009081526007602052604090205460ff16612b2b5760165485612aad886001600160a01b031660009081526002602052604090205490565b612ab79190613d2b565b1115612b2b5760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610ad6565b6001600160a01b03871660009081526006602052604090205460019060ff1680612b6d57506001600160a01b03871660009081526006602052604090205460ff165b15612b76575060005b8215612be95760105460ff16158015612b965750601054610100900460ff165b15612be95742601154601254612bac9190613d2b565b1015612be957306000908152600260205260409020546013548110612be7576014548110612bd957506014545b612be281612f19565b426012555b505b612bf888888884888888612c04565b98975050505050505050565b601754600090610100900460ff16612cb057612c2088886133a0565b601754610100900460ff16158015612c3d5750612c3d8888612e44565b15612cb05760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610ad6565b612cba8888612e44565b15612d6d576017546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015260448201899052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015612d56575060408051601f3d908101601f19168201909252612d5391810190613d0e565b60015b612d5f57600080fd5b905080612d6b57600080fd5b505b6001600160a01b03881660009081526002602052604081208054889290612d95908490613c65565b909155506000905085612da85786612db4565b612db48986868a6134fe565b6001600160a01b038916600090815260026020526040812080549293508392909190612de1908490613d2b565b92505081905550876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e2d91815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b03848116911614801590612e7157506000546001600160a01b03838116911614155b8015612e8857506000546001600160a01b03163214155b8015612ead57506001600160a01b03821660009081526008602052604090205460ff16155b8015612ed257506001600160a01b03831660009081526008602052604090205460ff16155b8015612ee957506001600160a01b03821661dead14155b8015612efd57506001600160a01b03821615155b8015612f1257506001600160a01b0383163014155b9392505050565b6010805460ff1916600117905560408051608081018252600b5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052612f775750613393565b306000908152600560209081526040808320600c546001600160a01b0316845290915290205460001914612fd057306000908152600560209081526040808320600c546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836000015161ffff1685612ff19190613c46565b612ffb9190613c0b565b6130059190613c0b565b905060006130138285613c65565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061304d5761304d613c7c565b6001600160a01b03928316602091820292909201810191909152600c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156130bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e39190613cf1565b816001815181106130f6576130f6613c7c565b6001600160a01b039283166020918202929092010152600c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790613155908590600090869030904290600401613d43565b600060405180830381600087803b15801561316f57600080fd5b505af1158015613183573d6000803e3d6000fd5b50479250600091508490506131988684613c46565b6131a29190613c0b565b9050841561329357600c546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613231573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132569190613d7f565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61329d8183613c65565b91508560000151866060018181516132b59190613dad565b61ffff9081169091526060880151604089015160009350908216916132db911685613c46565b6132e59190613c0b565b905060006132f38285613c65565b604089015190915061ffff161561334057600f546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561333e573d6000803e3d6000fd5b505b602088015161ffff161561338a57600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613388573d6000803e3d6000fd5b505b50505050505050505b506010805460ff19169055565b601754610100900460ff161561341e5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610ad6565b6134288282612e44565b1580156134425750600d546001600160a01b038281169116145b15611b39576001600160a01b038083166000908152600860205260409020805460ff191660011790556017805461ff0019166101001790819055620100009004166134b757601780547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6010805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60008084156135145750600a5461ffff1661353e565b831561352d5750600a5462010000900461ffff1661353e565b50600a54640100000000900461ffff165b600061271061354d8386613c46565b6135579190613c0b565b3060009081526002602052604081208054929350839290919061357b908490613d2b565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36135ca8185613c65565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561362d5761362d6135d5565b604052919050565b600067ffffffffffffffff82111561364f5761364f6135d5565b5060051b60200190565b6001600160a01b038116811461250957600080fd5b600082601f83011261367f57600080fd5b8135602061369461368f83613635565b613604565b82815260059290921b840181019181810190868411156136b357600080fd5b8286015b848110156136d75780356136ca81613659565b83529183019183016136b7565b509695505050505050565b801515811461250957600080fd5b6000806040838503121561370357600080fd5b823567ffffffffffffffff81111561371a57600080fd5b6137268582860161366e565b9250506020830135613737816136e2565b809150509250929050565b600060208083528351808285015260005b8181101561376f57858101830151858201604001528201613753565b81811115613781576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156137a957600080fd5b5035919050565b600080604083850312156137c357600080fd5b82356137ce81613659565b946020939093013593505050565b6000806000606084860312156137f157600080fd5b83356137fc81613659565b9250602084013561380c81613659565b929592945050506040919091013590565b6000806040838503121561383057600080fd5b50508035926020909101359150565b6000806040838503121561385257600080fd5b823567ffffffffffffffff8082111561386a57600080fd5b6138768683870161366e565b935060209150818501358181111561388d57600080fd5b85019050601f810186136138a057600080fd5b80356138ae61368f82613635565b81815260059190911b820183019083810190888311156138cd57600080fd5b928401925b828410156138eb578335825292840192908401906138d2565b80955050505050509250929050565b6000806000806080858703121561391057600080fd5b843561391b816136e2565b9350602085013561392b816136e2565b9250604085013561393b816136e2565b9150606085013561394b816136e2565b939692955090935050565b803561ffff8116811461396857600080fd5b919050565b60008060006060848603121561398257600080fd5b61398b84613956565b925061399960208501613956565b91506139a760408501613956565b90509250925092565b6000602082840312156139c257600080fd5b8135612f1281613659565b600080600080600060a086880312156139e557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215613a1b57600080fd5b8235613a2681613659565b91506020830135613737816136e2565b600060208284031215613a4857600080fd5b8135612f12816136e2565b60008060408385031215613a6657600080fd5b8235613a7181613659565b9150602083013561373781613659565b600081518084526020808501945080840160005b83811015613aba5781516001600160a01b031687529582019590820190600101613a95565b509495945050505050565b604081526000613ad86040830185613a81565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b80851115613b53578160001904821115613b3957613b39613ae9565b80851615613b4657918102915b93841c9390800290613b1d565b509250929050565b600082613b6a57506001610c96565b81613b7757506000610c96565b8160018114613b8d5760028114613b9757613bb3565b6001915050610c96565b60ff841115613ba857613ba8613ae9565b50506001821b610c96565b5060208310610133831016604e8410600b8410161715613bd6575081810a610c96565b613be08383613b18565b8060001904821115613bf457613bf4613ae9565b029392505050565b6000612f1260ff841683613b5b565b600082613c41577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000816000190483118215151615613c6057613c60613ae9565b500290565b600082821015613c7757613c77613ae9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415613cc257613cc2613ae9565b60010192915050565b600061ffff808316818516808303821115613ce857613ce8613ae9565b01949350505050565b600060208284031215613d0357600080fd5b8151612f1281613659565b600060208284031215613d2057600080fd5b8151612f12816136e2565b60008219821115613d3e57613d3e613ae9565b500190565b85815284602082015260a060408201526000613d6260a0830186613a81565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613d9457600080fd5b8351925060208401519150604084015190509250925092565b600061ffff83811690831681811015613dc857613dc8613ae9565b03939250505056fea2646970667358221220e85322751ab4f0ea9c912b1dcf22cd6bbc00b550cb4450db336646ffc9658af464736f6c634300080c0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef