0x6080604052348015600e575f5ffd5b506114fd8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633577b0b8146100595780637207afce14610075578063b48725dd14610091578063bd075b84146100c1578063e06a51a2146100dd575b5f5ffd5b610073600480360381019061006e9190610942565b61010d565b005b61008f600480360381019061008a9190610a3b565b610135565b005b6100ab60048036038101906100a69190610a98565b61032c565b6040516100b89190610b9a565b60405180910390f35b6100db60048036038101906100d69190610a98565b61057a565b005b6100f760048036038101906100f29190610942565b610671565b6040516101049190610b9a565b60405180910390f35b5f8290505b818110156101305761012381610767565b8080600101915050610112565b505050565b7327d14a14e2f31f11f0a5172c025995727c97267873ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146101b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101ae90610c14565b60405180910390fd5b5f732f16386bb37709016023232523ff6d9daf444be390505f5b84849050811015610325575f8585838181106101f0576101ef610c32565b5b90506020020160208101906102059190610c5f565b90508073ffffffffffffffffffffffffffffffffffffffff1663f3fef3a3856102cd8673ffffffffffffffffffffffffffffffffffffffff166370a082318b8b8981811061025657610255610c32565b5b905060200201602081019061026b9190610c5f565b6040518263ffffffff1660e01b81526004016102879190610c99565b602060405180830381865afa1580156102a2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102c69190610cc6565b600161077a565b6040518363ffffffff1660e01b81526004016102ea929190610d00565b5f604051808303815f87803b158015610301575f5ffd5b505af1158015610313573d5f5f3e3d5ffd5b505050505080806001019150506101d1565b5050505050565b60608282905067ffffffffffffffff81111561034b5761034a610d27565b5b6040519080825280602002602001820160405280156103795781602001602082028036833780820191505090505b5090505f732f16386bb37709016023232523ff6d9daf444be390505f5b84849050811015610572578173ffffffffffffffffffffffffffffffffffffffff1663a669b8978686848181106103d0576103cf610c32565b5b90506020020160208101906103e59190610c5f565b6040518263ffffffff1660e01b81526004016104019190610c99565b602060405180830381865afa15801561041c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104409190610cc6565b8273ffffffffffffffffffffffffffffffffffffffff1663adc20b1c87878581811061046f5761046e610c32565b5b90506020020160208101906104849190610c5f565b6040518263ffffffff1660e01b81526004016104a09190610c99565b602060405180830381865afa1580156104bb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104df9190610cc6565b6104e99190610d81565b42106105655784848281811061050257610501610c32565b5b90506020020160208101906105179190610c5f565b83828151811061052a57610529610c32565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b8080600101915050610396565b505092915050565b5f5b8282905081101561066c5782828281811061059a57610599610c32565b5b90506020020160208101906105af9190610c5f565b73ffffffffffffffffffffffffffffffffffffffff1663cd5484ae6040516024016040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161061e9190610e06565b5f604051808303815f865af19150503d805f8114610657576040519150601f19603f3d011682016040523d82523d5f602084013e61065c565b606091505b505050808060010191505061057c565b505050565b6060828261067f9190610e1c565b67ffffffffffffffff81111561069857610697610d27565b5b6040519080825280602002602001820160405280156106c65781602001602082028036833780820191505090505b5090505f5f5f8590505b8481101561075e576106e1816107d2565b91506106ec826107f7565b6106f6575f6106f8565b815b84848061070490610e4f565b95508151811061071757610716610c32565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506106d0565b50505092915050565b5f815f1b905061077681610808565b5050565b5f8282846107889190610e1c565b91508111156107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c390610ee0565b60405180910390fd5b92915050565b5f5f825f1b90505f6107e2610869565b90506107ee82826108be565b92505050919050565b5f5f823b90505f8111915050919050565b5f60405180602001610819906108fa565b6020820181038252601f19601f8201166040525060405160200161083d9190610e06565b60405160208183030381529060405290505f828251602084015ff59050803b610864575f5ffd5b505050565b5f5f6040518060200161087b906108fa565b6020820181038252601f19601f8201166040525060405160200161089f9190610e06565b6040516020818303038152906040529050808051906020012091505090565b5f60ff60f81b3084846040516020016108da9493929190610fb7565b604051602081830303815290604052805190602001205f1c905092915050565b6104c38061100583390190565b5f5ffd5b5f5ffd5b5f819050919050565b6109218161090f565b811461092b575f5ffd5b50565b5f8135905061093c81610918565b92915050565b5f5f6040838503121561095857610957610907565b5b5f6109658582860161092e565b92505060206109768582860161092e565b9150509250929050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f8401126109a1576109a0610980565b5b8235905067ffffffffffffffff8111156109be576109bd610984565b5b6020830191508360208202830111156109da576109d9610988565b5b9250929050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a0a826109e1565b9050919050565b610a1a81610a00565b8114610a24575f5ffd5b50565b5f81359050610a3581610a11565b92915050565b5f5f5f60408486031215610a5257610a51610907565b5b5f84013567ffffffffffffffff811115610a6f57610a6e61090b565b5b610a7b8682870161098c565b93509350506020610a8e86828701610a27565b9150509250925092565b5f5f60208385031215610aae57610aad610907565b5b5f83013567ffffffffffffffff811115610acb57610aca61090b565b5b610ad78582860161098c565b92509250509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610b1581610a00565b82525050565b5f610b268383610b0c565b60208301905092915050565b5f602082019050919050565b5f610b4882610ae3565b610b528185610aed565b9350610b5d83610afd565b805f5b83811015610b8d578151610b748882610b1b565b9750610b7f83610b32565b925050600181019050610b60565b5085935050505092915050565b5f6020820190508181035f830152610bb28184610b3e565b905092915050565b5f82825260208201905092915050565b7f64000000000000000000000000000000000000000000000000000000000000005f82015250565b5f610bfe600183610bba565b9150610c0982610bca565b602082019050919050565b5f6020820190508181035f830152610c2b81610bf2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215610c7457610c73610907565b5b5f610c8184828501610a27565b91505092915050565b610c9381610a00565b82525050565b5f602082019050610cac5f830184610c8a565b92915050565b5f81519050610cc081610918565b92915050565b5f60208284031215610cdb57610cda610907565b5b5f610ce884828501610cb2565b91505092915050565b610cfa8161090f565b82525050565b5f604082019050610d135f830185610c8a565b610d206020830184610cf1565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d8b8261090f565b9150610d968361090f565b9250828201905080821115610dae57610dad610d54565b5b92915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f610de082610db4565b610dea8185610dbe565b9350610dfa818560208601610dc8565b80840191505092915050565b5f610e118284610dd6565b915081905092915050565b5f610e268261090f565b9150610e318361090f565b9250828203905081811115610e4957610e48610d54565b5b92915050565b5f610e598261090f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e8b57610e8a610d54565b5b600182019050919050565b7f64732d6d6174682d7375622d756e646572666c6f7700000000000000000000005f82015250565b5f610eca601583610bba565b9150610ed582610e96565b602082019050919050565b5f6020820190508181035f830152610ef781610ebe565b9050919050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b5f819050919050565b610f43610f3e82610efe565b610f29565b82525050565b5f8160601b9050919050565b5f610f5f82610f49565b9050919050565b5f610f7082610f55565b9050919050565b610f88610f8382610a00565b610f66565b82525050565b5f819050919050565b5f819050919050565b610fb1610fac82610f8e565b610f97565b82525050565b5f610fc28287610f32565b600182019150610fd28286610f77565b601482019150610fe28285610fa0565b602082019150610ff28284610fa0565b6020820191508190509594505050505056fe6080604052348015600e575f5ffd5b506104a78061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063cd5484ae14610038578063f3fef3a314610042575b5f5ffd5b61004061005e565b005b61005c6004803603810190610057919061030e565b610125565b005b732f16386bb37709016023232523ff6d9daf444be373ffffffffffffffffffffffffffffffffffffffff16631249c58b6040516024016040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516100e2919061039e565b5f604051808303815f865af19150503d805f811461011b576040519150601f19603f3d011682016040523d82523d5f602084013e610120565b606091505b505050565b7327d14a14e2f31f11f0a5172c025995727c97267873ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146101a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019e9061040e565b60405180910390fd5b732f16386bb37709016023232523ff6d9daf444be373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040516024016101ea92919061044a565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610238919061039e565b5f604051808303815f865af19150503d805f8114610271576040519150601f19603f3d011682016040523d82523d5f602084013e610276565b606091505b5050505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102aa82610281565b9050919050565b6102ba816102a0565b81146102c4575f5ffd5b50565b5f813590506102d5816102b1565b92915050565b5f819050919050565b6102ed816102db565b81146102f7575f5ffd5b50565b5f81359050610308816102e4565b92915050565b5f5f604083850312156103245761032361027d565b5b5f610331858286016102c7565b9250506020610342858286016102fa565b9150509250929050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6103788261034c565b6103828185610356565b9350610392818560208601610360565b80840191505092915050565b5f6103a9828461036e565b915081905092915050565b5f82825260208201905092915050565b7f64000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6103f86001836103b4565b9150610403826103c4565b602082019050919050565b5f6020820190508181035f830152610425816103ec565b9050919050565b610435816102a0565b82525050565b610444816102db565b82525050565b5f60408201905061045d5f83018561042c565b61046a602083018461043b565b939250505056fea2646970667358221220364962bc23f293179d0251647b747822e04950a527e202bd7f80bd11a4d7ff4b64736f6c634300081c0033a26469706673582212208caf73e8004cb1bae379334ad031d1d55915ef02bb9b41018d41c0e3cd45a9f764736f6c634300081c0033