0x6080604052600436106102605760003560e01c80637d1db4a511610144578063b2bdfa7b116100b6578063d51ed1c81161007a578063d51ed1c81461071b578063d78e139d1461073b578063dd62ed3e1461075b578063f2fde38b146107a1578063f6a78e17146107c1578063f887ea40146107d657600080fd5b8063b2bdfa7b14610686578063bc337182146106a6578063ccf8c036146106c6578063cec10c11146106e6578063d148b74c1461070657600080fd5b8063918924761161010857806391892476146105b857806395d89b41146105d85780639acb773e146106065780639f11080e14610626578063a8aa1b3114610646578063a9059cbb1461066657600080fd5b80637d1db4a514610528578063893d20e81461053e5780638a4068dd146105705780638a8c523c146105855780638da5cb5b1461059a57600080fd5b806323b872dd116101dd5780636ddd1713116101a15780636ddd17131461046657806370a0823114610487578063715018a6146104bd57806377b54bad146104d257806378109e54146104f25780637bae52e11461050857600080fd5b806323b872dd146103d55780632b112e49146103f5578063313ce5671461040a5780635b24ea5e146104265780635d0044ca1461044657600080fd5b8063095ea7b311610224578063095ea7b31461034a5780631161ae391461036a57806313f97a8e1461038a57806318160ddd146103aa5780631df4ccfc146103bf57600080fd5b806304368f651461026c5780630445b6671461028e5780630621472c146102b757806306fdde03146102e757806308fd3d051461032957600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004611f09565b6107f6565b005b34801561029a57600080fd5b506102a460245481565b6040519081526020015b60405180910390f35b3480156102c357600080fd5b506102d76102d2366004611f4c565b61084b565b60405190151581526020016102ae565b3480156102f357600080fd5b5060408051808201909152601081526f14dd1c985d1d1bdb8813d85adb5bdb9d60821b60208201525b6040516102ae9190611f67565b34801561033557600080fd5b506023546102d790600160a01b900460ff1681565b34801561035657600080fd5b506102d7610365366004611fb5565b61085f565b34801561037657600080fd5b506102d7610385366004611fd1565b6108cb565b34801561039657600080fd5b5061028c6103a5366004612009565b6108df565b3480156103b657600080fd5b506005546102a4565b3480156103cb57600080fd5b506102a460125481565b3480156103e157600080fd5b506102d76103f03660046120e0565b610975565b34801561040157600080fd5b506102a4610a37565b34801561041657600080fd5b50604051600981526020016102ae565b34801561043257600080fd5b5061028c61044136600461211c565b610a89565b34801561045257600080fd5b5061028c610461366004612153565b610ade565b34801561047257600080fd5b506023546102d790600160a81b900460ff1681565b34801561049357600080fd5b506102a46104a2366004611f4c565b6001600160a01b031660009081526008602052604090205490565b3480156104c957600080fd5b5061028c610b47565b3480156104de57600080fd5b506102d76104ed366004611fb5565b610bbb565b3480156104fe57600080fd5b506102a460075481565b34801561051457600080fd5b5061028c61052336600461216c565b610cbb565b34801561053457600080fd5b506102a460065481565b34801561054a57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102ae565b34801561057c57600080fd5b5061028c610d44565b34801561059157600080fd5b5061028c610d8f565b3480156105a657600080fd5b506000546001600160a01b0316610558565b3480156105c457600080fd5b5061028c6105d33660046121d1565b610dde565b3480156105e457600080fd5b5060408051808201909152600581526429aa292a2760d91b602082015261031c565b34801561061257600080fd5b5061028c61062136600461211c565b610ea4565b34801561063257600080fd5b5061028c610641366004611fd1565b610ef9565b34801561065257600080fd5b50602354610558906001600160a01b031681565b34801561067257600080fd5b506102d7610681366004611fb5565b610f2e565b34801561069257600080fd5b50600054610558906001600160a01b031681565b3480156106b257600080fd5b5061028c6106c1366004612153565b610f3b565b3480156106d257600080fd5b5061028c6106e136600461211c565b610fa4565b3480156106f257600080fd5b5061028c610701366004612214565b61100c565b34801561071257600080fd5b5061028c611047565b34801561072757600080fd5b506102a4610736366004612153565b61107b565b34801561074757600080fd5b5061028c610756366004612153565b6110c2565b34801561076757600080fd5b506102a4610776366004612240565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b3480156107ad57600080fd5b5061028c6107bc366004611f4c565b611111565b3480156107cd57600080fd5b5061028c6111fb565b3480156107e257600080fd5b50602154610558906001600160a01b031681565b6000546001600160a01b031633146108295760405162461bcd60e51b815260040161082090612273565b60405180910390fd5b60238054921515600160a81b0260ff60a81b1990931692909217909155602455565b60006108598260001961085f565b92915050565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108ba9086815260200190565b60405180910390a350600192915050565b6000826108d78361107b565b119392505050565b6000546001600160a01b031633146109095760405162461bcd60e51b815260040161082090612273565b60005b82518110156109705781600c600085848151811061092c5761092c6122a8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610968816122d4565b91505061090c565b505050565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610a22576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526009825283812033825290915291909120546109fd918490611232565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610a2d84848461126c565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610a84906003546001600160a01b0316600090815260086020526040902054610a7e906005549061164d565b9061164d565b905090565b6000546001600160a01b03163314610ab35760405162461bcd60e51b815260040161082090612273565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b085760405162461bcd60e51b815260040161082090612273565b6103e8600554610b1891906122ed565b6007541015610b2657600080fd5b6103e881600554610b37919061230f565b610b4191906122ed565b60075550565b6000546001600160a01b03163314610b715760405162461bcd60e51b815260040161082090612273565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336000908152600b602052604081205460ff16610bd757600080fd5b81600003610c4a576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610c23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c479190612326565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061233f565b6000546001600160a01b03163314610ce55760405162461bcd60e51b815260040161082090612273565b601780546001600160a01b03199081166001600160a01b03978816179091556018805482169587169590951790945560198054851693861693909317909255601b80548416918516919091179055601a80549092169216919091179055565b336000908152600b602052604090205460ff16610d6057600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610d8c573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610db95760405162461bcd60e51b815260040161082090612273565b6023805460ff60a01b1916600160a01b17905560c860158190556014556103e8601655565b6000546001600160a01b03163314610e085760405162461bcd60e51b815260040161082090612273565b600d8690556010859055600e849055600f8390556011829055610e3982610e33858188818c8c61168f565b9061168f565b6012556013819055610e4c6005826122ed565b60125410610e9c5760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e203230250000006044820152606401610820565b505050505050565b6000546001600160a01b03163314610ece5760405162461bcd60e51b815260040161082090612273565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f235760405162461bcd60e51b815260040161082090612273565b601f91909155602055565b6000610a3033848461126c565b6000546001600160a01b03163314610f655760405162461bcd60e51b815260040161082090612273565b6103e8600554610f7591906122ed565b6006541015610f8357600080fd5b6103e881600554610f94919061230f565b610f9e91906122ed565b60065550565b6000546001600160a01b03163314610fce5760405162461bcd60e51b815260040161082090612273565b6001600160a01b039091166000908152600a60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b6000546001600160a01b031633146110365760405162461bcd60e51b815260040161082090612273565b601491909155601591909155601655565b6000546001600160a01b031633146110715760405162461bcd60e51b815260040161082090612273565b6110796116ee565b565b6000610859611088610a37565b6023546001600160a01b03166000908152600860205260409020546110bc906110b5906002905b90611ad5565b8590611ad5565b90611b57565b601a5447906001600160a01b03166108fc60646110df858561230f565b6110e991906122ed565b6040518115909202916000818181858888f19350505050158015610970573d6000803e3d6000fd5b6000546001600160a01b0316331461113b5760405162461bcd60e51b815260040161082090612273565b6001600160a01b0381166111a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610820565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112255760405162461bcd60e51b815260040161082090612273565b6005546007819055600655565b600081848411156112565760405162461bcd60e51b81526004016108209190611f67565b506000611263848661235c565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff161580156112ae57506001600160a01b0383166000908152600c602052604090205460ff16155b6112ea5760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610820565b60255460ff161561130757611300848484611b99565b9050610a30565b6001600160a01b03841660009081526001602052604090205460ff1615801561134957506001600160a01b03831660009081526001602052604090205460ff16155b1561139e57602354600160a01b900460ff1661139e5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610820565b6001600160a01b03841660009081526001602052604090205460ff161580156113d057506001600160a01b0383163014155b80156113ea57506003546001600160a01b03848116911614155b801561140457506023546001600160a01b03848116911614155b801561141e5750601b546001600160a01b03848116911614155b801561143857506018546001600160a01b03848116911614155b801561145d57506001600160a01b0383166000908152600b602052604090205460ff16155b156114fe576001600160a01b038316600090815260086020526040902054600754611488848361236f565b11156114fc5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610820565b505b6115088483611c6d565b611510611cda565b1561151d5761151d6116ee565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081526008909152919091205461156f918490611232565b6001600160a01b038516600090815260086020908152604080832093909355600a90529081205460ff16806115bc57506001600160a01b0384166000908152600a602052604090205460ff165b6115d0576115cb858486611d30565b6115d2565b825b6001600160a01b0385166000908152600860205260409020549091506115f8908261168f565b6001600160a01b0380861660008181526008602052604090819020939093559151908716906000805160206124228339815191529061163a9085815260200190565b60405180910390a3506001949350505050565b6000610a3083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611232565b60008061169c838561236f565b905083811015610a305760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610820565b6025805460ff19166001179055601f5460205460009161170d916108cb565b61171957600d5461171c565b60005b9050600061174060026110bc6012546110bc86602454611ad590919063ffffffff16565b905060006117598260245461164d90919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611793576117936122a8565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106117c4576117c46122a8565b6001600160a01b03928316602091820292909201015260215460405163791ac94760e01b81524792919091169063791ac9479061180e908690600090879030904290600401612382565b600060405180830381600087803b15801561182857600080fd5b505af115801561183c573d6000803e3d6000fd5b505050506000611855824761164d90919063ffffffff16565b90506000611870611867886002611b57565b6012549061164d565b9050600061188560026110bc8481878d611ad5565b905060006118a2836110bc600e5487611ad590919063ffffffff16565b905060006118bf846110bc60105488611ad590919063ffffffff16565b905060006118dc856110bc600f5489611ad590919063ffffffff16565b6018546040519192506000916001600160a01b039091169085908381818185875af1925050503d806000811461192e576040519150601f19603f3d011682016040523d82523d6000602084013e611933565b606091505b50506019546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611983576040519150601f19603f3d011682016040523d82523d6000602084013e611988565b606091505b5050601a546040519192506001600160a01b0316908490600081818185875af1925050503d80600081146119d8576040519150601f19603f3d011682016040523d82523d6000602084013e6119dd565b606091505b5060009250508b159050611abd5760215460175460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015611a5b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a8091906123f3565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506025805460ff1916905550505050505050505050565b600082600003611ae757506000610859565b6000611af3838561230f565b905082611b0085836122ed565b14610a305760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610820565b6000610a3083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ebd565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611bea918490611232565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611c19908361168f565b6001600160a01b03808516600081815260086020526040908190209390935591519086169060008051602061242283398151915290611c5b9086815260200190565b60405180910390a35060019392505050565b60065481111580611c9657506001600160a01b0382166000908152600b602052604090205460ff165b611cd65760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610820565b5050565b6023546000906001600160a01b03163314801590611cfb575060255460ff16155b8015611d105750602354600160a81b900460ff165b8015610a8457505060245430600090815260086020526040902054101590565b601654602354600091906001600160a01b0390811690841603611d565750601454611d71565b6023546001600160a01b0390811690861603611d7157506015545b6000611d9e6013546064611d85919061230f565b6110bc846110af6012548a611ad590919063ffffffff16565b90506000611dbd6012546110bc60115485611ad590919063ffffffff16565b90506000611dcb838361164d565b30600090815260086020526040902054909150611de8908261168f565b3060009081526008602052604080822092909255601b546001600160a01b031681522054611e16908361168f565b601b546001600160a01b0390811660009081526008602090815260409182902093909355518381523092918b1691600080516020612422833981519152910160405180910390a38115611ea757600554611e70908361164d565b6005556004546040518381526001600160a01b03918216918a16906000805160206124228339815191529060200160405180910390a35b611eb1878461164d565b98975050505050505050565b60008183611ede5760405162461bcd60e51b81526004016108209190611f67565b50600061126384866122ed565b8015158114610d8c57600080fd5b8035611f0481611eeb565b919050565b60008060408385031215611f1c57600080fd5b8235611f2781611eeb565b946020939093013593505050565b80356001600160a01b0381168114611f0457600080fd5b600060208284031215611f5e57600080fd5b610a3082611f35565b600060208083528351808285015260005b81811015611f9457858101830151858201604001528201611f78565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611fc857600080fd5b611f2783611f35565b60008060408385031215611fe457600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561201c57600080fd5b823567ffffffffffffffff8082111561203457600080fd5b818501915085601f83011261204857600080fd5b813560208282111561205c5761205c611ff3565b8160051b604051601f19603f8301168101818110868211171561208157612081611ff3565b60405292835281830193508481018201928984111561209f57600080fd5b948201945b838610156120c4576120b586611f35565b855294820194938201936120a4565b96506120d39050878201611ef9565b9450505050509250929050565b6000806000606084860312156120f557600080fd5b6120fe84611f35565b925061210c60208501611f35565b9150604084013590509250925092565b6000806040838503121561212f57600080fd5b61213883611f35565b9150602083013561214881611eeb565b809150509250929050565b60006020828403121561216557600080fd5b5035919050565b600080600080600060a0868803121561218457600080fd5b61218d86611f35565b945061219b60208701611f35565b93506121a960408701611f35565b92506121b760608701611f35565b91506121c560808701611f35565b90509295509295909350565b60008060008060008060c087890312156121ea57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060006060848603121561222957600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561225357600080fd5b61225c83611f35565b915061226a60208401611f35565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016122e6576122e66122be565b5060010190565b60008261230a57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610859576108596122be565b60006020828403121561233857600080fd5b5051919050565b60006020828403121561235157600080fd5b8151610a3081611eeb565b81810381811115610859576108596122be565b80820180821115610859576108596122be565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123d25784516001600160a01b0316835293830193918301916001016123ad565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561240857600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220bca649b11a889f6d43e4f05936ebdc23a58d1a2f4cb65ddbd93b27623bbcc77664736f6c63430008130033
0x6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326009600a620006b7565b6200004190620f4240620006c8565b600581905562000062906064906200005b90600262000487565b906200051e565b6006556005546200007d906064906200005b90600262000487565b6007556000600d55600a600e556000600f5560006010556000601155601154600f54600d54600e54601054620000b49190620006e2565b620000c09190620006e2565b620000cc9190620006e2565b620000d89190620006e2565b60125560646013819055601481815560158290556103e8601655601f556020556023805461ffff60a01b1916600160a81b17905560055461271090620001209060c8620006c8565b6200012c9190620006f8565b6024553480156200013c57600080fd5b50600080546001600160a01b031916339081178255808252600160208190526040808420805460ff191690921790915551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350602180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa158015620001fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022291906200071b565b600280546001600160a01b0319166001600160a01b039283161790556021546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a791906200071b565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af1158015620002f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031f91906200071b565b602380546001600160a01b039283166001600160a01b0319918216811783556022805483169091179055306000818152600960209081526040808320602154881684528252808320600019905533808452600a8352818420805460ff199081166001908117909255601980548b1687528487208054831684179055838752600b8652848720805483168417905598548a168652838620805482168317905588548a1686528386208054821683179055601880548b16875284872080548316841790559686528386208054909116909117905560178054871682179055845486167318739196cc0974a11d424f7d6eb994404fdcea7717909455855485168417909555601a8054851684179055600354601b80549095169616959095179092556005548183526008855283832081905592519283529290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000796565b6000826000036200049b5750600062000518565b6000620004a98385620006c8565b905082620004b88583620006f8565b14620005155760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200051583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200056860201b60201c565b600081836200058c5760405162461bcd60e51b81526004016200050c919062000746565b5060006200059b8486620006f8565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005fb578160001904821115620005df57620005df620005a4565b80851615620005ed57918102915b93841c9390800290620005bf565b509250929050565b600082620006145750600162000518565b81620006235750600062000518565b81600181146200063c5760028114620006475762000667565b600191505062000518565b60ff8411156200065b576200065b620005a4565b50506001821b62000518565b5060208310610133831016604e8410600b84101617156200068c575081810a62000518565b620006988383620005ba565b8060001904821115620006af57620006af620005a4565b029392505050565b60006200051560ff84168362000603565b8082028115828204841417620005185762000518620005a4565b80820180821115620005185762000518620005a4565b6000826200071657634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200072e57600080fd5b81516001600160a01b03811681146200051557600080fd5b600060208083528351808285015260005b81811015620007755785810183015185820160400152820162000757565b506000604082860101526040601f19601f8301168501019250505092915050565b61247780620007a66000396000f3fe6080604052600436106102605760003560e01c80637d1db4a511610144578063b2bdfa7b116100b6578063d51ed1c81161007a578063d51ed1c81461071b578063d78e139d1461073b578063dd62ed3e1461075b578063f2fde38b146107a1578063f6a78e17146107c1578063f887ea40146107d657600080fd5b8063b2bdfa7b14610686578063bc337182146106a6578063ccf8c036146106c6578063cec10c11146106e6578063d148b74c1461070657600080fd5b8063918924761161010857806391892476146105b857806395d89b41146105d85780639acb773e146106065780639f11080e14610626578063a8aa1b3114610646578063a9059cbb1461066657600080fd5b80637d1db4a514610528578063893d20e81461053e5780638a4068dd146105705780638a8c523c146105855780638da5cb5b1461059a57600080fd5b806323b872dd116101dd5780636ddd1713116101a15780636ddd17131461046657806370a0823114610487578063715018a6146104bd57806377b54bad146104d257806378109e54146104f25780637bae52e11461050857600080fd5b806323b872dd146103d55780632b112e49146103f5578063313ce5671461040a5780635b24ea5e146104265780635d0044ca1461044657600080fd5b8063095ea7b311610224578063095ea7b31461034a5780631161ae391461036a57806313f97a8e1461038a57806318160ddd146103aa5780631df4ccfc146103bf57600080fd5b806304368f651461026c5780630445b6671461028e5780630621472c146102b757806306fdde03146102e757806308fd3d051461032957600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004611f09565b6107f6565b005b34801561029a57600080fd5b506102a460245481565b6040519081526020015b60405180910390f35b3480156102c357600080fd5b506102d76102d2366004611f4c565b61084b565b60405190151581526020016102ae565b3480156102f357600080fd5b5060408051808201909152601081526f14dd1c985d1d1bdb8813d85adb5bdb9d60821b60208201525b6040516102ae9190611f67565b34801561033557600080fd5b506023546102d790600160a01b900460ff1681565b34801561035657600080fd5b506102d7610365366004611fb5565b61085f565b34801561037657600080fd5b506102d7610385366004611fd1565b6108cb565b34801561039657600080fd5b5061028c6103a5366004612009565b6108df565b3480156103b657600080fd5b506005546102a4565b3480156103cb57600080fd5b506102a460125481565b3480156103e157600080fd5b506102d76103f03660046120e0565b610975565b34801561040157600080fd5b506102a4610a37565b34801561041657600080fd5b50604051600981526020016102ae565b34801561043257600080fd5b5061028c61044136600461211c565b610a89565b34801561045257600080fd5b5061028c610461366004612153565b610ade565b34801561047257600080fd5b506023546102d790600160a81b900460ff1681565b34801561049357600080fd5b506102a46104a2366004611f4c565b6001600160a01b031660009081526008602052604090205490565b3480156104c957600080fd5b5061028c610b47565b3480156104de57600080fd5b506102d76104ed366004611fb5565b610bbb565b3480156104fe57600080fd5b506102a460075481565b34801561051457600080fd5b5061028c61052336600461216c565b610cbb565b34801561053457600080fd5b506102a460065481565b34801561054a57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102ae565b34801561057c57600080fd5b5061028c610d44565b34801561059157600080fd5b5061028c610d8f565b3480156105a657600080fd5b506000546001600160a01b0316610558565b3480156105c457600080fd5b5061028c6105d33660046121d1565b610dde565b3480156105e457600080fd5b5060408051808201909152600581526429aa292a2760d91b602082015261031c565b34801561061257600080fd5b5061028c61062136600461211c565b610ea4565b34801561063257600080fd5b5061028c610641366004611fd1565b610ef9565b34801561065257600080fd5b50602354610558906001600160a01b031681565b34801561067257600080fd5b506102d7610681366004611fb5565b610f2e565b34801561069257600080fd5b50600054610558906001600160a01b031681565b3480156106b257600080fd5b5061028c6106c1366004612153565b610f3b565b3480156106d257600080fd5b5061028c6106e136600461211c565b610fa4565b3480156106f257600080fd5b5061028c610701366004612214565b61100c565b34801561071257600080fd5b5061028c611047565b34801561072757600080fd5b506102a4610736366004612153565b61107b565b34801561074757600080fd5b5061028c610756366004612153565b6110c2565b34801561076757600080fd5b506102a4610776366004612240565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b3480156107ad57600080fd5b5061028c6107bc366004611f4c565b611111565b3480156107cd57600080fd5b5061028c6111fb565b3480156107e257600080fd5b50602154610558906001600160a01b031681565b6000546001600160a01b031633146108295760405162461bcd60e51b815260040161082090612273565b60405180910390fd5b60238054921515600160a81b0260ff60a81b1990931692909217909155602455565b60006108598260001961085f565b92915050565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108ba9086815260200190565b60405180910390a350600192915050565b6000826108d78361107b565b119392505050565b6000546001600160a01b031633146109095760405162461bcd60e51b815260040161082090612273565b60005b82518110156109705781600c600085848151811061092c5761092c6122a8565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610968816122d4565b91505061090c565b505050565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610a22576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526009825283812033825290915291909120546109fd918490611232565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610a2d84848461126c565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610a84906003546001600160a01b0316600090815260086020526040902054610a7e906005549061164d565b9061164d565b905090565b6000546001600160a01b03163314610ab35760405162461bcd60e51b815260040161082090612273565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b085760405162461bcd60e51b815260040161082090612273565b6103e8600554610b1891906122ed565b6007541015610b2657600080fd5b6103e881600554610b37919061230f565b610b4191906122ed565b60075550565b6000546001600160a01b03163314610b715760405162461bcd60e51b815260040161082090612273565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336000908152600b602052604081205460ff16610bd757600080fd5b81600003610c4a576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610c23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c479190612326565b91505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a30919061233f565b6000546001600160a01b03163314610ce55760405162461bcd60e51b815260040161082090612273565b601780546001600160a01b03199081166001600160a01b03978816179091556018805482169587169590951790945560198054851693861693909317909255601b80548416918516919091179055601a80549092169216919091179055565b336000908152600b602052604090205460ff16610d6057600080fd5b60405133904780156108fc02916000818181858888f19350505050158015610d8c573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610db95760405162461bcd60e51b815260040161082090612273565b6023805460ff60a01b1916600160a01b17905560c860158190556014556103e8601655565b6000546001600160a01b03163314610e085760405162461bcd60e51b815260040161082090612273565b600d8690556010859055600e849055600f8390556011829055610e3982610e33858188818c8c61168f565b9061168f565b6012556013819055610e4c6005826122ed565b60125410610e9c5760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e203230250000006044820152606401610820565b505050505050565b6000546001600160a01b03163314610ece5760405162461bcd60e51b815260040161082090612273565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f235760405162461bcd60e51b815260040161082090612273565b601f91909155602055565b6000610a3033848461126c565b6000546001600160a01b03163314610f655760405162461bcd60e51b815260040161082090612273565b6103e8600554610f7591906122ed565b6006541015610f8357600080fd5b6103e881600554610f94919061230f565b610f9e91906122ed565b60065550565b6000546001600160a01b03163314610fce5760405162461bcd60e51b815260040161082090612273565b6001600160a01b039091166000908152600a60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b6000546001600160a01b031633146110365760405162461bcd60e51b815260040161082090612273565b601491909155601591909155601655565b6000546001600160a01b031633146110715760405162461bcd60e51b815260040161082090612273565b6110796116ee565b565b6000610859611088610a37565b6023546001600160a01b03166000908152600860205260409020546110bc906110b5906002905b90611ad5565b8590611ad5565b90611b57565b601a5447906001600160a01b03166108fc60646110df858561230f565b6110e991906122ed565b6040518115909202916000818181858888f19350505050158015610970573d6000803e3d6000fd5b6000546001600160a01b0316331461113b5760405162461bcd60e51b815260040161082090612273565b6001600160a01b0381166111a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610820565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112255760405162461bcd60e51b815260040161082090612273565b6005546007819055600655565b600081848411156112565760405162461bcd60e51b81526004016108209190611f67565b506000611263848661235c565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff161580156112ae57506001600160a01b0383166000908152600c602052604090205460ff16155b6112ea5760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610820565b60255460ff161561130757611300848484611b99565b9050610a30565b6001600160a01b03841660009081526001602052604090205460ff1615801561134957506001600160a01b03831660009081526001602052604090205460ff16155b1561139e57602354600160a01b900460ff1661139e5760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610820565b6001600160a01b03841660009081526001602052604090205460ff161580156113d057506001600160a01b0383163014155b80156113ea57506003546001600160a01b03848116911614155b801561140457506023546001600160a01b03848116911614155b801561141e5750601b546001600160a01b03848116911614155b801561143857506018546001600160a01b03848116911614155b801561145d57506001600160a01b0383166000908152600b602052604090205460ff16155b156114fe576001600160a01b038316600090815260086020526040902054600754611488848361236f565b11156114fc5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610820565b505b6115088483611c6d565b611510611cda565b1561151d5761151d6116ee565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03871660009081526008909152919091205461156f918490611232565b6001600160a01b038516600090815260086020908152604080832093909355600a90529081205460ff16806115bc57506001600160a01b0384166000908152600a602052604090205460ff165b6115d0576115cb858486611d30565b6115d2565b825b6001600160a01b0385166000908152600860205260409020549091506115f8908261168f565b6001600160a01b0380861660008181526008602052604090819020939093559151908716906000805160206124228339815191529061163a9085815260200190565b60405180910390a3506001949350505050565b6000610a3083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611232565b60008061169c838561236f565b905083811015610a305760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610820565b6025805460ff19166001179055601f5460205460009161170d916108cb565b61171957600d5461171c565b60005b9050600061174060026110bc6012546110bc86602454611ad590919063ffffffff16565b905060006117598260245461164d90919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611793576117936122a8565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106117c4576117c46122a8565b6001600160a01b03928316602091820292909201015260215460405163791ac94760e01b81524792919091169063791ac9479061180e908690600090879030904290600401612382565b600060405180830381600087803b15801561182857600080fd5b505af115801561183c573d6000803e3d6000fd5b505050506000611855824761164d90919063ffffffff16565b90506000611870611867886002611b57565b6012549061164d565b9050600061188560026110bc8481878d611ad5565b905060006118a2836110bc600e5487611ad590919063ffffffff16565b905060006118bf846110bc60105488611ad590919063ffffffff16565b905060006118dc856110bc600f5489611ad590919063ffffffff16565b6018546040519192506000916001600160a01b039091169085908381818185875af1925050503d806000811461192e576040519150601f19603f3d011682016040523d82523d6000602084013e611933565b606091505b50506019546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611983576040519150601f19603f3d011682016040523d82523d6000602084013e611988565b606091505b5050601a546040519192506001600160a01b0316908490600081818185875af1925050503d80600081146119d8576040519150601f19603f3d011682016040523d82523d6000602084013e6119dd565b606091505b5060009250508b159050611abd5760215460175460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015611a5b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a8091906123f3565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506025805460ff1916905550505050505050505050565b600082600003611ae757506000610859565b6000611af3838561230f565b905082611b0085836122ed565b14610a305760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610820565b6000610a3083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ebd565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054611bea918490611232565b6001600160a01b038086166000908152600860205260408082209390935590851681522054611c19908361168f565b6001600160a01b03808516600081815260086020526040908190209390935591519086169060008051602061242283398151915290611c5b9086815260200190565b60405180910390a35060019392505050565b60065481111580611c9657506001600160a01b0382166000908152600b602052604090205460ff165b611cd65760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610820565b5050565b6023546000906001600160a01b03163314801590611cfb575060255460ff16155b8015611d105750602354600160a81b900460ff165b8015610a8457505060245430600090815260086020526040902054101590565b601654602354600091906001600160a01b0390811690841603611d565750601454611d71565b6023546001600160a01b0390811690861603611d7157506015545b6000611d9e6013546064611d85919061230f565b6110bc846110af6012548a611ad590919063ffffffff16565b90506000611dbd6012546110bc60115485611ad590919063ffffffff16565b90506000611dcb838361164d565b30600090815260086020526040902054909150611de8908261168f565b3060009081526008602052604080822092909255601b546001600160a01b031681522054611e16908361168f565b601b546001600160a01b0390811660009081526008602090815260409182902093909355518381523092918b1691600080516020612422833981519152910160405180910390a38115611ea757600554611e70908361164d565b6005556004546040518381526001600160a01b03918216918a16906000805160206124228339815191529060200160405180910390a35b611eb1878461164d565b98975050505050505050565b60008183611ede5760405162461bcd60e51b81526004016108209190611f67565b50600061126384866122ed565b8015158114610d8c57600080fd5b8035611f0481611eeb565b919050565b60008060408385031215611f1c57600080fd5b8235611f2781611eeb565b946020939093013593505050565b80356001600160a01b0381168114611f0457600080fd5b600060208284031215611f5e57600080fd5b610a3082611f35565b600060208083528351808285015260005b81811015611f9457858101830151858201604001528201611f78565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611fc857600080fd5b611f2783611f35565b60008060408385031215611fe457600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561201c57600080fd5b823567ffffffffffffffff8082111561203457600080fd5b818501915085601f83011261204857600080fd5b813560208282111561205c5761205c611ff3565b8160051b604051601f19603f8301168101818110868211171561208157612081611ff3565b60405292835281830193508481018201928984111561209f57600080fd5b948201945b838610156120c4576120b586611f35565b855294820194938201936120a4565b96506120d39050878201611ef9565b9450505050509250929050565b6000806000606084860312156120f557600080fd5b6120fe84611f35565b925061210c60208501611f35565b9150604084013590509250925092565b6000806040838503121561212f57600080fd5b61213883611f35565b9150602083013561214881611eeb565b809150509250929050565b60006020828403121561216557600080fd5b5035919050565b600080600080600060a0868803121561218457600080fd5b61218d86611f35565b945061219b60208701611f35565b93506121a960408701611f35565b92506121b760608701611f35565b91506121c560808701611f35565b90509295509295909350565b60008060008060008060c087890312156121ea57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060006060848603121561222957600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561225357600080fd5b61225c83611f35565b915061226a60208401611f35565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016122e6576122e66122be565b5060010190565b60008261230a57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417610859576108596122be565b60006020828403121561233857600080fd5b5051919050565b60006020828403121561235157600080fd5b8151610a3081611eeb565b81810381811115610859576108596122be565b80820180821115610859576108596122be565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123d25784516001600160a01b0316835293830193918301916001016123ad565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561240857600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220bca649b11a889f6d43e4f05936ebdc23a58d1a2f4cb65ddbd93b27623bbcc77664736f6c63430008130033