ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8gICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CgpSRUFETUUKCiAgQ3VybCBpcyBhIGNvbW1hbmQgbGluZSB0b29sIGZvciB0cmFuc2ZlcmluZyBkYXRhIHNwZWNpZmllZCB3aXRoIFVSTAogIHN5bnRheC4gRmluZCBvdXQgaG93IHRvIHVzZSBDdXJsIGJ5IHJlYWRpbmcgdGhlIGN1cmwuMSBtYW4gcGFnZSBvciB0aGUKICBNQU5VQUwgZG9jdW1lbnQuIEZpbmQgb3V0IGhvdyB0byBpbnN0YWxsIEN1cmwgYnkgcmVhZGluZyB0aGUgSU5TVEFMTAogIGRvY3VtZW50LgoKICBsaWJjdXJsIGlzIHRoZSBsaWJyYXJ5IGN1cmwgaXMgdXNpbmcgdG8gZG8gaXRzIGpvYi4gSXQgaXMgcmVhZGlseQogIGF2YWlsYWJsZSB0byBiZSB1c2VkIGJ5IHlvdXIgc29mdHdhcmUuIFJlYWQgdGhlIGxpYmN1cmwuMyBtYW4gcGFnZSB0bwogIGxlYXJuIGhvdyEKCiAgWW91IGZpbmQgYW5zd2VycyB0byB0aGUgbW9zdCBmcmVxdWVudCBxdWVzdGlvbnMgd2UgZ2V0IGluIHRoZSBGQVEgZG9jdW1lbnQuCgogIFN0dWR5IHRoZSBDT1BZSU5HIGZpbGUgZm9yIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhbmQgc2ltaWxhci4KCkNPTlRBQ1QKCiAgSWYgeW91IGhhdmUgcHJvYmxlbXMsIHF1ZXN0aW9ucywgaWRlYXMgb3Igc3VnZ2VzdGlvbnMsIHBsZWFzZSBjb250YWN0IHVzCiAgYnkgcG9zdGluZyB0byBhIHN1aXRhYmxlIG1haWxpbmcgbGlzdC4gU2VlIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC8KCiAgTWFueSBtYWpvciBjb250cmlidXRvcnMgdG8gdGhlIHByb2plY3QgYXJlIGxpc3RlZCBpbiB0aGUgVEhBTktTIGRvY3VtZW50LgoKV0VCIFNJVEUKCiAgVmlzaXQgdGhlIGN1cmwgd2ViIHNpdGUgb3IgbWlycm9ycyBmb3IgdGhlIGxhdGVzdCBuZXdzOgoKICAgICAgICBTd2VkZW4gICAgLS0gaHR0cDovL2N1cmwuaGF4eC5zZS8KICAgICAgICBSdXNzaWEgICAgLS0gaHR0cDovL2N1cmwudHN1cmVuLm5ldC8KICAgICAgICBVUyAgICAgICAgLS0gaHR0cDovL2N1cmwuc2YubmV0LwogICAgICAgIEF1c3RyYWxpYSAtLSBodHRwOi8vY3VybC5wbGFuZXRtaXJyb3IuY29tLwoKRE9XTkxPQUQKCiAgVGhlIG9mZmljaWFsIGRvd25sb2FkIG1pcnJvciBzaXRlcyBhcmU6CgogICAgICAgIFN3ZWRlbiAgICAtLSBmdHA6Ly9mdHAuc3VuZXQuc2UvcHViL3d3dy91dGlsaXRpZXMvY3VybC8KICAgICAgICBTd2VkZW4gICAgLS0gaHR0cDovL2Nvb2wuaGF4eC5zZS9jdXJsLwogICAgICAgIEdlcm1hbnkgICAtLSBmdHA6Ly9mdHAuZnUtYmVybGluLmRlL3B1Yi91bml4L25ldHdvcmsvY3VybC8KICAgICAgICBBdXN0cmFsaWEgLS0gaHR0cDovL2N1cmwucGxhbmV0bWlycm9yLmNvbS9kb3dubG9hZC8KICAgICAgICBVUyAgICAgICAgLS0gaHR0cDovL2N1cmwuc291cmNlZm9yZ2UubmV0L2Rvd25sb2FkLwogICAgICAgIEhvbmdrb25nICAtLSBodHRwOi8vd3d3LmV4ZWN2ZS5uZXQvY3VybC8KICAgICAgICBSdXNzaWEgICAgLS0gaHR0cDovL2N1cmwudHN1cmVuLm5ldC9kb3dubG9hZC8KCkNWUwoKICBUbyBkb3dubG9hZCB0aGUgdmVyeSBsYXRlc3Qgc291cmNlIG9mZiB0aGUgQ1ZTIHNlcnZlciBkbyB0aGlzOgoKICAgIGN2cyAtZCA6cHNlcnZlcjpjdnNyZWFkQGN2cy5waHAubmV0Oi9yZXBvc2l0b3J5IGxvZ2luCgogIChlbnRlciAicGhwZmkiIHdoZW4gYXNrZWQgZm9yIHBhc3N3b3JkKQoKICAgIGN2cyAtZCA6cHNlcnZlcjpjdnNyZWFkQGN2cy5waHAubmV0Oi9yZXBvc2l0b3J5IGNvIGN1cmwgCgogICh5b3UnbGwgZ2V0IGEgZGlyZWN0b3J5IG5hbWVkIGN1cmwgY3JlYXRlZCwgZmlsbGVkIHdpdGggdGhlIHNvdXJjZSBjb2RlKQoKICAgIGN2cyAtZCA6cHNlcnZlcjpjdnNyZWFkQGN2cy5waHAubmV0Oi9yZXBvc2l0b3J5IGxvZ291dAogICAgICAgIAogICh5b3UncmUgb2ZmIHRoZSBob29rISkKCk5PVElDRQoKICBDdXJsIGNvbnRhaW5zIHBpZWNlcyBvZiBzb3VyY2UgY29kZSB0aGF0IGlzIENvcHlyaWdodCAoYykgMTk5OCwgMTk5OQogIEt1bmdsaWdhIFRla25pc2thIEj2Z3Nrb2xhbi4gVGhpcyBub3RpY2UgaXMgaW5jbHVkZWQgaGVyZSB0byBjb21wbHkgd2l0aCB0aGUKICBkaXN0cmlidXRpb24gdGVybXMuCg==