0x60806040523480156200001157600080fd5b5060405162002a6638038062002a66833981016040819052620000349162000174565b6200003f3362000107565b600180546001600160a01b038086166001600160a01b03199283161790925560028054928516929091168217905560408051631ba980b360e01b81529051631ba980b3916004808201926020929091908290030181865afa158015620000a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cf9190620001be565b600380546001600160a01b039283166001600160a01b0319918216179091556004805493909216921691909117905550620001e39050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200016f57600080fd5b919050565b6000806000606084860312156200018a57600080fd5b620001958462000157565b9250620001a56020850162000157565b9150620001b56040850162000157565b90509250925092565b600060208284031215620001d157600080fd5b620001dc8262000157565b9392505050565b61287380620001f36000396000f3fe60806040526004361061019a5760003560e01c80638d8f82e6116100e1578063d84ff8421161008a578063ec1701a711610064578063ec1701a714610482578063f2fde38b14610497578063f80c04a3146104b7578063fd340c84146104d757600080fd5b8063d84ff8421461042f578063dd185d331461044f578063e0770b3e1461046f57600080fd5b8063c6def076116100bb578063c6def076146103cf578063ccdf6e33146103ef578063d210087b1461040f57600080fd5b80638d8f82e6146103715780638da5cb5b14610391578063b11a49d6146103af57600080fd5b80633fc8cef311610143578063715018a61161011d578063715018a614610315578063785c7cf61461032a5780637c8c68251461035c57600080fd5b80633fc8cef3146102b55780635d705bb8146102d5578063650739d0146102f557600080fd5b80631ba980b3116101745780631ba980b31461023d57806323f78f99146102755780633bd61ba81461029557600080fd5b806309d7b245146101a65780630ff0bc3b146101e0578063156e1ff41461021b57600080fd5b366101a157005b600080fd5b3480156101b257600080fd5b506101c66101c1366004612200565b6104f7565b604080519283526020830191909152015b60405180910390f35b3480156101ec57600080fd5b5061020d6101fb366004612241565b60056020526000908152604090205481565b6040519081526020016101d7565b34801561022757600080fd5b5061023b61023636600461225e565b6106c0565b005b34801561024957600080fd5b5060035461025d906001600160a01b031681565b6040516001600160a01b0390911681526020016101d7565b34801561028157600080fd5b5061023b610290366004612311565b610835565b3480156102a157600080fd5b5060045461025d906001600160a01b031681565b3480156102c157600080fd5b5060015461025d906001600160a01b031681565b3480156102e157600080fd5b5061020d6102f03660046123af565b610983565b34801561030157600080fd5b506101c6610310366004612457565b610a3e565b34801561032157600080fd5b5061023b610b4d565b34801561033657600080fd5b5061034a610345366004612241565b610bb3565b60405160ff90911681526020016101d7565b34801561036857600080fd5b5061023b610c23565b34801561037d57600080fd5b5061023b61038c366004612483565b610d3e565b34801561039d57600080fd5b506000546001600160a01b031661025d565b3480156103bb57600080fd5b5061023b6103ca366004612547565b610e9f565b3480156103db57600080fd5b5060025461025d906001600160a01b031681565b3480156103fb57600080fd5b5061025d61040a366004612241565b6111f7565b34801561041b57600080fd5b5061023b61042a366004612597565b611289565b34801561043b57600080fd5b5061023b61044a3660046125ed565b61137e565b34801561045b57600080fd5b5061023b61046a366004612483565b6113f4565b61023b61047d366004612635565b61146f565b34801561048e57600080fd5b5061023b6114ec565b3480156104a357600080fd5b5061023b6104b2366004612241565b6115ec565b3480156104c357600080fd5b5061023b6104d2366004612241565b6116ce565b3480156104e357600080fd5b5061023b6104f236600461225e565b61173b565b600080600090506000856001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561053e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610562919061267f565b90506000866001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c8919061267f565b9050806001600160a01b0316866001600160a01b0316141561067b576040516001600160a01b03821660248201526044810186905261067490839063907448ed60e01b906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610983565b93506106b6565b6040516001600160a01b03808316602483015287166044820152606481018690526106b390839063a4275ceb60e01b90608401610610565b93505b5050935093915050565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d919061269c565b905061073d878787878730611745565b6001546040516370a0823160e01b815230600482015260009183916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae919061269c565b6107b891906126cb565b600154604051632e1a7d4d60e01b8152600481018390529192506001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156107ff57600080fd5b505af1158015610813573d6000803e3d6000fd5b5061082b925050506001600160a01b038416826119c7565b5050505050505050565b6000546001600160a01b031633146108945760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60005b8281101561097d5761096b828585848181106108b5576108b56126e2565b90506020020160208101906108ca9190612241565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610934919061269c565b868685818110610946576109466126e2565b905060200201602081019061095b9190612241565b6001600160a01b03169190611ae0565b80610975816126f8565b915050610897565b50505050565b6000806000846001600160a01b0316846040516109a0919061273f565b600060405180830381855afa9150503d80600081146109db576040519150601f19603f3d011682016040523d82523d6000602084013e6109e0565b606091505b509150915081610a325760405162461bcd60e51b815260206004820181905260248201527f73746174696343616c6c416e6447657455696e742063616c6c206661696c6564604482015260640161088b565b60200151949350505050565b600080600090506000846001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa9919061267f565b90506000856001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0f919061267f565b6040516001600160a01b038216602482015260448101879052909150610b429083906361858e2360e01b90606401610610565b935050509250929050565b6000546001600160a01b03163314610ba75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161088b565b610bb16000611b70565b565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610c0f575060408051601f3d908101601f19168201909252610c0c9181019061275b565b60015b610c1b57506012919050565b90505b919050565b6002546040805163040f1f6d60e11b815290516000926001600160a01b03169163081e3eda9160048083019260209291908290030181865afa158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c91919061269c565b905060005b81811015610d3a57600254604051631526fe2760e01b8152600481018390526000916001600160a01b031690631526fe279060240160a060405180830381865afa158015610ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0c919061277e565b516001600160a01b031660009081526005602052604090208290555080610d32816126f8565b915050610c96565b5050565b6000546001600160a01b03163314610d985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161088b565b60005b8251811015610e9a57828181518110610db657610db66126e2565b6020908102919091010151604051636eb1769f60e11b81523060048201526001600160a01b0384811660248301529091169063dd62ed3e90604401602060405180830381865afa158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e32919061269c565b15610e6f57610e6f826000858481518110610e4f57610e4f6126e2565b60200260200101516001600160a01b0316611bcd9092919063ffffffff16565b610e8882600019858481518110610e4f57610e4f6126e2565b80610e92816126f8565b915050610d9b565b505050565b6000546001600160a01b03163314610ef95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161088b565b60005b81811015610e9a576002546000906001600160a01b0316631526fe27858585818110610f2a57610f2a6126e2565b905060200201356040518263ffffffff1660e01b8152600401610f4f91815260200190565b60a060405180830381865afa158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f90919061277e565b6003546040828101518351915163bca8b4d160e01b81526001600160a01b03918216600482015291811660248301529293506000929091169063bca8b4d190604401602060405180830381865afa158015610fef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611013919061269c565b6040805160028082526060820183529293506000929091602083019080368337019050509050826000015181600081518110611051576110516126e2565b60200260200101906001600160a01b031690816001600160a01b03168152505082600001516001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d7919061267f565b816001815181106110ea576110ea6126e2565b6001600160a01b03929092166020928302919091019091015260408051600180825281830190925260009181602001602082028036833701905050905083600001518160008151811061113f5761113f6126e2565b60200260200101906001600160a01b031690816001600160a01b0316815250506111c98285600001516001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038c919061267f565b6002546111e09082906001600160a01b0316610d3e565b5050505080806111ef906126f8565b915050610efc565b6002546001600160a01b03828116600090815260056020526040808220549051631526fe2760e01b8152919384931691631526fe279161123d9160040190815260200190565b60a060405180830381865afa15801561125a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127e919061277e565b606001519392505050565b6000856001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed919061267f565b6040516323b872dd60e01b8152336004820152306024820152604481018790529091506001600160a01b038216906323b872dd906064016020604051808303816000875af1158015611343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113679190612816565b50611376868287878787611ce9565b505050505050565b6113ed85866001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e4919061267f565b86868686611745565b5050505050565b6000546001600160a01b0316331461144e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161088b565b6114588282610d3e565b600254610d3a9083906001600160a01b0316610d3e565b60015460408051630d0e30db60e41b8152905134926001600160a01b03169163d0e30db091849160048082019260009290919082900301818588803b1580156114b757600080fd5b505af11580156114cb573d6000803e3d6000fd5b50506001546113ed93508892506001600160a01b0316905083878787611ce9565b6000546001600160a01b031633146115465760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161088b565b600360009054906101000a90046001600160a01b03166001600160a01b031663570ca7356040518163ffffffff1660e01b8152600401602060405180830381865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd919061267f565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116465760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161088b565b6001600160a01b0381166116c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161088b565b6116cb81611b70565b50565b6000546001600160a01b031633146117285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161088b565b6116cb6001600160a01b038216476119c7565b6113768686868686865b61174e866111f7565b604051632d182be560e21b8152600481018690523060248201523360448201526001600160a01b03919091169063b460af9490606401600060405180830381600087803b15801561179e57600080fd5b505af11580156117b2573d6000803e3d6000fd5b505050506000866001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181a919061267f565b90506000876001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa15801561185c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611880919061267f565b9050866001600160a01b0316816001600160a01b0316141561192b576040516309a5fca360e01b81526001600160a01b03888116600483015260248201889052604482018790528481166064830152608482018690528316906309a5fca39060a4016020604051808303816000875af1158015611901573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611925919061269c565b5061082b565b604051630f91f06f60e01b81526001600160a01b03828116600483015288811660248301526044820188905260648201879052848116608483015260a48201869052831690630f91f06f9060c4016020604051808303816000875af1158015611998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bc919061269c565b505050505050505050565b80471015611a175760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015260640161088b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a64576040519150601f19603f3d011682016040523d82523d6000602084013e611a69565b606091505b5050905080610e9a5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d61792068617665207265766572746564000000000000606482015260840161088b565b6040516001600160a01b038316602482015260448101829052610e9a90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f6a565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b801580611c475750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c45919061269c565b155b611cb95760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840161088b565b6040516001600160a01b038316602482015260448101829052610e9a90849063095ea7b360e01b90606401611b0c565b6000866001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4d919061267f565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038916906370a0823190602401602060405180830381865afa158015611d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbb919061269c565b604051636281baef60e01b81526001600160a01b038981166004830152602482018990526044820188905230606483015260848201879052600060a483015291925090831690636281baef9060c4016020604051808303816000875af1158015611e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4d919061269c565b506040516370a0823160e01b815230600482015260009082906001600160a01b038b16906370a0823190602401602060405180830381865afa158015611e97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebb919061269c565b611ec591906126cb565b6002546001600160a01b038b8116600090815260056020526040908190205490516317baa44360e01b8152600481019190915260248101849052871515604482015233606482015292935016906317baa443906084016020604051808303816000875af1158015611f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5e9190612816565b50505050505050505050565b6000611fbf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661204f9092919063ffffffff16565b805190915015610e9a5780806020019051810190611fdd9190612816565b610e9a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161088b565b606061205e8484600085612068565b90505b9392505050565b6060824710156120e05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161088b565b843b61212e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161088b565b600080866001600160a01b0316858760405161214a919061273f565b60006040518083038185875af1925050503d8060008114612187576040519150601f19603f3d011682016040523d82523d6000602084013e61218c565b606091505b509150915061219c8282866121a7565b979650505050505050565b606083156121b6575081612061565b8251156121c65782518084602001fd5b8160405162461bcd60e51b815260040161088b9190612833565b6001600160a01b03811681146116cb57600080fd5b8035610c1e816121e0565b60008060006060848603121561221557600080fd5b8335612220816121e0565b92506020840135612230816121e0565b929592945050506040919091013590565b60006020828403121561225357600080fd5b8135612061816121e0565b60008060008060008060c0878903121561227757600080fd5b8635612282816121e0565b95506020870135612292816121e0565b945060408701359350606087013592506080870135915060a08701356122b7816121e0565b809150509295509295509295565b60008083601f8401126122d757600080fd5b50813567ffffffffffffffff8111156122ef57600080fd5b6020830191508360208260051b850101111561230a57600080fd5b9250929050565b60008060006040848603121561232657600080fd5b833567ffffffffffffffff81111561233d57600080fd5b612349868287016122c5565b909450925050602084013561235d816121e0565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156123a7576123a7612368565b604052919050565b600080604083850312156123c257600080fd5b82356123cd816121e0565b915060208381013567ffffffffffffffff808211156123eb57600080fd5b818601915086601f8301126123ff57600080fd5b81358181111561241157612411612368565b612423601f8201601f1916850161237e565b9150808252878482850101111561243957600080fd5b80848401858401376000848284010152508093505050509250929050565b6000806040838503121561246a57600080fd5b8235612475816121e0565b946020939093013593505050565b6000806040838503121561249657600080fd5b823567ffffffffffffffff808211156124ae57600080fd5b818501915085601f8301126124c257600080fd5b81356020828211156124d6576124d6612368565b8160051b92506124e781840161237e565b828152928401810192818101908985111561250157600080fd5b948201945b8486101561252b578535935061251b846121e0565b8382529482019490820190612506565b965061253a90508782016121f5565b9450505050509250929050565b6000806020838503121561255a57600080fd5b823567ffffffffffffffff81111561257157600080fd5b61257d858286016122c5565b90969095509350505050565b80151581146116cb57600080fd5b600080600080600060a086880312156125af57600080fd5b85356125ba816121e0565b945060208601359350604086013592506060860135915060808601356125df81612589565b809150509295509295909350565b600080600080600060a0868803121561260557600080fd5b8535612610816121e0565b945060208601359350604086013592506060860135915060808601356125df816121e0565b6000806000806080858703121561264b57600080fd5b8435612656816121e0565b93506020850135925060408501359150606085013561267481612589565b939692955090935050565b60006020828403121561269157600080fd5b8151612061816121e0565b6000602082840312156126ae57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156126dd576126dd6126b5565b500390565b634e487b7160e01b600052603260045260246000fd5b600060001982141561270c5761270c6126b5565b5060010190565b60005b8381101561272e578181015183820152602001612716565b8381111561097d5750506000910152565b60008251612751818460208701612713565b9190910192915050565b60006020828403121561276d57600080fd5b815160ff8116811461206157600080fd5b600060a0828403121561279057600080fd5b60405160a0810181811067ffffffffffffffff821117156127b3576127b3612368565b60405282516127c1816121e0565b815260208301516127d1816121e0565b602082015260408301516127e4816121e0565b604082015260608301516127f7816121e0565b6060820152608083015161280a81612589565b60808201529392505050565b60006020828403121561282857600080fd5b815161206181612589565b6020815260008251806020840152612852816040850160208701612713565b601f01601f1916919091016040019291505056fea164736f6c634300080b000a000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000004181e561b42fdad14c68b0794c215deb9bc80c8f000000000000000000000000c9bfc3efefe4cf96877009f75a61f5c1937e5d1a