0x60c06040523480156200001157600080fd5b5060405162001cff38038062001cff833981016040819052620000349162000172565b80806001600160a01b0381163b620000925760405162461bcd60e51b815260206004820152601e60248201527f4d61696c626f78436c69656e743a20696e76616c6964206d61696c626f780000604482015260640160405180910390fd5b6001600160a01b03821660808190526040805163234d8e3d60e21b81529051638d3638f4916004808201926020929091908290030181865afa158015620000dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001039190620001a4565b63ffffffff1660a052620001173362000120565b505050620001cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200018557600080fd5b81516001600160a01b03811681146200019d57600080fd5b9392505050565b600060208284031215620001b757600080fd5b815163ffffffff811681146200019d57600080fd5b60805160a051611b06620001f9600039600061023c0152600081816103050152610bbf0152611b066000f3fe608060405234801561001057600080fd5b50600436106101505760003560e01c80638d3638f4116100cd578063d5438eae11610081578063f2fde38b11610066578063f2fde38b14610347578063f7e83aee1461035a578063fbc69aab1461037d57600080fd5b8063d5438eae14610300578063de523cf31461032757600080fd5b806393c44847116100b257806393c44847146102915780639d8ecd85146102da578063c4d66de8146102ed57600080fd5b80638d3638f4146102375780638da5cb5b1461027357600080fd5b8063440df4f4116101245780636465e69f116101095780636465e69f146101f5578063715018a61461020f5780637f5a7c7b1461021757600080fd5b8063440df4f4146101cd5780634c0a2ffc146101e257600080fd5b8062d84fd8146101555780630e72cc061461016a57806315ce45a21461017d5780633dfd3873146101ba575b600080fd5b61016861016336600461154f565b610390565b005b61016861017836600461158c565b6103a4565b61019061018b3660046115f2565b6104bf565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101686101c836600461158c565b6104d7565b6101d56105ed565b6040516101b19190611634565b6101686101f0366004611678565b6105fe565b6101fd600181565b60405160ff90911681526020016101b1565b610168610614565b6068546101909073ffffffffffffffffffffffffffffffffffffffff1681565b61025e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101b1565b60335473ffffffffffffffffffffffffffffffffffffffff16610190565b6102cd6040518060400160405280600581526020017f352e362e3100000000000000000000000000000000000000000000000000000081525081565b6040516101b191906116d3565b6101686102e8366004611769565b610628565b6101686102fb36600461158c565b6108a5565b6101907f000000000000000000000000000000000000000000000000000000000000000081565b6069546101909073ffffffffffffffffffffffffffffffffffffffff1681565b61016861035536600461158c565b610a40565b61036d6103683660046117ec565b610af4565b60405190151581526020016101b1565b61019061038b36600461154f565b610b8a565b610398610c53565b6103a181610cd4565b50565b8073ffffffffffffffffffffffffffffffffffffffff81163b1515806103de575073ffffffffffffffffffffffffffffffffffffffff8116155b61046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d61696c626f78436c69656e743a20696e76616c696420636f6e74726163742060448201527f73657474696e670000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610477610c53565b50606980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006104ce61038b8484610d29565b90505b92915050565b8073ffffffffffffffffffffffffffffffffffffffff81163b151580610511575073ffffffffffffffffffffffffffffffffffffffff8116155b61059d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d61696c626f78436c69656e743a20696e76616c696420636f6e74726163742060448201527f73657474696e67000000000000000000000000000000000000000000000000006064820152608401610466565b6105a5610c53565b50606880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606105f96065610d4c565b905090565b610606610c53565b6106108282610de7565b5050565b61061c610c53565b6106266000610e8d565b565b600054610100900460ff16158080156106485750600054600160ff909116105b806106625750303b158015610662575060005460ff166001145b6106ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610466565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561074c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610754610f04565b8382146107bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6c656e677468206d69736d6174636800000000000000000000000000000000006044820152606401610466565b8360005b8181101561082f5761081f8787838181106107de576107de611858565b90506020020160208101906107f3919061154f565b86868481811061080557610805611858565b905060200201602081019061081a919061158c565b610de7565b610828816118b6565b90506107c1565b5061083987610e8d565b50801561089d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b600054610100900460ff16158080156108c55750600054600160ff909116105b806108df5750303b1580156108df575060005460ff166001145b61096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610466565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156109c957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109d1610f04565b6109da82610e8d565b801561061057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610a48610c53565b73ffffffffffffffffffffffffffffffffffffffff8116610aeb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610466565b6103a181610e8d565b6000610b0083836104bf565b73ffffffffffffffffffffffffffffffffffffffff1663f7e83aee868686866040518563ffffffff1660e01b8152600401610b3e9493929190611937565b6020604051808303816000875af1158015610b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b819190611969565b95945050505050565b60008080610ba2606563ffffffff80871690610fa316565b915091508115610bbd57610bb581610fbc565b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e5f516e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb5919061198b565b5050919050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610466565b610ce8606563ffffffff8084169061106516565b610cf182611071565b90610610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046691906116d3565b6000610d396009600584866119a8565b610d42916119d2565b60e01c9392505050565b60606000610d59836110a8565b90508067ffffffffffffffff811115610d7457610d74611a1a565b604051908082528060200260200182016040528015610d9d578160200160208202803683370190505b50915060005b81811015610c4c57610db584826110b3565b60001c838281518110610dca57610dca611858565b602090810291909101015280610ddf816118b6565b915050610da3565b73ffffffffffffffffffffffffffffffffffffffff81163b610e65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f49534d206d757374206265206120636f6e7472616374000000000000000000006044820152606401610466565b610610606563ffffffff841673ffffffffffffffffffffffffffffffffffffffff84166110bf565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610f9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610466565b6106266110d0565b600080610fb08484611170565b915091505b9250929050565b600073ffffffffffffffffffffffffffffffffffffffff821115611061576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5479706543617374733a2062797465733332546f41646472657373206f76657260448201527f666c6f77000000000000000000000000000000000000000000000000000000006064820152608401610466565b5090565b60006104ce83836111aa565b60606110828263ffffffff166111c7565b6040516020016110929190611a49565b6040516020818303038152906040529050919050565b60006104d182611285565b60006104ce838361128f565b6110ca8383836112b9565b50505050565b600054610100900460ff16611167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610466565b61062633610e8d565b600081815260028301602052604081205481908061119f5761119285856112d6565b925060009150610fb59050565b600192509050610fb5565b600081815260028301602052604081208190556104ce83836112e2565b606060006111d4836112ee565b600101905060008167ffffffffffffffff8111156111f4576111f4611a1a565b6040519080825280601f01601f19166020018201604052801561121e576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461122857509392505050565b60006104d1825490565b60008260000182815481106112a6576112a6611858565b9060005260206000200154905092915050565b60008281526002840160205260408120829055610bb584846113d0565b60006104ce83836113dc565b60006104ce83836113f4565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611337577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611363576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061138157662386f26fc10000830492506010015b6305f5e1008310611399576305f5e100830492506008015b61271083106113ad57612710830492506004015b606483106113bf576064830492506002015b600a83106104d15760010192915050565b60006104ce83836114e7565b600081815260018301602052604081205415156104ce565b600081815260018301602052604081205480156114dd576000611418600183611a8e565b855490915060009061142c90600190611a8e565b905081811461149157600086600001828154811061144c5761144c611858565b906000526020600020015490508087600001848154811061146f5761146f611858565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806114a2576114a2611aa1565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506104d1565b60009150506104d1565b600081815260018301602052604081205461152e575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556104d1565b5060006104d1565b803563ffffffff8116811461154a57600080fd5b919050565b60006020828403121561156157600080fd5b6104ce82611536565b73ffffffffffffffffffffffffffffffffffffffff811681146103a157600080fd5b60006020828403121561159e57600080fd5b81356115a98161156a565b9392505050565b60008083601f8401126115c257600080fd5b50813567ffffffffffffffff8111156115da57600080fd5b602083019150836020828501011115610fb557600080fd5b6000806020838503121561160557600080fd5b823567ffffffffffffffff81111561161c57600080fd5b611628858286016115b0565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561166c57835183529284019291840191600101611650565b50909695505050505050565b6000806040838503121561168b57600080fd5b61169483611536565b915060208301356116a48161156a565b809150509250929050565b60005b838110156116ca5781810151838201526020016116b2565b50506000910152565b60208152600082518060208401526116f28160408501602087016116af565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008083601f84011261173657600080fd5b50813567ffffffffffffffff81111561174e57600080fd5b6020830191508360208260051b8501011115610fb557600080fd5b60008060008060006060868803121561178157600080fd5b853561178c8161156a565b9450602086013567ffffffffffffffff808211156117a957600080fd5b6117b589838a01611724565b909650945060408801359150808211156117ce57600080fd5b506117db88828901611724565b969995985093965092949392505050565b6000806000806040858703121561180257600080fd5b843567ffffffffffffffff8082111561181a57600080fd5b611826888389016115b0565b9096509450602087013591508082111561183f57600080fd5b5061184c878288016115b0565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036118e7576118e7611887565b5060010190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60408152600061194b6040830186886118ee565b828103602084015261195e8185876118ee565b979650505050505050565b60006020828403121561197b57600080fd5b815180151581146115a957600080fd5b60006020828403121561199d57600080fd5b81516115a98161156a565b600080858511156119b857600080fd5b838611156119c557600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a125780818660040360031b1b83161692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e6f2049534d20666f756e6420666f72206f726967696e3a2000000000000000815260008251611a818160198501602087016116af565b9190910160190192915050565b818103818111156104d1576104d1611887565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220212814ecc5885f2fdfbd538ab5adb27327a99bbb121710f8bd04a9079dff7fef64736f6c6343000813003300000000000000000000000050da3b3907a08a24fe4999f4dcf337e8dc7954bb