0x608060405234801561001057600080fd5b50610f96806100206000396000f3fe608060405234801561001057600080fd5b50600436106100615760003560e01c8062fdd58e14610066578063095bcdb6146100965780630e89341c146100b257806318160ddd146100e257806345576f9414610100578063ed4b890e1461011c575b600080fd5b610080600480360381019061007b91906106ef565b610138565b60405161008d919061073e565b60405180910390f35b6100b060048036038101906100ab9190610759565b610192565b005b6100cc60048036038101906100c791906107ac565b6102f5565b6040516100d99190610869565b60405180910390f35b6100ea61039a565b6040516100f7919061073e565b60405180910390f35b61011a600480360381019061011591906109c0565b6103a0565b005b61013660048036038101906101319190610a09565b6104e1565b005b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020541015610224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161021b90610ab1565b60405180910390fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060008282546102839190610b00565b92505081905550806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060008282546102e99190610b34565b92505081905550505050565b606060036000838152602001908152602001600020805461031590610b97565b80601f016020809104026020016040519081016040528092919081815260200182805461034190610b97565b801561038e5780601f106103635761010080835404028352916020019161038e565b820191906000526020600020905b81548152906001019060200180831161037157829003601f168201915b50505050509050919050565b60045481565b600033426040516020016103b5929190610c31565b6040516020818303038152906040528051906020012060001c9050336001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160026000838152602001908152602001600020819055508160036000838152602001908152602001600020908161045b9190610e09565b5060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060008282546104bc9190610b34565b925050819055506001600460008282546104d69190610b34565b925050819055505050565b600080600090505b838110156106415733428260405160200161050693929190610edb565b6040516020818303038152906040528051906020012060001c9150336001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016002600084815260200190815260200160002081905550826003600084815260200190815260200160002090816105ac9190610e09565b5060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600082825461060d9190610b34565b925050819055506001600460008282546106279190610b34565b92505081905550808061063990610f18565b9150506104e9565b50505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006106868261065b565b9050919050565b6106968161067b565b81146106a157600080fd5b50565b6000813590506106b38161068d565b92915050565b6000819050919050565b6106cc816106b9565b81146106d757600080fd5b50565b6000813590506106e9816106c3565b92915050565b6000806040838503121561070657610705610651565b5b6000610714858286016106a4565b9250506020610725858286016106da565b9150509250929050565b610738816106b9565b82525050565b6000602082019050610753600083018461072f565b92915050565b60008060006060848603121561077257610771610651565b5b6000610780868287016106a4565b9350506020610791868287016106da565b92505060406107a2868287016106da565b9150509250925092565b6000602082840312156107c2576107c1610651565b5b60006107d0848285016106da565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156108135780820151818401526020810190506107f8565b60008484015250505050565b6000601f19601f8301169050919050565b600061083b826107d9565b61084581856107e4565b93506108558185602086016107f5565b61085e8161081f565b840191505092915050565b600060208201905081810360008301526108838184610830565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6108cd8261081f565b810181811067ffffffffffffffff821117156108ec576108eb610895565b5b80604052505050565b60006108ff610647565b905061090b82826108c4565b919050565b600067ffffffffffffffff82111561092b5761092a610895565b5b6109348261081f565b9050602081019050919050565b82818337600083830152505050565b600061096361095e84610910565b6108f5565b90508281526020810184848401111561097f5761097e610890565b5b61098a848285610941565b509392505050565b600082601f8301126109a7576109a661088b565b5b81356109b7848260208601610950565b91505092915050565b6000602082840312156109d6576109d5610651565b5b600082013567ffffffffffffffff8111156109f4576109f3610656565b5b610a0084828501610992565b91505092915050565b60008060408385031215610a2057610a1f610651565b5b6000610a2e858286016106da565b925050602083013567ffffffffffffffff811115610a4f57610a4e610656565b5b610a5b85828601610992565b9150509250929050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000610a9b6014836107e4565b9150610aa682610a65565b602082019050919050565b60006020820190508181036000830152610aca81610a8e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610b0b826106b9565b9150610b16836106b9565b9250828203905081811115610b2e57610b2d610ad1565b5b92915050565b6000610b3f826106b9565b9150610b4a836106b9565b9250828201905080821115610b6257610b61610ad1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610baf57607f821691505b602082108103610bc257610bc1610b68565b5b50919050565b60008160601b9050919050565b6000610be082610bc8565b9050919050565b6000610bf282610bd5565b9050919050565b610c0a610c058261067b565b610be7565b82525050565b6000819050919050565b610c2b610c26826106b9565b610c10565b82525050565b6000610c3d8285610bf9565b601482019150610c4d8284610c1a565b6020820191508190509392505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302610cbf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610c82565b610cc98683610c82565b95508019841693508086168417925050509392505050565b6000819050919050565b6000610d06610d01610cfc846106b9565b610ce1565b6106b9565b9050919050565b6000819050919050565b610d2083610ceb565b610d34610d2c82610d0d565b848454610c8f565b825550505050565b600090565b610d49610d3c565b610d54818484610d17565b505050565b5b81811015610d7857610d6d600082610d41565b600181019050610d5a565b5050565b601f821115610dbd57610d8e81610c5d565b610d9784610c72565b81016020851015610da6578190505b610dba610db285610c72565b830182610d59565b50505b505050565b600082821c905092915050565b6000610de060001984600802610dc2565b1980831691505092915050565b6000610df98383610dcf565b9150826002028217905092915050565b610e12826107d9565b67ffffffffffffffff811115610e2b57610e2a610895565b5b610e358254610b97565b610e40828285610d7c565b600060209050601f831160018114610e735760008415610e61578287015190505b610e6b8582610ded565b865550610ed3565b601f198416610e8186610c5d565b60005b82811015610ea957848901518255600182019150602085019450602081019050610e84565b86831015610ec65784890151610ec2601f891682610dcf565b8355505b6001600288020188555050505b505050505050565b6000610ee78286610bf9565b601482019150610ef78285610c1a565b602082019150610f078284610c1a565b602082019150819050949350505050565b6000610f23826106b9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610f5557610f54610ad1565b5b60018201905091905056fea26469706673582212203078a1923b50e81e11e6b6ca54bf39a4b5bca245830c6298ee0337d99b299f7864736f6c63430008130033