608060405234801561000f575f5ffd5b50336040518060400160405280600981526020017f4f726520546f6b656e00000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4f52450000000000000000000000000000000000000000000000000000000000815250816003908161008c9190610493565b50806004908161009c9190610493565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361010f575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161010691906105a1565b60405180910390fd5b61011e8161019360201b60201c565b5073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16634e606c476040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610178575f5ffd5b505af115801561018a573d5f5f3e3d5ffd5b505050506105ba565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806102d157607f821691505b6020821081036102e4576102e361028d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103467fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261030b565b610350868361030b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61039461038f61038a84610368565b610371565b610368565b9050919050565b5f819050919050565b6103ad8361037a565b6103c16103b98261039b565b848454610317565b825550505050565b5f5f905090565b6103d86103c9565b6103e38184846103a4565b505050565b5b81811015610406576103fb5f826103d0565b6001810190506103e9565b5050565b601f82111561044b5761041c816102ea565b610425846102fc565b81016020851015610434578190505b610448610440856102fc565b8301826103e8565b50505b505050565b5f82821c905092915050565b5f61046b5f1984600802610450565b1980831691505092915050565b5f610483838361045c565b9150826002028217905092915050565b61049c82610256565b67ffffffffffffffff8111156104b5576104b4610260565b5b6104bf82546102ba565b6104ca82828561040a565b5f60209050601f8311600181146104fb575f84156104e9578287015190505b6104f38582610478565b86555061055a565b601f198416610509866102ea565b5f5b828110156105305784890151825560018201915060208501945060208101905061050b565b8683101561054d5784890151610549601f89168261045c565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61058b82610562565b9050919050565b61059b81610581565b82525050565b5f6020820190506105b45f830184610592565b92915050565b611621806105c75f395ff3fe608060405234801561000f575f5ffd5b506004361061011f575f3560e01c806367561d93116100ab57806397d757761161006f57806397d75776146102cd578063a9059cbb146102eb578063d5b9221b1461031b578063dd62ed3e1461034b578063f2fde38b1461037b5761011f565b806367561d931461023b57806370a0823114610257578063715018a6146102875780638da5cb5b1461029157806395d89b41146102af5761011f565b80632eda2089116100f25780632eda2089146101bf578063313ce567146101db57806340c10f19146101f957806342966c6814610215578063645dd1fa146102315761011f565b806306fdde0314610123578063095ea7b31461014157806318160ddd1461017157806323b872dd1461018f575b5f5ffd5b61012b610397565b604051610138919061112d565b60405180910390f35b61015b600480360381019061015691906111de565b610427565b6040516101689190611236565b60405180910390f35b610179610449565b604051610186919061125e565b60405180910390f35b6101a960048036038101906101a49190611277565b610452565b6040516101b69190611236565b60405180910390f35b6101d960048036038101906101d491906112c7565b610480565b005b6101e36104df565b6040516101f0919061130d565b60405180910390f35b610213600480360381019061020e91906111de565b6104e7565b005b61022f600480360381019061022a9190611326565b61057e565b005b61023961058b565b005b610255600480360381019061025091906112c7565b610625565b005b610271600480360381019061026c91906112c7565b610685565b60405161027e919061125e565b60405180910390f35b61028f6106ca565b005b6102996106dd565b6040516102a69190611360565b60405180910390f35b6102b7610705565b6040516102c4919061112d565b60405180910390f35b6102d5610795565b6040516102e291906113d4565b60405180910390f35b610305600480360381019061030091906111de565b6107ad565b6040516103129190611236565b60405180910390f35b610335600480360381019061033091906112c7565b6107cf565b6040516103429190611236565b60405180910390f35b610365600480360381019061036091906113ed565b6107ec565b604051610372919061125e565b60405180910390f35b610395600480360381019061039091906112c7565b61086e565b005b6060600380546103a690611458565b80601f01602080910402602001604051908101604052809291908181526020018280546103d290611458565b801561041d5780601f106103f45761010080835404028352916020019161041d565b820191905f5260205f20905b81548152906001019060200180831161040057829003601f168201915b5050505050905090565b5f5f6104316108f2565b905061043e8185856108f9565b600191505092915050565b5f600254905090565b5f5f61045c6108f2565b905061046985828561090b565b61047485858561099d565b60019150509392505050565b610488610a8d565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f6012905090565b60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610570576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610567906114d2565b60405180910390fd5b61057a8282610b14565b5050565b6105883382610b93565b50565b610593610a8d565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663954fa5ee30336040518363ffffffff1660e01b81526004016105e29291906114f0565b6020604051808303815f875af11580156105fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610622919061152b565b50565b61062d610a8d565b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6106d2610a8d565b6106db5f610c12565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461071490611458565b80601f016020809104026020016040519081016040528092919081815260200182805461074090611458565b801561078b5780601f106107625761010080835404028352916020019161078b565b820191905f5260205f20905b81548152906001019060200180831161076e57829003601f168201915b5050505050905090565b73430000000000000000000000000000000000000281565b5f5f6107b76108f2565b90506107c481858561099d565b600191505092915050565b6006602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610876610a8d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108e6575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016108dd9190611360565b60405180910390fd5b6108ef81610c12565b50565b5f33905090565b6109068383836001610cd5565b505050565b5f61091684846107ec565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109975781811015610988578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161097f93929190611556565b60405180910390fd5b61099684848484035f610cd5565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a0d575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a049190611360565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a7d575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610a749190611360565b60405180910390fd5b610a88838383610ea4565b505050565b610a956108f2565b73ffffffffffffffffffffffffffffffffffffffff16610ab36106dd565b73ffffffffffffffffffffffffffffffffffffffff1614610b1257610ad66108f2565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b099190611360565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b84575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610b7b9190611360565b60405180910390fd5b610b8f5f8383610ea4565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c03575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610bfa9190611360565b60405180910390fd5b610c0e825f83610ea4565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610d45575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610d3c9190611360565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610db5575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610dac9190611360565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610e9e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e95919061125e565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ef4578060025f828254610ee891906115b8565b92505081905550610fc2565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610f7d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610f7493929190611556565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611009578060025f8282540392505081905550611053565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110b0919061125e565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6110ff826110bd565b61110981856110c7565b93506111198185602086016110d7565b611122816110e5565b840191505092915050565b5f6020820190508181035f83015261114581846110f5565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61117a82611151565b9050919050565b61118a81611170565b8114611194575f5ffd5b50565b5f813590506111a581611181565b92915050565b5f819050919050565b6111bd816111ab565b81146111c7575f5ffd5b50565b5f813590506111d8816111b4565b92915050565b5f5f604083850312156111f4576111f361114d565b5b5f61120185828601611197565b9250506020611212858286016111ca565b9150509250929050565b5f8115159050919050565b6112308161121c565b82525050565b5f6020820190506112495f830184611227565b92915050565b611258816111ab565b82525050565b5f6020820190506112715f83018461124f565b92915050565b5f5f5f6060848603121561128e5761128d61114d565b5b5f61129b86828701611197565b93505060206112ac86828701611197565b92505060406112bd868287016111ca565b9150509250925092565b5f602082840312156112dc576112db61114d565b5b5f6112e984828501611197565b91505092915050565b5f60ff82169050919050565b611307816112f2565b82525050565b5f6020820190506113205f8301846112fe565b92915050565b5f6020828403121561133b5761133a61114d565b5b5f611348848285016111ca565b91505092915050565b61135a81611170565b82525050565b5f6020820190506113735f830184611351565b92915050565b5f819050919050565b5f61139c61139761139284611151565b611379565b611151565b9050919050565b5f6113ad82611382565b9050919050565b5f6113be826113a3565b9050919050565b6113ce816113b4565b82525050565b5f6020820190506113e75f8301846113c5565b92915050565b5f5f604083850312156114035761140261114d565b5b5f61141085828601611197565b925050602061142185828601611197565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061146f57607f821691505b6020821081036114825761148161142b565b5b50919050565b7f4e6f7420616e20617574686f72697a656420636f6e74726163740000000000005f82015250565b5f6114bc601a836110c7565b91506114c782611488565b602082019050919050565b5f6020820190508181035f8301526114e9816114b0565b9050919050565b5f6040820190506115035f830185611351565b6115106020830184611351565b9392505050565b5f81519050611525816111b4565b92915050565b5f602082840312156115405761153f61114d565b5b5f61154d84828501611517565b91505092915050565b5f6060820190506115695f830186611351565b611576602083018561124f565b611583604083018461124f565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6115c2826111ab565b91506115cd836111ab565b92508282019050808211156115e5576115e461158b565b5b9291505056fea26469706673582212207fea5c4a5269f7d40b027bff5c8531bc586e57378076c3963f1a8d17724360a764736f6c634300081c0033