0x608060405234801561001057600080fd5b5060405161156b38038061156b83398101604081905261002f916100c9565b61003833610079565b6001600160a01b0390911660009081526001602081815260408084209490945560048152838320829055600281528383208290556005905291902055610101565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100db578182fd5b82516001600160a01b03811681146100f1578283fd5b6020939093015192949293505050565b61145b806101106000396000f3fe60806040526004361061010e5760003560e01c80639123f01e116100a5578063cd69f92a11610074578063ebcbeda811610059578063ebcbeda8146102f7578063f2e0bf1e14610317578063f2fde38b146103375761010e565b8063cd69f92a146102c4578063ce6df2b9146102e45761010e565b80639123f01e1461021d578063ae9a68081461024a578063b0d4a9ac14610277578063bb209a4a146102975761010e565b80633ccfd60b116100e15780633ccfd60b1461019b5780636ba1ef84146101b0578063715018a6146101e05780638da5cb5b146101f55761010e565b806302ee7c4b146101135780631823b82114610135578063292eaea1146101685780633068ef791461017b575b600080fd5b34801561011f57600080fd5b5061013361012e366004611148565b610357565b005b34801561014157600080fd5b50610155610150366004611169565b6103e5565b6040519081526020015b60405180910390f35b61013361017636600461119b565b610546565b34801561018757600080fd5b506101336101963660046111f0565b610870565b3480156101a757600080fd5b506101336108e6565b3480156101bc57600080fd5b506101d06101cb3660046112c6565b610973565b604051901515815260200161015f565b3480156101ec57600080fd5b506101336109e8565b34801561020157600080fd5b506000546040516001600160a01b03909116815260200161015f565b34801561022957600080fd5b50610155610238366004611148565b60036020526000908152604090205481565b34801561025657600080fd5b50610155610265366004611148565b60016020526000908152604090205481565b34801561028357600080fd5b506101336102923660046111f0565b610a4e565b3480156102a357600080fd5b506101556102b2366004611148565b60026020526000908152604090205481565b3480156102d057600080fd5b506101336102df3660046111f0565b610ac4565b6101336102f23660046111f0565b610b3a565b34801561030357600080fd5b50610133610312366004611219565b610d09565b34801561032357600080fd5b506101336103323660046111f0565b610e73565b34801561034357600080fd5b50610133610352366004611148565b610ee9565b6000546001600160a01b031633146103b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6007546040517efdd58e0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260016024830152600092839291169062fdd58e9060440160206040518083038186803b15801561044c57600080fd5b505afa158015610460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104849190611342565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529192506000918616906370a082319060240160206040518083038186803b1580156104e457600080fd5b505afa1580156104f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051c9190611342565b90508181111561053157600092505050610540565b61053b81836113c7565b925050505b92915050565b815160075460009115159082906001600160a01b031662fdd58e336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201526001602482015260440160206040518083038186803b1580156105bf57600080fd5b505afa1580156105d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f79190611342565b90506000816001600160a01b0388166370a08231336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561066357600080fd5b505afa158015610677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069b9190611342565b6106a590876113af565b1115905082156106bd576106ba863389610973565b93505b80806106c65750835b6107385760405162461bcd60e51b815260206004820152602b60248201527f4d757374206f776e206d656d626572736869702070617373206f72206265206f60448201527f6e20616c6c6f776c69737400000000000000000000000000000000000000000060648201526084016103ad565b82156107bf576001600160a01b0387166000908152600260209081526040808320543384526003909252909120546107719087906113af565b11156107bf5760405162461bcd60e51b815260206004820152601e60248201527f596f75277665207265616368656420796f7572206d696e74206c696d6974000060448201526064016103ad565b604051636cb504a560e11b8152600481018690526001600160a01b0388169063d96a094a9034906024016020604051808303818588803b15801561080257600080fd5b505af1158015610816573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061083b9190611322565b5083156108675733600090815260036020526040812080548792906108619084906113af565b90915550505b50505050505050565b6000546001600160a01b031633146108ca5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ad565b6001600160a01b03909116600090815260056020526040902055565b6000546001600160a01b031633146109405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ad565b6040514790339082156108fc029083906000818181858888f1935050505015801561096f573d6000803e3d6000fd5b5050565b6040516bffffffffffffffffffffffff19606084901b16602082015260009081906034016040516020818303038152906040528051906020012090506109df8560016000866001600160a01b03166001600160a01b031681526020019081526020016000205483610fcb565b95945050505050565b6000546001600160a01b03163314610a425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ad565b610a4c6000610fe1565b565b6000546001600160a01b03163314610aa85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ad565b6001600160a01b03909116600090815260046020526040902055565b6000546001600160a01b03163314610b1e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ad565b6001600160a01b03909116600090815260026020526040902055565b6001600160a01b03821660009081526004602052604090205415610ba05760405162461bcd60e51b815260206004820152601b60248201527f5075626c6963206d696e74206973206e6f74206c69766520796574000000000060448201526064016103ad565b6001600160a01b0382166000908152600560205260409020541580610c1857506001600160a01b03821660009081526005602052604090205415801590610c1857506001600160a01b038216600090815260026020908152604080832054338452600390925290912054610c159083906113af565b11155b610c645760405162461bcd60e51b815260206004820152601e60248201527f4d696e74696e6720776f756c6420657863656564206d6178206c696d6974000060448201526064016103ad565b604051636cb504a560e11b8152600481018290526001600160a01b0383169063d96a094a9034906024016020604051808303818588803b158015610ca757600080fd5b505af1158015610cbb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ce09190611322565b503360009081526003602052604081208054839290610d009084906113af565b90915550505050565b6000546001600160a01b03163314610d635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ad565b60005b8451811015610e6c578360046000878481518110610d9457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508260026000878481518110610de557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508160056000878481518110610e3657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b0316825281019190915260400160002055610e656001826113af565b9050610d66565b5050505050565b6000546001600160a01b03163314610ecd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ad565b6001600160a01b03909116600090815260016020526040902055565b6000546001600160a01b03163314610f435760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ad565b6001600160a01b038116610fbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103ad565b610fc881610fe1565b50565b600082610fd8858461103e565b14949350505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081815b84518110156110b857600085828151811061106e57634e487b7160e01b600052603260045260246000fd5b6020026020010151905080831161109457600083815260208290526040902092506110a5565b600081815260208490526040902092505b50806110b0816113de565b915050611043565b509392505050565b80356001600160a01b03811681146110d757600080fd5b919050565b600082601f8301126110ec578081fd5b813560206111016110fc8361138b565b61135a565b828152818101908583018385028701840188101561111d578586fd5b855b8581101561113b5781358452928401929084019060010161111f565b5090979650505050505050565b600060208284031215611159578081fd5b611162826110c0565b9392505050565b6000806040838503121561117b578081fd5b611184836110c0565b9150611192602084016110c0565b90509250929050565b6000806000606084860312156111af578081fd5b6111b8846110c0565b9250602084013567ffffffffffffffff8111156111d3578182fd5b6111df868287016110dc565b925050604084013590509250925092565b60008060408385031215611202578182fd5b61120b836110c0565b946020939093013593505050565b6000806000806080858703121561122e578081fd5b843567ffffffffffffffff811115611244578182fd5b8501601f81018713611254578182fd5b803560206112646110fc8361138b565b82815281810190848301838502860184018c1015611280578687fd5b8695505b848610156112a957611295816110c0565b835260019590950194918301918301611284565b509a91890135995050604088013597606001359650945050505050565b6000806000606084860312156112da578283fd5b833567ffffffffffffffff8111156112f0578384fd5b6112fc868287016110dc565b93505061130b602085016110c0565b9150611319604085016110c0565b90509250925092565b600060208284031215611333578081fd5b81518015158114611162578182fd5b600060208284031215611353578081fd5b5051919050565b604051601f8201601f1916810167ffffffffffffffff811182821017156113835761138361140f565b604052919050565b600067ffffffffffffffff8211156113a5576113a561140f565b5060209081020190565b600082198211156113c2576113c26113f9565b500190565b6000828210156113d9576113d96113f9565b500390565b60006000198214156113f2576113f26113f9565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220c517d20cc16173dab5726f2675e240e49481c3d24813af03ed1c7b61fec2045c64736f6c63430008020033000000000000000000000000023761b40d56bcfb940781640fbf4ab799162d3197f04d0d568907ef8ca130504ac6d288f345ff1f552efb2bf296c82e2d387141