0x608060405234801561001057600080fd5b5061129e806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80635e1e6325116100665780635e1e63251461014b578063715018a61461016c5780638129fc1c146101745780638da5cb5b1461017c578063f2fde38b1461019757600080fd5b8063085a70b9146100a357806313e7550d146100b857806313e7c9d8146100e35780635055374d14610116578063558a729714610138575b600080fd5b6100b66100b1366004610b56565b6101aa565b005b6100cb6100c6366004610beb565b61046b565b6040516100da93929190610c9a565b60405180910390f35b6101066100f1366004610ccf565b60666020526000908152604090205460ff1681565b60405190151581526020016100da565b610129610124366004610cec565b6105f3565b6040516100da93929190610d25565b6100b6610146366004610d5a565b6106bc565b61015e610159366004610d8d565b610749565b6040519081526020016100da565b6100b66108f0565b6100b6610926565b6033546040516001600160a01b0390911681526020016100da565b6100b66101a5366004610ccf565b610a01565b3360009081526066602052604090205460ff1661021e5760405162461bcd60e51b815260206004820152602760248201527f6f6e6c794f70657261746f723a2063616c6c6572206973206e6f7420616e206f6044820152663832b930ba37b960c91b60648201526084015b60405180910390fd5b600581111561026f5760405162461bcd60e51b815260206004820152601960248201527f736574526f7574653a20746f6f206d616e7920726f75746573000000000000006044820152606401610215565b8360005b82811015610463573684848381811061028e5761028e610dcf565b90506020028101906102a09190610de5565b90506001600160a01b0386166102bc6060830160408401610ccf565b6001600160a01b031614156103135760405162461bcd60e51b815260206004820152601760248201527f736574526f7574653a20696e76616c696420726f7574650000000000000000006044820152606401610215565b6000806103266060840160408501610ccf565b6001600160a01b0316141561033b578661034b565b61034b6060830160408401610ccf565b905061035a6020830183610ccf565b6001600160a01b03166350daf97885836103776020870187610e05565b6040518563ffffffff1660e01b81526004016103969493929190610e53565b60006040518083038186803b1580156103ae57600080fd5b505afa1580156103c2573d6000803e3d6000fd5b5050506001600160a01b038086166000908152606560209081526040808320938c168352929052208391506103f78282610f6e565b5050604080516001600160a01b038087168252891660208201527fa8c96090e146ce1076efa81e5424d56e13d5c3854943f7926406c12d15d6dbe9910160405180910390a161044c6060830160408401610ccf565b93505050808061045b90611091565b915050610273565b505050505050565b6001600160a01b0380841660009081526065602090815260408083208685168452825280832081516060818101909352815490951685526001810180549495869593948694919392908401916104c090610ed5565b80601f01602080910402602001604051908101604052809291908181526020018280546104ec90610ed5565b80156105395780601f1061050e57610100808354040283529160200191610539565b820191906000526020600020905b81548152906001019060200180831161051c57829003601f168201915b5050509183525050600291909101546001600160a01b039081166020928301528251918301516040516315432b3d60e11b8152939450911691632a86567a91610589918c91908a906004016110ba565b60006040518083038186803b1580156105a157600080fd5b505afa1580156105b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105dd91908101906110eb565b6040909201519099909850909650945050505050565b6065602090815260009283526040808420909152908252902080546001820180546001600160a01b03909216929161062a90610ed5565b80601f016020809104026020016040519081016040528092919081815260200182805461065690610ed5565b80156106a35780601f10610678576101008083540402835291602001916106a3565b820191906000526020600020905b81548152906001019060200180831161068657829003601f168201915b505050600290930154919250506001600160a01b031683565b6033546001600160a01b031633146106e65760405162461bcd60e51b8152600401610215906111ae565b6001600160a01b038216600081815260666020908152604091829020805460ff19168515159081179091558251938452908301527f1618a22a3b00b9ac70fd5a82f1f5cdd8cb272bd0f1b740ddf7c26ab05881dd5b910160405180910390a15050565b6001600160a01b03808316600090815260656020908152604080832085851684528252808320815160608101909252805490941681526001840180549394859492939092908401919061079b90610ed5565b80601f01602080910402602001604051908101604052809291908181526020018280546107c790610ed5565b80156108145780601f106107e957610100808354040283529160200191610814565b820191906000526020600020905b8154815290600101906020018083116107f757829003601f168201915b5050509183525050600291909101546001600160a01b039081166020928301528251918301516040516344f1c8c360e01b815293945060009392909116916344f1c8c391610867918a91906004016111e3565b60206040518083038186803b15801561087f57600080fd5b505afa158015610893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b79190611204565b60408301519091506001600160a01b0316156108e5576108dc81836040015186610749565b925050506108e9565b9150505b9392505050565b6033546001600160a01b0316331461091a5760405162461bcd60e51b8152600401610215906111ae565b6109246000610a95565b565b600054610100900460ff166109415760005460ff1615610945565b303b155b6109a85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610215565b600054610100900460ff161580156109ca576000805461ffff19166101011790555b336000908152606660205260409020805460ff191660011790556109ec610ae7565b80156109fe576000805461ff00191690555b50565b6033546001600160a01b03163314610a2b5760405162461bcd60e51b8152600401610215906111ae565b6001600160a01b038116610a905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610215565b6109fe815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610b0e5760405162461bcd60e51b81526004016102159061121d565b610924600054610100900460ff16610b385760405162461bcd60e51b81526004016102159061121d565b61092433610a95565b6001600160a01b03811681146109fe57600080fd5b60008060008060608587031215610b6c57600080fd5b8435610b7781610b41565b93506020850135610b8781610b41565b9250604085013567ffffffffffffffff80821115610ba457600080fd5b818701915087601f830112610bb857600080fd5b813581811115610bc757600080fd5b8860208260051b8501011115610bdc57600080fd5b95989497505060200194505050565b60008060008060808587031215610c0157600080fd5b843593506020850135610c1381610b41565b92506040850135610c2381610b41565b91506060850135610c3381610b41565b939692955090935050565b60005b83811015610c59578181015183820152602001610c41565b83811115610c68576000848401525b50505050565b60008151808452610c86816020860160208601610c3e565b601f01601f19169290920160200192915050565b6001600160a01b03848116825283166020820152606060408201819052600090610cc690830184610c6e565b95945050505050565b600060208284031215610ce157600080fd5b81356108e981610b41565b60008060408385031215610cff57600080fd5b8235610d0a81610b41565b91506020830135610d1a81610b41565b809150509250929050565b600060018060a01b03808616835260606020840152610d476060840186610c6e565b9150808416604084015250949350505050565b60008060408385031215610d6d57600080fd5b8235610d7881610b41565b915060208301358015158114610d1a57600080fd5b600080600060608486031215610da257600080fd5b833592506020840135610db481610b41565b91506040840135610dc481610b41565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112610dfb57600080fd5b9190910192915050565b6000808335601e19843603018112610e1c57600080fd5b83018035915067ffffffffffffffff821115610e3757600080fd5b602001915036819003821315610e4c57600080fd5b9250929050565b6001600160a01b0385811682528416602082015260606040820181905281018290526000828460808401376000608084840101526080601f19601f850116830101905095945050505050565b80546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610ee957607f821691505b60208210811415610f0a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610f5657600081815260208120601f850160051c81016020861015610f375750805b601f850160051c820191505b8181101561046357828155600101610f43565b505050565b60008135610f6881610b41565b92915050565b8135610f7981610b41565b610f838183610e9f565b506001808201602080850135601e19863603018112610fa157600080fd5b8501803567ffffffffffffffff811115610fba57600080fd5b8036038383011315610fcb57600080fd5b610fdf81610fd98654610ed5565b86610f10565b6000601f8211600181146110155760008315610ffd57508382018501355b600019600385901b1c1916600184901b17865561106e565b600086815260209020601f19841690835b8281101561104557868501880135825593870193908901908701611026565b50848210156110645760001960f88660031b161c198785880101351681555b50508683881b0186555b5050505050505061108d61108460408401610f5b565b60028301610e9f565b5050565b60006000198214156110b357634e487b7160e01b600052601160045260246000fd5b5060010190565b8381526060602082015260006110d36060830185610c6e565b905060018060a01b0383166040830152949350505050565b600080604083850312156110fe57600080fd5b825161110981610b41565b602084015190925067ffffffffffffffff8082111561112757600080fd5b818501915085601f83011261113b57600080fd5b81518181111561114d5761114d610ebf565b604051601f8201601f19908116603f0116810190838211818310171561117557611175610ebf565b8160405282815288602084870101111561118e57600080fd5b61119f836020830160208801610c3e565b80955050505050509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8281526040602082015260006111fc6040830184610c6e565b949350505050565b60006020828403121561121657600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea26469706673582212206a7cc42a62f762d3ea5885167cf5775ea864d67aa2d7ba3975ad5bd85e21dce264736f6c63430008090033