0x6102406040523480156200001257600080fd5b50604051620016483803806200164883398101604081905262000035916200030a565b6040805180820182526020808401516001600160a01b03908116835284840151828401528351610100808201865261034880835260129483018581528851851697840188905260608401868152608080860193845260a08087018981528c51891660c0808a0191825260e0808b019c8d529d909452935160ff90811692839052935189169092529751821690995284518616909352518216610120819052905190931661014052945190941661016052919291620000f391620003bf565b610180526101605160e0516200010a9190620003bf565b6101a05250600180546001600160a01b031916331790556200013363034a813d60e01b6200020d565b80516001600160a01b03166101c08190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000180573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a69190620003e9565b60ff166101e0819052620001bc90600a62000514565b610200526020015160035560a0810151620001d79062000291565b80516001600160a01b031661022052620001f863034a813d60e01b6200020d565b60608101516004556080015160055562000522565b6001600160e01b031980821690036200026c5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152600260205260409020805460ff19166001179055565b6001546040516001600160a01b038084169216907f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc690600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200030557600080fd5b919050565b600060c082840312156200031d57600080fd5b60405160c081016001600160401b03811182821017156200034e57634e487b7160e01b600052604160045260246000fd5b6040526200035c83620002ed565b81526200036c60208401620002ed565b60208201526040830151604082015260608301516060820152608083015160808201526200039d60a08401620002ed565b60a08201529392505050565b634e487b7160e01b600052601160045260246000fd5b8181036000831280158383131683831282161715620003e257620003e2620003a9565b5092915050565b600060208284031215620003fc57600080fd5b815160ff811681146200040e57600080fd5b9392505050565b600181815b80851115620004565781600019048211156200043a576200043a620003a9565b808516156200044857918102915b93841c93908002906200041a565b509250929050565b6000826200046f575060016200050e565b816200047e575060006200050e565b8160018114620004975760028114620004a257620004c2565b60019150506200050e565b60ff841115620004b657620004b6620003a9565b50506001821b6200050e565b5060208310610133831016604e8410600b8410161715620004e7575081810a6200050e565b620004f3838362000415565b80600019048211156200050a576200050a620003a9565b0290505b92915050565b60006200040e83836200045e565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161104662000602600039600061051a0152600081816104c0015261086601526000610499015260008181610358015261097e01526000818161021401528181610782015281816107ab01526107ee015260008181610541015281816106e001528181610709015261074c0152600061039401526000610331015260006105d2015260006102f50152600061045301526000610423015260006105ab0152600061058401526110466000f3fe608060405234801561001057600080fd5b506004361061020a5760003560e01c806372c990061161012a578063bd9a548b116100bd578063d2333be71161008c578063e5a66dfa11610071578063e5a66dfa146105a6578063f097486c146105cd578063f6ccaad4146105f457600080fd5b8063d2333be71461056c578063e0d2e7801461057f57600080fd5b8063bd9a548b1461050d578063c6490a1d14610515578063c82f2b121461053c578063cede91a41461056357600080fd5b80638e7dc4c0116100f95780638e7dc4c0146104bb5780639c0d313f146104e25780639d16134c146104f1578063aeb38bde1461050457600080fd5b806372c9900614610445578063781097d01461044e5780637f218054146104755780638b8b2c911461049457600080fd5b8063313ce567116101a25780634bc66f32116101715780634bc66f32146103ee5780634d3375e81461040e5780634f8b4ae71461041657806359c909e11461041e57600080fd5b8063313ce5671461037a57806337f85f661461038f5780633aeef3d3146103b657806345014095146103db57600080fd5b8063116d7976116101de578063116d7976146102f0578063165c380414610317578063208880041461032c57806320bf30fc1461035357600080fd5b806232e91a1461020f57806301ffc9a71461024957806306fdde031461026c578063090f3f50146102ab575b600080fd5b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61025c610257366004610cce565b6105fc565b6040519015158152602001610240565b604080518082018252601f81527f55534465204f7261636c6520436861696e6c696e6b20772f20426f756e647300602082015290516102409190610d17565b6000546102cb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b6102cb7f000000000000000000000000000000000000000000000000000000000000000081565b61032a610325366004610d83565b610685565b005b6102cb7f000000000000000000000000000000000000000000000000000000000000000081565b6102cb7f000000000000000000000000000000000000000000000000000000000000000081565b60125b60405160ff9091168152602001610240565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6103be610699565b604080519315158452602084019290925290820152606001610240565b61032a6103e9366004610d9c565b6106b1565b6001546102cb9073ffffffffffffffffffffffffffffffffffffffff1681565b6103be6106c2565b61032a610828565b6102cb7f000000000000000000000000000000000000000000000000000000000000000081565b61023660045481565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61047d61084e565b604080519215158352602083019190915201610240565b61037d7f000000000000000000000000000000000000000000000000000000000000000081565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b610236670de0b6b3a764000081565b61032a6104ff366004610d83565b6108a3565b61023660055481565b6103be6108b4565b6102cb7f000000000000000000000000000000000000000000000000000000000000000081565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61023660035481565b61032a61057a366004610d83565b6108c1565b6102cb7f000000000000000000000000000000000000000000000000000000000000000081565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b6102367f000000000000000000000000000000000000000000000000000000000000000081565b61032a6108d2565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061067f57507fffffffff00000000000000000000000000000000000000000000000000000000821660009081526002602052604090205460ff165b92915050565b61068d6108e2565b61069681610933565b50565b60008060006106a6610974565b925092509250909192565b6106b96108e2565b61069681610a37565b6000806000806000806106d3610aac565b92509250925082955060007f0000000000000000000000000000000000000000000000000000000000000000136107475761072d7f0000000000000000000000000000000000000000000000000000000000000000610e01565b61073890600a610f59565b6107429083610f65565b61077c565b6107727f0000000000000000000000000000000000000000000000000000000000000000600a610f59565b61077c9083610fa0565b945060007f0000000000000000000000000000000000000000000000000000000000000000136107e9576107cf7f0000000000000000000000000000000000000000000000000000000000000000610e01565b6107da90600a610f59565b6107e49082610f65565b61081e565b6108147f0000000000000000000000000000000000000000000000000000000000000000600a610f59565b61081e9082610fa0565b9350505050909192565b6108306108e2565b610838610b3c565b6108426000610a37565b61084c6000610b8d565b565b600080610859610974565b91935090915061089390507f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000610f65565b61089d9082610fa0565b90509091565b6108ab6108e2565b61069681610c1b565b60008060006106a6610aac565b6108c96108e2565b61069681610c5c565b6108da610b3c565b61084c610c9d565b60015473ffffffffffffffffffffffffffffffffffffffff16331461084c576040517f1c0be90a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045460408051918252602082018390527fad02db77a9e9d0acc442bed079c3fedcda2d33a584de77f67d4df4df6cf41600910160405180910390a1600455565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0b9190610fd6565b50935050925050600082131580610a2c5750600354610a2a8242611026565b115b959094509092509050565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a9190a350565b600080600080610aba61084e565b6005549195509150811115610ace57506005545b600454811115610afb57610af1816ec097ce7bc90715b34b9f1000000000610f65565b9150819250610b36565b610b14816ec097ce7bc90715b34b9f1000000000610f65565b91506004546ec097ce7bc90715b34b9f1000000000610b339190610f65565b92505b50909192565b60005473ffffffffffffffffffffffffffffffffffffffff16331461084c576040517ff5c49e6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc690600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60055460408051918252602082018390527fcef22b0882edccec9304d1bc6b8d20515e93157592eee53acb7289504b43510f910160405180910390a1600555565b60035460408051918252602082018390527fd72ef688fa430b6a285b84371ba35e8a8e0762b32c1deb7be9d9c111ca79f5ea910160405180910390a1600355565b600080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561084c33610b8d565b600060208284031215610ce057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d1057600080fd5b9392505050565b600060208083528351808285015260005b81811015610d4457858101830151858201604001528201610d28565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b600060208284031215610d9557600080fd5b5035919050565b600060208284031215610dae57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610d1057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f80000000000000000000000000000000000000000000000000000000000000008203610e3257610e32610dd2565b5060000390565b600181815b80851115610e9257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610e7857610e78610dd2565b80851615610e8557918102915b93841c9390800290610e3e565b509250929050565b600082610ea95750600161067f565b81610eb65750600061067f565b8160018114610ecc5760028114610ed657610ef2565b600191505061067f565b60ff841115610ee757610ee7610dd2565b50506001821b61067f565b5060208310610133831016604e8410600b8410161715610f15575081810a61067f565b610f1f8383610e39565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610f5157610f51610dd2565b029392505050565b6000610d108383610e9a565b600082610f9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761067f5761067f610dd2565b805169ffffffffffffffffffff81168114610fd157600080fd5b919050565b600080600080600060a08688031215610fee57600080fd5b610ff786610fb7565b945060208601519350604086015192506060860151915061101a60808701610fb7565b90509295509295909350565b8181038181111561067f5761067f610dd256fea164736f6c6343000814000a0000000000000000000000004c9edd5852cd905f086c759e8383e09bff1e68b3000000000000000000000000a569d910839ae8865da8f8e70fffb0cba869f96100000000000000000000000000000000000000000000000000000000000152ac0000000000000000000000000000000000000000000000000c7d713b49da00000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca