0x60c06040523480156200001157600080fd5b5060405162001d5638038062001d56833981016040819052620000349162000172565b80806001600160a01b0381163b620000925760405162461bcd60e51b815260206004820152601e60248201527f4d61696c626f78436c69656e743a20696e76616c6964206d61696c626f780000604482015260640160405180910390fd5b6001600160a01b03821660808190526040805163234d8e3d60e21b81529051638d3638f4916004808201926020929091908290030181865afa158015620000dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001039190620001a4565b63ffffffff1660a052620001173362000120565b505050620001cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200018557600080fd5b81516001600160a01b03811681146200019d57600080fd5b9392505050565b600060208284031215620001b757600080fd5b815163ffffffff811681146200019d57600080fd5b60805160a051611b5d620001f9600039600061023c0152600081816103050152610c160152611b5d6000f3fe608060405234801561001057600080fd5b50600436106101505760003560e01c80638d3638f4116100cd578063d5438eae11610081578063f2fde38b11610066578063f2fde38b14610347578063f7e83aee1461035a578063fbc69aab1461037d57600080fd5b8063d5438eae14610300578063de523cf31461032757600080fd5b806393c44847116100b257806393c44847146102915780639d8ecd85146102da578063c4d66de8146102ed57600080fd5b80638d3638f4146102375780638da5cb5b1461027357600080fd5b8063440df4f4116101245780636465e69f116101095780636465e69f146101f5578063715018a61461020f5780637f5a7c7b1461021757600080fd5b8063440df4f4146101cd5780634c0a2ffc146101e257600080fd5b8062d84fd8146101555780630e72cc061461016a57806315ce45a21461017d5780633dfd3873146101ba575b600080fd5b6101686101633660046115a6565b610390565b005b6101686101783660046115e3565b6103a4565b61019061018b366004611649565b6104f2565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101686101c83660046115e3565b61050a565b6101d561064b565b6040516101b1919061168b565b6101686101f03660046116cf565b61065c565b6101fd600181565b60405160ff90911681526020016101b1565b610168610672565b6068546101909073ffffffffffffffffffffffffffffffffffffffff1681565b61025e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101b1565b60335473ffffffffffffffffffffffffffffffffffffffff16610190565b6102cd6040518060400160405280600581526020017f352e382e3300000000000000000000000000000000000000000000000000000081525081565b6040516101b1919061172a565b6101686102e83660046117c0565b610686565b6101686102fb3660046115e3565b610903565b6101907f000000000000000000000000000000000000000000000000000000000000000081565b6069546101909073ffffffffffffffffffffffffffffffffffffffff1681565b6101686103553660046115e3565b610a97565b61036d610368366004611843565b610b4b565b60405190151581526020016101b1565b61019061038b3660046115a6565b610be1565b610398610caa565b6103a181610d2b565b50565b8073ffffffffffffffffffffffffffffffffffffffff81163b1515806103de575073ffffffffffffffffffffffffffffffffffffffff8116155b61046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d61696c626f78436c69656e743a20696e76616c696420636f6e74726163742060448201527f73657474696e670000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610477610caa565b606980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fc47cbcc588c67679e52261c45cc315e56562f8d0ccaba16facb9093ff9498799906020015b60405180910390a15050565b600061050161038b8484610d80565b90505b92915050565b8073ffffffffffffffffffffffffffffffffffffffff81163b151580610544575073ffffffffffffffffffffffffffffffffffffffff8116155b6105d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d61696c626f78436c69656e743a20696e76616c696420636f6e74726163742060448201527f73657474696e67000000000000000000000000000000000000000000000000006064820152608401610466565b6105d8610caa565b606880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527f4eab7b127c764308788622363ad3e9532de3dfba7845bd4f84c125a22544255a906020016104e6565b60606106576065610da3565b905090565b610664610caa565b61066e8282610e3e565b5050565b61067a610caa565b6106846000610ee4565b565b600054610100900460ff16158080156106a65750600054600160ff909116105b806106c05750303b1580156106c0575060005460ff166001145b61074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610466565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156107aa57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6107b2610f5b565b83821461081b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6c656e677468206d69736d6174636800000000000000000000000000000000006044820152606401610466565b8360005b8181101561088d5761087d87878381811061083c5761083c6118af565b905060200201602081019061085191906115a6565b868684818110610863576108636118af565b905060200201602081019061087891906115e3565b610e3e565b6108868161190d565b905061081f565b5061089787610ee4565b5080156108fb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b600054610100900460ff16158080156109235750600054600160ff909116105b8061093d5750303b15801561093d575060005460ff166001145b6109c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610466565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610a2757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610a2f610f5b565b610a3882610ee4565b801561066e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016104e6565b610a9f610caa565b73ffffffffffffffffffffffffffffffffffffffff8116610b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610466565b6103a181610ee4565b6000610b5783836104f2565b73ffffffffffffffffffffffffffffffffffffffff1663f7e83aee868686866040518563ffffffff1660e01b8152600401610b95949392919061198e565b6020604051808303816000875af1158015610bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd891906119c0565b95945050505050565b60008080610bf9606563ffffffff80871690610ffa16565b915091508115610c1457610c0c81611013565b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e5f516e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c91906119e2565b5050919050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610466565b610d3f606563ffffffff808416906110bc16565b610d48826110c8565b9061066e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610466919061172a565b6000610d906009600584866119ff565b610d9991611a29565b60e01c9392505050565b60606000610db0836110ff565b90508067ffffffffffffffff811115610dcb57610dcb611a71565b604051908082528060200260200182016040528015610df4578160200160208202803683370190505b50915060005b81811015610ca357610e0c848261110a565b60001c838281518110610e2157610e216118af565b602090810291909101015280610e368161190d565b915050610dfa565b73ffffffffffffffffffffffffffffffffffffffff81163b610ebc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f49534d206d757374206265206120636f6e7472616374000000000000000000006044820152606401610466565b61066e606563ffffffff841673ffffffffffffffffffffffffffffffffffffffff8416611116565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610ff2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610466565b610684611127565b60008061100784846111c7565b915091505b9250929050565b600073ffffffffffffffffffffffffffffffffffffffff8211156110b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5479706543617374733a2062797465733332546f41646472657373206f76657260448201527f666c6f77000000000000000000000000000000000000000000000000000000006064820152608401610466565b5090565b60006105018383611201565b60606110d98263ffffffff1661121e565b6040516020016110e99190611aa0565b6040516020818303038152906040529050919050565b6000610504826112dc565b600061050183836112e6565b611121838383611310565b50505050565b600054610100900460ff166111be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610466565b61068433610ee4565b60008181526002830160205260408120548190806111f6576111e9858561132d565b92506000915061100c9050565b60019250905061100c565b600081815260028301602052604081208190556105018383611339565b6060600061122b83611345565b600101905060008167ffffffffffffffff81111561124b5761124b611a71565b6040519080825280601f01601f191660200182016040528015611275576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461127f57509392505050565b6000610504825490565b60008260000182815481106112fd576112fd6118af565b9060005260206000200154905092915050565b60008281526002840160205260408120829055610c0c8484611427565b60006105018383611433565b6000610501838361144b565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061138e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106113ba576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106113d857662386f26fc10000830492506010015b6305f5e10083106113f0576305f5e100830492506008015b612710831061140457612710830492506004015b60648310611416576064830492506002015b600a83106105045760010192915050565b6000610501838361153e565b60008181526001830160205260408120541515610501565b6000818152600183016020526040812054801561153457600061146f600183611ae5565b855490915060009061148390600190611ae5565b90508181146114e85760008660000182815481106114a3576114a36118af565b90600052602060002001549050808760000184815481106114c6576114c66118af565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806114f9576114f9611af8565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610504565b6000915050610504565b600081815260018301602052604081205461158557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610504565b506000610504565b803563ffffffff811681146115a157600080fd5b919050565b6000602082840312156115b857600080fd5b6105018261158d565b73ffffffffffffffffffffffffffffffffffffffff811681146103a157600080fd5b6000602082840312156115f557600080fd5b8135611600816115c1565b9392505050565b60008083601f84011261161957600080fd5b50813567ffffffffffffffff81111561163157600080fd5b60208301915083602082850101111561100c57600080fd5b6000806020838503121561165c57600080fd5b823567ffffffffffffffff81111561167357600080fd5b61167f85828601611607565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156116c3578351835292840192918401916001016116a7565b50909695505050505050565b600080604083850312156116e257600080fd5b6116eb8361158d565b915060208301356116fb816115c1565b809150509250929050565b60005b83811015611721578181015183820152602001611709565b50506000910152565b6020815260008251806020840152611749816040850160208701611706565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008083601f84011261178d57600080fd5b50813567ffffffffffffffff8111156117a557600080fd5b6020830191508360208260051b850101111561100c57600080fd5b6000806000806000606086880312156117d857600080fd5b85356117e3816115c1565b9450602086013567ffffffffffffffff8082111561180057600080fd5b61180c89838a0161177b565b9096509450604088013591508082111561182557600080fd5b506118328882890161177b565b969995985093965092949392505050565b6000806000806040858703121561185957600080fd5b843567ffffffffffffffff8082111561187157600080fd5b61187d88838901611607565b9096509450602087013591508082111561189657600080fd5b506118a387828801611607565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361193e5761193e6118de565b5060010190565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040815260006119a2604083018688611945565b82810360208401526119b5818587611945565b979650505050505050565b6000602082840312156119d257600080fd5b8151801515811461160057600080fd5b6000602082840312156119f457600080fd5b8151611600816115c1565b60008085851115611a0f57600080fd5b83861115611a1c57600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a695780818660040360031b1b83161692505b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e6f2049534d20666f756e6420666f72206f726967696e3a2000000000000000815260008251611ad8816019850160208701611706565b9190910160190192915050565b81810381811115610504576105046118de565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212203d7731afa2437872a9134b8a3f7afa8e90ff1adb79450f807d3f3e8ca448c43064736f6c63430008130033000000000000000000000000ea87ae93fa0019a82a727bfd3ebd1cfca8f64f1d