0x608060405234801561001057600080fd5b50610c77806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630121b93f1461005c57806309eef43e146100785780633477ee2e146100a8578063462e91ec146100d9578063b2c2f2e8146100f5575b600080fd5b6100766004803603810190610071919061048f565b610125565b005b610092600480360381019061008d919061051a565b61028e565b60405161009f9190610562565b60405180910390f35b6100c260048036038101906100bd919061048f565b6102ae565b6040516100d092919061061c565b60405180910390f35b6100f360048036038101906100ee9190610781565b61036a565b005b61010f600480360381019061010a919061048f565b6103d0565b60405161011c91906107ca565b60405180910390f35b600080549050811061016c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161016390610831565b60405180910390fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156101f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f09061089d565b60405180910390fd5b6000818154811061020d5761020c6108bd565b5b9060005260206000209060020201600101600081548092919061022f9061091b565b919050555060018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60016020528060005260406000206000915054906101000a900460ff1681565b600081815481106102be57600080fd5b90600052602060002090600202016000915090508060000180546102e190610992565b80601f016020809104026020016040519081016040528092919081815260200182805461030d90610992565b801561035a5780601f1061032f5761010080835404028352916020019161035a565b820191906000526020600020905b81548152906001019060200180831161033d57829003601f168201915b5050505050908060010154905082565b600060405180604001604052808381526020016000815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000190816103c09190610b6f565b5060208201518160010155505050565b600080805490508210610418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040f90610831565b60405180910390fd5b6000828154811061042c5761042b6108bd565b5b9060005260206000209060020201600101549050919050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61046c81610459565b811461047757600080fd5b50565b60008135905061048981610463565b92915050565b6000602082840312156104a5576104a461044f565b5b60006104b38482850161047a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104e7826104bc565b9050919050565b6104f7816104dc565b811461050257600080fd5b50565b600081359050610514816104ee565b92915050565b6000602082840312156105305761052f61044f565b5b600061053e84828501610505565b91505092915050565b60008115159050919050565b61055c81610547565b82525050565b60006020820190506105776000830184610553565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156105b757808201518184015260208101905061059c565b60008484015250505050565b6000601f19601f8301169050919050565b60006105df8261057d565b6105e98185610588565b93506105f9818560208601610599565b610602816105c3565b840191505092915050565b61061681610459565b82525050565b6000604082019050818103600083015261063681856105d4565b9050610645602083018461060d565b9392505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61068e826105c3565b810181811067ffffffffffffffff821117156106ad576106ac610656565b5b80604052505050565b60006106c0610445565b90506106cc8282610685565b919050565b600067ffffffffffffffff8211156106ec576106eb610656565b5b6106f5826105c3565b9050602081019050919050565b82818337600083830152505050565b600061072461071f846106d1565b6106b6565b9050828152602081018484840111156107405761073f610651565b5b61074b848285610702565b509392505050565b600082601f8301126107685761076761064c565b5b8135610778848260208601610711565b91505092915050565b6000602082840312156107975761079661044f565b5b600082013567ffffffffffffffff8111156107b5576107b4610454565b5b6107c184828501610753565b91505092915050565b60006020820190506107df600083018461060d565b92915050565b7f496e76616c69642063616e64696461746520696e646578000000000000000000600082015250565b600061081b601783610588565b9150610826826107e5565b602082019050919050565b6000602082019050818103600083015261084a8161080e565b9050919050565b7f416c726561647920766f74656400000000000000000000000000000000000000600082015250565b6000610887600d83610588565b915061089282610851565b602082019050919050565b600060208201905081810360008301526108b68161087a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061092682610459565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610958576109576108ec565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806109aa57607f821691505b6020821081036109bd576109bc610963565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302610a257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826109e8565b610a2f86836109e8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000610a6c610a67610a6284610459565b610a47565b610459565b9050919050565b6000819050919050565b610a8683610a51565b610a9a610a9282610a73565b8484546109f5565b825550505050565b600090565b610aaf610aa2565b610aba818484610a7d565b505050565b5b81811015610ade57610ad3600082610aa7565b600181019050610ac0565b5050565b601f821115610b2357610af4816109c3565b610afd846109d8565b81016020851015610b0c578190505b610b20610b18856109d8565b830182610abf565b50505b505050565b600082821c905092915050565b6000610b4660001984600802610b28565b1980831691505092915050565b6000610b5f8383610b35565b9150826002028217905092915050565b610b788261057d565b67ffffffffffffffff811115610b9157610b90610656565b5b610b9b8254610992565b610ba6828285610ae2565b600060209050601f831160018114610bd95760008415610bc7578287015190505b610bd18582610b53565b865550610c39565b601f198416610be7866109c3565b60005b82811015610c0f57848901518255600182019150602085019450602081019050610bea565b86831015610c2c5784890151610c28601f891682610b35565b8355505b6001600288020188555050505b50505050505056fea264697066735822122094b422f9c049d053135aef43a7f9677b6ffe671f5e2624417de6a9e89f8afff664736f6c63430008120033