60806040526000600755600060085534801561001a57600080fd5b50604051612006380380612006833981810160405260c081101561003d57600080fd5b508051602082015160408301516060840151608085015160a0909501519394929391929091856001600160a01b0381166100be576040805162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f74206265203000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825560408051928352602083019190915280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a15060016003556000546001600160a01b031661016d576040805162461bcd60e51b815260206004820152601160248201527013dddb995c881b5d5cdd081899481cd95d607a1b604482015290519081900360640190fd5b60058054610100600160a81b0319166101006001600160a01b0396871602179055600680546001600160a01b03199081169486169490941790556002805490931694909316939093179055600991909155600c5550611e35806101d16000396000f3fe608060405234801561001057600080fd5b50600436106102055760003560e01c80637b0a47ee1161011a578063b6081647116100ad578063d1af0c7d1161007c578063d1af0c7d14610488578063dbbc4a5714610490578063df136d6514610498578063e9fad8ee146104a0578063ebe2b12b146104a857610205565b8063b608164714610453578063c8f33c911461045b578063cc1a378f14610463578063cd3daf9d1461048057610205565b80638da5cb5b116100e95780638da5cb5b1461041e578063904440bd1461042657806391b4ded91461042e578063a694fc3a1461043657610205565b80637b0a47ee146103bc57806380faa57d146103c45780638980f11f146103cc5780638b876347146103f857610205565b8063386a95251161019d5780635c975abb1161016c5780635c975abb1461033e57806368d53c431461035a57806370a082311461038657806372f702f3146103ac57806379ba5097146103b457610205565b8063386a9525146103025780633d18b9121461030a5780633fc6df6e1461031257806353a47bb71461033657610205565b806318160ddd116101d957806318160ddd146102af57806319762143146102b75780631c1f78eb146102dd5780632e1a7d4d146102e557610205565b80628cc2621461020a5780630700037d146102425780631627540c1461026857806316c38b3c14610290575b600080fd5b6102306004803603602081101561022057600080fd5b50356001600160a01b03166104b0565b60408051918252519081900360200190f35b6102306004803603602081101561025857600080fd5b50356001600160a01b0316610546565b61028e6004803603602081101561027e57600080fd5b50356001600160a01b0316610558565b005b61028e600480360360208110156102a657600080fd5b503515156105b4565b61023061062e565b61028e600480360360208110156102cd57600080fd5b50356001600160a01b0316610635565b61023061065f565b61028e600480360360208110156102fb57600080fd5b503561067d565b6102306109f8565b61028e6109fe565b61031a610d82565b604080516001600160a01b039092168252519081900360200190f35b61031a610d91565b610346610da0565b604080519115158252519081900360200190f35b61028e6004803603604081101561037057600080fd5b50803590602001356001600160a01b0316610da9565b6102306004803603602081101561039c57600080fd5b50356001600160a01b03166110de565b61031a6110f9565b61028e611108565b6102306111c4565b6102306111ca565b61028e600480360360408110156103e257600080fd5b506001600160a01b0381351690602001356111d8565b6102306004803603602081101561040e57600080fd5b50356001600160a01b0316611295565b61031a6112a7565b6102306112b6565b610230611336565b61028e6004803603602081101561044c57600080fd5b503561133c565b6102306116c5565b6102306116cb565b61028e6004803603602081101561047957600080fd5b50356116d1565b610230611754565b61031a6117a2565b61031a6117b6565b6102306117ce565b61028e6117d4565b6102306117f7565b6001600160a01b0381166000908152600e6020908152604080832054600d909252822054610540919061053490670de0b6b3a76400009061052890610503906104f7611754565b9063ffffffff6117fd16565b6001600160a01b0388166000908152601060205260409020549063ffffffff61185a16565b9063ffffffff6118ba16565b9063ffffffff61192416565b92915050565b600e6020526000908152604090205481565b61056061197e565b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229181900360200190a150565b6105bc61197e565b60055460ff16151581151514156105d25761062b565b6005805460ff1916821515179081905560ff16156105ef57426004555b6005546040805160ff90921615158252517f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec59181900360200190a15b50565b600f545b90565b61063d61197e565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600061067860095460085461185a90919063ffffffff16565b905090565b600380546001019081905533610691611754565b600b5561069c6111ca565b600a556001600160a01b038116156108bc57600f54610887576106ef6106c1826104b0565b6105346064610528600c546106e360095460085461185a90919063ffffffff16565b9063ffffffff61185a16565b6001600160a01b0382166000908152600e602052604081208290556009546008549192916107229163ffffffff61185a16565b039050600061073c426007546117fd90919063ffffffff16565b905061074e828263ffffffff6118ba16565b600855600554604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156107a157600080fd5b505afa1580156107b5573d6000803e3d6000fd5b505050506040513d60208110156107cb57600080fd5b50516001600160a01b0385166000908152600e602052604090205490915081101561082b576040805162461bcd60e51b81526020600482015260186024820152600080516020611ce0833981519152604482015290519081900360640190fd5b60095461083f90829063ffffffff6118ba16565b6008541115610883576040805162461bcd60e51b81526020600482015260186024820152600080516020611ce0833981519152604482015290519081900360640190fd5b5050505b610890816104b0565b6001600160a01b0382166000908152600e6020908152604080832093909355600b54600d909152919020555b60008311610905576040805162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015290519081900360640190fd5b600f54610918908463ffffffff6117fd16565b600f553360009081526010602052604090205461093b908463ffffffff6117fd16565b33600081815260106020526040902091909155600654610967916001600160a01b0390911690856119c7565b60408051848152905133917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25060035481146109f4576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5050565b60095481565b600380546001019081905533610a12611754565b600b55610a1d6111ca565b600a556001600160a01b03811615610c0f57600f54610bda57610a426106c1826104b0565b6001600160a01b0382166000908152600e60205260408120829055600954600854919291610a759163ffffffff61185a16565b0390506000610a8f426007546117fd90919063ffffffff16565b9050610aa1828263ffffffff6118ba16565b600855600554604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610af457600080fd5b505afa158015610b08573d6000803e3d6000fd5b505050506040513d6020811015610b1e57600080fd5b50516001600160a01b0385166000908152600e6020526040902054909150811015610b7e576040805162461bcd60e51b81526020600482015260186024820152600080516020611ce0833981519152604482015290519081900360640190fd5b600954610b9290829063ffffffff6118ba16565b6008541115610bd6576040805162461bcd60e51b81526020600482015260186024820152600080516020611ce0833981519152604482015290519081900360640190fd5b5050505b610be3816104b0565b6001600160a01b0382166000908152600e6020908152604080832093909355600b54600d909152919020555b336000908152600e60205260409020548015610d2a57600554604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610c7557600080fd5b505afa158015610c89573d6000803e3d6000fd5b505050506040513d6020811015610c9f57600080fd5b5051336000908152600e6020526040902054909150811015610cbf578091505b336000818152600e6020526040812055600554610cf2916101009091046001600160a01b0316908463ffffffff6119c716565b60408051838152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a2505b5050600354811461062b576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002546001600160a01b031681565b6001546001600160a01b031681565b60055460ff1681565b6002546001600160a01b03163314610df25760405162461bcd60e51b815260040180806020018281038252602a815260200180611d8c602a913960400191505060405180910390fd5b6000610dfc611754565b600b55610e076111ca565b600a556001600160a01b03811615610ff957600f54610fc457610e2c6106c1826104b0565b6001600160a01b0382166000908152600e60205260408120829055600954600854919291610e5f9163ffffffff61185a16565b0390506000610e79426007546117fd90919063ffffffff16565b9050610e8b828263ffffffff6118ba16565b600855600554604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ede57600080fd5b505afa158015610ef2573d6000803e3d6000fd5b505050506040513d6020811015610f0857600080fd5b50516001600160a01b0385166000908152600e6020526040902054909150811015610f68576040805162461bcd60e51b81526020600482015260186024820152600080516020611ce0833981519152604482015290519081900360640190fd5b600954610f7c90829063ffffffff6118ba16565b6008541115610fc0576040805162461bcd60e51b81526020600482015260186024820152600080516020611ce0833981519152604482015290519081900360640190fd5b5050505b610fcd816104b0565b6001600160a01b0382166000908152600e6020908152604080832093909355600b54600d909152919020555b6005546110169061010090046001600160a01b0316833086611a1e565b600754421061103b5760095461103390849063ffffffff6118ba16565b60085561108a565b600754600090611051904263ffffffff6117fd16565b9050600061106a6008548361185a90919063ffffffff16565b60095490915061108490610528878463ffffffff61192416565b60085550505b42600a8190556009546110a3919063ffffffff61192416565b6007556040805184815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a1505050565b6001600160a01b031660009081526010602052604090205490565b6006546001600160a01b031681565b6001546001600160a01b031633146111515760405162461bcd60e51b8152600401808060200182810382526035815260200180611cab6035913960400191505060405180910390fd5b600054600154604080516001600160a01b03938416815292909116602083015280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60085481565b600061067842600754611a7e565b6111e061197e565b6006546001600160a01b038381169116141561122d5760405162461bcd60e51b8152600401808060200182810382526021815260200180611de06021913960400191505060405180910390fd5b60005461124d906001600160a01b0384811691168363ffffffff6119c716565b604080516001600160a01b03841681526020810183905281517f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28929181900390910190a15050565b600d6020526000908152604090205481565b6000546001600160a01b031681565b600073169e633a2d1e6c10dd91238ba11c4a708dfef37c6001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561130557600080fd5b505afa158015611319573d6000803e3d6000fd5b505050506040513d602081101561132f57600080fd5b5051905090565b60045481565b600380546001019081905560055460ff16156113895760405162461bcd60e51b815260040180806020018281038252603c815260200180611d50603c913960400191505060405180910390fd5b33611392611754565b600b5561139d6111ca565b600a556001600160a01b0381161561158f57600f5461155a576113c26106c1826104b0565b6001600160a01b0382166000908152600e602052604081208290556009546008549192916113f59163ffffffff61185a16565b039050600061140f426007546117fd90919063ffffffff16565b9050611421828263ffffffff6118ba16565b600855600554604080516370a0823160e01b8152306004820152905160009261010090046001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561147457600080fd5b505afa158015611488573d6000803e3d6000fd5b505050506040513d602081101561149e57600080fd5b50516001600160a01b0385166000908152600e60205260409020549091508110156114fe576040805162461bcd60e51b81526020600482015260186024820152600080516020611ce0833981519152604482015290519081900360640190fd5b60095461151290829063ffffffff6118ba16565b6008541115611556576040805162461bcd60e51b81526020600482015260186024820152600080516020611ce0833981519152604482015290519081900360640190fd5b5050505b611563816104b0565b6001600160a01b0382166000908152600e6020908152604080832093909355600b54600d909152919020555b600083116115d5576040805162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015290519081900360640190fd5b600f546115e8908463ffffffff61192416565b600f553360009081526010602052604090205461160b908463ffffffff61192416565b33600081815260106020526040902091909155600654611638916001600160a01b03909116903086611a1e565b60408051848152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25060035481146109f4576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600c5481565b600a5481565b6116d961197e565b60075442116117195760405162461bcd60e51b8152600401808060200182810382526058815260200180611c536058913960600191505060405180910390fd5b60098190556040805182815290517ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39181900360200190a150565b6000600f546000141561176a5750600b54610632565b610678611793600f54610528670de0b6b3a76400006106e36008546106e3600a546104f76111ca565b600b549063ffffffff61192416565b60055461010090046001600160a01b031681565b73169e633a2d1e6c10dd91238ba11c4a708dfef37c81565b600b5481565b336000908152601060205260409020546117ed9061067d565b6117f56109fe565b565b60075481565b600082821115611854576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008261186957506000610540565b8282028284828161187657fe5b04146118b35760405162461bcd60e51b8152600401808060200182810382526021815260200180611d2f6021913960400191505060405180910390fd5b9392505050565b6000808211611910576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161191b57fe5b04949350505050565b6000828201838110156118b3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000546001600160a01b031633146117f55760405162461bcd60e51b815260040180806020018281038252602f815260200180611d00602f913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611a19908490611a94565b505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611a78908590611a94565b50505050565b6000818310611a8d57816118b3565b5090919050565b611aa6826001600160a01b0316611c4c565b611af7576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611b355780518252601f199092019160209182019101611b16565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b97576040519150601f19603f3d011682016040523d82523d6000602084013e611b9c565b606091505b509150915081611bf3576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611a7857808060200190516020811015611c0f57600080fd5b5051611a785760405162461bcd60e51b815260040180806020018281038252602a815260200180611db6602a913960400191505060405180910390fd5b3b15159056fe50726576696f7573207265776172647320706572696f64206d75737420626520636f6d706c657465206265666f7265206368616e67696e6720746865206475726174696f6e20666f7220746865206e657720706572696f64596f75206d757374206265206e6f6d696e61746564206265666f726520796f752063616e20616363657074206f776e65727368697050726f76696465642072657761726420746f6f206869676800000000000000004f6e6c792074686520636f6e7472616374206f776e6572206d617920706572666f726d207468697320616374696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775468697320616374696f6e2063616e6e6f7420626520706572666f726d6564207768696c652074686520636f6e74726163742069732070617573656443616c6c6572206973206e6f742052657761726473446973747269627574696f6e20636f6e74726163745361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656443616e6e6f7420776974686472617720746865207374616b696e6720746f6b656ea265627a7a723158204924311e4bb7f10400659b58d3fa27cb94aec94fa713641545d40fc2f9c8be6664736f6c63430005110032000000000000000000000000a59c86f222d4df8f02b95b197761b304e7e7c5460000000000000000000000004cc896c01db253c1119be8d0ba448d2d3eafb100000000000000000000000000fe9a29ab92522d14fc65880d817214261d8479ae000000000000000000000000173f8ee61c0fe712cae2a2fc8d5c0ccdda57e6da000000000000000000000000000000000000000000000000000000000167e980000000000000000000000000000000000000000000000000000000000000000a