6080604052600a805461ffff1916905567010a741a46278000600c819055600d55611b39600e8190556002600f8190556010556011553480156200004257600080fd5b50604051620029fa380380620029fa83398101604081905262000065916200025b565b81816200007233620000ae565b815162000087906003906020850190620000fe565b5080516200009d906004906020840190620000fe565b505060016009555062000318915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200010c90620002c5565b90600052602060002090601f0160209004810192826200013057600085556200017b565b82601f106200014b57805160ff19168380011785556200017b565b828001600101855582156200017b579182015b828111156200017b5782518255916020019190600101906200015e565b50620001899291506200018d565b5090565b5b808211156200018957600081556001016200018e565b600082601f830112620001b657600080fd5b81516001600160401b0380821115620001d357620001d362000302565b604051601f8301601f19908116603f01168101908282118183101715620001fe57620001fe62000302565b816040528381526020925086838588010111156200021b57600080fd5b600091505b838210156200023f578582018301518183018401529082019062000220565b83821115620002515760008385830101525b9695505050505050565b600080604083850312156200026f57600080fd5b82516001600160401b03808211156200028757600080fd5b6200029586838701620001a4565b93506020850151915080821115620002ac57600080fd5b50620002bb85828601620001a4565b9150509250929050565b600181811c90821680620002da57607f821691505b60208210811415620002fc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6126d280620003286000396000f3fe6080604052600436106102675760003560e01c80637c8255db11610144578063b88d4fde116100b6578063e08e65ea1161007a578063e08e65ea146106cb578063e2a70eaf146106eb578063e985e9c51461070b578063ef5f198514610754578063f2fde38b14610774578063f96254741461079457600080fd5b8063b88d4fde14610648578063ba6dd6f014610668578063c87b56dd14610682578063d5abeb01146106a2578063d96a094a146106b857600080fd5b8063969745e811610108578063969745e8146105a657806397d6696b146105bc578063a0bcfc7f146105dc578063a22cb465146105fc578063aa98e0c61461061c578063b1c9fe6e1461063257600080fd5b80637c8255db1461051e5780637ff9b5961461053e5780638da5cb5b1461055457806395d89b411461057257806395ea5e671461058757600080fd5b80633ccfd60b116101dd57806360d3e1ae116101a157806360d3e1ae146104745780636352211e1461049457806363adc5a5146104b45780636c0360eb146104d457806370a08231146104e9578063715018a61461050957600080fd5b80633ccfd60b146103f357806342842e0e14610408578063453c2310146104285780634b980d671461043e5780634f6ccce71461045457600080fd5b806312065fe01161022f57806312065fe01461033d57806318160ddd1461035a5780631cef37e41461037357806323b872dd146103935780632cc82655146103b35780632f745c59146103d357600080fd5b806301ffc9a71461026c57806306fdde03146102a1578063081812fc146102c3578063095ea7b3146102fb578063108bfbfa1461031d575b600080fd5b34801561027857600080fd5b5061028c6102873660046122a8565b6107a7565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b6610814565b6040516102989190612440565b3480156102cf57600080fd5b506102e36102de36600461228f565b6108a6565b6040516001600160a01b039091168152602001610298565b34801561030757600080fd5b5061031b610316366004612197565b6108ea565b005b34801561032957600080fd5b5061031b61033836600461228f565b610978565b34801561034957600080fd5b50475b604051908152602001610298565b34801561036657600080fd5b506002546001540361034c565b34801561037f57600080fd5b5061031b61038e366004612274565b6109b0565b34801561039f57600080fd5b5061031b6103ae3660046120b6565b6109f4565b3480156103bf57600080fd5b5061031b6103ce36600461228f565b6109ff565b3480156103df57600080fd5b5061034c6103ee366004612197565b610a2e565b3480156103ff57600080fd5b5061031b610b21565b34801561041457600080fd5b5061031b6104233660046120b6565b610b9a565b34801561043457600080fd5b5061034c600f5481565b34801561044a57600080fd5b5061034c60105481565b34801561046057600080fd5b5061034c61046f36600461228f565b610bb5565b34801561048057600080fd5b5061031b61048f36600461228f565b610c58565b3480156104a057600080fd5b506102e36104af36600461228f565b610c87565b3480156104c057600080fd5b5061031b6104cf36600461228f565b610c99565b3480156104e057600080fd5b506102b6610cc8565b3480156104f557600080fd5b5061034c610504366004612068565b610d56565b34801561051557600080fd5b5061031b610da4565b34801561052a57600080fd5b5061031b6105393660046121c1565b610dda565b34801561054a57600080fd5b5061034c600c5481565b34801561056057600080fd5b506000546001600160a01b03166102e3565b34801561057e57600080fd5b506102b6610ec4565b34801561059357600080fd5b50600a5461028c90610100900460ff1681565b3480156105b257600080fd5b5061034c600d5481565b3480156105c857600080fd5b5061034c6105d7366004612068565b610ed3565b3480156105e857600080fd5b5061031b6105f73660046122e2565b610ede565b34801561060857600080fd5b5061031b61061736600461216d565b610f1b565b34801561062857600080fd5b5061034c60125481565b34801561063e57600080fd5b5061034c60115481565b34801561065457600080fd5b5061031b6106633660046120f2565b610fb1565b34801561067457600080fd5b50600a5461028c9060ff1681565b34801561068e57600080fd5b506102b661069d36600461228f565b610feb565b3480156106ae57600080fd5b5061034c600e5481565b61031b6106c636600461228f565b6110b6565b3480156106d757600080fd5b5061031b6106e636600461228f565b6112ca565b3480156106f757600080fd5b5061031b61070636600461228f565b6112f9565b34801561071757600080fd5b5061028c610726366004612083565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561076057600080fd5b5061031b61076f366004612274565b611328565b34801561078057600080fd5b5061031b61078f366004612068565b611365565b61031b6107a236600461232a565b6113fd565b60006001600160e01b031982166380ac58cd60e01b14806107d857506001600160e01b03198216635b5e139f60e01b145b806107f357506001600160e01b0319821663780e9d6360e01b145b8061080e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610823906125c4565b80601f016020809104026020016040519081016040528092919081815260200182805461084f906125c4565b801561089c5780601f106108715761010080835404028352916020019161089c565b820191906000526020600020905b81548152906001019060200180831161087f57829003601f168201915b5050505050905090565b60006108b1826116be565b6108ce576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b60006108f582610c87565b9050806001600160a01b0316836001600160a01b0316141561092a5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b0382161480159061094a57506109488133610726565b155b15610968576040516367d9dca160e11b815260040160405180910390fd5b6109738383836116ea565b505050565b6000546001600160a01b031633146109ab5760405162461bcd60e51b81526004016109a290612453565b60405180910390fd5b601055565b6000546001600160a01b031633146109da5760405162461bcd60e51b81526004016109a290612453565b600a80549115156101000261ff0019909216919091179055565b610973838383611746565b6000546001600160a01b03163314610a295760405162461bcd60e51b81526004016109a290612453565b601155565b6000610a3983610d56565b8210610a58576040516306ed618760e11b815260040160405180910390fd5b600154600080805b83811015610b1b57600081815260056020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161580159282019290925290610ac75750610b13565b80516001600160a01b031615610adc57805192505b876001600160a01b0316836001600160a01b03161415610b115786841415610b0a5750935061080e92505050565b6001909301925b505b600101610a60565b50600080fd5b6000546001600160a01b03163314610b4b5760405162461bcd60e51b81526004016109a290612453565b47610b5e6000546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610b96573d6000803e3d6000fd5b5050565b61097383838360405180602001604052806000815250610fb1565b60015460009081805b82811015610c3e57600081815260056020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290610c355785831415610c2e5750949350505050565b6001909201915b50600101610bbe565b506040516329c8c00760e21b815260040160405180910390fd5b6000546001600160a01b03163314610c825760405162461bcd60e51b81526004016109a290612453565b600f55565b6000610c928261195a565b5192915050565b6000546001600160a01b03163314610cc35760405162461bcd60e51b81526004016109a290612453565b600d55565b600b8054610cd5906125c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d01906125c4565b8015610d4e5780601f10610d2357610100808354040283529160200191610d4e565b820191906000526020600020905b815481529060010190602001808311610d3157829003601f168201915b505050505081565b60006001600160a01b038216610d7f576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600660205260409020546001600160401b031690565b6000546001600160a01b03163314610dce5760405162461bcd60e51b81526004016109a290612453565b610dd86000611a75565b565b6000546001600160a01b03163314610e045760405162461bcd60e51b81526004016109a290612453565b6000815111610e255760405162461bcd60e51b81526004016109a290612488565b600e54815160025460015403610e3b9190612536565b1115610e825760405162461bcd60e51b81526020600482015260166024820152751b9bdd08195b9bdd59da081d1bdad95b9cc81b19599d60521b60448201526064016109a2565b60005b8151811015610b9657610eb2828281518110610ea357610ea361265a565b60200260200101516001611ac5565b80610ebc816125ff565b915050610e85565b606060048054610823906125c4565b600061080e82611adf565b6000546001600160a01b03163314610f085760405162461bcd60e51b81526004016109a290612453565b8051610b9690600b906020840190611f4c565b6001600160a01b038216331415610f455760405163b06307db60e01b815260040160405180910390fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610fbc848484611746565b610fc884848484611b34565b610fe5576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6060610ff6826116be565b61105a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109a2565b6000611064611c43565b9050600081511161108457604051806020016040528060008152506110af565b8061108e84611c52565b60405160200161109f9291906123d4565b6040516020818303038152906040525b9392505050565b600a5460ff6101009091041615156001146111085760405162461bcd60e51b815260206004820152601260248201527153616c65206973206e6f742041637469766560701b60448201526064016109a2565b600081116111285760405162461bcd60e51b81526004016109a290612488565b6010548111156111725760405162461bcd60e51b815260206004820152601560248201527436b0bc103832b9103a3930b739b0b1ba34b7b7101960591b60448201526064016109a2565b600e54816111836002546001540390565b61118d9190612536565b11156111d15760405162461bcd60e51b81526020600482015260136024820152725265616368696e67206d617820737570706c7960681b60448201526064016109a2565b601154816111e26002546001540390565b6111ec9190612536565b111561120a5760405162461bcd60e51b81526004016109a2906124bf565b600f548161121733610ed3565b6112219190612536565b11156112675760405162461bcd60e51b8152602060048201526015602482015274115e18d95959081b585e081c195c881dd85b1b195d605a1b60448201526064016109a2565b80600c546112759190612562565b3410156112bd5760405162461bcd60e51b81526020600482015260166024820152751a5b98dbdc9c9958dd08195d1a195c88185b5bdd5b9d60521b60448201526064016109a2565b6112c73382611ac5565b50565b6000546001600160a01b031633146112f45760405162461bcd60e51b81526004016109a290612453565b601255565b6000546001600160a01b031633146113235760405162461bcd60e51b81526004016109a290612453565b600c55565b6000546001600160a01b031633146113525760405162461bcd60e51b81526004016109a290612453565b600a805460ff1916911515919091179055565b6000546001600160a01b0316331461138f5760405162461bcd60e51b81526004016109a290612453565b6001600160a01b0381166113f45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a2565b6112c781611a75565b600a5460ff1615156001146114495760405162461bcd60e51b815260206004820152601260248201527153616c65206973206e6f742041637469766560701b60448201526064016109a2565b6114be828280806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506012546040516bffffffffffffffffffffffff193360601b166020820152909250603401905060405160208183030381529060405280519060200120611d4f565b61150a5760405162461bcd60e51b815260206004820152601f60248201527f596f75722061646472657373206973206e6f742057686974656c69737465640060448201526064016109a2565b6000831161152a5760405162461bcd60e51b81526004016109a290612488565b6010548311156115745760405162461bcd60e51b815260206004820152601560248201527436b0bc103832b9103a3930b739b0b1ba34b7b7101960591b60448201526064016109a2565b600e54836115856002546001540390565b61158f9190612536565b11156115d35760405162461bcd60e51b81526020600482015260136024820152725265616368696e67206d617820737570706c7960681b60448201526064016109a2565b601154836115e46002546001540390565b6115ee9190612536565b111561160c5760405162461bcd60e51b81526004016109a2906124bf565b600f548361161933610ed3565b6116239190612536565b11156116695760405162461bcd60e51b8152602060048201526015602482015274115e18d95959081b585e081c195c881dd85b1b195d605a1b60448201526064016109a2565b600d543410156116b45760405162461bcd60e51b81526020600482015260166024820152751a5b98dbdc9c9958dd08195d1a195c88185b5bdd5b9d60521b60448201526064016109a2565b6109733384611ac5565b60006001548210801561080e575050600090815260056020526040902054600160e01b900460ff161590565b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006117518261195a565b80519091506000906001600160a01b0316336001600160a01b0316148061177f5750815161177f9033610726565b8061179a57503361178f846108a6565b6001600160a01b0316145b9050806117ba57604051632ce44b5f60e11b815260040160405180910390fd5b846001600160a01b031682600001516001600160a01b0316146117ef5760405162a1148160e81b815260040160405180910390fd5b6001600160a01b03841661181657604051633a954ecd60e21b815260040160405180910390fd5b61182660008484600001516116ea565b6001600160a01b038581166000908152600660209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600590945282852080546001600160e01b031916909417600160a01b4290921691909102179092559086018083529120549091166119105760015481101561191057825160008281526005602090815260409091208054918601516001600160401b0316600160a01b026001600160e01b03199092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b60408051606081018252600080825260208201819052918101919091526001548290811015611a5c57600081815260056020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff16151591810182905290611a5a5780516001600160a01b0316156119f1579392505050565b5060001901600081815260056020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215611a55579392505050565b6119f1565b505b604051636f96cda160e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b96828260405180602001604052806000815250611d65565b60006001600160a01b038216611b08576040516335ebb31960e01b815260040160405180910390fd5b506001600160a01b0316600090815260066020526040902054600160401b90046001600160401b031690565b60006001600160a01b0384163b15611c3757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b78903390899088908890600401612403565b602060405180830381600087803b158015611b9257600080fd5b505af1925050508015611bc2575060408051601f3d908101601f19168201909252611bbf918101906122c5565b60015b611c1d573d808015611bf0576040519150601f19603f3d011682016040523d82523d6000602084013e611bf5565b606091505b508051611c15576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611c3b565b5060015b949350505050565b6060600b8054610823906125c4565b606081611c765750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ca05780611c8a816125ff565b9150611c999050600a8361254e565b9150611c7a565b6000816001600160401b03811115611cba57611cba612670565b6040519080825280601f01601f191660200182016040528015611ce4576020820181803683370190505b5090505b8415611c3b57611cf9600183612581565b9150611d06600a8661261a565b611d11906030612536565b60f81b818381518110611d2657611d2661265a565b60200101906001600160f81b031916908160001a905350611d48600a8661254e565b9450611ce8565b600082611d5c8584611d72565b14949350505050565b6109738383836001611de6565b600081815b8451811015611dde576000858281518110611d9457611d9461265a565b60200260200101519050808311611dba5760008381526020829052604090209250611dcb565b600081815260208490526040902092505b5080611dd6816125ff565b915050611d77565b509392505050565b6001546001600160a01b038516611e0f57604051622e076360e81b815260040160405180910390fd5b83611e2d5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260066020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c018116909202179091558584526005909252822080546001600160e01b031916909317600160a01b42909216919091021790915581905b85811015611f435760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4838015611f195750611f176000888488611b34565b155b15611f37576040516368d2bf6b60e11b815260040160405180910390fd5b60019182019101611ec2565b50600155611953565b828054611f58906125c4565b90600052602060002090601f016020900481019282611f7a5760008555611fc0565b82601f10611f9357805160ff1916838001178555611fc0565b82800160010185558215611fc0579182015b82811115611fc0578251825591602001919060010190611fa5565b50611fcc929150611fd0565b5090565b5b80821115611fcc5760008155600101611fd1565b60006001600160401b03831115611ffe57611ffe612670565b612011601f8401601f1916602001612506565b905082815283838301111561202557600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461205357600080fd5b919050565b8035801515811461205357600080fd5b60006020828403121561207a57600080fd5b6110af8261203c565b6000806040838503121561209657600080fd5b61209f8361203c565b91506120ad6020840161203c565b90509250929050565b6000806000606084860312156120cb57600080fd5b6120d48461203c565b92506120e26020850161203c565b9150604084013590509250925092565b6000806000806080858703121561210857600080fd5b6121118561203c565b935061211f6020860161203c565b92506040850135915060608501356001600160401b0381111561214157600080fd5b8501601f8101871361215257600080fd5b61216187823560208401611fe5565b91505092959194509250565b6000806040838503121561218057600080fd5b6121898361203c565b91506120ad60208401612058565b600080604083850312156121aa57600080fd5b6121b38361203c565b946020939093013593505050565b600060208083850312156121d457600080fd5b82356001600160401b03808211156121eb57600080fd5b818501915085601f8301126121ff57600080fd5b81358181111561221157612211612670565b8060051b9150612222848301612506565b8181528481019084860184860187018a101561223d57600080fd5b600095505b83861015612267576122538161203c565b835260019590950194918601918601612242565b5098975050505050505050565b60006020828403121561228657600080fd5b6110af82612058565b6000602082840312156122a157600080fd5b5035919050565b6000602082840312156122ba57600080fd5b81356110af81612686565b6000602082840312156122d757600080fd5b81516110af81612686565b6000602082840312156122f457600080fd5b81356001600160401b0381111561230a57600080fd5b8201601f8101841361231b57600080fd5b611c3b84823560208401611fe5565b60008060006040848603121561233f57600080fd5b8335925060208401356001600160401b038082111561235d57600080fd5b818601915086601f83011261237157600080fd5b81358181111561238057600080fd5b8760208260051b850101111561239557600080fd5b6020830194508093505050509250925092565b600081518084526123c0816020860160208601612598565b601f01601f19169290920160200192915050565b600083516123e6818460208801612598565b8351908301906123fa818360208801612598565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612436908301846123a8565b9695505050505050565b6020815260006110af60208301846123a8565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000604082015260600190565b60208082526027908201527f4e6f7420656e6f75676820746f6b656e73206c65667420696e2063757272656e6040820152667420706861736560c81b606082015260800190565b604051601f8201601f191681016001600160401b038111828210171561252e5761252e612670565b604052919050565b600082198211156125495761254961262e565b500190565b60008261255d5761255d612644565b500490565b600081600019048311821515161561257c5761257c61262e565b500290565b6000828210156125935761259361262e565b500390565b60005b838110156125b357818101518382015260200161259b565b83811115610fe55750506000910152565b600181811c908216806125d857607f821691505b602082108114156125f957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126135761261361262e565b5060010190565b60008261262957612629612644565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146112c757600080fdfea2646970667358221220b620db81dc78c93961c9bbda0ffc48cc1bf06686c5cf4f93c60c5b57a79f903564736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c47756d6d6965732047616e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024747000000000000000000000000000000000000000000000000000000000000