0x000000000000000000000000000000000000000000000000000000000000000060a060405234801561001057600080fd5b5060405162001c9738038062001c97833981016040819052610031916100bf565b61003a33610057565b6001600160a01b03821660805261005081610057565b50506100f9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100bc57600080fd5b50565b600080604083850312156100d257600080fd5b82516100dd816100a7565b60208401519092506100ee816100a7565b809150509250929050565b608051611b7b6200011c60003960008181610167015261063d0152611b7b6000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80638da5cb5b11610081578063af02d4f21161005b578063af02d4f2146101e0578063e91204de14610203578063f2fde38b1461023d57600080fd5b80638da5cb5b1461018957806390184b021461019a578063a44f3991146101cd57600080fd5b80634f849d5d116100b25780634f849d5d14610147578063715018a61461015a5780637b1039991461016257600080fd5b806303dc96e6146100d957806311cdf27a146100ee5780633ec53e4914610101575b600080fd5b6100ec6100e7366004610c0c565b610250565b005b6100ec6100fc366004610c0c565b610342565b61012a61010f366004610c29565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100ec610155366004610d28565b6104f5565b6100ec6109d8565b61012a7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031661012a565b6101bd6101a8366004610c0c565b60026020526000908152604090205460ff1681565b604051901515815260200161013e565b60055461012a906001600160a01b031681565b6101bd6101ee366004610c0c565b60036020526000908152604090205460ff1681565b61012a610211366004610dc4565b60046020908152600093845260408085208252928452828420905282529020546001600160a01b031681565b6100ec61024b366004610c0c565b6109ec565b610258610a7c565b6001600160a01b03811660009081526003602052604090205460ff166102eb5760405162461bcd60e51b815260206004820152602e60248201527f537068696e7841757468466163746f72793a20696e76616c696420617574682060448201527f696d706c656d656e746174696f6e00000000000000000000000000000000000060648201526084015b60405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f8701a529e0631329ec01c7d246997a86b854baed079d5859db6fa7efd6e763ed90600090a250565b61034a610a7c565b6000816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401606060405180830381865afa15801561038a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ae9190610df0565b8051602080830151604080850151600085815260048552828120848252855282812082825290945292205493945091926001600160a01b03161561045a5760405162461bcd60e51b815260206004820152602660248201527f537068696e7841757468466163746f72793a2076657273696f6e20616c72656160448201527f647920736574000000000000000000000000000000000000000000000000000060648201526084016102e2565b6001600160a01b0385166000818152600360209081526040808320805460ff19166001179055868352600482528083208684528252808320858452825291829020805473ffffffffffffffffffffffffffffffffffffffff19168417905590519182528291849186917fad4f648400b850e9d053dbbd943dc1f16f1dd948913439a82886d60b875fa961910160405180910390a45050505050565b6005546001600160a01b03166105735760405162461bcd60e51b815260206004820152602960248201527f537068696e7841757468466163746f72793a206e6f206175746820696d706c6560448201527f6d656e746174696f6e000000000000000000000000000000000000000000000060648201526084016102e2565b60008382604051602001610588929190610ea8565b60408051601f198184030181529181528151602092830120600081815260019093529120549091506001600160a01b03161561062c5760405162461bcd60e51b815260206004820152602360248201527f537068696e7841757468466163746f72793a20616c7265616479206465706c6f60448201527f796564000000000000000000000000000000000000000000000000000000000060648201526084016102e2565b600061063782610ad6565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663580867758386886040518463ffffffff1660e01b815260040161068b93929190610ed6565b6020604051808303816000875af11580156106aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ce9190610f14565b905060008330306040516106e190610bea565b6001600160a01b039283168152911660208201526040018190604051809103906000f5905080158015610718573d6000803e3d6000fd5b509050826001600160a01b0316816001600160a01b0316146107a25760405162461bcd60e51b815260206004820152602e60248201527f537068696e7841757468466163746f72793a206661696c656420746f2064657060448201527f6c6f7920617574682070726f787900000000000000000000000000000000000060648201526084016102e2565b6000848152600160208181526040808420805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038981169182179092558552600290925292839020805460ff1916909217909155600554915183821692634f1ef2869216906108179086908a908d90602401610ed6565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0eb624be00000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526108a7929190600401610f31565b6000604051808303816000875af11580156108c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108ee9190810190610f5b565b506040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152821690638f28397090602401600060405180830381600087803b15801561094b57600080fd5b505af115801561095f573d6000803e3d6000fd5b50505050816001600160a01b0316848660405161097c9190610fc9565b60405190819003812060055490917f6eabcd17c81430d178dca7baf30afbc38b234ce85ab4d861fb15c4f1c3506b65916109c79187918c916001600160a01b03909116903390610fe5565b60405180910390a450505050505050565b6109e0610a7c565b6109ea6000610b4f565b565b6109f4610a7c565b6001600160a01b038116610a705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e2565b610a7981610b4f565b50565b6000546001600160a01b031633146109ea5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102e2565b6000610b498260405180602001610aec90610bea565b601f1982820381018352601f90910116604081815230602083018190529082015260600160408051601f1981840301815290829052610b2e9291602001611021565b60405160208183030381529060405280519060200120610bac565b92915050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610bb9838330610bc0565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b610b1e8061105183390190565b6001600160a01b0381168114610a7957600080fd5b600060208284031215610c1e57600080fd5b8135610bb981610bf7565b600060208284031215610c3b57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610c9a57610c9a610c42565b604052919050565b600067ffffffffffffffff821115610cbc57610cbc610c42565b50601f01601f191660200190565b6000610cdd610cd884610ca2565b610c71565b9050828152838383011115610cf157600080fd5b828260208301376000602084830101529392505050565b600082601f830112610d1957600080fd5b610bb983833560208501610cca565b600080600060608486031215610d3d57600080fd5b833567ffffffffffffffff80821115610d5557600080fd5b610d6187838801610d08565b94506020860135915080821115610d7757600080fd5b610d8387838801610d08565b93506040860135915080821115610d9957600080fd5b508401601f81018613610dab57600080fd5b610dba86823560208401610cca565b9150509250925092565b600080600060608486031215610dd957600080fd5b505081359360208301359350604090920135919050565b600060608284031215610e0257600080fd5b6040516060810181811067ffffffffffffffff82111715610e2557610e25610c42565b80604052508251815260208301516020820152604083015160408201528091505092915050565b60005b83811015610e67578181015183820152602001610e4f565b83811115610e76576000848401525b50505050565b60008151808452610e94816020860160208601610e4c565b601f01601f19169290920160200192915050565b604081526000610ebb6040830185610e7c565b8281036020840152610ecd8185610e7c565b95945050505050565b6001600160a01b0384168152606060208201526000610ef86060830185610e7c565b8281036040840152610f0a8185610e7c565b9695505050505050565b600060208284031215610f2657600080fd5b8151610bb981610bf7565b6001600160a01b0383168152604060208201526000610f536040830184610e7c565b949350505050565b600060208284031215610f6d57600080fd5b815167ffffffffffffffff811115610f8457600080fd5b8201601f81018413610f9557600080fd5b8051610fa3610cd882610ca2565b818152856020838501011115610fb857600080fd5b610ecd826020830160208601610e4c565b60008251610fdb818460208701610e4c565b9190910192915050565b60006001600160a01b038087168352608060208401526110086080840187610e7c565b9481166040840152929092166060909101525092915050565b60008351611033818460208801610e4c565b835190830190611047818360208801610e4c565b0194935050505056fe60a0604052604051610b1e380380610b1e833981016040819052610022916100cb565b8061002c8161003f565b50506001600160a01b0316608052610105565b6000610057600080516020610afe8339815191525490565b600080516020610afe833981519152839055604080516001600160a01b038084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6001600160a01b03811681146100c857600080fd5b50565b600080604083850312156100de57600080fd5b82516100e9816100b3565b60208401519092506100fa816100b3565b809150509250929050565b6080516109d061012e600039600081816101280152818161029401526103e501526109d06000f3fe6080604052600436106100695760003560e01c80638f283970116100435780638f283970146100f6578063c45a015514610116578063f851a4401461014a57610078565b80633659cfe6146100805780634f1ef286146100a05780635c60da1b146100c957610078565b366100785761007661015f565b005b61007661015f565b34801561008c57600080fd5b5061007661009b36600461089e565b61022f565b6100b36100ae3660046108b9565b610378565b6040516100c0919061093c565b60405180910390f35b3480156100d557600080fd5b506100de6104d3565b6040516001600160a01b0390911681526020016100c0565b34801561010257600080fd5b5061007661011136600461089e565b610550565b34801561012257600080fd5b506100de7f000000000000000000000000000000000000000000000000000000000000000081565b34801561015657600080fd5b506100de61059d565b60006101897f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90506001600160a01b03811661020c5760405162461bcd60e51b815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e80610229573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b0316336001600160a01b0316148061026e575033155b1561036d576040516357816a7960e11b81526001600160a01b03808316600483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063af02d4f290602401602060405180830381865afa1580156102dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103019190610991565b6103605760405162461bcd60e51b815260206004820152602a60248201527f537068696e784175746850726f78793a20756e617070726f76656420696d706c60448201526932b6b2b73a30ba34b7b760b11b6064820152608401610203565b6103698261060f565b5050565b61037561015f565b50565b60606103a27fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6001600160a01b0316336001600160a01b031614806103bf575033155b156104c4576040516357816a7960e11b81526001600160a01b03808616600483015285917f00000000000000000000000000000000000000000000000000000000000000009091169063af02d4f290602401602060405180830381865afa15801561042e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104529190610991565b6104b15760405162461bcd60e51b815260206004820152602a60248201527f537068696e784175746850726f78793a20756e617070726f76656420696d706c60448201526932b6b2b73a30ba34b7b760b11b6064820152608401610203565b6104bc85858561065c565b9150506104cc565b6104cc61015f565b9392505050565b60006104fd7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6001600160a01b0316336001600160a01b0316148061051a575033155b1561054557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b61054d61015f565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b0316336001600160a01b0316148061058f575033155b1561036d576103758161078f565b60006105c77fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6001600160a01b0316336001600160a01b031614806105e4575033155b1561054557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b0316336001600160a01b0316148061064e575033155b1561036d5761037581610827565b60606106867fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b6001600160a01b0316336001600160a01b031614806106a3575033155b156104c4576106b184610827565b600080856001600160a01b031685856040516106ce9291906109b3565b600060405180830381855af49150503d8060008114610709576040519150601f19603f3d011682016040523d82523d6000602084013e61070e565b606091505b5091509150816107865760405162461bcd60e51b815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c6564000000000000006064820152608401610203565b91506104cc9050565b60006107b97fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103839055604080516001600160a01b038084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b80356001600160a01b038116811461089957600080fd5b919050565b6000602082840312156108b057600080fd5b6104cc82610882565b6000806000604084860312156108ce57600080fd5b6108d784610882565b9250602084013567ffffffffffffffff808211156108f457600080fd5b818601915086601f83011261090857600080fd5b81358181111561091757600080fd5b87602082850101111561092957600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156109695785810183015185820160400152820161094d565b8181111561097b576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156109a357600080fd5b815180151581146104cc57600080fd5b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a164736f6c634300080f000a0000000000000000000000001132793dcc6af3827ccb92fe9699bc1c62ba3ee2000000000000000000000000226f14c3e19788934ff37c653cf5e24cad198341