60806040526008805461ffff60a01b191690553480156200001f57600080fd5b50604080518082018252600e8082526d4e465465616d734a65727365797360901b6020808401829052845180860190955291845290830152906002620000668382620001e5565b506003620000758282620001e5565b50506001600055506200008833620000ee565b6040518060800160405280604181526020016200265560419139600a90620000b19082620001e5565b50600b80547303f5cee0d698c24a42a396ec6bdaee014057d4c86001600160a01b03199182168117909255600c80549091169091179055620002b1565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200016b57607f821691505b6020821081036200018c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001e057600081815260208120601f850160051c81016020861015620001bb5750805b601f850160051c820191505b81811015620001dc57828155600101620001c7565b5050505b505050565b81516001600160401b0381111562000201576200020162000140565b620002198162000212845462000156565b8462000192565b602080601f831160018114620002515760008415620002385750858301515b600019600386901b1c1916600185901b178555620001dc565b600085815260208120601f198616915b82811015620002825788860151825594840194600190910190840162000261565b5085821015620002a15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61239480620002c16000396000f3fe6080604052600436106101e35760003560e01c806370a0823111610102578063a22cb46511610095578063e985e9c511610064578063e985e9c51461056c578063ec857237146105b5578063f2fde38b146105d5578063f8e93ef9146105f557600080fd5b8063a22cb465146104ec578063b88d4fde1461050c578063c23dc68f1461051f578063c87b56dd1461054c57600080fd5b80638da5cb5b116100d15780638da5cb5b1461047857806395d89b411461049657806399a2557a146104ab5780639fd6db12146104cb57600080fd5b806370a08231146103e6578063715018a6146104065780638462151c1461041b5780638d1387461461044857600080fd5b80633ee501b41161017a5780635196e060116101495780635196e0601461036457806355f804b3146103795780635bbb2177146103995780636352211e146103c657600080fd5b80633ee501b4146102fb57806342842e0e1461031057806342966c68146103235780634d7547151461034357600080fd5b806318160ddd116101b657806318160ddd1461028c57806323b872dd146102b357806329631482146102c65780633d8adfd0146102e657600080fd5b806301ffc9a7146101e857806306fdde031461021d578063081812fc1461023f578063095ea7b314610277575b600080fd5b3480156101f457600080fd5b50610208610203366004611b4c565b610608565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b5061023261065a565b6040516102149190611bb9565b34801561024b57600080fd5b5061025f61025a366004611bcc565b6106ec565b6040516001600160a01b039091168152602001610214565b61028a610285366004611bfa565b610730565b005b34801561029857600080fd5b5060015460005403600019015b604051908152602001610214565b61028a6102c1366004611c26565b610740565b3480156102d257600080fd5b50600b5461025f906001600160a01b031681565b3480156102f257600080fd5b506102326108d1565b34801561030757600080fd5b5061028a61095f565b61028a61031e366004611c26565b610988565b34801561032f57600080fd5b5061028a61033e366004611bcc565b6109a8565b34801561034f57600080fd5b5060085461020890600160a01b900460ff1681565b34801561037057600080fd5b5061028a610a6c565b34801561038557600080fd5b5061028a610394366004611d04565b610a95565b3480156103a557600080fd5b506103b96103b4366004611d4c565b610aa9565b6040516102149190611dfc565b3480156103d257600080fd5b5061025f6103e1366004611bcc565b610b74565b3480156103f257600080fd5b506102a5610401366004611e3e565b610b7f565b34801561041257600080fd5b5061028a610bcd565b34801561042757600080fd5b5061043b610436366004611e3e565b610be1565b6040516102149190611e5b565b34801561045457600080fd5b50610208610463366004611bcc565b60096020526000908152604090205460ff1681565b34801561048457600080fd5b506008546001600160a01b031661025f565b3480156104a257600080fd5b50610232610ce9565b3480156104b757600080fd5b5061043b6104c6366004611e93565b610cf8565b3480156104d757600080fd5b5060085461020890600160a81b900460ff1681565b3480156104f857600080fd5b5061028a610507366004611ec8565b610e7f565b61028a61051a366004611f06565b610eeb565b34801561052b57600080fd5b5061053f61053a366004611bcc565b610f35565b6040516102149190611f85565b34801561055857600080fd5b50610232610567366004611bcc565b610fbd565b34801561057857600080fd5b50610208610587366004611f93565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156105c157600080fd5b5061028a6105d0366004611e3e565b611040565b3480156105e157600080fd5b5061028a6105f0366004611e3e565b611074565b61028a610603366004611fc1565b6110ed565b60006301ffc9a760e01b6001600160e01b03198316148061063957506380ac58cd60e01b6001600160e01b03198316145b806106545750635b5e139f60e01b6001600160e01b03198316145b92915050565b60606002805461066990612066565b80601f016020809104026020016040519081016040528092919081815260200182805461069590612066565b80156106e25780601f106106b7576101008083540402835291602001916106e2565b820191906000526020600020905b8154815290600101906020018083116106c557829003601f168201915b5050505050905090565b60006106f7826113a4565b610714576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b61073c828260016113d9565b5050565b600061074b82611480565b9050836001600160a01b0316816001600160a01b03161461077e5760405162a1148160e81b815260040160405180910390fd5b600082815260066020526040902080546107aa8187335b6001600160a01b039081169116811491141790565b6107d5576107b88633610587565b6107d557604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0385166107fc57604051633a954ecd60e21b815260040160405180910390fd5b801561080757600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003610899576001840160008181526004602052604081205490036108975760005481146108975760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b031660008051602061233f83398151915260405160405180910390a45b505050505050565b600a80546108de90612066565b80601f016020809104026020016040519081016040528092919081815260200182805461090a90612066565b80156109575780601f1061092c57610100808354040283529160200191610957565b820191906000526020600020905b81548152906001019060200180831161093a57829003601f168201915b505050505081565b61096761150c565b6008805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6109a383838360405180602001604052806000815250610eeb565b505050565b60006109b382610b74565b600854909150600160a01b900460ff16610a0d5760405162461bcd60e51b8152602060048201526016602482015275189d5c9b9a5b99c81a5cc81b9bdd08195b98589b195960521b60448201526064015b60405180910390fd5b610a178133610587565b610a635760405162461bcd60e51b815260206004820181905260248201527f63616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665646044820152606401610a04565b61073c82611566565b610a7461150c565b6008805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610a9d61150c565b600a61073c82826120e6565b6060816000816001600160401b03811115610ac657610ac6611c67565b604051908082528060200260200182016040528015610b1857816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610ae45790505b50905060005b828114610b6b57610b46868683818110610b3a57610b3a6121a5565b90506020020135610f35565b828281518110610b5857610b586121a5565b6020908102919091010152600101610b1e565b50949350505050565b600061065482611480565b60006001600160a01b038216610ba8576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b610bd561150c565b610bdf6000611571565b565b60606000806000610bf185610b7f565b90506000816001600160401b03811115610c0d57610c0d611c67565b604051908082528060200260200182016040528015610c36578160200160208202803683370190505b509050610c6360408051608081018252600080825260208201819052918101829052606081019190915290565b60015b838614610cdd57610c76816115c3565b91508160400151610cd55781516001600160a01b031615610c9657815194505b876001600160a01b0316856001600160a01b031603610cd55780838780600101985081518110610cc857610cc86121a5565b6020026020010181815250505b600101610c66565b50909695505050505050565b60606003805461066990612066565b6060818310610d1a57604051631960ccad60e11b815260040160405180910390fd5b600080610d2660005490565b90506001851015610d3657600194505b80841115610d42578093505b6000610d4d87610b7f565b905084861015610d6c5785850381811015610d66578091505b50610d70565b5060005b6000816001600160401b03811115610d8a57610d8a611c67565b604051908082528060200260200182016040528015610db3578160200160208202803683370190505b50905081600003610dc9579350610e7892505050565b6000610dd488610f35565b905060008160400151610de5575080515b885b888114158015610df75750848714155b15610e6c57610e05816115c3565b92508260400151610e645782516001600160a01b031615610e2557825191505b8a6001600160a01b0316826001600160a01b031603610e645780848880600101995081518110610e5757610e576121a5565b6020026020010181815250505b600101610de7565b50505092835250909150505b9392505050565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ef6848484610740565b6001600160a01b0383163b15610f2f57610f12848484846115ff565b610f2f576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6040805160808101825260008082526020820181905291810182905260608101919091526040805160808101825260008082526020820181905291810182905260608101919091526001831080610f8e57506000548310155b15610f995792915050565b610fa2836115c3565b9050806040015115610fb45792915050565b610e78836116eb565b6060610fc8826113a4565b610fe557604051630a14c4b560e41b815260040160405180910390fd5b6000610fef611720565b9050805160000361100f5760405180602001604052806000815250610e78565b806110198461172f565b60405160200161102a9291906121bb565b6040516020818303038152906040529392505050565b61104861150c565b600b80546001600160a01b039092166001600160a01b03199283168117909155600c8054909216179055565b61107c61150c565b6001600160a01b0381166110e15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a04565b6110ea81611571565b50565b600854600160a81b900460ff1661113f5760405162461bcd60e51b8152602060048201526016602482015275135a5b9d1a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610a04565b600c546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ac91906121ea565b9050600081116112085760405162461bcd60e51b815260206004820152602160248201527f4d75737420626520616e204e465465616d7320686f6c64657220746f206d696e6044820152601d60fa1b6064820152608401610a04565b60005b8251811015611340576000838281518110611228576112286121a5565b6020908102919091018101516000818152600990925260409091205490915060ff1615156001036112925761125c81611773565b60405160200161126c9190612203565b60408051601f198184030181529082905262461bcd60e51b8252610a0491600401611bb9565b600c546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa1580156112dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113009190612263565b9050336001600160a01b0382161461132b5761131b82611773565b60405160200161126c9190612280565b50508080611338906122bd565b91505061120b565b5061134c338351611805565b60005b82518110156109a357600083828151811061136c5761136c6121a5565b6020908102919091018101516000908152600990915260409020805460ff19166001179055508061139c816122bd565b91505061134f565b6000816001111580156113b8575060005482105b8015610654575050600090815260046020526040902054600160e01b161590565b60006113e483610b74565b9050811561142357336001600160a01b03821614611423576114068133610587565b611423576040516367d9dca160e11b815260040160405180910390fd5b60008381526006602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b6000816001116114f3575060008181526004602052604081205490600160e01b821690036114f357806000036114ee5760005482106114d257604051636f96cda160e11b815260040160405180910390fd5b5b506000190160008181526004602052604090205480156114d3575b919050565b604051636f96cda160e11b815260040160405180910390fd5b6008546001600160a01b03163314610bdf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a04565b6110ea8160006118df565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60408051608081018252600080825260208201819052918101829052606081019190915260008281526004602052604090205461065490611a17565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906116349033908990889088906004016122e4565b6020604051808303816000875af192505050801561166f575060408051601f3d908101601f1916820190925261166c91810190612321565b60015b6116cd573d80801561169d576040519150601f19603f3d011682016040523d82523d6000602084013e6116a2565b606091505b5080516000036116c5576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60408051608081018252600080825260208201819052918101829052606081019190915261065461171b83611480565b611a17565b6060600a805461066990612066565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806117495750819003601f19909101908152919050565b6060600061178083611a5e565b60010190506000816001600160401b0381111561179f5761179f611c67565b6040519080825280601f01601f1916602001820160405280156117c9576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846117d357509392505050565b600080549082900361182a5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b1783179055828401908390839060008051602061233f8339815191528180a4600183015b8181146118b5578083600060008051602061233f833981519152600080a460010161188f565b50816000036118d657604051622e076360e81b815260040160405180910390fd5b60005550505050565b60006118ea83611480565b90508060008061190886600090815260066020526040902080549091565b9150915084156119485761191d818433610795565b6119485761192b8333610587565b61194857604051632ce44b5f60e11b815260040160405180910390fd5b801561195357600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260046020526040812091909155600160e11b851690036119e1576001860160008181526004602052604081205490036119df5760005481146119df5760008181526004602052604090208590555b505b60405186906000906001600160a01b0386169060008051602061233f833981519152908390a45050600180548101905550505050565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611a9d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611ac9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611ae757662386f26fc10000830492506010015b6305f5e1008310611aff576305f5e100830492506008015b6127108310611b1357612710830492506004015b60648310611b25576064830492506002015b600a83106106545760010192915050565b6001600160e01b0319811681146110ea57600080fd5b600060208284031215611b5e57600080fd5b8135610e7881611b36565b60005b83811015611b84578181015183820152602001611b6c565b50506000910152565b60008151808452611ba5816020860160208601611b69565b601f01601f19169290920160200192915050565b602081526000610e786020830184611b8d565b600060208284031215611bde57600080fd5b5035919050565b6001600160a01b03811681146110ea57600080fd5b60008060408385031215611c0d57600080fd5b8235611c1881611be5565b946020939093013593505050565b600080600060608486031215611c3b57600080fd5b8335611c4681611be5565b92506020840135611c5681611be5565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611ca557611ca5611c67565b604052919050565b60006001600160401b03831115611cc657611cc6611c67565b611cd9601f8401601f1916602001611c7d565b9050828152838383011115611ced57600080fd5b828260208301376000602084830101529392505050565b600060208284031215611d1657600080fd5b81356001600160401b03811115611d2c57600080fd5b8201601f81018413611d3d57600080fd5b6116e384823560208401611cad565b60008060208385031215611d5f57600080fd5b82356001600160401b0380821115611d7657600080fd5b818501915085601f830112611d8a57600080fd5b813581811115611d9957600080fd5b8660208260051b8501011115611dae57600080fd5b60209290920196919550909350505050565b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b6020808252825182820181905260009190848201906040850190845b81811015610cdd57611e2b838551611dc0565b9284019260809290920191600101611e18565b600060208284031215611e5057600080fd5b8135610e7881611be5565b6020808252825182820181905260009190848201906040850190845b81811015610cdd57835183529284019291840191600101611e77565b600080600060608486031215611ea857600080fd5b8335611eb381611be5565b95602085013595506040909401359392505050565b60008060408385031215611edb57600080fd5b8235611ee681611be5565b915060208301358015158114611efb57600080fd5b809150509250929050565b60008060008060808587031215611f1c57600080fd5b8435611f2781611be5565b93506020850135611f3781611be5565b92506040850135915060608501356001600160401b03811115611f5957600080fd5b8501601f81018713611f6a57600080fd5b611f7987823560208401611cad565b91505092959194509250565b608081016106548284611dc0565b60008060408385031215611fa657600080fd5b8235611fb181611be5565b91506020830135611efb81611be5565b60006020808385031215611fd457600080fd5b82356001600160401b0380821115611feb57600080fd5b818501915085601f830112611fff57600080fd5b81358181111561201157612011611c67565b8060051b9150612022848301611c7d565b818152918301840191848101908884111561203c57600080fd5b938501935b8385101561205a57843582529385019390850190612041565b98975050505050505050565b600181811c9082168061207a57607f821691505b60208210810361209a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156109a357600081815260208120601f850160051c810160208610156120c75750805b601f850160051c820191505b818110156108c9578281556001016120d3565b81516001600160401b038111156120ff576120ff611c67565b6121138161210d8454612066565b846120a0565b602080601f83116001811461214857600084156121305750858301515b600019600386901b1c1916600185901b1785556108c9565b600085815260208120601f198616915b8281101561217757888601518255948401946001909101908401612158565b50858210156121955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b600083516121cd818460208801611b69565b8351908301906121e1818360208801611b69565b01949350505050565b6000602082840312156121fc57600080fd5b5051919050565b704a657273657920666f72205465616d202360781b81526000825161222f816011850160208701611b69565b7f2068617320616c7265616479206265656e20636c61696d6564000000000000006011939091019283015250602a01919050565b60006020828403121561227557600080fd5b8151610e7881611be5565b74596f7520646f206e6f74206f776e205465616d202360581b8152600082516122b0816015850160208701611b69565b9190910160150192915050565b6000600182016122dd57634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061231790830184611b8d565b9695505050505050565b60006020828403121561233357600080fd5b8151610e7881611b3656feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122075fe4d4d29c0e56b8605069a361f66eb611568a0fdb0030c71e34a6e0884b54e64736f6c6343000811003368747470733a2f2f73332e61702d736f757468656173742d322e616d617a6f6e6177732e636f6d2f6a65727365792d6d6574612e6e667465616d732e636c75622f