608060405234801561000f575f80fd5b506040518060400160405280600381526020017f42544300000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4254430000000000000000000000000000000000000000000000000000000000815250816003908161008b91906102dd565b50806004908161009b91906102dd565b5050506103ac565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061011e57607f821691505b602082108103610131576101306100da565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610158565b61019d8683610158565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6101e16101dc6101d7846101b5565b6101be565b6101b5565b9050919050565b5f819050919050565b6101fa836101c7565b61020e610206826101e8565b848454610164565b825550505050565b5f90565b610222610216565b61022d8184846101f1565b505050565b5b81811015610250576102455f8261021a565b600181019050610233565b5050565b601f8211156102955761026681610137565b61026f84610149565b8101602085101561027e578190505b61029261028a85610149565b830182610232565b50505b505050565b5f82821c905092915050565b5f6102b55f198460080261029a565b1980831691505092915050565b5f6102cd83836102a6565b9150826002028217905092915050565b6102e6826100a3565b67ffffffffffffffff8111156102ff576102fe6100ad565b5b6103098254610107565b610314828285610254565b5f60209050601f831160018114610345575f8415610333578287015190505b61033d85826102c2565b8655506103a4565b601f19841661035386610137565b5f5b8281101561037a57848901518255600182019150602085019450602081019050610355565b868310156103975784890151610393601f8916826102a6565b8355505b6001600288020188555050505b505050505050565b611536806103b95f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c8063313ce5671161006f578063313ce5671461017757806340c10f191461019557806370a08231146101b157806395d89b41146101e1578063a9059cbb146101ff578063dd62ed3e1461022f576100a7565b806306fdde03146100ab578063095ea7b3146100c95780631737cf8e146100f957806318160ddd1461012957806323b872dd14610147575b5f80fd5b6100b361025f565b6040516100c09190610e73565b60405180910390f35b6100e360048036038101906100de9190610f24565b6102ef565b6040516100f09190610f7c565b60405180910390f35b610113600480360381019061010e9190610fc8565b610311565b6040516101209190611002565b60405180910390f35b6101316103fd565b60405161013e919061102a565b60405180910390f35b610161600480360381019061015c9190611043565b610406565b60405161016e9190610f7c565b60405180910390f35b61017f610434565b60405161018c91906110ae565b60405180910390f35b6101af60048036038101906101aa9190610f24565b61043c565b005b6101cb60048036038101906101c691906110c7565b61044a565b6040516101d8919061102a565b60405180910390f35b6101e961048f565b6040516101f69190610e73565b60405180910390f35b61021960048036038101906102149190610f24565b61051f565b6040516102269190610f7c565b60405180910390f35b610249600480360381019061024491906110f2565b610541565b604051610256919061102a565b60405180910390f35b60606003805461026e9061115d565b80601f016020809104026020016040519081016040528092919081815260200182805461029a9061115d565b80156102e55780601f106102bc576101008083540402835291602001916102e5565b820191905f5260205f20905b8154815290600101906020018083116102c857829003601f168201915b5050505050905090565b5f806102f96105c3565b90506103068185856105ca565b600191505092915050565b5f600280610322845f1c60206105dc565b604051602001610332919061125b565b60405160208183030381529060405260405161034e91906112cb565b602060405180830381855afa158015610369573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061038c91906112f5565b60405160200161039c9190611340565b6040516020818303038152906040526040516103b891906112cb565b602060405180830381855afa1580156103d3573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906103f691906112f5565b9050919050565b5f600254905090565b5f806104106105c3565b905061041d85828561081a565b6104288585856108ac565b60019150509392505050565b5f6008905090565b610446828261099c565b5050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461049e9061115d565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca9061115d565b80156105155780601f106104ec57610100808354040283529160200191610515565b820191905f5260205f20905b8154815290600101906020018083116104f857829003601f168201915b5050505050905090565b5f806105296105c3565b90506105368185856108ac565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b6105d78383836001610a1b565b505050565b60605f8390505f60028460026105f29190611387565b6105fc91906113c8565b67ffffffffffffffff811115610615576106146113fb565b5b6040519080825280601f01601f1916602001820160405280156106475781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f8151811061067e5761067d611428565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106106e1576106e0611428565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f600185600261071f9190611387565b61072991906113c8565b90505b60018111156107c8577f3031323334353637383961626364656600000000000000000000000000000000600f84166010811061076b5761076a611428565b5b1a60f81b82828151811061078257610781611428565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600483901c9250806107c190611455565b905061072c565b505f821461080f5784846040517fe22e27eb00000000000000000000000000000000000000000000000000000000815260040161080692919061147c565b60405180910390fd5b809250505092915050565b5f6108258484610541565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108a65781811015610897578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161088e939291906114b2565b60405180910390fd5b6108a584848484035f610a1b565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361091c575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161091391906114e7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361098c575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161098391906114e7565b60405180910390fd5b610997838383610bea565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a0c575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a0391906114e7565b60405180910390fd5b610a175f8383610bea565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a8b575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610a8291906114e7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610afb575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610af291906114e7565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610be4578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bdb919061102a565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c3a578060025f828254610c2e91906113c8565b92505081905550610d08565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610cc3578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610cba939291906114b2565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d4f578060025f8282540392505081905550610d99565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610df6919061102a565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610e4582610e03565b610e4f8185610e0d565b9350610e5f818560208601610e1d565b610e6881610e2b565b840191505092915050565b5f6020820190508181035f830152610e8b8184610e3b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ec082610e97565b9050919050565b610ed081610eb6565b8114610eda575f80fd5b50565b5f81359050610eeb81610ec7565b92915050565b5f819050919050565b610f0381610ef1565b8114610f0d575f80fd5b50565b5f81359050610f1e81610efa565b92915050565b5f8060408385031215610f3a57610f39610e93565b5b5f610f4785828601610edd565b9250506020610f5885828601610f10565b9150509250929050565b5f8115159050919050565b610f7681610f62565b82525050565b5f602082019050610f8f5f830184610f6d565b92915050565b5f819050919050565b610fa781610f95565b8114610fb1575f80fd5b50565b5f81359050610fc281610f9e565b92915050565b5f60208284031215610fdd57610fdc610e93565b5b5f610fea84828501610fb4565b91505092915050565b610ffc81610f95565b82525050565b5f6020820190506110155f830184610ff3565b92915050565b61102481610ef1565b82525050565b5f60208201905061103d5f83018461101b565b92915050565b5f805f6060848603121561105a57611059610e93565b5b5f61106786828701610edd565b935050602061107886828701610edd565b925050604061108986828701610f10565b9150509250925092565b5f60ff82169050919050565b6110a881611093565b82525050565b5f6020820190506110c15f83018461109f565b92915050565b5f602082840312156110dc576110db610e93565b5b5f6110e984828501610edd565b91505092915050565b5f806040838503121561110857611107610e93565b5b5f61111585828601610edd565b925050602061112685828601610edd565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061117457607f821691505b60208210810361118757611186611130565b5b50919050565b5f81905092915050565b7f18426974636f696e205369676e6564204d6573736167653a0a000000000000005f82015250565b5f6111cb60198361118d565b91506111d682611197565b601982019050919050565b7f42000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61121560018361118d565b9150611220826111e1565b600182019050919050565b5f61123582610e03565b61123f818561118d565b935061124f818560208601610e1d565b80840191505092915050565b5f611265826111bf565b915061127082611209565b915061127c828461122b565b915081905092915050565b5f81519050919050565b5f81905092915050565b5f6112a582611287565b6112af8185611291565b93506112bf818560208601610e1d565b80840191505092915050565b5f6112d6828461129b565b915081905092915050565b5f815190506112ef81610f9e565b92915050565b5f6020828403121561130a57611309610e93565b5b5f611317848285016112e1565b91505092915050565b5f819050919050565b61133a61133582610f95565b611320565b82525050565b5f61134b8284611329565b60208201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61139182610ef1565b915061139c83610ef1565b92508282026113aa81610ef1565b915082820484148315176113c1576113c061135a565b5b5092915050565b5f6113d282610ef1565b91506113dd83610ef1565b92508282019050808211156113f5576113f461135a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61145f82610ef1565b91505f82036114715761147061135a565b5b600182039050919050565b5f60408201905061148f5f83018561101b565b61149c602083018461101b565b9392505050565b6114ac81610eb6565b82525050565b5f6060820190506114c55f8301866114a3565b6114d2602083018561101b565b6114df604083018461101b565b949350505050565b5f6020820190506114fa5f8301846114a3565b9291505056fea2646970667358221220277d74964620a54de269c3eb72a508ee26c5de69490de8a38806c3f78b6431ca64736f6c634300081a0033