0x608060405260043610610257575f3560e01c8063751039fc1161013f578063a8aa1b31116100b3578063d78e139d11610078578063d78e139d146106d8578063dd62ed3e146106f7578063e1deae431461073b578063ea893be21461075a578063f2fde38b1461076e578063f887ea401461078d575f80fd5b8063a8aa1b3114610649578063a9059cbb14610668578063b2bdfa7b14610687578063c9567bf9146106a5578063d51ed1c8146106b9575f80fd5b80638a4068dd116101045780638a4068dd146105995780638c33c9e4146105ad5780638da5cb5b146105cc57806395d89b41146105e857806397613b2814610616578063a456ae6914610635575f80fd5b8063751039fc1461050c57806378109e54146105205780637d1db4a51461053557806386f6c3c11461054a578063893d20e814610569575f80fd5b80633554dd3c116101d65780635c7d2f191161019b5780635c7d2f191461044d5780635d83e1d51461046c5780636ddd17131461048b57806370a08231146104a457806370c757ec146104d8578063715018a6146104f8575f80fd5b80633554dd3c146103c65780633748cba8146103e75780633df4ddf414610406578063571ac8b01461041a5780635a8ac02d14610439575f80fd5b80631161ae391161021c5780631161ae391461034557806318160ddd1461036457806323b872dd146103785780632b112e4914610397578063313ce567146103ab575f80fd5b80630445b6671461026257806306fdde031461028a57806308fd3d05146102c9578063095ea7b3146102f9578063115db61014610318575f80fd5b3661025e57005b5f80fd5b34801561026d575f80fd5b5061027760225481565b6040519081526020015b60405180910390f35b348015610295575f80fd5b5060408051808201909152600e81526d047726f6b2047726f6b20333030360941b60208201525b6040516102819190611f00565b3480156102d4575f80fd5b50601f546102e990600160a01b900460ff1681565b6040519015158152602001610281565b348015610304575f80fd5b506102e9610313366004611f66565b6107ac565b348015610323575f80fd5b506102e9610332366004611f8e565b602080525f908152604090205460ff1681565b348015610350575f80fd5b506102e961035f366004611fa7565b610818565b34801561036f575f80fd5b50600554610277565b348015610383575f80fd5b506102e9610392366004611fc7565b61082b565b3480156103a2575f80fd5b506102776108e9565b3480156103b6575f80fd5b5060405160128152602001610281565b3480156103d1575f80fd5b506103e56103e0366004612000565b610939565b005b3480156103f2575f80fd5b506103e5610401366004612061565b610a18565b348015610411575f80fd5b506103e5610a52565b348015610425575f80fd5b506102e9610434366004611f8e565b610a95565b348015610444575f80fd5b506103e5610aa1565b348015610458575f80fd5b506102e9610467366004611f66565b610ae1565b348015610477575f80fd5b506103e561048636600461208a565b610c08565b348015610496575f80fd5b506021546102e99060ff1681565b3480156104af575f80fd5b506102776104be366004611f8e565b6001600160a01b03165f9081526008602052604090205490565b3480156104e3575f80fd5b50601f546102e990600160a81b900460ff1681565b348015610503575f80fd5b506103e5610ca2565b348015610517575f80fd5b506103e5610d13565b34801561052b575f80fd5b5061027760075481565b348015610540575f80fd5b5061027760065481565b348015610555575f80fd5b506103e56105643660046120a1565b610d49565b348015610574575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610281565b3480156105a4575f80fd5b506103e5610e16565b3480156105b8575f80fd5b506103e56105c73660046120ed565b610e4f565b3480156105d7575f80fd5b505f546001600160a01b0316610581565b3480156105f3575f80fd5b5060408051808201909152600681526547524f4b334b60d01b60208201526102bc565b348015610621575f80fd5b506103e5610630366004612108565b610e96565b348015610640575f80fd5b506103e5610f17565b348015610654575f80fd5b50601f54610581906001600160a01b031681565b348015610673575f80fd5b506102e9610682366004611f66565b610f57565b348015610692575f80fd5b505f54610581906001600160a01b031681565b3480156106b0575f80fd5b506103e5610f63565b3480156106c4575f80fd5b506102776106d336600461208a565b610fb3565b3480156106e3575f80fd5b506103e56106f236600461208a565b610ff8565b348015610702575f80fd5b50610277610711366004612124565b6001600160a01b039182165f90815260096020908152604080832093909416825291909152205490565b348015610746575f80fd5b506103e5610755366004612155565b611049565b348015610765575f80fd5b506103e56110e4565b348015610779575f80fd5b506103e5610788366004611f8e565b611123565b348015610798575f80fd5b50601d54610581906001600160a01b031681565b335f8181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108069086815260200190565b60405180910390a35060015b92915050565b5f8261082383610fb3565b119392505050565b6001600160a01b0383165f9081526009602090815260408083203384529091528120545f19146108d4576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f9081526009825283812033825290915291909120546108b091849061120a565b6001600160a01b0385165f9081526009602090815260408083203384529091529020555b6108df848484611242565b90505b9392505050565b6004546001600160a01b03165f90815260086020526040812054610934906003546001600160a01b03165f9081526008602052604090205461092e9060055490611606565b90611606565b905090565b5f546001600160a01b0316331461096b5760405162461bcd60e51b8152600401610962906121d4565b60405180910390fd5b601680546001600160a01b038781166001600160a01b031992831617909255601780548784169083168117909155601880548785169084168117909155601a805487861690851681179091556019805495871695909416851790935560408051928352602083019190915281019190915260608101919091527f06cd79b5e338fdebb51e28f829f3333e4fda9663d4732f262d97dbbacf748b159060800160405180910390a15050505050565b5f546001600160a01b03163314610a415760405162461bcd60e51b8152600401610962906121d4565b601391909155601491909155601555565b5f546001600160a01b03163314610a7b5760405162461bcd60e51b8152600401610962906121d4565b61019060145561028a6013555f601555610a93611647565b565b5f610812825f196107ac565b5f546001600160a01b03163314610aca5760405162461bcd60e51b8152600401610962906121d4565b60fa6014556101906013555f601555610a93611647565b5f815f03610b52576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610b2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4f9190612209565b91505b604080516001600160a01b0385168152602081018490527fda2bc2bedd1f85b5a59d5dbbd6684ff877ef916994a16ec08813101e99ace65f910160405180910390a160165460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303815f875af1158015610be4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e29190612220565b5f546001600160a01b03163314610c315760405162461bcd60e51b8152600401610962906121d4565b6103e8600554610c41919061224f565b6007541015610c4e575f80fd5b6103e881600554610c5f919061226e565b610c69919061224f565b6007556040518181527fe0654e8597f94e34d9eb74dddc2975e840b8613108bf9e8ef6785d786c4bccd19060200160405180910390a150565b5f546001600160a01b03163314610ccb5760405162461bcd60e51b8152600401610962906121d4565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610d3c5760405162461bcd60e51b8152600401610962906121d4565b6005546007819055600655565b5f546001600160a01b03163314610d725760405162461bcd60e51b8152600401610962906121d4565b600c869055600f859055600d849055600e8390556010829055610da382610d9d858188818c8c6116e2565b906116e2565b6011556012819055610db660058261224f565b60115410610e065760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e203230250000006044820152606401610962565b610e0e611647565b505050505050565b6018546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610e4c573d5f803e3d5ffd5b50565b5f546001600160a01b03163314610e785760405162461bcd60e51b8152600401610962906121d4565b601f8054911515600160a81b0260ff60a81b19909216919091179055565b5f546001600160a01b03163314610ebf5760405162461bcd60e51b8152600401610962906121d4565b6021805460ff191683151590811790915560228290556040805183815260ff909216151560208301527f519582fd959400ab5e398f78c2768dea99251e8e26aed5578213b059ce4cee60910160405180910390a15050565b5f546001600160a01b03163314610f405760405162461bcd60e51b8152600401610962906121d4565b601f805461ffff60a01b191661010160a01b179055565b5f6108e2338484611242565b5f546001600160a01b03163314610f8c5760405162461bcd60e51b8152600401610962906121d4565b601f805460ff60a81b1916905561028a6014556103b66013556103e8601555610a93611647565b5f610812610fbf6108e9565b601f546001600160a01b03165f90815260086020526040902054610ff290610feb906002905b90611740565b8590611740565b906117be565b60185447906001600160a01b03166108fc6064611015858561226e565b61101f919061224f565b6040518115909202915f818181858888f19350505050158015611044573d5f803e3d5ffd5b505050565b5f546001600160a01b031633146110725760405162461bcd60e51b8152600401610962906121d4565b5f5b828110156110de578160205f86868581811061109257611092612285565b90506020020160208101906110a79190611f8e565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790556110d781612299565b9050611074565b50505050565b5f546001600160a01b0316331461110d5760405162461bcd60e51b8152600401610962906121d4565b601960148190556013555f601555610a93611647565b5f546001600160a01b0316331461114c5760405162461bcd60e51b8152600401610962906121d4565b6001600160a01b0381166111b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610962565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f818484111561122d5760405162461bcd60e51b81526004016109629190611f00565b505f61123984866122b1565b95945050505050565b6023545f9060ff16156112615761125a8484846117ff565b90506108e2565b6001600160a01b0384165f9081526001602052604090205460ff161580156112a157506001600160a01b0383165f9081526001602052604090205460ff16155b1561136057601f54600160a01b900460ff166112f65760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610962565b601f54600160a81b900460ff1615611360576001600160a01b0383165f90815260208052604090205460ff166113605760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610962565b6001600160a01b0384165f9081526001602052604090205460ff1615801561139157506001600160a01b0383163014155b80156113ab57506003546001600160a01b03848116911614155b80156113c55750601f546001600160a01b03848116911614155b80156113df5750601a546001600160a01b03848116911614155b80156113f957506017546001600160a01b03848116911614155b801561141d57506001600160a01b0383165f908152600b602052604090205460ff16155b156114bd576001600160a01b0383165f9081526008602052604090205460075461144784836122c4565b11156114bb5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610962565b505b6114c784836118cf565b6114cf61193b565b156114dc576114dc611988565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f9081526008909152919091205461152d91849061120a565b6001600160a01b0385165f90815260086020908152604080832093909355600a90529081205460ff168061157857506001600160a01b0384165f908152600a602052604090205460ff165b61158c57611587858486611d50565b61158e565b825b6001600160a01b0385165f908152600860205260409020549091506115b390826116e2565b6001600160a01b038086165f8181526008602052604090819020939093559151908716905f80516020612372833981519152906115f39085815260200190565b60405180910390a3506001949350505050565b5f6108e283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061120a565b7f8cc651ceed4360bdb07d4dfc17daa4a6fa17092a313d2464a582a73e9b9328006116846064610ff260145460115461174090919063ffffffff16565b6116a06064610ff260135460115461174090919063ffffffff16565b6116bc6064610ff260155460115461174090919063ffffffff16565b6040805160ff9485168152928416602084015292168183015290519081900360600190a1565b5f806116ee83856122c4565b9050838110156108e25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610962565b5f825f0361174f57505f610812565b5f61175a838561226e565b905082611767858361224f565b146108e25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610962565b5f6108e283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ed4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f90815260089091529182205461184f91849061120a565b6001600160a01b038086165f90815260086020526040808220939093559085168152205461187d90836116e2565b6001600160a01b038085165f8181526008602052604090819020939093559151908616905f80516020612372833981519152906118bd9086815260200190565b60405180910390a35060019392505050565b600654811115806118f757506001600160a01b0382165f908152600b602052604090205460ff165b6119375760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610962565b5050565b601f545f906001600160a01b0316331480159061195b575060235460ff16155b8015611969575060215460ff165b8015610934575050602254305f90815260086020526040902054101590565b6023805460ff19166001179055601b54601c545f916119a691610818565b6119b257600c546119b4565b5f5b90505f6119d76002610ff2601154610ff28660225461174090919063ffffffff16565b90505f6119ef8260225461160690919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f81518110611a2757611a27612285565b6001600160a01b039283166020918202929092010152600254825191169082906001908110611a5857611a58612285565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b81524792919091169063791ac94790611aa19086905f908790309042906004016122d7565b5f604051808303815f87803b158015611ab8575f80fd5b505af1158015611aca573d5f803e3d5ffd5b505050505f611ae2824761160690919063ffffffff16565b90505f611afc611af38860026117be565b60115490611606565b90505f611b106002610ff28481878d611740565b90505f611b2c83610ff2600d548761174090919063ffffffff16565b90505f611b4884610ff2600f548861174090919063ffffffff16565b90505f611b6485610ff2600e548961174090919063ffffffff16565b6017546040519192505f916001600160a01b039091169085908381818185875af1925050503d805f8114611bb3576040519150601f19603f3d011682016040523d82523d5f602084013e611bb8565b606091505b50506018546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114611c05576040519150601f19603f3d011682016040523d82523d5f602084013e611c0a565b606091505b50506019546040519192506001600160a01b03169084905f81818185875af1925050503d805f8114611c57576040519150601f19603f3d011682016040523d82523d5f602084013e611c5c565b606091505b505f9250508b159050611d3857601d5460165460405163f305d71960e01b8152306004820152602481018e90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015611cd6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cfb9190612346565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506023805460ff1916905550505050505050505050565b601554601f545f91906001600160a01b0390811690841603611d755750601354611d90565b601f546001600160a01b0390811690861603611d9057506014545b5f611dbc6012546064611da3919061226e565b610ff284610fe56011548a61174090919063ffffffff16565b90505f611dda601154610ff26010548561174090919063ffffffff16565b90505f611de78383611606565b305f90815260086020526040902054909150611e0390826116e2565b305f9081526008602052604080822092909255601a546001600160a01b031681522054611e3090836116e2565b601a546001600160a01b039081165f9081526008602090815260409182902093909355518381523092918b16915f80516020612372833981519152910160405180910390a38115611ebe57600554611e889083611606565b6005556004546040518381526001600160a01b03918216918a16905f805160206123728339815191529060200160405180910390a35b611ec88784611606565b98975050505050505050565b5f8183611ef45760405162461bcd60e51b81526004016109629190611f00565b505f611239848661224f565b5f6020808352835180828501525f5b81811015611f2b57858101830151858201604001528201611f0f565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611f61575f80fd5b919050565b5f8060408385031215611f77575f80fd5b611f8083611f4b565b946020939093013593505050565b5f60208284031215611f9e575f80fd5b6108e282611f4b565b5f8060408385031215611fb8575f80fd5b50508035926020909101359150565b5f805f60608486031215611fd9575f80fd5b611fe284611f4b565b9250611ff060208501611f4b565b9150604084013590509250925092565b5f805f805f60a08688031215612014575f80fd5b61201d86611f4b565b945061202b60208701611f4b565b935061203960408701611f4b565b925061204760608701611f4b565b915061205560808701611f4b565b90509295509295909350565b5f805f60608486031215612073575f80fd5b505081359360208301359350604090920135919050565b5f6020828403121561209a575f80fd5b5035919050565b5f805f805f8060c087890312156120b6575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b8015158114610e4c575f80fd5b5f602082840312156120fd575f80fd5b81356108e2816120e0565b5f8060408385031215612119575f80fd5b8235611f80816120e0565b5f8060408385031215612135575f80fd5b61213e83611f4b565b915061214c60208401611f4b565b90509250929050565b5f805f60408486031215612167575f80fd5b833567ffffffffffffffff8082111561217e575f80fd5b818601915086601f830112612191575f80fd5b81358181111561219f575f80fd5b8760208260051b85010111156121b3575f80fd5b602092830195509350508401356121c9816120e0565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215612219575f80fd5b5051919050565b5f60208284031215612230575f80fd5b81516108e2816120e0565b634e487b7160e01b5f52601160045260245ffd5b5f8261226957634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176108125761081261223b565b634e487b7160e01b5f52603260045260245ffd5b5f600182016122aa576122aa61223b565b5060010190565b818103818111156108125761081261223b565b808201808211156108125761081261223b565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156123255784516001600160a01b031683529383019391830191600101612300565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612358575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122056840ea6ab6c2f14b74149426a82496e1032adbba87381067e7247ba7efa2ed164736f6c63430008150033
0x6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326012600a620006be565b6200004290633b9aca00620006ce565b600581905562000064906103e8906200005d90600c6200049b565b906200052e565b60065560055462000080906103e8906200005d90600c6200049b565b6007556001600c556002600d556001600e555f600f555f601055601054600e54600c54600d54600f54620000b59190620006e8565b620000c19190620006e8565b620000cd9190620006e8565b620000d99190620006e8565b601155606460128190556103846013556101f460145560158190556019601b55601c55601f805461ffff60a01b191690556021805460ff191660011790556005546103e8906200012b906041620006ce565b620001379190620006fe565b60225534801562000146575f80fd5b505f80546001600160a01b031916339081178255808252600160208190526040808420805460ff191690921790915551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa15801562000203573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200022991906200071e565b600280546001600160a01b0319166001600160a01b03928316179055601d546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa15801562000286573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ac91906200071e565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303815f875af1158015620002fb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200032191906200071e565b601f80546001600160a01b039283166001600160a01b031991821681178355601e805483169091179055305f818152600960209081526040808320601d548816845282528083205f19905533808452600a8352818420805460ff199081166001908117909255601880548b1687528487208054831684179055838752600b8652848720805483168417905598548a168652838620805482168317905588548a1686528386208054821683179055601780548b1687528487208054831684179055968652838620805490911690911790556016805487168217905584548616730fd5b896a5c043fc7673485c197ba774c85786fe179094558554851673e0e08e1e0308df32f800bb9728ea30d268510e1a1790955560198054851684179055600354601a80549095169616959095179092556005548183526008855283832081905592519283529290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000793565b5f825f03620004ac57505f62000528565b5f620004b98385620006ce565b905082620004c88583620006fe565b14620005255760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b5f6200052583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200057760201b60201c565b5f81836200059a5760405162461bcd60e51b81526004016200051c919062000746565b505f620005a88486620006fe565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200060557815f1904821115620005e957620005e9620005b1565b80851615620005f757918102915b93841c9390800290620005ca565b509250929050565b5f826200061d5750600162000528565b816200062b57505f62000528565b81600181146200064457600281146200064f576200066f565b600191505062000528565b60ff841115620006635762000663620005b1565b50506001821b62000528565b5060208310610133831016604e8410600b841016171562000694575081810a62000528565b620006a08383620005c5565b805f1904821115620006b657620006b6620005b1565b029392505050565b5f6200052560ff8416836200060d565b8082028115828204841417620005285762000528620005b1565b80820180821115620005285762000528620005b1565b5f826200071957634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156200072f575f80fd5b81516001600160a01b038116811462000525575f80fd5b5f6020808352835180828501525f5b81811015620007735785810183015185820160400152820162000755565b505f604082860101526040601f19601f8301168501019250505092915050565b6123c780620007a15f395ff3fe608060405260043610610257575f3560e01c8063751039fc1161013f578063a8aa1b31116100b3578063d78e139d11610078578063d78e139d146106d8578063dd62ed3e146106f7578063e1deae431461073b578063ea893be21461075a578063f2fde38b1461076e578063f887ea401461078d575f80fd5b8063a8aa1b3114610649578063a9059cbb14610668578063b2bdfa7b14610687578063c9567bf9146106a5578063d51ed1c8146106b9575f80fd5b80638a4068dd116101045780638a4068dd146105995780638c33c9e4146105ad5780638da5cb5b146105cc57806395d89b41146105e857806397613b2814610616578063a456ae6914610635575f80fd5b8063751039fc1461050c57806378109e54146105205780637d1db4a51461053557806386f6c3c11461054a578063893d20e814610569575f80fd5b80633554dd3c116101d65780635c7d2f191161019b5780635c7d2f191461044d5780635d83e1d51461046c5780636ddd17131461048b57806370a08231146104a457806370c757ec146104d8578063715018a6146104f8575f80fd5b80633554dd3c146103c65780633748cba8146103e75780633df4ddf414610406578063571ac8b01461041a5780635a8ac02d14610439575f80fd5b80631161ae391161021c5780631161ae391461034557806318160ddd1461036457806323b872dd146103785780632b112e4914610397578063313ce567146103ab575f80fd5b80630445b6671461026257806306fdde031461028a57806308fd3d05146102c9578063095ea7b3146102f9578063115db61014610318575f80fd5b3661025e57005b5f80fd5b34801561026d575f80fd5b5061027760225481565b6040519081526020015b60405180910390f35b348015610295575f80fd5b5060408051808201909152600e81526d047726f6b2047726f6b20333030360941b60208201525b6040516102819190611f00565b3480156102d4575f80fd5b50601f546102e990600160a01b900460ff1681565b6040519015158152602001610281565b348015610304575f80fd5b506102e9610313366004611f66565b6107ac565b348015610323575f80fd5b506102e9610332366004611f8e565b602080525f908152604090205460ff1681565b348015610350575f80fd5b506102e961035f366004611fa7565b610818565b34801561036f575f80fd5b50600554610277565b348015610383575f80fd5b506102e9610392366004611fc7565b61082b565b3480156103a2575f80fd5b506102776108e9565b3480156103b6575f80fd5b5060405160128152602001610281565b3480156103d1575f80fd5b506103e56103e0366004612000565b610939565b005b3480156103f2575f80fd5b506103e5610401366004612061565b610a18565b348015610411575f80fd5b506103e5610a52565b348015610425575f80fd5b506102e9610434366004611f8e565b610a95565b348015610444575f80fd5b506103e5610aa1565b348015610458575f80fd5b506102e9610467366004611f66565b610ae1565b348015610477575f80fd5b506103e561048636600461208a565b610c08565b348015610496575f80fd5b506021546102e99060ff1681565b3480156104af575f80fd5b506102776104be366004611f8e565b6001600160a01b03165f9081526008602052604090205490565b3480156104e3575f80fd5b50601f546102e990600160a81b900460ff1681565b348015610503575f80fd5b506103e5610ca2565b348015610517575f80fd5b506103e5610d13565b34801561052b575f80fd5b5061027760075481565b348015610540575f80fd5b5061027760065481565b348015610555575f80fd5b506103e56105643660046120a1565b610d49565b348015610574575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610281565b3480156105a4575f80fd5b506103e5610e16565b3480156105b8575f80fd5b506103e56105c73660046120ed565b610e4f565b3480156105d7575f80fd5b505f546001600160a01b0316610581565b3480156105f3575f80fd5b5060408051808201909152600681526547524f4b334b60d01b60208201526102bc565b348015610621575f80fd5b506103e5610630366004612108565b610e96565b348015610640575f80fd5b506103e5610f17565b348015610654575f80fd5b50601f54610581906001600160a01b031681565b348015610673575f80fd5b506102e9610682366004611f66565b610f57565b348015610692575f80fd5b505f54610581906001600160a01b031681565b3480156106b0575f80fd5b506103e5610f63565b3480156106c4575f80fd5b506102776106d336600461208a565b610fb3565b3480156106e3575f80fd5b506103e56106f236600461208a565b610ff8565b348015610702575f80fd5b50610277610711366004612124565b6001600160a01b039182165f90815260096020908152604080832093909416825291909152205490565b348015610746575f80fd5b506103e5610755366004612155565b611049565b348015610765575f80fd5b506103e56110e4565b348015610779575f80fd5b506103e5610788366004611f8e565b611123565b348015610798575f80fd5b50601d54610581906001600160a01b031681565b335f8181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108069086815260200190565b60405180910390a35060015b92915050565b5f8261082383610fb3565b119392505050565b6001600160a01b0383165f9081526009602090815260408083203384529091528120545f19146108d4576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f9081526009825283812033825290915291909120546108b091849061120a565b6001600160a01b0385165f9081526009602090815260408083203384529091529020555b6108df848484611242565b90505b9392505050565b6004546001600160a01b03165f90815260086020526040812054610934906003546001600160a01b03165f9081526008602052604090205461092e9060055490611606565b90611606565b905090565b5f546001600160a01b0316331461096b5760405162461bcd60e51b8152600401610962906121d4565b60405180910390fd5b601680546001600160a01b038781166001600160a01b031992831617909255601780548784169083168117909155601880548785169084168117909155601a805487861690851681179091556019805495871695909416851790935560408051928352602083019190915281019190915260608101919091527f06cd79b5e338fdebb51e28f829f3333e4fda9663d4732f262d97dbbacf748b159060800160405180910390a15050505050565b5f546001600160a01b03163314610a415760405162461bcd60e51b8152600401610962906121d4565b601391909155601491909155601555565b5f546001600160a01b03163314610a7b5760405162461bcd60e51b8152600401610962906121d4565b61019060145561028a6013555f601555610a93611647565b565b5f610812825f196107ac565b5f546001600160a01b03163314610aca5760405162461bcd60e51b8152600401610962906121d4565b60fa6014556101906013555f601555610a93611647565b5f815f03610b52576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610b2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4f9190612209565b91505b604080516001600160a01b0385168152602081018490527fda2bc2bedd1f85b5a59d5dbbd6684ff877ef916994a16ec08813101e99ace65f910160405180910390a160165460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303815f875af1158015610be4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e29190612220565b5f546001600160a01b03163314610c315760405162461bcd60e51b8152600401610962906121d4565b6103e8600554610c41919061224f565b6007541015610c4e575f80fd5b6103e881600554610c5f919061226e565b610c69919061224f565b6007556040518181527fe0654e8597f94e34d9eb74dddc2975e840b8613108bf9e8ef6785d786c4bccd19060200160405180910390a150565b5f546001600160a01b03163314610ccb5760405162461bcd60e51b8152600401610962906121d4565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610d3c5760405162461bcd60e51b8152600401610962906121d4565b6005546007819055600655565b5f546001600160a01b03163314610d725760405162461bcd60e51b8152600401610962906121d4565b600c869055600f859055600d849055600e8390556010829055610da382610d9d858188818c8c6116e2565b906116e2565b6011556012819055610db660058261224f565b60115410610e065760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e203230250000006044820152606401610962565b610e0e611647565b505050505050565b6018546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610e4c573d5f803e3d5ffd5b50565b5f546001600160a01b03163314610e785760405162461bcd60e51b8152600401610962906121d4565b601f8054911515600160a81b0260ff60a81b19909216919091179055565b5f546001600160a01b03163314610ebf5760405162461bcd60e51b8152600401610962906121d4565b6021805460ff191683151590811790915560228290556040805183815260ff909216151560208301527f519582fd959400ab5e398f78c2768dea99251e8e26aed5578213b059ce4cee60910160405180910390a15050565b5f546001600160a01b03163314610f405760405162461bcd60e51b8152600401610962906121d4565b601f805461ffff60a01b191661010160a01b179055565b5f6108e2338484611242565b5f546001600160a01b03163314610f8c5760405162461bcd60e51b8152600401610962906121d4565b601f805460ff60a81b1916905561028a6014556103b66013556103e8601555610a93611647565b5f610812610fbf6108e9565b601f546001600160a01b03165f90815260086020526040902054610ff290610feb906002905b90611740565b8590611740565b906117be565b60185447906001600160a01b03166108fc6064611015858561226e565b61101f919061224f565b6040518115909202915f818181858888f19350505050158015611044573d5f803e3d5ffd5b505050565b5f546001600160a01b031633146110725760405162461bcd60e51b8152600401610962906121d4565b5f5b828110156110de578160205f86868581811061109257611092612285565b90506020020160208101906110a79190611f8e565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790556110d781612299565b9050611074565b50505050565b5f546001600160a01b0316331461110d5760405162461bcd60e51b8152600401610962906121d4565b601960148190556013555f601555610a93611647565b5f546001600160a01b0316331461114c5760405162461bcd60e51b8152600401610962906121d4565b6001600160a01b0381166111b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610962565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f818484111561122d5760405162461bcd60e51b81526004016109629190611f00565b505f61123984866122b1565b95945050505050565b6023545f9060ff16156112615761125a8484846117ff565b90506108e2565b6001600160a01b0384165f9081526001602052604090205460ff161580156112a157506001600160a01b0383165f9081526001602052604090205460ff16155b1561136057601f54600160a01b900460ff166112f65760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610962565b601f54600160a81b900460ff1615611360576001600160a01b0383165f90815260208052604090205460ff166113605760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610962565b6001600160a01b0384165f9081526001602052604090205460ff1615801561139157506001600160a01b0383163014155b80156113ab57506003546001600160a01b03848116911614155b80156113c55750601f546001600160a01b03848116911614155b80156113df5750601a546001600160a01b03848116911614155b80156113f957506017546001600160a01b03848116911614155b801561141d57506001600160a01b0383165f908152600b602052604090205460ff16155b156114bd576001600160a01b0383165f9081526008602052604090205460075461144784836122c4565b11156114bb5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610962565b505b6114c784836118cf565b6114cf61193b565b156114dc576114dc611988565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f9081526008909152919091205461152d91849061120a565b6001600160a01b0385165f90815260086020908152604080832093909355600a90529081205460ff168061157857506001600160a01b0384165f908152600a602052604090205460ff165b61158c57611587858486611d50565b61158e565b825b6001600160a01b0385165f908152600860205260409020549091506115b390826116e2565b6001600160a01b038086165f8181526008602052604090819020939093559151908716905f80516020612372833981519152906115f39085815260200190565b60405180910390a3506001949350505050565b5f6108e283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061120a565b7f8cc651ceed4360bdb07d4dfc17daa4a6fa17092a313d2464a582a73e9b9328006116846064610ff260145460115461174090919063ffffffff16565b6116a06064610ff260135460115461174090919063ffffffff16565b6116bc6064610ff260155460115461174090919063ffffffff16565b6040805160ff9485168152928416602084015292168183015290519081900360600190a1565b5f806116ee83856122c4565b9050838110156108e25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610962565b5f825f0361174f57505f610812565b5f61175a838561226e565b905082611767858361224f565b146108e25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610962565b5f6108e283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ed4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f90815260089091529182205461184f91849061120a565b6001600160a01b038086165f90815260086020526040808220939093559085168152205461187d90836116e2565b6001600160a01b038085165f8181526008602052604090819020939093559151908616905f80516020612372833981519152906118bd9086815260200190565b60405180910390a35060019392505050565b600654811115806118f757506001600160a01b0382165f908152600b602052604090205460ff165b6119375760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610962565b5050565b601f545f906001600160a01b0316331480159061195b575060235460ff16155b8015611969575060215460ff165b8015610934575050602254305f90815260086020526040902054101590565b6023805460ff19166001179055601b54601c545f916119a691610818565b6119b257600c546119b4565b5f5b90505f6119d76002610ff2601154610ff28660225461174090919063ffffffff16565b90505f6119ef8260225461160690919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f81518110611a2757611a27612285565b6001600160a01b039283166020918202929092010152600254825191169082906001908110611a5857611a58612285565b6001600160a01b039283166020918202929092010152601d5460405163791ac94760e01b81524792919091169063791ac94790611aa19086905f908790309042906004016122d7565b5f604051808303815f87803b158015611ab8575f80fd5b505af1158015611aca573d5f803e3d5ffd5b505050505f611ae2824761160690919063ffffffff16565b90505f611afc611af38860026117be565b60115490611606565b90505f611b106002610ff28481878d611740565b90505f611b2c83610ff2600d548761174090919063ffffffff16565b90505f611b4884610ff2600f548861174090919063ffffffff16565b90505f611b6485610ff2600e548961174090919063ffffffff16565b6017546040519192505f916001600160a01b039091169085908381818185875af1925050503d805f8114611bb3576040519150601f19603f3d011682016040523d82523d5f602084013e611bb8565b606091505b50506018546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114611c05576040519150601f19603f3d011682016040523d82523d5f602084013e611c0a565b606091505b50506019546040519192506001600160a01b03169084905f81818185875af1925050503d805f8114611c57576040519150601f19603f3d011682016040523d82523d5f602084013e611c5c565b606091505b505f9250508b159050611d3857601d5460165460405163f305d71960e01b8152306004820152602481018e90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015611cd6573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611cfb9190612346565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506023805460ff1916905550505050505050505050565b601554601f545f91906001600160a01b0390811690841603611d755750601354611d90565b601f546001600160a01b0390811690861603611d9057506014545b5f611dbc6012546064611da3919061226e565b610ff284610fe56011548a61174090919063ffffffff16565b90505f611dda601154610ff26010548561174090919063ffffffff16565b90505f611de78383611606565b305f90815260086020526040902054909150611e0390826116e2565b305f9081526008602052604080822092909255601a546001600160a01b031681522054611e3090836116e2565b601a546001600160a01b039081165f9081526008602090815260409182902093909355518381523092918b16915f80516020612372833981519152910160405180910390a38115611ebe57600554611e889083611606565b6005556004546040518381526001600160a01b03918216918a16905f805160206123728339815191529060200160405180910390a35b611ec88784611606565b98975050505050505050565b5f8183611ef45760405162461bcd60e51b81526004016109629190611f00565b505f611239848661224f565b5f6020808352835180828501525f5b81811015611f2b57858101830151858201604001528201611f0f565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611f61575f80fd5b919050565b5f8060408385031215611f77575f80fd5b611f8083611f4b565b946020939093013593505050565b5f60208284031215611f9e575f80fd5b6108e282611f4b565b5f8060408385031215611fb8575f80fd5b50508035926020909101359150565b5f805f60608486031215611fd9575f80fd5b611fe284611f4b565b9250611ff060208501611f4b565b9150604084013590509250925092565b5f805f805f60a08688031215612014575f80fd5b61201d86611f4b565b945061202b60208701611f4b565b935061203960408701611f4b565b925061204760608701611f4b565b915061205560808701611f4b565b90509295509295909350565b5f805f60608486031215612073575f80fd5b505081359360208301359350604090920135919050565b5f6020828403121561209a575f80fd5b5035919050565b5f805f805f8060c087890312156120b6575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b8015158114610e4c575f80fd5b5f602082840312156120fd575f80fd5b81356108e2816120e0565b5f8060408385031215612119575f80fd5b8235611f80816120e0565b5f8060408385031215612135575f80fd5b61213e83611f4b565b915061214c60208401611f4b565b90509250929050565b5f805f60408486031215612167575f80fd5b833567ffffffffffffffff8082111561217e575f80fd5b818601915086601f830112612191575f80fd5b81358181111561219f575f80fd5b8760208260051b85010111156121b3575f80fd5b602092830195509350508401356121c9816120e0565b809150509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215612219575f80fd5b5051919050565b5f60208284031215612230575f80fd5b81516108e2816120e0565b634e487b7160e01b5f52601160045260245ffd5b5f8261226957634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176108125761081261223b565b634e487b7160e01b5f52603260045260245ffd5b5f600182016122aa576122aa61223b565b5060010190565b818103818111156108125761081261223b565b808201808211156108125761081261223b565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156123255784516001600160a01b031683529383019391830191600101612300565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612358575f80fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122056840ea6ab6c2f14b74149426a82496e1032adbba87381067e7247ba7efa2ed164736f6c63430008150033