0x60806040526004361061023f5760003560e01c80638a4068dd1161012e578063ccf8c036116100ab578063dd62ed3e1161006f578063dd62ed3e146106c4578063ec7cd01a1461070a578063f2fde38b1461072a578063f6a78e171461074a578063f887ea401461075f57600080fd5b8063ccf8c0361461062f578063cec10c111461064f578063d148b74c1461066f578063d51ed1c814610684578063d78e139d146106a457600080fd5b80639acb773e116100f25780639acb773e1461058f578063a8aa1b31146105af578063a9059cbb146105cf578063b2bdfa7b146105ef578063ba08f4181461060f57600080fd5b80638a4068dd146104e15780638a8c523c146104f65780638da5cb5b1461050b578063918924761461052957806395d89b411461054957600080fd5b80632b112e49116101bc578063715018a611610180578063715018a61461044e57806377b54bad1461046357806378109e54146104835780637d1db4a514610499578063893d20e8146104af57600080fd5b80632b112e49146103b1578063313ce567146103c65780634d07912a146103e25780636ddd1713146103f757806370a082311461041857600080fd5b8063095ea7b311610203578063095ea7b3146103265780631161ae391461034657806318160ddd146103665780631df4ccfc1461037b57806323b872dd1461039157600080fd5b806304368f651461024b5780630445b6671461026d5780630621472c1461029657806306fdde03146102c657806308fd3d051461030557600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026b610266366004611df4565b61077f565b005b34801561027957600080fd5b5061028360215481565b6040519081526020015b60405180910390f35b3480156102a257600080fd5b506102b66102b1366004611e37565b6107e6565b604051901515815260200161028d565b3480156102d257600080fd5b5060408051808201909152600d81526c4772696d6163652042756e6e7960981b60208201525b60405161028d9190611e52565b34801561031157600080fd5b506020546102b690600160a01b900460ff1681565b34801561033257600080fd5b506102b6610341366004611ea0565b6107fa565b34801561035257600080fd5b506102b6610361366004611ebc565b610866565b34801561037257600080fd5b50600554610283565b34801561038757600080fd5b5061028360125481565b34801561039d57600080fd5b506102b66103ac366004611ede565b61087a565b3480156103bd57600080fd5b5061028361093c565b3480156103d257600080fd5b506040516009815260200161028d565b3480156103ee57600080fd5b5061026b61098e565b34801561040357600080fd5b506020546102b690600160a81b900460ff1681565b34801561042457600080fd5b50610283610433366004611e37565b6001600160a01b031660009081526008602052604090205490565b34801561045a57600080fd5b5061026b610a35565b34801561046f57600080fd5b506102b661047e366004611ea0565b610aa9565b34801561048f57600080fd5b5061028360075481565b3480156104a557600080fd5b5061028360065481565b3480156104bb57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161028d565b3480156104ed57600080fd5b5061026b610ba9565b34801561050257600080fd5b5061026b610bf4565b34801561051757600080fd5b506000546001600160a01b03166104c9565b34801561053557600080fd5b5061026b610544366004611f1a565b610c43565b34801561055557600080fd5b5060408051808201909152601a81527fd0b3d180d0b8d0bcd0b0d181d0b0d0bad180d0bed0bbd0b8d0ba00000000000060208201526102f8565b34801561059b57600080fd5b5061026b6105aa366004611f5d565b610d0a565b3480156105bb57600080fd5b506020546104c9906001600160a01b031681565b3480156105db57600080fd5b506102b66105ea366004611ea0565b610d5f565b3480156105fb57600080fd5b506000546104c9906001600160a01b031681565b34801561061b57600080fd5b5061026b61062a366004611faa565b610d6c565b34801561063b57600080fd5b5061026b61064a366004611f5d565b610e02565b34801561065b57600080fd5b5061026b61066a366004612081565b610e6a565b34801561067b57600080fd5b5061026b610ea5565b34801561069057600080fd5b5061028361069f3660046120ad565b610ed9565b3480156106b057600080fd5b5061026b6106bf3660046120ad565b610f21565b3480156106d057600080fd5b506102836106df3660046120c6565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561071657600080fd5b5061026b610725366004611f5d565b610f70565b34801561073657600080fd5b5061026b610745366004611e37565b610fc5565b34801561075657600080fd5b5061026b6110af565b34801561076b57600080fd5b50601e546104c9906001600160a01b031681565b6000546001600160a01b031633146107b25760405162461bcd60e51b81526004016107a9906120f9565b60405180910390fd5b6020805460ff60a81b1916600160a81b841515021790556107d56009600a612228565b6107df9082612237565b6021555050565b60006107f4826000196107fa565b92915050565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108559086815260200190565b60405180910390a350600192915050565b60008261087283610ed9565b119392505050565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610927576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b038716600090815260098252838120338252909152919091205461090291849061111b565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610932848484611155565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610989906003546001600160a01b03166000908152600860205260409020546109839060055490611548565b90611548565b905090565b6000546001600160a01b031633146109b85760405162461bcd60e51b81526004016107a9906120f9565b6000600d819055600e819055600f8190556010819055601181905580806109df818061224e565b6109e9919061224e565b6109f3919061224e565b6109fd919061224e565b60125560646013819055601581905560145560006016556005546103e890610a26906002612237565b610a309190612261565b602155565b6000546001600160a01b03163314610a5f5760405162461bcd60e51b81526004016107a9906120f9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336000908152600b602052604081205460ff16610ac557600080fd5b81600003610b38576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b359190612283565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610935919061229c565b336000908152600b602052604090205460ff16610bc557600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610bf1573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610c1e5760405162461bcd60e51b81526004016107a9906120f9565b6020805460ff60a01b1916600160a01b17905560fa6015556101c26014819055601655565b6000546001600160a01b03163314610c6d5760405162461bcd60e51b81526004016107a9906120f9565b600d8690556010859055600e849055600f8390556011829055610c9e82610c98858188818c8c61158a565b9061158a565b6012556013819055610cb1600182612261565b6012541115610d025760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e2039392500000060448201526064016107a9565b505050505050565b6000546001600160a01b03163314610d345760405162461bcd60e51b81526004016107a9906120f9565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610935338484611155565b6000546001600160a01b03163314610d965760405162461bcd60e51b81526004016107a9906120f9565b60005b8251811015610dfd5781600c6000858481518110610db957610db96122b9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610df5816122cf565b915050610d99565b505050565b6000546001600160a01b03163314610e2c5760405162461bcd60e51b81526004016107a9906120f9565b6001600160a01b039091166000908152600a60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b6000546001600160a01b03163314610e945760405162461bcd60e51b81526004016107a9906120f9565b601491909155601591909155601655565b6000546001600160a01b03163314610ecf5760405162461bcd60e51b81526004016107a9906120f9565b610ed76115e9565b565b60006107f4610ee661093c565b602080546001600160a01b0316600090815260089091526040902054610f1b90610f14906002905b90611a40565b8590611a40565b90611ac2565b601a5447906001600160a01b03166108fc6064610f3e8585612237565b610f489190612261565b6040518115909202916000818181858888f19350505050158015610dfd573d6000803e3d6000fd5b6000546001600160a01b03163314610f9a5760405162461bcd60e51b81526004016107a9906120f9565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fef5760405162461bcd60e51b81526004016107a9906120f9565b6001600160a01b0381166110545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110d95760405162461bcd60e51b81526004016107a9906120f9565b6110e56009600a612228565b6110f69066017e9d8602b400612237565b6007556111056009600a612228565b6111169066017e9d8602b400612237565b600655565b6000818484111561113f5760405162461bcd60e51b81526004016107a99190611e52565b50600061114c84866122e8565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff1615801561119757506001600160a01b0383166000908152600c602052604090205460ff16155b6111d35760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b60448201526064016107a9565b60225460ff16156111f0576111e9848484611b04565b9050610935565b6001600160a01b03841660009081526001602052604090205460ff1615801561123257506001600160a01b03831660009081526001602052604090205460ff16155b1561128757602054600160a01b900460ff166112875760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107a9565b6001600160a01b03841660009081526001602052604090205460ff161580156112b957506001600160a01b0383163014155b80156112d357506003546001600160a01b03848116911614155b80156112ed57506020546001600160a01b03848116911614155b80156113075750601b546001600160a01b03848116911614155b801561132157506018546001600160a01b03848116911614155b801561134657506001600160a01b0383166000908152600b602052604090205460ff16155b156113e7576001600160a01b038316600090815260086020526040902054600754611371848361224e565b11156113e55760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016107a9565b505b6113f18483611bea565b6113f9611c57565b15611406576114066115e9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081526008909152919091205461145891849061111b565b6001600160a01b038516600090815260086020908152604080832093909355600a90529081205460ff16806114a557506001600160a01b0384166000908152600a602052604090205460ff165b6114b9576114b4858486611cad565b6114bb565b825b6001600160a01b0385166000908152600860205260409020549091506114e1908261158a565b6001600160a01b0380861660008181526008602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115359085815260200190565b60405180910390a3506001949350505050565b600061093583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061111b565b600080611597838561224e565b9050838110156109355760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107a9565b6022805460ff19166001179055601c54601d5460009161160891610866565b61161457600d54611617565b60005b9050600061163b6002610f1b601254610f1b86602154611a4090919063ffffffff16565b905060006116548260215461154890919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061168e5761168e6122b9565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106116bf576116bf6122b9565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b81524792919091169063791ac947906117099086906000908790309042906004016122fb565b600060405180830381600087803b15801561172357600080fd5b505af1158015611737573d6000803e3d6000fd5b505050506000611750824761154890919063ffffffff16565b9050600061176b611762886002611ac2565b60125490611548565b905060006117806002610f1b8481878d611a40565b9050600061179d83610f1b600e5487611a4090919063ffffffff16565b905060006117ba84610f1b60105488611a4090919063ffffffff16565b905060006117d785610f1b600f5489611a4090919063ffffffff16565b905060006117f486610f1b6011548a611a4090919063ffffffff16565b6018546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114611846576040519150601f19603f3d011682016040523d82523d6000602084013e61184b565b606091505b50506019546040519192506001600160a01b0316908490600081818185875af1925050503d806000811461189b576040519150601f19603f3d011682016040523d82523d6000602084013e6118a0565b606091505b5050601a546040519192506001600160a01b0316908590600081818185875af1925050503d80600081146118f0576040519150601f19603f3d011682016040523d82523d6000602084013e6118f5565b606091505b5050601b546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611945576040519150601f19603f3d011682016040523d82523d6000602084013e61194a565b606091505b50909150508b15611a2757601e5460175460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af11580156119c5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119ea919061236c565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff191690555050505050505050505050565b600082600003611a52575060006107f4565b6000611a5e8385612237565b905082611a6b8583612261565b146109355760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107a9565b600061093583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611da8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611b5591849061111b565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611b84908361158a565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bd89086815260200190565b60405180910390a35060019392505050565b60065481111580611c1357506001600160a01b0382166000908152600b602052604090205460ff165b611c535760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107a9565b5050565b6020546000906001600160a01b03163314801590611c78575060225460ff16155b8015611c8d5750602054600160a81b900460ff165b801561098957505060215430600090815260086020526040902054101590565b601654602054600091906001600160a01b0390811690841603611cd35750601454611cee565b6020546001600160a01b0390811690861603611cee57506015545b6000611d1b6013546064611d029190612237565b610f1b84610f0e6012548a611a4090919063ffffffff16565b306000908152600860205260409020549091508190611d3a908261158a565b30600081815260086020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d8b9085815260200190565b60405180910390a3611d9d8683611548565b979650505050505050565b60008183611dc95760405162461bcd60e51b81526004016107a99190611e52565b50600061114c8486612261565b8015158114610bf157600080fd5b8035611def81611dd6565b919050565b60008060408385031215611e0757600080fd5b8235611e1281611dd6565b946020939093013593505050565b80356001600160a01b0381168114611def57600080fd5b600060208284031215611e4957600080fd5b61093582611e20565b600060208083528351808285015260005b81811015611e7f57858101830151858201604001528201611e63565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611eb357600080fd5b611e1283611e20565b60008060408385031215611ecf57600080fd5b50508035926020909101359150565b600080600060608486031215611ef357600080fd5b611efc84611e20565b9250611f0a60208501611e20565b9150604084013590509250925092565b60008060008060008060c08789031215611f3357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215611f7057600080fd5b611f7983611e20565b91506020830135611f8981611dd6565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611fbd57600080fd5b823567ffffffffffffffff80821115611fd557600080fd5b818501915085601f830112611fe957600080fd5b8135602082821115611ffd57611ffd611f94565b8160051b604051601f19603f8301168101818110868211171561202257612022611f94565b60405292835281830193508481018201928984111561204057600080fd5b948201945b838610156120655761205686611e20565b85529482019493820193612045565b96506120749050878201611de4565b9450505050509250929050565b60008060006060848603121561209657600080fd5b505081359360208301359350604090920135919050565b6000602082840312156120bf57600080fd5b5035919050565b600080604083850312156120d957600080fd5b6120e283611e20565b91506120f060208401611e20565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561217f5781600019048211156121655761216561212e565b8085161561217257918102915b93841c9390800290612149565b509250929050565b600082612196575060016107f4565b816121a3575060006107f4565b81600181146121b957600281146121c3576121df565b60019150506107f4565b60ff8411156121d4576121d461212e565b50506001821b6107f4565b5060208310610133831016604e8410600b8410161715612202575081810a6107f4565b61220c8383612144565b80600019048211156122205761222061212e565b029392505050565b600061093560ff841683612187565b80820281158282048414176107f4576107f461212e565b808201808211156107f4576107f461212e565b60008261227e57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561229557600080fd5b5051919050565b6000602082840312156122ae57600080fd5b815161093581611dd6565b634e487b7160e01b600052603260045260246000fd5b6000600182016122e1576122e161212e565b5060010190565b818103818111156107f4576107f461212e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561234b5784516001600160a01b031683529383019391830191600101612326565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561238157600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122025ba23504f1b7908671899efccceef613e0ac361d141fc9eb5326c8b9919362f64736f6c63430008130033
0x6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326009600a620005b9565b620000459066017e9d8602b400620005d1565b600555620000566009600a620005b9565b62000068906507a6fd8f6a00620005d1565b600655620000796009600a620005b9565b6200008b906507a6fd8f6a00620005d1565b6007556000600d55600a600e556000600f5560006010556000601155601154600f54600d54600e54601054620000c29190620005eb565b620000ce9190620005eb565b620000da9190620005eb565b620000e69190620005eb565b60125560646013819055601481815560158290556016829055601c55601d556020805461ffff60a01b1916600160a81b179055600554612710906200012d906096620005d1565b62000139919062000601565b6021553480156200014957600080fd5b50600080546001600160a01b031916339081178255808252600160208190526040808420805460ff191690921790915551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f919062000624565b600280546001600160a01b0319166001600160a01b03928316179055601e546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa1580156200028e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b4919062000624565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000306573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032c919062000624565b602080546001600160a01b039283166001600160a01b031991821681178355601f805483169091179055306000818152600984526040808220601e54871683528552808220600019905533808352600a8652818320805460ff199081166001908117909255601980548a1686528486208054831684179055601880548b1687528587208054841685179055848752600b8a52858720805484168517905589548b168752858720805484168517905581548b16875285872080548416851790558054909a1686528486208054831684179055958552838520805490911690911790556017805486168217905586548516732b6a089878ec0107dcb2219f1ea16f73961d24c817909655825484168617909255601a8054841686179055601b8054909316851790925560055484835260089093528082208390555190917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200049691815260200190565b60405180910390a36200064f565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004fb578160001904821115620004df57620004df620004a4565b80851615620004ed57918102915b93841c9390800290620004bf565b509250929050565b6000826200051457506001620005b3565b816200052357506000620005b3565b81600181146200053c5760028114620005475762000567565b6001915050620005b3565b60ff8411156200055b576200055b620004a4565b50506001821b620005b3565b5060208310610133831016604e8410600b84101617156200058c575081810a620005b3565b620005988383620004ba565b8060001904821115620005af57620005af620004a4565b0290505b92915050565b6000620005ca60ff84168362000503565b9392505050565b8082028115828204841417620005b357620005b3620004a4565b80820180821115620005b357620005b3620004a4565b6000826200061f57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200063757600080fd5b81516001600160a01b0381168114620005ca57600080fd5b6123d0806200065f6000396000f3fe60806040526004361061023f5760003560e01c80638a4068dd1161012e578063ccf8c036116100ab578063dd62ed3e1161006f578063dd62ed3e146106c4578063ec7cd01a1461070a578063f2fde38b1461072a578063f6a78e171461074a578063f887ea401461075f57600080fd5b8063ccf8c0361461062f578063cec10c111461064f578063d148b74c1461066f578063d51ed1c814610684578063d78e139d146106a457600080fd5b80639acb773e116100f25780639acb773e1461058f578063a8aa1b31146105af578063a9059cbb146105cf578063b2bdfa7b146105ef578063ba08f4181461060f57600080fd5b80638a4068dd146104e15780638a8c523c146104f65780638da5cb5b1461050b578063918924761461052957806395d89b411461054957600080fd5b80632b112e49116101bc578063715018a611610180578063715018a61461044e57806377b54bad1461046357806378109e54146104835780637d1db4a514610499578063893d20e8146104af57600080fd5b80632b112e49146103b1578063313ce567146103c65780634d07912a146103e25780636ddd1713146103f757806370a082311461041857600080fd5b8063095ea7b311610203578063095ea7b3146103265780631161ae391461034657806318160ddd146103665780631df4ccfc1461037b57806323b872dd1461039157600080fd5b806304368f651461024b5780630445b6671461026d5780630621472c1461029657806306fdde03146102c657806308fd3d051461030557600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026b610266366004611df4565b61077f565b005b34801561027957600080fd5b5061028360215481565b6040519081526020015b60405180910390f35b3480156102a257600080fd5b506102b66102b1366004611e37565b6107e6565b604051901515815260200161028d565b3480156102d257600080fd5b5060408051808201909152600d81526c4772696d6163652042756e6e7960981b60208201525b60405161028d9190611e52565b34801561031157600080fd5b506020546102b690600160a01b900460ff1681565b34801561033257600080fd5b506102b6610341366004611ea0565b6107fa565b34801561035257600080fd5b506102b6610361366004611ebc565b610866565b34801561037257600080fd5b50600554610283565b34801561038757600080fd5b5061028360125481565b34801561039d57600080fd5b506102b66103ac366004611ede565b61087a565b3480156103bd57600080fd5b5061028361093c565b3480156103d257600080fd5b506040516009815260200161028d565b3480156103ee57600080fd5b5061026b61098e565b34801561040357600080fd5b506020546102b690600160a81b900460ff1681565b34801561042457600080fd5b50610283610433366004611e37565b6001600160a01b031660009081526008602052604090205490565b34801561045a57600080fd5b5061026b610a35565b34801561046f57600080fd5b506102b661047e366004611ea0565b610aa9565b34801561048f57600080fd5b5061028360075481565b3480156104a557600080fd5b5061028360065481565b3480156104bb57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161028d565b3480156104ed57600080fd5b5061026b610ba9565b34801561050257600080fd5b5061026b610bf4565b34801561051757600080fd5b506000546001600160a01b03166104c9565b34801561053557600080fd5b5061026b610544366004611f1a565b610c43565b34801561055557600080fd5b5060408051808201909152601a81527fd0b3d180d0b8d0bcd0b0d181d0b0d0bad180d0bed0bbd0b8d0ba00000000000060208201526102f8565b34801561059b57600080fd5b5061026b6105aa366004611f5d565b610d0a565b3480156105bb57600080fd5b506020546104c9906001600160a01b031681565b3480156105db57600080fd5b506102b66105ea366004611ea0565b610d5f565b3480156105fb57600080fd5b506000546104c9906001600160a01b031681565b34801561061b57600080fd5b5061026b61062a366004611faa565b610d6c565b34801561063b57600080fd5b5061026b61064a366004611f5d565b610e02565b34801561065b57600080fd5b5061026b61066a366004612081565b610e6a565b34801561067b57600080fd5b5061026b610ea5565b34801561069057600080fd5b5061028361069f3660046120ad565b610ed9565b3480156106b057600080fd5b5061026b6106bf3660046120ad565b610f21565b3480156106d057600080fd5b506102836106df3660046120c6565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561071657600080fd5b5061026b610725366004611f5d565b610f70565b34801561073657600080fd5b5061026b610745366004611e37565b610fc5565b34801561075657600080fd5b5061026b6110af565b34801561076b57600080fd5b50601e546104c9906001600160a01b031681565b6000546001600160a01b031633146107b25760405162461bcd60e51b81526004016107a9906120f9565b60405180910390fd5b6020805460ff60a81b1916600160a81b841515021790556107d56009600a612228565b6107df9082612237565b6021555050565b60006107f4826000196107fa565b92915050565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108559086815260200190565b60405180910390a350600192915050565b60008261087283610ed9565b119392505050565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610927576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b038716600090815260098252838120338252909152919091205461090291849061111b565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610932848484611155565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610989906003546001600160a01b03166000908152600860205260409020546109839060055490611548565b90611548565b905090565b6000546001600160a01b031633146109b85760405162461bcd60e51b81526004016107a9906120f9565b6000600d819055600e819055600f8190556010819055601181905580806109df818061224e565b6109e9919061224e565b6109f3919061224e565b6109fd919061224e565b60125560646013819055601581905560145560006016556005546103e890610a26906002612237565b610a309190612261565b602155565b6000546001600160a01b03163314610a5f5760405162461bcd60e51b81526004016107a9906120f9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336000908152600b602052604081205460ff16610ac557600080fd5b81600003610b38576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610b11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b359190612283565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610935919061229c565b336000908152600b602052604090205460ff16610bc557600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610bf1573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610c1e5760405162461bcd60e51b81526004016107a9906120f9565b6020805460ff60a01b1916600160a01b17905560fa6015556101c26014819055601655565b6000546001600160a01b03163314610c6d5760405162461bcd60e51b81526004016107a9906120f9565b600d8690556010859055600e849055600f8390556011829055610c9e82610c98858188818c8c61158a565b9061158a565b6012556013819055610cb1600182612261565b6012541115610d025760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e2039392500000060448201526064016107a9565b505050505050565b6000546001600160a01b03163314610d345760405162461bcd60e51b81526004016107a9906120f9565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610935338484611155565b6000546001600160a01b03163314610d965760405162461bcd60e51b81526004016107a9906120f9565b60005b8251811015610dfd5781600c6000858481518110610db957610db96122b9565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610df5816122cf565b915050610d99565b505050565b6000546001600160a01b03163314610e2c5760405162461bcd60e51b81526004016107a9906120f9565b6001600160a01b039091166000908152600a60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b6000546001600160a01b03163314610e945760405162461bcd60e51b81526004016107a9906120f9565b601491909155601591909155601655565b6000546001600160a01b03163314610ecf5760405162461bcd60e51b81526004016107a9906120f9565b610ed76115e9565b565b60006107f4610ee661093c565b602080546001600160a01b0316600090815260089091526040902054610f1b90610f14906002905b90611a40565b8590611a40565b90611ac2565b601a5447906001600160a01b03166108fc6064610f3e8585612237565b610f489190612261565b6040518115909202916000818181858888f19350505050158015610dfd573d6000803e3d6000fd5b6000546001600160a01b03163314610f9a5760405162461bcd60e51b81526004016107a9906120f9565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fef5760405162461bcd60e51b81526004016107a9906120f9565b6001600160a01b0381166110545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107a9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110d95760405162461bcd60e51b81526004016107a9906120f9565b6110e56009600a612228565b6110f69066017e9d8602b400612237565b6007556111056009600a612228565b6111169066017e9d8602b400612237565b600655565b6000818484111561113f5760405162461bcd60e51b81526004016107a99190611e52565b50600061114c84866122e8565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff1615801561119757506001600160a01b0383166000908152600c602052604090205460ff16155b6111d35760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b60448201526064016107a9565b60225460ff16156111f0576111e9848484611b04565b9050610935565b6001600160a01b03841660009081526001602052604090205460ff1615801561123257506001600160a01b03831660009081526001602052604090205460ff16155b1561128757602054600160a01b900460ff166112875760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b60448201526064016107a9565b6001600160a01b03841660009081526001602052604090205460ff161580156112b957506001600160a01b0383163014155b80156112d357506003546001600160a01b03848116911614155b80156112ed57506020546001600160a01b03848116911614155b80156113075750601b546001600160a01b03848116911614155b801561132157506018546001600160a01b03848116911614155b801561134657506001600160a01b0383166000908152600b602052604090205460ff16155b156113e7576001600160a01b038316600090815260086020526040902054600754611371848361224e565b11156113e55760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e000060648201526084016107a9565b505b6113f18483611bea565b6113f9611c57565b15611406576114066115e9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081526008909152919091205461145891849061111b565b6001600160a01b038516600090815260086020908152604080832093909355600a90529081205460ff16806114a557506001600160a01b0384166000908152600a602052604090205460ff165b6114b9576114b4858486611cad565b6114bb565b825b6001600160a01b0385166000908152600860205260409020549091506114e1908261158a565b6001600160a01b0380861660008181526008602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115359085815260200190565b60405180910390a3506001949350505050565b600061093583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061111b565b600080611597838561224e565b9050838110156109355760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107a9565b6022805460ff19166001179055601c54601d5460009161160891610866565b61161457600d54611617565b60005b9050600061163b6002610f1b601254610f1b86602154611a4090919063ffffffff16565b905060006116548260215461154890919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061168e5761168e6122b9565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106116bf576116bf6122b9565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b81524792919091169063791ac947906117099086906000908790309042906004016122fb565b600060405180830381600087803b15801561172357600080fd5b505af1158015611737573d6000803e3d6000fd5b505050506000611750824761154890919063ffffffff16565b9050600061176b611762886002611ac2565b60125490611548565b905060006117806002610f1b8481878d611a40565b9050600061179d83610f1b600e5487611a4090919063ffffffff16565b905060006117ba84610f1b60105488611a4090919063ffffffff16565b905060006117d785610f1b600f5489611a4090919063ffffffff16565b905060006117f486610f1b6011548a611a4090919063ffffffff16565b6018546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114611846576040519150601f19603f3d011682016040523d82523d6000602084013e61184b565b606091505b50506019546040519192506001600160a01b0316908490600081818185875af1925050503d806000811461189b576040519150601f19603f3d011682016040523d82523d6000602084013e6118a0565b606091505b5050601a546040519192506001600160a01b0316908590600081818185875af1925050503d80600081146118f0576040519150601f19603f3d011682016040523d82523d6000602084013e6118f5565b606091505b5050601b546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611945576040519150601f19603f3d011682016040523d82523d6000602084013e61194a565b606091505b50909150508b15611a2757601e5460175460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af11580156119c5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119ea919061236c565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff191690555050505050505050505050565b600082600003611a52575060006107f4565b6000611a5e8385612237565b905082611a6b8583612261565b146109355760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107a9565b600061093583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611da8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611b5591849061111b565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611b84908361158a565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bd89086815260200190565b60405180910390a35060019392505050565b60065481111580611c1357506001600160a01b0382166000908152600b602052604090205460ff165b611c535760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016107a9565b5050565b6020546000906001600160a01b03163314801590611c78575060225460ff16155b8015611c8d5750602054600160a81b900460ff165b801561098957505060215430600090815260086020526040902054101590565b601654602054600091906001600160a01b0390811690841603611cd35750601454611cee565b6020546001600160a01b0390811690861603611cee57506015545b6000611d1b6013546064611d029190612237565b610f1b84610f0e6012548a611a4090919063ffffffff16565b306000908152600860205260409020549091508190611d3a908261158a565b30600081815260086020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d8b9085815260200190565b60405180910390a3611d9d8683611548565b979650505050505050565b60008183611dc95760405162461bcd60e51b81526004016107a99190611e52565b50600061114c8486612261565b8015158114610bf157600080fd5b8035611def81611dd6565b919050565b60008060408385031215611e0757600080fd5b8235611e1281611dd6565b946020939093013593505050565b80356001600160a01b0381168114611def57600080fd5b600060208284031215611e4957600080fd5b61093582611e20565b600060208083528351808285015260005b81811015611e7f57858101830151858201604001528201611e63565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611eb357600080fd5b611e1283611e20565b60008060408385031215611ecf57600080fd5b50508035926020909101359150565b600080600060608486031215611ef357600080fd5b611efc84611e20565b9250611f0a60208501611e20565b9150604084013590509250925092565b60008060008060008060c08789031215611f3357600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215611f7057600080fd5b611f7983611e20565b91506020830135611f8981611dd6565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215611fbd57600080fd5b823567ffffffffffffffff80821115611fd557600080fd5b818501915085601f830112611fe957600080fd5b8135602082821115611ffd57611ffd611f94565b8160051b604051601f19603f8301168101818110868211171561202257612022611f94565b60405292835281830193508481018201928984111561204057600080fd5b948201945b838610156120655761205686611e20565b85529482019493820193612045565b96506120749050878201611de4565b9450505050509250929050565b60008060006060848603121561209657600080fd5b505081359360208301359350604090920135919050565b6000602082840312156120bf57600080fd5b5035919050565b600080604083850312156120d957600080fd5b6120e283611e20565b91506120f060208401611e20565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561217f5781600019048211156121655761216561212e565b8085161561217257918102915b93841c9390800290612149565b509250929050565b600082612196575060016107f4565b816121a3575060006107f4565b81600181146121b957600281146121c3576121df565b60019150506107f4565b60ff8411156121d4576121d461212e565b50506001821b6107f4565b5060208310610133831016604e8410600b8410161715612202575081810a6107f4565b61220c8383612144565b80600019048211156122205761222061212e565b029392505050565b600061093560ff841683612187565b80820281158282048414176107f4576107f461212e565b808201808211156107f4576107f461212e565b60008261227e57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561229557600080fd5b5051919050565b6000602082840312156122ae57600080fd5b815161093581611dd6565b634e487b7160e01b600052603260045260246000fd5b6000600182016122e1576122e161212e565b5060010190565b818103818111156107f4576107f461212e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561234b5784516001600160a01b031683529383019391830191600101612326565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561238157600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122025ba23504f1b7908671899efccceef613e0ac361d141fc9eb5326c8b9919362f64736f6c63430008130033