A/MNCk1crFFjAAAAAAAAAAAFAAAAQAAAAHNNAgAAZAAAWgAAZAEAZAIAbAEAbQIAWgIAAWUCAGQDAGQEAGQFAIMBAQFbAgBkBgBaAwBkBwBaBABkCABaBQBlBABlBQAXWgYAZAkAWgcAZQcAZAoAF2QLABdaCABkDABaCQBkDQBaCgB4JABlCwBkDgCDAQBEXRYAWgwAZQoAZQ0AZQwAgwEAF1oKAHFyAFdbDABlDgBaDwBlDgBaEABlDgBaEQBlDgBaEgBkDwCEAABaEwBkEACEAABaFABkEQCEAABaFQBkEgCEAABaFgBkEwCEAABaFwBkFACEAABaGABkLgBkFQBkFgCEAgBaGgBlGgBaGwBkFwBkGACEAQBaHABlHABaHQBlHgBaHwBkGQCEAABaIABkGgCEAABaIQBkGwCEAABaIgBkHACEAABaIwBkHQCEAABaJABlJQBaJgBlJwBaKABlKQBaKgBlKwBkDQCDAQBaLABkHgCEAABaLQBkHwCEAABaLgBkIACEAABaLwBkIQCEAABaMABkIgCEAABaMQBkIwCEAABaMgBkJACEAABaMwBkJQBkJgCEAQBaNABkDQBkJwCEAQBaNQBkKACEAABaNgBkLgBkKQCEAQBaNwBkLgBhOABkKgCEAABaOQBkFQBkKwCEAQBaOgB5CwBkDQBqFAABV24bAARlOwBrCgByBAIBAQFkAQBkLABsPABUbgEAWHkwAGQBAGQtAGw9AG05AFo5AG0EAFoEAG0FAFoFAG0DAFoDAAFlBABlBQAXWgYAV24RAARlPgBrCgBySAIBAQFuAQBYZC4AUygvAAAAczgCAABDb21tb24gc3RyaW5nIG1hbmlwdWxhdGlvbnMuCgpQdWJsaWMgbW9kdWxlIHZhcmlhYmxlczoKCndoaXRlc3BhY2UgLS0gYSBzdHJpbmcgY29udGFpbmluZyBhbGwgY2hhcmFjdGVycyBjb25zaWRlcmVkIHdoaXRlc3BhY2UKbG93ZXJjYXNlIC0tIGEgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIGNoYXJhY3RlcnMgY29uc2lkZXJlZCBsb3dlcmNhc2UgbGV0dGVycwp1cHBlcmNhc2UgLS0gYSBzdHJpbmcgY29udGFpbmluZyBhbGwgY2hhcmFjdGVycyBjb25zaWRlcmVkIHVwcGVyY2FzZSBsZXR0ZXJzCmxldHRlcnMgLS0gYSBzdHJpbmcgY29udGFpbmluZyBhbGwgY2hhcmFjdGVycyBjb25zaWRlcmVkIGxldHRlcnMKZGlnaXRzIC0tIGEgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIGNoYXJhY3RlcnMgY29uc2lkZXJlZCBkZWNpbWFsIGRpZ2l0cwpoZXhkaWdpdHMgLS0gYSBzdHJpbmcgY29udGFpbmluZyBhbGwgY2hhcmFjdGVycyBjb25zaWRlcmVkIGhleGFkZWNpbWFsIGRpZ2l0cwpvY3RkaWdpdHMgLS0gYSBzdHJpbmcgY29udGFpbmluZyBhbGwgY2hhcmFjdGVycyBjb25zaWRlcmVkIG9jdGFsIGRpZ2l0cwoKaf////8oAQAAAHQIAAAAd2FybnB5M2tzMwAAAHRoZSBzdHJpbmdvbGQgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQgaW4gUHl0aG9uIDMuMHQKAAAAc3RhY2tsZXZlbGkCAAAAcwYAAAAgCQoNCwx0GgAAAGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6dBoAAABBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWnQKAAAAMDEyMzQ1Njc4OXQGAAAAYWJjZGVmdAYAAABBQkNERUZ0CAAAADAxMjM0NTY3dAAAAABpAAEAAGMBAAAAAQAAAAEAAABDAAAAcwoAAAB8AABqAACDAABTKAEAAABzUwAAAGxvd2VyKHMpIC0+IHN0cmluZwoKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuCgogICAgKAEAAAB0BQAAAGxvd2VyKAEAAAB0AQAAAHMoAAAAACgAAAAAc1EAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9zdHJpbmdvbGQucHlSCQAAAC4AAABzAgAAAAAGYwEAAAABAAAAAQAAAEMAAABzCgAAAHwAAGoAAIMAAFMoAQAAAHNTAAAAdXBwZXIocykgLT4gc3RyaW5nCgogICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHMgY29udmVydGVkIHRvIHVwcGVyY2FzZS4KCiAgICAoAQAAAHQFAAAAdXBwZXIoAQAAAFIKAAAAKAAAAAAoAAAAAHNRAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvc3RyaW5nb2xkLnB5UgsAAAA3AAAAcwIAAAAABmMBAAAAAQAAAAEAAABDAAAAcwoAAAB8AABqAACDAABTKAEAAABzhAAAAHN3YXBjYXNlKHMpIC0+IHN0cmluZwoKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBzIHdpdGggdXBwZXIgY2FzZSBjaGFyYWN0ZXJzCiAgICBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGFuZCB2aWNlIHZlcnNhLgoKICAgICgBAAAAdAgAAABzd2FwY2FzZSgBAAAAUgoAAAAoAAAAACgAAAAAc1EAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9zdHJpbmdvbGQucHlSDAAAAEAAAABzAgAAAAAHYwEAAAABAAAAAQAAAEMAAABzCgAAAHwAAGoAAIMAAFMoAQAAAHNtAAAAc3RyaXAocykgLT4gc3RyaW5nCgogICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHMgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZwogICAgd2hpdGVzcGFjZSByZW1vdmVkLgoKICAgICgBAAAAdAUAAABzdHJpcCgBAAAAUgoAAAAoAAAAACgAAAAAc1EAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9zdHJpbmdvbGQucHlSDQAAAEoAAABzAgAAAAAHYwEAAAABAAAAAQAAAEMAAABzCgAAAHwAAGoAAIMAAFMoAQAAAHNdAAAAbHN0cmlwKHMpIC0+IHN0cmluZwoKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBzIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlIHJlbW92ZWQuCgogICAgKAEAAAB0BgAAAGxzdHJpcCgBAAAAUgoAAAAoAAAAACgAAAAAc1EAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9zdHJpbmdvbGQucHlSDgAAAFQAAABzAgAAAAAGYwEAAAABAAAAAQAAAEMAAABzCgAAAHwAAGoAAIMAAFMoAQAAAHNiAAAAcnN0cmlwKHMpIC0+IHN0cmluZwoKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBzIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZQogICAgcmVtb3ZlZC4KCiAgICAoAQAAAHQGAAAAcnN0cmlwKAEAAABSCgAAACgAAAAAKAAAAABzUQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3N0cmluZ29sZC5weVIPAAAAXQAAAHMCAAAAAAdpAAAAAGMDAAAAAwAAAAMAAABDAAAAcxAAAAB8AABqAAB8AQB8AgCDAgBTKAEAAABzVgEAAHNwbGl0KHN0ciBbLHNlcCBbLG1heHNwbGl0XV0pIC0+IGxpc3Qgb2Ygc3RyaW5ncwoKICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcgcywgdXNpbmcgc2VwIGFzIHRoZQogICAgZGVsaW1pdGVyIHN0cmluZy4gIElmIG1heHNwbGl0IGlzIG5vbnplcm8sIHNwbGl0cyBpbnRvIGF0IG1vc3QKICAgIG1heHNwbGl0IHdvcmRzIElmIHNlcCBpcyBub3Qgc3BlY2lmaWVkLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcKICAgIGlzIGEgc2VwYXJhdG9yLiAgTWF4c3BsaXQgZGVmYXVsdHMgdG8gMC4KCiAgICAoc3BsaXQgYW5kIHNwbGl0ZmllbGRzIGFyZSBzeW5vbnltb3VzKQoKICAgICgBAAAAdAUAAABzcGxpdCgDAAAAUgoAAAB0AwAAAHNlcHQIAAAAbWF4c3BsaXQoAAAAACgAAAAAc1EAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1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bCBhcmd1bWVudCBkZWxldGVjaGFycyBhcmUgcmVtb3ZlZCwgYW5kIHRoZQogICAgcmVtYWluaW5nIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlbgogICAgdHJhbnNsYXRpb24gdGFibGUsIHdoaWNoIG11c3QgYmUgYSBzdHJpbmcgb2YgbGVuZ3RoIDI1Ni4KCiAgICAoAQAAAHQJAAAAdHJhbnNsYXRlKAMAAABSCgAAAHQFAAAAdGFibGV0CQAAAGRlbGV0aW9ucygAAAAAKAAAAABzUQAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3N0cmluZ29sZC5weVI7AAAAWwEAAHMCAAAAAAljAQAAAAEAAAABAAAAQwAAAHMKAAAAfAAAagAAgwAAUygBAAAAc28AAABjYXBpdGFsaXplKHMpIC0+IHN0cmluZwoKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBzIHdpdGggb25seSBpdHMgZmlyc3QgY2hhcmFjdGVyCiAgICBjYXBpdGFsaXplZC4KCiAgICAoAQAAAHQKAAAAY2FwaXRhbGl6ZSgBAAAAUgoAAAAoAAAAACgAAAAAc1EAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9zdHJpbmdvbGQucHlSPgAAAGcBAABzAgAAAAAHYwIAAAACAAAABQAAAEMAAABzJQAAAHQAAHQBAHQCAHwAAGoDAHwBAIMBAIMCAHwBAHAhAGQBAIMCAFMoAgAAAHP5AAAAY2Fwd29yZHMocywgW3NlcF0pIC0+IHN0cmluZwoKICAgIFNwbGl0IHRoZSBhcmd1bWVudCBpbnRvIHdvcmRzIHVzaW5nIHNwbGl0LCBjYXBpdGFsaXplIGVhY2gKICAgIHdvcmQgdXNpbmcgY2FwaXRhbGl6ZSwgYW5kIGpvaW4gdGhlIGNhcGl0YWxpemVkIHdvcmRzIHVzaW5nCiAgICBqb2luLiBOb3RlIHRoYXQgdGhpcyByZXBsYWNlcyBydW5zIG9mIHdo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