6080604052620000126012600a6200050d565b62000022906305f5e1006200051e565b600155601e600255606460035562000066606462000052601e6001546200029060201b620011191790919060201c565b6200032460201b620011981790919060201c565b600555600680546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d1790915560098054821673fff48b0dbbfb7808dbb1c35ca4021a178dbdcba6179055600a805490911673bc778c16cf3ecdbf724608a3e29c267214d128e8179055610190600b819055600c819055600d819055610258600e8190556000600f81905560108190556103e86011559091620001089162000540565b62000114919062000540565b6012556013805460ff60a01b1916600160a01b1790556001546200013c906103e8906200055b565b6014553480156200014c57600080fd5b5062000158336200036e565b600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d291906200057e565b600480546001600160a01b03199081166001600160a01b039384161790915530600090815260176020908152604080832060065490951683529381528382206000199055600780543394168417905582825260198152838220805460ff1990811660019081179092556018835285842080549091168217905554601682528483208190559351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000601565b600082620002a1575060006200031e565b6000620002af83856200051e565b905082620002be85836200055b565b146200031b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200031b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620003be60201b60201c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183620003e25760405162461bcd60e51b8152600401620003129190620005a9565b506000620003f184866200055b565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000451578160001904821115620004355762000435620003fa565b808516156200044357918102915b93841c939080029062000415565b509250929050565b6000826200046a575060016200031e565b8162000479575060006200031e565b81600181146200049257600281146200049d57620004bd565b60019150506200031e565b60ff841115620004b157620004b1620003fa565b50506001821b6200031e565b5060208310610133831016604e8410600b8410161715620004e2575081810a6200031e565b620004ee838362000410565b8060001904821115620005055762000505620003fa565b029392505050565b60006200031b60ff84168362000459565b60008160001904831182151516156200053b576200053b620003fa565b500290565b60008219821115620005565762000556620003fa565b500190565b6000826200057957634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200059157600080fd5b81516001600160a01b03811681146200031b57600080fd5b600060208083528351808285015260005b81811015620005d857858101830151858201604001528201620005ba565b81811115620005eb576000604083870101525b50601f01601f1916929092016040019392505050565b6121fe80620006116000396000f3fe6080604052600436106102975760003560e01c80638da5cb5b1161015a578063d3fef817116100c1578063ed9442f61161007a578063ed9442f614610801578063f2fde38b14610817578063f429389014610837578063f4f784c91461084c578063f887ea401461086c578063fcd9da441461088c57600080fd5b8063d3fef8171461071b578063d6efe7781461073b578063dab84ee71461075b578063dd62ed3e1461077b578063ded1e438146107c1578063df20fd49146107e157600080fd5b8063af6727ed11610113578063af6727ed14610655578063b23e5c4c14610675578063bbde5b2514610695578063c489a649146106c5578063ca33e64c146106e5578063d36d04971461070557600080fd5b80638da5cb5b1461059457806395d89b41146105b257806398118cb4146105df578063a8aa1b31146105f5578063a9059cbb14610615578063ab2be7261461063557600080fd5b80634f1455c9116101fe57806370a08231116101b757806370a08231146104b7578063715018a6146104ed57806375cb1bd11461050257806377b54bad1461052257806385266ec614610542578063893d20e81461056257600080fd5b80634f1455c9146104205780635526566914610436578063571ac8b01461044b5780636827e7641461046b5780636acaf860146104815780636ddd17131461049657600080fd5b80631df4ccfc116102505780631df4ccfc1461037657806323b872dd1461038c5780632ddc2f28146103ac57806330c9a6a0146103ce578063313ce567146103ee578063397dbed71461040a57600080fd5b80630445b667146102a357806306fdde03146102cc578063095ea7b3146103055780630fd5744d14610335578063180b0d7e1461034b57806318160ddd1461036157600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b960145481565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b506040805180820190915260078152664e696e6520414960c81b60208201525b6040516102c39190611d67565b34801561031157600080fd5b50610325610320366004611dd1565b6108ac565b60405190151581526020016102c3565b34801561034157600080fd5b506102b960105481565b34801561035757600080fd5b506102b960115481565b34801561036d57600080fd5b506001546102b9565b34801561038257600080fd5b506102b960125481565b34801561039857600080fd5b506103256103a7366004611dfd565b610919565b3480156103b857600080fd5b506103cc6103c7366004611e3e565b6109e2565b005b3480156103da57600080fd5b506102b96103e9366004611e6a565b6109fb565b3480156103fa57600080fd5b50604051601281526020016102c3565b34801561041657600080fd5b506102b960055481565b34801561042c57600080fd5b506102b9600c5481565b34801561044257600080fd5b506102b9610a42565b34801561045757600080fd5b50610325610466366004611e83565b610ab3565b34801561047757600080fd5b506102b9600d5481565b34801561048d57600080fd5b506103cc610ac1565b3480156104a257600080fd5b5060135461032590600160a01b900460ff1681565b3480156104c357600080fd5b506102b96104d2366004611e83565b6001600160a01b031660009081526016602052604090205490565b3480156104f957600080fd5b506103cc610bdc565b34801561050e57600080fd5b506103cc61051d366004611ea0565b610bf0565b34801561052e57600080fd5b5061032561053d366004611dd1565b610c7c565b34801561054e57600080fd5b506103cc61055d366004611e6a565b610daf565b34801561056e57600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102c3565b3480156105a057600080fd5b506000546001600160a01b031661057c565b3480156105be57600080fd5b506040805180820190915260048152634e494e4560e01b60208201526102f8565b3480156105eb57600080fd5b506102b9600f5481565b34801561060157600080fd5b5060135461057c906001600160a01b031681565b34801561062157600080fd5b50610325610630366004611dd1565b610df2565b34801561064157600080fd5b5060085461057c906001600160a01b031681565b34801561066157600080fd5b50600a5461057c906001600160a01b031681565b34801561068157600080fd5b506103cc610690366004611e83565b610dff565b3480156106a157600080fd5b506103256106b0366004611e83565b601a6020526000908152604090205460ff1681565b3480156106d157600080fd5b506103cc6106e0366004611e83565b610e07565b3480156106f157600080fd5b5060075461057c906001600160a01b031681565b34801561071157600080fd5b506102b9600b5481565b34801561072757600080fd5b506103cc610736366004611ef9565b610e31565b34801561074757600080fd5b506103cc610756366004611ef9565b610eb0565b34801561076757600080fd5b5060095461057c906001600160a01b031681565b34801561078757600080fd5b506102b9610796366004611f74565b6001600160a01b03918216600090815260176020908152604080832093909416825291909152205490565b3480156107cd57600080fd5b506103256107dc366004611fad565b610f29565b3480156107ed57600080fd5b506103cc6107fc366004611fcf565b610f3d565b34801561080d57600080fd5b506102b9600e5481565b34801561082357600080fd5b506103cc610832366004611e83565b610fae565b34801561084357600080fd5b506103cc61102c565b34801561085857600080fd5b506103cc610867366004611ef9565b611065565b34801561087857600080fd5b5060065461057c906001600160a01b031681565b34801561089857600080fd5b506103cc6108a7366004611fed565b6110de565b3360008181526017602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109079086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383166000908152601760209081526040808320338452909152812054600019146109cd57604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e6365000000000000000000006020808301919091526001600160a01b03871660009081526017825283812033825290915291909120546109a89184906111da565b6001600160a01b03851660009081526017602090815260408083203384529091529020555b6109d8848484611214565b90505b9392505050565b6109ea6115a7565b600b91909155600c91909155601055565b6000610913610a08610a42565b6013546001600160a01b0316600090815260166020526040902054610a3c90610a35906002905b90611119565b8590611119565b90611198565b60166020527f0263c2b778d062355049effc2dece97bc6547ff8a88a3258daa512061c2153dd5461dead60009081527f290d80ce586bfe95e1ebf348e3ba109df813891ad867417e64d38c5a50473b57546001549192610aae929091610aa89190611601565b90611601565b905090565b6000610913826000196108ac565b610ac96115a7565b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b40919061201f565b6004805460405163e6a4390560e01b81526001600160a01b0391821692810192909252306024830152919091169063e6a43905906044016020604051808303816000875af1158015610b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bba919061201f565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b610be46115a7565b610bee6000611643565b565b610bf86115a7565b600780546001600160a01b038581166001600160a01b03199283168117909355600980548683169084168117909155600a8054928616929093168217909255604080519384526020840192909252908201527fdfa5e792c57928ef9d8c0c49c80dbe27345962925ba3ef3ce30ec7d9bef6df269060600160405180910390a1505050565b6000610c866115a7565b81610cf6576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610ccf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf3919061203c565b91505b604080516001600160a01b0385168152602081018490527fda2bc2bedd1f85b5a59d5dbbd6684ff877ef916994a16ec08813101e99ace65f910160405180910390a160075460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303816000875af1158015610d8b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190612055565b610db76115a7565b60058190556040518181527fdd4ef051c4c49233ec73abfc2ee1514725d2a818fbcde46ee5d34a49034922f99060200160405180910390a150565b60006109db338484611214565b610bba6115a7565b610e0f6115a7565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b610e396115a7565b60005b82811015610eaa578160196000868685818110610e5b57610e5b612072565b9050602002016020810190610e709190611e83565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610ea28161209e565b915050610e3c565b50505050565b610eb86115a7565b60005b82811015610eaa5781601a6000868685818110610eda57610eda612072565b9050602002016020810190610eef9190611e83565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f218161209e565b915050610ebb565b600082610f35836109fb565b119392505050565b610f456115a7565b6013805460ff60a01b1916600160a01b8415158102919091179182905560148390556040805184815260ff9290930491909116151560208301527f1a09c4ac66f4f4e8f626014cafdea7efe437ab39f09ac9feada57ef81af7664b910160405180910390a15050565b610fb66115a7565b6001600160a01b0381166110205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61102981611643565b50565b6007546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611029573d6000803e3d6000fd5b61106d6115a7565b60005b82811015610eaa57816018600086868581811061108f5761108f612072565b90506020020160208101906110a49190611e83565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806110d68161209e565b915050611070565b6110e66115a7565b600f849055600d839055600e829055611109826111038686611693565b90611693565b6012556011819055610eaa6116f2565b60008261112857506000610913565b600061113483856120b9565b90508261114185836120d8565b146109db5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401611017565b60006109db83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611790565b600081848411156111fe5760405162461bcd60e51b81526004016110179190611d67565b50600061120b84866120fa565b95945050505050565b6001600160a01b0383166000908152601a602052604081205460ff16156112725760405162461bcd60e51b815260206004820152601260248201527114d95b99195c88189b1858dad31a5cdd195960721b6044820152606401611017565b6001600160a01b0383166000908152601a602052604090205460ff16156112d25760405162461bcd60e51b8152602060048201526014602482015273149958d95a5d995c88189b1858dad31a5cdd195960621b6044820152606401611017565b60155460ff16156112ef576112e88484846117be565b90506109db565b6000546001600160a01b0385811691161480159061131b57506000546001600160a01b03848116911614155b801561133057506001600160a01b0383163014155b801561134757506001600160a01b03831661dead14155b801561136157506013546001600160a01b03848116911614155b801561137b5750600a546001600160a01b03848116911614155b801561139557506009546001600160a01b03848116911614155b80156113af57506008546001600160a01b03848116911614155b15611450576001600160a01b0383166000908152601660205260409020546005546113da8483612111565b111561144e5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401611017565b505b6114586118a4565b15611465576114656118fa565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387166000908152601690915291909120546114b79184906111da565b6001600160a01b038516600090815260166020908152604080832093909355601990529081205460ff168061150457506001600160a01b03841660009081526019602052604090205460ff165b61151857611513858486611c6e565b61151a565b825b6001600160a01b0385166000908152601660205260409020549091506115409082611693565b6001600160a01b0380861660008181526016602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115949085815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b03163314610bee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611017565b60006109db83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506111da565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806116a08385612111565b9050838110156109db5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401611017565b7f1aae40de616179b76c56cc6537e6b06f75cd8bc11e12f6b0026ce013b28434e2611730601154610a3c600c5460125461111990919063ffffffff16565b61174d601154610a3c600b5460125461111990919063ffffffff16565b61176a601154610a3c60105460125461111990919063ffffffff16565b6040805160ff9485168152928416602084015292168183015290519081900360600190a1565b600081836117b15760405162461bcd60e51b81526004016110179190611d67565b50600061120b84866120d8565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260169091529182205461180f9184906111da565b6001600160a01b03808616600090815260166020526040808220939093559085168152205461183e9083611693565b6001600160a01b0380851660008181526016602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906118929086815260200190565b60405180910390a35060019392505050565b6013546000906001600160a01b031633148015906118c5575060155460ff16155b80156118da5750601354600160a01b900460ff165b8015610aae57505060145430600090815260166020526040902054101590565b6015805460ff1916600117905560025460035460009161191991610f29565b61192557600f54611928565b60005b9050600061194c6002610a3c601254610a3c8660145461111990919063ffffffff16565b905060006119658260145461160190919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061199f5761199f612072565b6001600160a01b0392831660209182029290920101526004548251911690829060019081106119d0576119d0612072565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b81524792919091169063791ac94790611a1a908690600090879030904290600401612129565b600060405180830381600087803b158015611a3457600080fd5b505af1158015611a48573d6000803e3d6000fd5b505050506000611a61824761160190919063ffffffff16565b90506000611a7c611a73886002611198565b60125490611601565b90506000611a916002610a3c8481878d611119565b90506000611aae83610a3c600d548761111990919063ffffffff16565b90506000611acb84610a3c600e548861111990919063ffffffff16565b6009546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114611b1d576040519150601f19603f3d011682016040523d82523d6000602084013e611b22565b606091505b5050600a546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611b72576040519150601f19603f3d011682016040523d82523d6000602084013e611b77565b606091505b5060009250508a159050611c575760065460075460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c40160606040518083038185885af1158015611bf5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c1a919061219a565b505060408051868152602081018d90527f70f95364b735915be0d979a62777229a66d44c0c3df9c4506cdf898f974b05d592500160405180910390a15b50506015805460ff19169055505050505050505050565b601054601354600091906001600160a01b0384811691161415611c945750600b54611caf565b6013546001600160a01b0386811691161415611caf5750600c545b6000611cdd6011546103e8611cc491906120b9565b610a3c84610a2f6012548a61111990919063ffffffff16565b30600090815260166020526040902054909150611cfa9082611693565b30600081815260166020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d4b9085815260200190565b60405180910390a3611d5d8582611601565b9695505050505050565b600060208083528351808285015260005b81811015611d9457858101830151858201604001528201611d78565b81811115611da6576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461102957600080fd5b60008060408385031215611de457600080fd5b8235611def81611dbc565b946020939093013593505050565b600080600060608486031215611e1257600080fd5b8335611e1d81611dbc565b92506020840135611e2d81611dbc565b929592945050506040919091013590565b600080600060608486031215611e5357600080fd5b505081359360208301359350604090920135919050565b600060208284031215611e7c57600080fd5b5035919050565b600060208284031215611e9557600080fd5b81356109db81611dbc565b600080600060608486031215611eb557600080fd5b8335611ec081611dbc565b92506020840135611ed081611dbc565b91506040840135611ee081611dbc565b809150509250925092565b801515811461102957600080fd5b600080600060408486031215611f0e57600080fd5b833567ffffffffffffffff80821115611f2657600080fd5b818601915086601f830112611f3a57600080fd5b813581811115611f4957600080fd5b8760208260051b8501011115611f5e57600080fd5b60209283019550935050840135611ee081611eeb565b60008060408385031215611f8757600080fd5b8235611f9281611dbc565b91506020830135611fa281611dbc565b809150509250929050565b60008060408385031215611fc057600080fd5b50508035926020909101359150565b60008060408385031215611fe257600080fd5b8235611def81611eeb565b6000806000806080858703121561200357600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561203157600080fd5b81516109db81611dbc565b60006020828403121561204e57600080fd5b5051919050565b60006020828403121561206757600080fd5b81516109db81611eeb565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156120b2576120b2612088565b5060010190565b60008160001904831182151516156120d3576120d3612088565b500290565b6000826120f557634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561210c5761210c612088565b500390565b6000821982111561212457612124612088565b500190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156121795784516001600160a01b031683529383019391830191600101612154565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156121af57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122054ed73bf7b526f81f204534d316c4dd78ceb89056bcec5e921a1a4e60a150a1a64736f6c634300080b0033