60806040523480156200001157600080fd5b5060405162001d3f38038062001d3f833981810160405260808110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604090815260208281015192909101518651929450925085918591620001c59160049185019062000363565b508051620001db90600590602084019062000363565b50506006805460ff1916601217905550620001f860008362000239565b620002247f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68362000239565b6200022f8162000249565b50505050620003ff565b6200024582826200025f565b5050565b6006805460ff191660ff92909216919091179055565b6000828152602081815260409091206200028491839062000c5b620002d8821b17901c565b15620002455762000294620002f8565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000620002ef836001600160a01b038416620002fc565b90505b92915050565b3390565b60006200030a83836200034b565b6200034257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620002f2565b506000620002f2565b60009081526001919091016020526040902054151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003a657805160ff1916838001178555620003d6565b82800160010185558215620003d6579182015b82811115620003d6578251825591602001919060010190620003b9565b50620003e4929150620003e8565b5090565b5b80821115620003e45760008155600101620003e9565b611930806200040f6000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806370a08231116100e3578063a457c2d71161008c578063d539139311610066578063d539139314610587578063d547741f1461058f578063dd62ed3e146105c85761018d565b8063a457c2d7146104f8578063a9059cbb14610531578063ca15c8731461056a5761018d565b806391d14854116100bd57806391d14854146104af57806395d89b41146104e8578063a217fddf146104f05761018d565b806370a08231146103f757806379cc67901461042a5780639010d07c146104635761018d565b80632f2ff15d11610145578063395093511161011f578063395093511461036857806340c10f19146103a157806342966c68146103da5761018d565b80632f2ff15d146102d6578063313ce5671461031157806336568abe1461032f5761018d565b806318160ddd1161017657806318160ddd1461025c57806323b872dd14610276578063248a9ca3146102b95761018d565b806306fdde0314610192578063095ea7b31461020f575b600080fd5b61019a610603565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d45781810151838201526020016101bc565b50505050905090810190601f1680156102015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102486004803603604081101561022557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106b7565b604080519115158252519081900360200190f35b6102646106d5565b60408051918252519081900360200190f35b6102486004803603606081101561028c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356106db565b610264600480360360208110156102cf57600080fd5b503561077c565b61030f600480360360408110156102ec57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610791565b005b610319610817565b6040805160ff9092168252519081900360200190f35b61030f6004803603604081101561034557600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610820565b6102486004803603604081101561037e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356108b5565b61030f600480360360408110156103b757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610910565b61030f600480360360208110156103f057600080fd5b503561099b565b6102646004803603602081101561040d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109af565b61030f6004803603604081101561044057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109d7565b6104866004803603604081101561047957600080fd5b5080359060200135610a31565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610248600480360360408110156104c557600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610a50565b61019a610a68565b610264610ae7565b6102486004803603604081101561050e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610aec565b6102486004803603604081101561054757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610b61565b6102646004803603602081101561058057600080fd5b5035610b75565b610264610b8c565b61030f600480360360408110156105a557600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610bb0565b610264600480360360408110156105de57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610c23565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106ad5780601f10610682576101008083540402835291602001916106ad565b820191906000526020600020905b81548152906001019060200180831161069057829003601f168201915b5050505050905090565b60006106cb6106c4610c7d565b8484610c81565b5060015b92915050565b60035490565b60006106e8848484610dc8565b610772846106f4610c7d565b61076d856040518060600160405280602881526020016117f16028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526002602052604081209061073f610c7d565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610f9a565b610c81565b5060019392505050565b60009081526020819052604090206002015490565b6000828152602081905260409020600201546107b4906107af610c7d565b610a50565b610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611728602f913960400191505060405180910390fd5b610813828261104b565b5050565b60065460ff1690565b610828610c7d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806118cc602f913960400191505060405180910390fd5b61081382826110ce565b60006106cb6108c2610c7d565b8461076d85600260006108d3610c7d565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c168152925290205490611151565b61093c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66107af610c7d565b610991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806116f86030913960400191505060405180910390fd5b61081382826111c5565b6109ac6109a6610c7d565b826112f8565b50565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b6000610a0e8260405180606001604052806024815260200161181960249139610a0786610a02610c7d565b610c23565b9190610f9a565b9050610a2283610a1c610c7d565b83610c81565b610a2c83836112f8565b505050565b6000828152602081905260408120610a499083611442565b9392505050565b6000828152602081905260408120610a49908361144e565b60058054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106ad5780601f10610682576101008083540402835291602001916106ad565b600081565b60006106cb610af9610c7d565b8461076d856040518060600160405280602581526020016118a76025913960026000610b23610c7d565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610f9a565b60006106cb610b6e610c7d565b8484610dc8565b60008181526020819052604081206106cf90611470565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b600082815260208190526040902060020154610bce906107af610c7d565b6108ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806117c16030913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205490565b6000610a498373ffffffffffffffffffffffffffffffffffffffff841661147b565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610ced576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806118836024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610d59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806117796022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610e34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061185e6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610ea0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806116d56023913960400191505060405180910390fd5b610eab8383836114c5565b610ef58160405180606001604052806026815260200161179b6026913973ffffffffffffffffffffffffffffffffffffffff86166000908152600160205260409020549190610f9a565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054610f319082611151565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611043576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611008578181015183820152602001610ff0565b50505050905090810190601f1680156110355780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008281526020819052604090206110639082610c5b565b1561081357611070610c7d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020819052604090206110e690826114d0565b15610813576110f3610c7d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b600082820183811015610a4957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821661124757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611253600083836114c5565b6003546112609082611151565b60035573ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546112939082611151565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061183d6021913960400191505060405180910390fd5b611370826000836114c5565b6113ba816040518060600160405280602281526020016117576022913973ffffffffffffffffffffffffffffffffffffffff85166000908152600160205260409020549190610f9a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260409020556003546113ed90826114f2565b60035560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610a498383611534565b6000610a498373ffffffffffffffffffffffffffffffffffffffff84166115b2565b60006106cf826115ca565b600061148783836115b2565b6114bd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106cf565b5060006106cf565b610a2c838383610a2c565b6000610a498373ffffffffffffffffffffffffffffffffffffffff84166115ce565b6000610a4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610f9a565b81546000908210611590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806116b36022913960400191505060405180910390fd5b82600001828154811061159f57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b600081815260018301602052604081205480156116a85783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808301919081019060009087908390811061161f57fe5b906000526020600020015490508087600001848154811061163c57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061166c57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506106cf565b60009150506106cf56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332305072657365744d696e7465723a206d7573742068617665206d696e74657220726f6c6520746f206d696e74416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e7445524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a264697066735822122020fbe61d3f2ecf260eb5c03cd9846527c85806c71a2db848da082c02b54e9e1564736f6c634300060c0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000083efe8cad9437f204db7f726cbd23339dce2ebd50000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003e4254437835204c657665726167656420546f6b656e205553445420436f6c6c61746572616c203137466562323120434f4d504c454d454e5420544f4b454e0000000000000000000000000000000000000000000000000000000000000000001442544378352d555344542d313746656232312d43000000000000000000000000