<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>TicketPrintHTML</Name>
    <Version>11.0.3</Version>
    <Vendor>Rother OSS GmbH</Vendor>
    <URL>https://otobo.io/</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <ChangeLog Date="2026-04-22 16:05:41" Version="11.0.3">Update seccomp profile.</ChangeLog>
    <ChangeLog Date="2025-07-28 12:43:02" Version="11.0.2">Include Customer Interface. Fix which dynamic fields are shown for the print action.</ChangeLog>
    <ChangeLog Date="2025-06-03 08:18:34" Version="11.0.1">Initial release for the agent interface.</ChangeLog>
    <Description Lang="en">Print Tickets with advanced formatting, including images.</Description>
    <Description Lang="de">Ticket Druck mit verbesserter Formatierung inklusive Bildern.</Description>
    <Framework>11.0.x</Framework>
    <BuildCommitID>36e14cbd130e6caf2388be93cff79ed12a36ab47</BuildCommitID>
    <BuildDate>2026-04-22 16:05:45</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Modules/AgentTicketPrint.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRQcmludC5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBjYjc1MTliNjE3MDY5NzlhN2ViZTQ2YTU0YTlkNzEwYjY0NDI3NjYyIC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRQcmludC5wbQojIC0tCgojIFJvdGhlck9TUyAvIFRpY2tldFByaW50SFRNTAojIENvbXBsZXRlbHkgcmV3b3JrZWQgZmlsZSwgYmFzZWQgb24gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRab29tLnBtCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRUaWNrZXRQcmludDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKdXNlIFBERjo6QVBJMiBxdyhvcGVuKTsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlICAgICAgICAgICAgICBxdyhUcmFuc2xhdGFibGUpOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSBibGVzcyB7JVBhcmFtfSwgJFR5cGU7CgogICAgIyBzZXQgZGVidWcKICAgICRTZWxmLT57RGVidWd9ID0gMDsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAkU2VsZi0+e0FydGljbGVJRH0gICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBcnRpY2xlSUQnICkgfHwgJyc7CiAgICAkU2VsZi0+e0FydGljbGVTb3J0fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdab29tRXhwYW5kU29ydCcgKSB8fCAnJzsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkU2VsZi0+e1RpY2tldElEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBUaWNrZXRJRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRUaWNrZXRPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgIG15ICRDb25maWdPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgIG15ICRNYWluT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CiAgICBteSAkRmlsZVRlbXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RmlsZVRlbXAnKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAncm8nLAogICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBlcnJvciBzY3JlZW4sIGRvbid0IHByaW50IHRpY2tldAogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgKICAgICAgICAgICAgIlRoaXMgdGlja2V0IGRvZXMgbm90IGV4aXN0LCBvciB5b3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgaXQgaW4gaXRzIGN1cnJlbnQgc3RhdGUuIgogICAgICAgICksCiAgICAgICAgV2l0aEhlYWRlciA9PiAnbm8nLAogICAgKSBpZiAhJEFjY2VzczsKCiAgICAjIEdldCBBQ0wgcmVzdHJpY3Rpb25zLgogICAgbXkgJVBvc3NpYmxlQWN0aW9ucyA9ICggMSA9PiAkU2VsZi0+e0FjdGlvbn0gKTsKCiAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVQb3NzaWJsZUFjdGlvbnMsCiAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBteSAlQWNsQWN0aW9uID0gJEFDTCA/ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbEFjdGlvbkRhdGEoKSA6ICVQb3NzaWJsZUFjdGlvbnM7CgogICAgIyBjaGVjayBpZiBBQ0wgcmVzdHJpY3Rpb25zIGV4aXN0CiAgICBteSAlQWNsQWN0aW9uTG9va3VwID0gcmV2ZXJzZSAlQWNsQWN0aW9uOwoKICAgICMgc2hvdyBlcnJvciBzY3JlZW4gaWYgQUNMIHByb2hpYml0cyB0aGlzIGFjdGlvbgogICAgaWYgKCAhJEFjbEFjdGlvbkxvb2t1cHsgJFNlbGYtPntBY3Rpb259IH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAnbm8nICk7CiAgICB9CgogICAgIyBnZXQgdGlja2V0IGF0dHJpYnV0ZXMKICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICApOwoKICAgIG15ICRIVE1MID0gJFNlbGYtPl9DcmVhdGVIVE1MQ29udGVudCgKICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQsCiAgICApOwoKICAgIG15ICRIVE1MRmlsZURpcmVjdG9yeSA9ICRGaWxlVGVtcE9iamVjdC0+VGVtcERpcigpOwoKICAgIG15ICgkRmlsZUhhbmRsZSwgJEhUTUxGaWxlUGF0aCkgPSAkRmlsZVRlbXBPYmplY3QtPlRlbXBGaWxlKAogICAgICAgIFN1ZmZpeCA9PiAnLmh0bWwnLAogICAgKTsKICAgIGNsb3NlKCRGaWxlSGFuZGxlKTsKCiAgICAkTWFpbk9iamVjdC0+RmlsZVdyaXRlKAogICAgICAgIExvY2F0aW9uICAgID0+ICRIVE1MRmlsZVBhdGgsCiAgICAgICAgQ29udGVudCAgICAgPT4gXCRIVE1MLAogICAgKTsKCiAgICBteSAkUERGRmlsZVBhdGggPSAkU2VsZi0+X1ByaW50UERGKAogICAgICAgIEZpbGVUZW1wT2JqZWN0ICAgPT4gJEZpbGVUZW1wT2JqZWN0LAogICAgICAgIEhUTUxGaWxlUGF0aCAgICAgPT4gJEhUTUxGaWxlUGF0aCwKICAgICk7CgogICAgIyBjaGVjayBpZiB3ZSBnb3QgYSByZXN1bHQKICAgIGlmICghJFBERkZpbGVQYXRoKSB7CgogICAgICAgICMgZXJyb3IgbGlrZWx5IHN0ZW1zIGZyb20gY2hyb21lIHBhdGggbm90IGJlaW5nIGNvbmZpZ3VyZWQgYW5kIHdhcyBsb2dnZWQgZWFybGllciBpbiB0aGlzIGNhc2UKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdQREYgY2Fubm90IGJlIGdlbmVyYXRlZCEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yIGFuZCBjaGVjayB0aGUgbG9nIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGZpbGUgZXhpc3RzCiAgICBpZiAoICEtZSAkUERGRmlsZVBhdGggKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJQREYgZmlsZSAnJFBERkZpbGVQYXRoJyBkb2VzIG5vdCBleGlzdCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnUERGIGNhbm5vdCBiZSBnZW5lcmF0ZWQhJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvciBhbmQgY2hlY2sgdGhlIGxvZyBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyByZXR1cm4gdGhlIGRvY3VtZW50IGFzIHN0cmluZwogICAgbXkgJFBERiA9IFBERjo6QVBJMi0+b3BlbigkUERGRmlsZVBhdGgpOwoKICAgIG15ICRQREZTdHJpbmcgPSAkUERGLT5zdHJpbmdpZnkoKTsKICAgICRQREYtPmVuZCgpOwoKICAgICMgYXNzZW1ibGUgZmlsZW5hbWUKICAgIGlmICggJFNlbGYtPntVc2VyVGltZVpvbmV9ICkgewogICAgICAgICREYXRlVGltZU9iamVjdC0+VG9UaW1lWm9uZSggVGltZVpvbmUgPT4gJFNlbGYtPntVc2VyVGltZVpvbmV9ICk7CiAgICB9CiAgICBteSAkRmlsZW5hbWUgPSAnVGlja2V0XycgLiAkVGlja2V0e1RpY2tldE51bWJlcn0gLiAnXyc7CiAgICAkRmlsZW5hbWUgLj0gJERhdGVUaW1lT2JqZWN0LT5Gb3JtYXQoIEZvcm1hdCA9PiAnJVktJW0tJWRfJUhfJU0nICk7CiAgICAkRmlsZW5hbWUgLj0gJy5wZGYnOwoKICAgIG15ICRDbGVhbmVkRmlsZW5hbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5GaWxlbmFtZUNsZWFuVXAoCiAgICAgICAgRmlsZW5hbWUgPT4gJEZpbGVuYW1lLAogICAgICAgIFR5cGUgICAgID0+ICdBdHRhY2htZW50JywKICAgICk7CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgRmlsZW5hbWUgICAgPT4gJENsZWFuZWRGaWxlbmFtZSwKICAgICAgICBDb250ZW50VHlwZSA9PiAiYXBwbGljYXRpb24vcGRmIiwKICAgICAgICBDb250ZW50ICAgICA9PiAkUERGU3RyaW5nLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgKTsKfQoKc3ViIF9DcmVhdGVIVE1MQ29udGVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlVGlja2V0ID0gJXsgJFBhcmFte1RpY2tldH0gfTsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwogICAgbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJE1haW5PYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICREaXNwbGF5U2V0dGluZ3MgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0UHJpbnQnKSAvLyB7fTsKCiAgICAjIENyZWF0ZSBhIGxpc3Qgb2YgYXJ0aWNsZSBzZW5kZXIgdHlwZXMgZm9yIGxvb2t1cAogICAgbXkgJUFydGljbGVTZW5kZXJUeXBlTGlzdCA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlU2VuZGVyVHlwZUxpc3QoKTsKCiAgICBteSAkT3JkZXIgPSAkU2VsZi0+e0FydGljbGVTb3J0fSBlcSAncmV2ZXJzZScgPyAnREVTQycgOiAnQVNDJzsKCiAgICAjIFRPRE86IERvIHdlIHdhbnQgdG8gYWxsb3cgcHJpbnRpbmcgb25seSBjdXN0b21lciB2aXNpYmxlIGFydGljbGVzIGFuZCBoYXZlIG90aGVyIGFydGljbGUgZmlsdGVycz8KICAgIG15ICRJc1Zpc2libGVGb3JDdXN0b21lcjsKICAgIGlmICggZGVmaW5lZCAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q3VzdG9tZXJWaXNpYmlsaXR5fSApIHsKICAgICAgICAkSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPSAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q3VzdG9tZXJWaXNpYmlsaXR5fTsKICAgIH0KCiAgICAjIEdldCBhbGwgYXJ0aWNsZXMuCiAgICBteSBAQXJ0aWNsZUJveCA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAkSXNWaXNpYmxlRm9yQ3VzdG9tZXIsCiAgICApOwoKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gKSApIHsKICAgICAgICBteSAlRmlsdGVyID0gbWFwIHsgJF8gPT4gMSB9IEB7ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSB9OwoKICAgICAgICBAQXJ0aWNsZUJveCA9IGdyZXAgeyAkRmlsdGVyeyAkXy0+e0NvbW11bmljYXRpb25DaGFubmVsSUR9IH0gfSBAQXJ0aWNsZUJveDsKICAgIH0KCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0FydGljbGVTZW5kZXJUeXBlSUR9ICkgKSB7CiAgICAgICAgbXkgJUZpbHRlciA9IG1hcCB7ICRfID0+IDEgfSBAeyAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57QXJ0aWNsZVNlbmRlclR5cGVJRH0gfTsKCiAgICAgICAgQEFydGljbGVCb3ggPSBncmVwIHsgJEZpbHRlcnsgJF8tPntTZW5kZXJUeXBlSUR9IH0gfSBAQXJ0aWNsZUJveDsKICAgIH0KCiAgICBpZiAoICRPcmRlciBlcSAnREVTQycgKSB7CiAgICAgICAgQEFydGljbGVCb3ggPSByZXZlcnNlIEBBcnRpY2xlQm94OwogICAgfQoKICAgIG15ICVBcnRpY2xlRmxhZ3MgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdzT2ZUaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNob3cgb25seSBzcGVjaWZpZWQgYXJ0aWNsZQogICAgaWYgKCAkU2VsZi0+e0FydGljbGVJRH0pIHsKICAgICAgICBBUlRJQ0xFOgogICAgICAgIGZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVCb3gpIHsKICAgICAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICEkQXJ0aWNsZS0+e0FydGljbGVJRH07CiAgICAgICAgICAgIG5leHQgQVJUSUNMRSBpZiAkU2VsZi0+e0FydGljbGVJRH0gbmUgJEFydGljbGUtPntBcnRpY2xlSUR9OwoKICAgICAgICAgICAgQEFydGljbGVCb3ggPSAoJEFydGljbGUpOwoKICAgICAgICAgICAgbGFzdCBBUlRJQ0xFOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFnZSBkZXNpZ24KICAgICRUaWNrZXR7QWdlfSA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyQWdlKAogICAgICAgIEFnZSAgID0+ICRUaWNrZXR7QWdlfSwKICAgICAgICBTcGFjZSA9PiAnICcKICAgICk7CgogICAgbXkgQFdpZGdldHM7CiAgICBXSURHRVQ6CiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkRGlzcGxheVNldHRpbmdzLT57V2lkZ2V0c30gLy8ge30gfSApIHsKICAgICAgICBteSAkQ29uZmlnID0gJERpc3BsYXlTZXR0aW5ncy0+e1dpZGdldHN9LT57JEtleX07CgogICAgICAgIG15ICRTdWNjZXNzID0gZXZhbCB7ICRNYWluT2JqZWN0LT5SZXF1aXJlKCAkQ29uZmlnLT57TW9kdWxlfSApIH07CgogICAgICAgIG5leHQgV0lER0VUIHVubGVzcyAkU3VjY2VzczsKCiAgICAgICAgbXkgJE1vZHVsZSA9IGV2YWwgeyAkQ29uZmlnLT57TW9kdWxlfS0+bmV3KCUkU2VsZikgfTsKICAgICAgICBpZiAoICEkTW9kdWxlICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAibmV3KCkgb2YgV2lkZ2V0IG1vZHVsZSAkQ29uZmlnLT57TW9kdWxlfSBub3Qgc3VjY2Vzc2Z1bCEiLAoKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgV0lER0VUOwogICAgICAgIH0KCiAgICAgICAgbXkgJFdpZGdldE91dHB1dCA9ICRNb2R1bGUtPlJ1bigKICAgICAgICAgICAgVGlja2V0ICAgID0+IFwlVGlja2V0LAogICAgICAgICAgICBBY2xBY3Rpb24gPT4ge30sCiAgICAgICAgICAgIENvbmZpZyAgICA9PiAkQ29uZmlnLAogICAgICAgICAgICBEaXNwbGF5U2V0dGluZ3NTb3VyY2UgPT4gIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0UHJpbnQiCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBXSURHRVQgdW5sZXNzICRXaWRnZXRPdXRwdXQ7CgogICAgICAgICRXaWRnZXRPdXRwdXQtPntSYW5rfSAvLz0gJEtleTsKICAgICAgICBwdXNoIEBXaWRnZXRzLCAkV2lkZ2V0T3V0cHV0OwogICAgfQogICAgJFBhcmFteyAnV2lkZ2V0cycgfSA9IFsKICAgICAgICBzb3J0IHsgJGEtPntSYW5rfSBjbXAgJGItPntSYW5rfSB9IEBXaWRnZXRzCiAgICBdOwoKICAgICMgc2V0IGRpc3BsYXkgb3B0aW9ucwogICAgJFBhcmFte0hvb2t9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Okhvb2snKSB8fCAnVGlja2V0Iyc7CgogICAgIyBudW1iZXIgb2YgYXJ0aWNsZXMKICAgICRQYXJhbXtBcnRpY2xlQ291bnR9ID0gc2NhbGFyIEBBcnRpY2xlQm94OwoKICAgICMgcHJpbnQgbG9nbwogICAgJFBhcmFte1BERkxvZ299ID0gJyc7CiAgICBpZiAoICREaXNwbGF5U2V0dGluZ3MtPntQcmludExvZ29GaWxlfSApIHsKICAgICAgICAkUGFyYW17UERGTG9nb30gPSAkRGlzcGxheVNldHRpbmdzLT57UHJpbnRMb2dvRmlsZX07CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnSGVhZGVyJywKICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCAlVGlja2V0IH0sCiAgICApOwoKICAgIG15IEBBcnRpY2xlSURzOwogICAgbXkgJEFydGljbGVXaWRnZXRzSFRNTCA9ICcnOwoKICAgIEFSVElDTEU6CiAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlQm94KSB7CgogICAgICAgICRBcnRpY2xlV2lkZ2V0c0hUTUwgLj0gJFNlbGYtPl9BcnRpY2xlUmVuZGVyKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgICAgID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAQXJ0aWNsZUlEcywgJEFydGljbGUtPntBcnRpY2xlSUR9OwogICAgfQoKICAgICRQYXJhbXtBcnRpY2xlSXRlbXN9ID0gJEFydGljbGVXaWRnZXRzSFRNTDsKCiAgICAjIHNob3cgbm8gYXJ0aWNsZXMgYmxvY2sgaWYgdGlja2V0IGRvZXMgbm90IGNvbnRhaW4gYXJ0aWNsZXMKICAgIGlmICggIUBBcnRpY2xlQm94ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdIaW50Tm9BcnRpY2xlcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJldHVybiBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpY2tldFByaW50JywKICAgICAgICBEYXRhICAgICAgICAgPT4geyAlUGFyYW0sICVUaWNrZXQgfSwKICAgICk7Cn0KCj1oZWFkMiBfQXJ0aWNsZVJlbmRlcigpCgpSZXR1cm5zIGFydGljbGUgaHRtbC4KCkltcGxlbWVudGF0aW9uIGJhc2VkIG9uCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBZ2VudDo6TUlNRUJhc2UtPkFydGljbGVSZW5kZXIoKSBhbmQKS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldEFydGljbGVDb250ZW50LT5SdW4oKQoKUmVzdWx0OgogICAgJEhUTUwgPSAiPGRpdj4uLi48L2Rpdj4iOwoKPWN1dAoKc3ViIF9BcnRpY2xlUmVuZGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXJ0aWNsZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICRQYXJhbXtTaG93QnJvd3NlckxpbmtNZXNzYWdlfSA9IDA7CgogICAgbXkgJExheW91dE9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRBcnRpY2xlQmFzZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBZ2VudDo6QmFzZScpOwoKIyBGaXJzdCBwYXJ0IGlzIGJhc2VkIG9uIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBZ2VudDo6TUlNRUJhc2UtPkFydGljbGVSZW5kZXIoKQoKICAgICMgR2V0IGFydGljbGUgZGF0YS4KICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QmFja2VuZEZvckFydGljbGUoJVBhcmFtKTsKCiAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAlUGFyYW0sCiAgICAgICAgUmVhbE5hbWVzID0+IDEsCiAgICApOwogICAgaWYgKCAhJUFydGljbGUgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBcnRpY2xlIG5vdCBmb3VuZCAoQXJ0aWNsZUlEPSRQYXJhbXtBcnRpY2xlSUR9KSEiCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBHZXQgY2hhbm5lbCBzcGVjaWZpYyBmaWVsZHMKICAgIG15ICVBcnRpY2xlRmllbGRzID0gJExheW91dE9iamVjdC0+QXJ0aWNsZUZpZWxkcyglUGFyYW0pOwoKICAgICMgR2V0IGR5bmFtaWMgZmllbGRzIGFuZCBhY2NvdW50ZWQgdGltZQogICAgbXkgJUFydGljbGVNZXRhRmllbGRzID0gJEFydGljbGVCYXNlT2JqZWN0LT5BcnRpY2xlTWV0YUZpZWxkcygKICAgICAgICAlUGFyYW0sCiAgICAgICAgRGlzcGxheVNldHRpbmdzU291cmNlID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFByaW50JwogICAgKTsKCiAgICAjIFNob3cgY3JlYXRlZCBieSBzdHJpbmcsIGlmIGNyZWF0b3IgaXMgZGlmZmVyZW50IGZyb20gYWRtaW4gdXNlci4KICAgIGlmICggJEFydGljbGV7Q3JlYXRlQnl9ID4gMSApIHsKICAgICAgICAkQXJ0aWNsZXtDcmVhdGVCeVVzZXJ9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlck5hbWUoIFVzZXJJRCA9PiAkQXJ0aWNsZXtDcmVhdGVCeX0gKTsKICAgIH0KCiAgICBteSAlQ29tbXVuaWNhdGlvbkNoYW5uZWwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29tbXVuaWNhdGlvbkNoYW5uZWwnKS0+Q2hhbm5lbEdldCgKICAgICAgICBDaGFubmVsSUQgPT4gJEFydGljbGV7Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0sCiAgICApOwoKIyBJbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50VGlja2V0QXJ0aWNsZUNvbnRlbnQgZnJvbSBoZXJlIG9uLgoKICAgIG15ICRBcnRpY2xlU3RvcmFnZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpBcnRpY2xlOjpCYWNrZW5kOjpNSU1FQmFzZTo6QXJ0aWNsZVN0b3JhZ2UnKTsKCiAgICBteSAkUmljaFRleHRFbmFibGVkID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpab29tUmljaFRleHRGb3JjZScpCiAgICAgICAgfHwgJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0KICAgICAgICB8fCAwOwoKICAgICMgU2hvdyBIVE1MIGlmIFJpY2hUZXh0IGlzIGVuYWJsZWQgYW5kIEhUTUwgYXR0YWNobWVudCBpc24ndCBtaXNzaW5nLgogICAgbXkgJFNob3dIVE1MID0gJFJpY2hUZXh0RW5hYmxlZDsKCiAgICBteSAkSFRNTEJvZHlBdHRhY2hJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlOjpNSU1FQmFzZScpLT5IVE1MQm9keUF0dGFjaG1lbnRJREdldCgKICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICA9PiAkQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAkU2hvd0hUTUwgJiYgISRIVE1MQm9keUF0dGFjaElEICkgewogICAgICAgICRTaG93SFRNTCA9IDA7CiAgICB9CgogICAgbXkgJEFydGljbGVDb250ZW50OwogICAgaWYgKCAkU2hvd0hUTUwgKSB7CiAgICAgICAgJEFydGljbGVDb250ZW50ID0gJExheW91dE9iamVjdC0+QXJ0aWNsZVByZXZpZXcoCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJEFydGljbGV7QXJ0aWNsZUlEfSwKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICA9PiAkQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gMCwKICAgICAgICAgICAgQXJ0aWNsZVN0b3JhZ2UgICAgICA9PiAkQXJ0aWNsZVN0b3JhZ2UsCiAgICAgICAgICAgIFNvdXJjZUFydGljbGVJRCAgICAgPT4gJFNlbGYtPntTb3VyY2VBcnRpY2xlSUR9LAogICAgICAgICAgICBSZXN1bHRUeXBlICAgICAgICAgID0+ICdodG1sJywKICAgICAgICApOwoKICAgIH0KICAgIGVsc2UgewogICAgICAgICRBcnRpY2xlQ29udGVudCA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVQcmV2aWV3KAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJEFydGljbGV7VGlja2V0SUR9LAogICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+IDAsCiAgICAgICAgICAgIEFydGljbGVTdG9yYWdlICAgICAgPT4gJEFydGljbGVTdG9yYWdlLAogICAgICAgICAgICBTb3VyY2VBcnRpY2xlSUQgICAgID0+ICRTZWxmLT57U291cmNlQXJ0aWNsZUlEfSwKICAgICAgICAgICAgUmVzdWx0VHlwZSAgICAgICAgICA9PiAncGxhaW4nLAogICAgICAgICk7CgogICAgICAgICMgaHRtbCBxdW90aW5nCiAgICAgICAgJEFydGljbGVDb250ZW50ID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCgKICAgICAgICAgICAgTmV3TGluZSAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdEZWZhdWx0Vmlld05ld0xpbmUnKSwKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJEFydGljbGVDb250ZW50LAogICAgICAgICAgICBWTWF4ICAgICAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0RlZmF1bHRWaWV3TGluZXMnKSB8fCA1MDAwLAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICBMaW5rRmVhdHVyZSAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJEFydGljbGVDb250ZW50ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTm8gc3VjaCBhcnRpY2xlIScsCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBiYXNlIHVybAogICAgbXkgJFVSTDsKCiAgICBpZiAoICEkU2VsZi0+e1ZlcnNpb25WaWV3fSApIHsKICAgICAgICAkVVJMID0gJ0FjdGlvbj1BZ2VudFRpY2tldEF0dGFjaG1lbnQ7U3ViYWN0aW9uPUhUTUxWaWV3JwogICAgICAgICAgICAuICI7VGlja2V0SUQ9JEFydGljbGV7VGlja2V0SUR9O0FydGljbGVJRD0kQXJ0aWNsZXtBcnRpY2xlSUR9O0ZpbGVJRD0iOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFVSTCA9ICdBY3Rpb249QWdlbnRUaWNrZXRBdHRhY2htZW50O1N1YmFjdGlvbj1IVE1MVmlldycKICAgICAgICAgICAgLiAiO1RpY2tldElEPSRBcnRpY2xle1RpY2tldElEfTtBcnRpY2xlSUQ9JEFydGljbGV7QXJ0aWNsZUlEfTtWZXJzaW9uVmlldz0xO1NvdXJjZUFydGljbGVJRD0kU2VsZi0+e1NvdXJjZUFydGljbGVJRH07RmlsZUlEPSI7CiAgICB9CgogICAgIyByZXBsYWNlIGxpbmtzIHRvIGlubGluZSBpbWFnZXMgaW4gaHRtbCBjb250ZW50CiAgICBteSAlQXRtQm94ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgIEFydGljbGVJRCAgICAgICA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgIFNvdXJjZUFydGljbGVJRCA9PiAkU2VsZi0+e1NvdXJjZUFydGljbGVJRH0sCiAgICApOwoKICAgICMgRG8gbm90IGxvYWQgZXh0ZXJuYWwgaW1hZ2VzIGlmICdCbG9ja0xvYWRpbmdSZW1vdGVDb250ZW50JyBpcyBlbmFibGVkLgogICAgbXkgJExvYWRFeHRlcm5hbEltYWdlcyA9IDE7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QmxvY2tMb2FkaW5nUmVtb3RlQ29udGVudCcpICkgewogICAgICAgICRMb2FkRXh0ZXJuYWxJbWFnZXMgPSAwOwogICAgfQoKICAgIG15ICRTZW5kZXJJbml0aWFscyAgPSAkTGF5b3V0T2JqZWN0LT5Vc2VySW5pdGlhbHNHZXQoCiAgICAgICAgRnVsbG5hbWUgPT4gJEFydGljbGV7RnJvbVJlYWxuYW1lfSwKICAgICk7CgogICAgbXkgJFNlbmRlckltYWdlID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBZ2VudDo6QmFzZScpLT5fQXJ0aWNsZVNlbmRlckltYWdlKAogICAgICAgIFNlbmRlciA9PiAkQXJ0aWNsZXtGcm9tfSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAkQXJ0aWNsZUNvbnRlbnQgPX4gc3sKICAgICAgICAoPXwifCcpY2lkOiguKj8pKCJ8J3w+fFwvPnxccykKICAgIH0KICAgIHsKICAgICAgICBteSAkU3RhcnQ9ICQxOwogICAgICAgIG15ICRDb250ZW50SUQgPSAkMjsKICAgICAgICBteSAkRW5kID0gJDM7CiAgICAgICAgbXkgJENvbnRlbnQgPSAnJzsKCiAgICAgICAgIyBpbXByb3ZlIGh0bWwgcXVhbGl0eQogICAgICAgIGlmICggJFN0YXJ0IG5lICciJyAmJiAkU3RhcnQgbmUgJ1wnJyApIHsKICAgICAgICAgICAgJFN0YXJ0IC49ICciJzsKICAgICAgICB9CiAgICAgICAgaWYgKCAkRW5kIG5lICciJyAmJiAkRW5kIG5lICdcJycgKSB7CiAgICAgICAgICAgICRFbmQgPSAnIicgLiAkRW5kOwogICAgICAgIH0KCiAgICAgICAgIyBmaW5kIG1hdGNoaW5nIGF0dGFjaG1lbnQgYW5kIHJlcGxhY2UgaXQgd2l0aCBiYXNlNjQgb2YgaW1hZ2UKICAgICAgICBBVFRBQ0hNRU5UX0lEOgogICAgICAgIGZvciBteSAkQXR0YWNobWVudElEICggc29ydCBrZXlzICVBdG1Cb3ggKSB7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVF9JRCBpZiBsYyAkQXRtQm94eyRBdHRhY2htZW50SUR9e0NvbnRlbnRJRH0gbmUgbGMgIjwkQ29udGVudElEPiI7CgogICAgICAgICAgICBteSAlQXR0YWNobWVudCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGV7QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIEZpbGVJRCAgICA9PiAkQXR0YWNobWVudElELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgKCAkQ29udGVudFR5cGUgKSA9ICVBdHRhY2htZW50ICYmICRBdHRhY2htZW50e0NvbnRlbnRUeXBlfSA/ICggJEF0dGFjaG1lbnR7Q29udGVudFR5cGV9ID1+IC9eKFteO10rKS8gKSA6ICgpOwoKICAgICAgICAgICAgJENvbnRlbnQgPSAkQ29udGVudFR5cGUgJiYgJEF0dGFjaG1lbnR7Q29udGVudH0gPyAiZGF0YTokQ29udGVudFR5cGU7YmFzZTY0LCIgLiBNSU1FOjpCYXNlNjQ6OmVuY29kZV9iYXNlNjQoICRBdHRhY2htZW50e0NvbnRlbnR9ICkgOiAiIjsKCiAgICAgICAgICAgIGxhc3QgQVRUQUNITUVOVF9JRDsKICAgICAgICB9CgogICAgICAgICMgcmV0dXJuIG5ldyBydW50aW1lIHVybAogICAgICAgICRTdGFydCAuICRDb250ZW50IC4gJEVuZDsKICAgIH1lZ3hpOwoKICAgICMgaW5saW5lIGltYWdlcyB1c2luZyBDb250ZW50LUxvY2F0aW9uIGFzIGlkZW50aWZpZXIgaW5zdGVhZCBvZiBDb250ZW50LUlEIGV2ZW4gUkZDMjU1NwogICAgIyBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyNTU3LnR4dAogICAgIyBmaW5kIG1hdGNoaW5nIGF0dGFjaG1lbnQgYW5kIHJlcGxhY2UgaXQgd2l0aCBydW50bGltZSB1cmwgdG8gaW1hZ2UKICAgIEFUVEFDSE1FTlQ6CiAgICBmb3IgbXkgJEF0dGFjaG1lbnRJRCAoIHNvcnQga2V5cyAlQXRtQm94ICkgewogICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJEF0bUJveHskQXR0YWNobWVudElEfXtDb250ZW50SUR9OwoKICAgICAgICAjIGNvbnRlbnQgaWQgY2xlYW51cAogICAgICAgICRBdG1Cb3h7JEF0dGFjaG1lbnRJRH17Q29udGVudElEfSA9fiBzL148Ly87CiAgICAgICAgJEF0bUJveHskQXR0YWNobWVudElEfXtDb250ZW50SUR9ID1+IHMvPiQvLzsKCiAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkQXRtQm94eyRBdHRhY2htZW50SUR9e0NvbnRlbnRJRH07CgogICAgICAgICRBcnRpY2xle0JvZHl9ID1+IHN7CiAgICAgICAgICAgICg9fCJ8JykoXFEkQXRtQm94eyRBdHRhY2htZW50SUR9e0NvbnRlbnRJRH1cRSkoInwnfD58XC8+fFxzKQogICAgICAgIH0KICAgICAgICB7CiAgICAgICAgICAgIG15ICRTdGFydD0gJDE7CiAgICAgICAgICAgIG15ICRDb250ZW50SUQgPSAkMjsKICAgICAgICAgICAgbXkgJEVuZCA9ICQzOwoKICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBGaWxlSUQgICAgPT4gJEF0dGFjaG1lbnRJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICggJENvbnRlbnRUeXBlICkgPSAlQXR0YWNobWVudCAmJiAkQXR0YWNobWVudHtDb250ZW50VHlwZX0gPyAoICRBdHRhY2htZW50e0NvbnRlbnRUeXBlfSA9fiAvXihbXjtdKykvICkgOiAoKTsKCiAgICAgICAgICAgIG15ICRDb250ZW50ID0gJENvbnRlbnRUeXBlICYmICRBdHRhY2htZW50e0NvbnRlbnR9ID8gImRhdGE6JENvbnRlbnRUeXBlO2Jhc2U2NCwiIC4gTUlNRTo6QmFzZTY0OjplbmNvZGVfYmFzZTY0KCAkQXR0YWNobWVudHtDb250ZW50fSApIDogIiI7CiAgICAgICAgICAgICRTdGFydCAuICRDb250ZW50IC4gJEVuZDsKICAgICAgICB9ZWd4aTsKICAgIH0KCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBDb250ZW50ICAgICAgICAgICAgPT4gJEFydGljbGVDb250ZW50LAogICAgICAgIENvbnRlbnRBbHRlcm5hdGl2ZSA9PiAnJywKICAgICAgICBDb250ZW50SUQgICAgICAgICAgPT4gJycsCiAgICAgICAgQ29udGVudFR5cGUgICAgICAgID0+ICd0ZXh0L2h0bWw7IGNoYXJzZXQ9InV0Zi04IicsCiAgICAgICAgRGlzcG9zaXRpb24gICAgICAgID0+ICdpbmxpbmUnLAogICAgKTsKCiAgICAjIGlmIHRoZXJlIGlzIHVuZXhwZWN0ZWRseSBwZ3AgZGVjcnlwdGVkIGNvbnRlbnQgaW4gdGhlIGh0bWwgZW1haWwgKE9FKSwKICAgICMgd2Ugd2lsbCB1c2UgdGhlIGFydGljbGUgYm9keSAocGxhaW4gdGV4dCkgZnJvbSB0aGUgZGF0YWJhc2UgYXMgZmFsbCBiYWNrCiAgICAjIHNlZSBidWcjOTY3MgogICAgaWYgKAogICAgICAgICREYXRhe0NvbnRlbnR9ID1+IG17CiAgICAgICAgXiAuKiAtLS0tLUJFR0lOIFsgXSBQR1AgWyBdIE1FU1NBR0UtLS0tLSAgLiogJCAgICAgICMgZ3JlcCBQR1AgYmVnaW4gdGFnCiAgICAgICAgLisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUEdQIHBhcnRzIG1heSBiZSBuZXN0ZWQgaW4gaHRtbAogICAgICAgIF4gLiogLS0tLS1FTkQgWyBdIFBHUCBbIF0gTUVTU0FHRS0tLS0tICAuKiAkICAgICAgICAjIGdyZXAgUEdQIGVuZCB0YWcKICAgIH14bXMKICAgICAgICApCiAgICB7CgogICAgICAgICMgaHRtbCBxdW90aW5nCiAgICAgICAgJEFydGljbGV7Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICBOZXdMaW5lICAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0RlZmF1bHRWaWV3TmV3TGluZScpLAogICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkQXJ0aWNsZXtCb2R5fSwKICAgICAgICAgICAgVk1heCAgICAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdEZWZhdWx0Vmlld0xpbmVzJykgfHwgNTAwMCwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICAgICAgTGlua0ZlYXR1cmUgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHVzZSB0aGUgYXJ0aWNsZSBib2R5IGFzIGNvbnRlbnQsIGJlY2F1c2UgcGdwIHdhcyBkZWZpbml0bHkgZGVjcnlwdGVkIGlmIHBvc3NpYmxlCiAgICAgICAgJERhdGF7Q29udGVudH0gPSAkQXJ0aWNsZXtCb2R5fTsKICAgIH0KCiAgICAkQXJ0aWNsZUNvbnRlbnQgPSAkRGF0YXtDb250ZW50fTsKCiAgICAjIGV4dHJhY3Qgc3R5bGVzIGZyb20gYXJ0aWNsZXMKICAgIG15IEBTdHlsZXM7CiAgICAkQXJ0aWNsZUNvbnRlbnQgPX4gcy8oPHN0eWxlW148Pl0qPikoLio/KSg8XC9zdHlsZT4pL3B1c2ggQFN0eWxlcywgWyQxLCAkMiwgJDNdOyAiIi9nc2U7CiAgICBteSAkQ29tYmluZWRTdHlsZXMgPSBqb2luKCJcbiIsIG1hcCB7ICRfLT5bMV0gfSBAU3R5bGVzKTsKCiAgICAjcmVtb3ZlIG1ldGEgdGFnCiAgICAkQXJ0aWNsZUNvbnRlbnQgPX4gcy88bWV0YVtePD5dKj4vL2c7CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1RpY2tldFByaW50SFRNTC9NSU1FQmFzZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgIEFydGljbGVGaWVsZHMgICAgICAgID0+IFwlQXJ0aWNsZUZpZWxkcywKICAgICAgICAgICAgQ29tbXVuaWNhdGlvbkNoYW5uZWwgPT4gJENvbW11bmljYXRpb25DaGFubmVse0Rpc3BsYXlOYW1lfSwKICAgICAgICAgICAgQXJ0aWNsZU1ldGFGaWVsZHMgICAgPT4gXCVBcnRpY2xlTWV0YUZpZWxkcywKICAgICAgICAgICAgU2VuZGVySW1hZ2UgICAgICAgICAgPT4gJFNlbmRlckltYWdlLAogICAgICAgICAgICBTZW5kZXJJbml0aWFscyAgICAgICA9PiAkU2VuZGVySW5pdGlhbHMsCiAgICAgICAgICAgIEhUTUwgICAgICAgICAgICAgICAgID0+ICRBcnRpY2xlQ29udGVudCwKICAgICAgICAgICAgU3R5bGVzICAgICAgICAgICAgICAgPT4gJENvbWJpbmVkU3R5bGVzCiAgICAgICAgfSwKICAgICkKfQoKPWhlYWQyIF9QcmludFBERigpCgpHZW5lcmF0ZXMgYSBQREYgZnJvbSBhbiBIVE1MIGZpbGUgdXNpbmcgR29vZ2xlIENocm9tZSBpbiBoZWFkbGVzcyBtb2RlLgoKVGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGUgcGF0aCB0byB0aGUgSFRNTCBmaWxlIHRvIGJlIHNwZWNpZmllZCBpbiB0aGUKQzxIVE1MRmlsZVBhdGg+IHBhcmFtZXRlci4gSXQgcmV0cmlldmVzIHRoZSBwYXRoIHRvIHRoZSBHb29nbGUgQ2hyb21lIGJpbmFyeQpmcm9tIHRoZSBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRlcyBDaHJvbWUgd2l0aCBzcGVjaWZpYyBmbGFncyB0byBjb252ZXJ0IHRoZQpIVE1MIGZpbGUgdG8gYSBQREYuCgpSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSByZXN1bHRpbmcgLnBkZiBmaWxlLgoKPWN1dAoKc3ViIF9QcmludFBERiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgIyBGaWxlVGVtcE9iamVjdCBtdXN0IGJlIHBhc3NlZCB0byBwcmV2ZW50IHByZW1hdHVyZSBmaWxlIGRlbGV0aW9uCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoSFRNTEZpbGVQYXRoIEZpbGVUZW1wT2JqZWN0KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJEZpbGVUZW1wT2JqZWN0ID0gJFBhcmFteydGaWxlVGVtcE9iamVjdCd9OwoKICAgIG15ICRIVE1MRmlsZVBhdGggPSAkUGFyYW17SFRNTEZpbGVQYXRofTsKICAgIG15ICgkRmlsZUhhbmRsZSwgJFBERkZpbGVQYXRoKSA9ICRGaWxlVGVtcE9iamVjdC0+VGVtcEZpbGUoCiAgICAgICAgU3VmZml4ID0+ICcucGRmJwogICAgKTsKICAgICRGaWxlSGFuZGxlLT5jbG9zZSgpOwoKICAgIG15ICRDaHJvbWVQYXRoID0gJENvbmZpZ09iamVjdC0+R2V0KCdHb29nbGVDaHJvbWU6OkJpbicpOwogICAgaWYgKCAhJENocm9tZVBhdGggKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJHb29nbGUgQ2hyb21lIHBhdGggbm90IGNvbmZpZ3VyZWQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkQ29tbWFuZFJlc3VsdCA9IGAnJENocm9tZVBhdGgnIC0tYWdncmVzc2l2ZS1jYWNoZS1kaXNjYXJkIC0taGVhZGxlc3MgLS1wcmludC10by1wZGY9JyRQREZGaWxlUGF0aCcgLS1uby1wZGYtaGVhZGVyLWZvb3RlciAtLXZpcnR1YWwtdGltZS1idWRnZXQ9MjUwMDAgJyRIVE1MRmlsZVBhdGgnIDI+JjFgOwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICBNZXNzYWdlICA9PiAiQ2hyb21lIFBERiBQcmludDogIiAuICRDb21tYW5kUmVzdWx0LAogICAgKTsKCiAgICByZXR1cm4gJFBERkZpbGVQYXRoOwp9CgoxOwo=</File>
        <File Location="Custom/Kernel/Modules/CustomerTicketPrint.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL01vZHVsZXMvQ3VzdG9tZXJUaWNrZXRQcmludC5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6Q3VzdG9tZXJUaWNrZXRQcmludDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgUm90aGVyIE9TUyAvIENvbXBsZXRlIG5ldyBpbXBsZW1lbnRhdGlvbgp1c2UgdXRmODsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwp1c2UgUERGOjpBUEkyIHF3KG9wZW4pOwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IGJsZXNzIHslUGFyYW19LCAkVHlwZTsKCiAgICAjIHNldCBkZWJ1ZwogICAgJFNlbGYtPntEZWJ1Z30gPSAwOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICRTZWxmLT57QXJ0aWNsZUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBcnRpY2xlSUQnICkgfHwgJyc7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFNlbGYtPntUaWNrZXRJRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gVGlja2V0SUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVGlja2V0T2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CiAgICBteSAkTWFpbk9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwogICAgbXkgJEZpbGVUZW1wT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZpbGVUZW1wJyk7CgogICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgbXkgJEFjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEN1c3RvbWVyUGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAncm8nLAogICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBObyBwZXJtaXNzaW9uLCBkbyBub3Qgc2hvdyB0aWNrZXQuCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+Q3VzdG9tZXJOb1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ25vJyApIGlmICEkQWNjZXNzOwoKICAgICMgR2V0IEFDTCByZXN0cmljdGlvbnMuCiAgICBteSAlUG9zc2libGVBY3Rpb25zID0gKCAxID0+ICRTZWxmLT57QWN0aW9ufSApOwoKICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVQb3NzaWJsZUFjdGlvbnMsCiAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFRpY2tldElEICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIFJldHVyblR5cGUgICAgID0+ICdBY3Rpb24nLAogICAgICAgIFJldHVyblN1YlR5cGUgID0+ICctJywKICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVBY2xBY3Rpb24gPSAlUG9zc2libGVBY3Rpb25zOwoKICAgICMgY2hlY2sgaWYgQUNMIHJlc3RyaWN0aW9ucyBleGlzdAogICAgbXkgJUFjbEFjdGlvbkxvb2t1cCA9IHJldmVyc2UgJUFjbEFjdGlvbjsKCiAgICAjIHNob3cgZXJyb3Igc2NyZWVuIGlmIEFDTCBwcm9oaWJpdHMgdGhpcyBhY3Rpb24KICAgIGlmICggISRBY2xBY3Rpb25Mb29rdXB7ICRTZWxmLT57QWN0aW9ufSB9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5DdXN0b21lck5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAnbm8nICk7CiAgICB9CgogICAgIyBnZXQgdGlja2V0IGF0dHJpYnV0ZXMKICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICApOwoKICAgIG15ICRIVE1MID0gJFNlbGYtPl9DcmVhdGVIVE1MQ29udGVudCgKICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQsCiAgICApOwoKICAgIG15ICRIVE1MRmlsZURpcmVjdG9yeSA9ICRGaWxlVGVtcE9iamVjdC0+VGVtcERpcigpOwoKICAgIG15ICgkRmlsZUhhbmRsZSwgJEhUTUxGaWxlUGF0aCkgPSAkRmlsZVRlbXBPYmplY3QtPlRlbXBGaWxlKAogICAgICAgIFN1ZmZpeCA9PiAnLmh0bWwnLAogICAgKTsKICAgIGNsb3NlKCRGaWxlSGFuZGxlKTsKCiAgICAkTWFpbk9iamVjdC0+RmlsZVdyaXRlKAogICAgICAgIExvY2F0aW9uICAgID0+ICRIVE1MRmlsZVBhdGgsCiAgICAgICAgQ29udGVudCAgICAgPT4gXCRIVE1MLAogICAgKTsKCiAgICBteSAkUERGRmlsZVBhdGggPSAkU2VsZi0+X1ByaW50UERGKAogICAgICAgIEZpbGVUZW1wT2JqZWN0ICAgPT4gJEZpbGVUZW1wT2JqZWN0LAogICAgICAgIEhUTUxGaWxlUGF0aCAgICAgPT4gJEhUTUxGaWxlUGF0aCwKICAgICk7CgogICAgIyBjaGVjayBpZiB3ZSBnb3QgYSByZXN1bHQKICAgIGlmICghJFBERkZpbGVQYXRoKSB7CgogICAgICAgICMgZXJyb3IgbGlrZWx5IHN0ZW1zIGZyb20gY2hyb21lIHBhdGggbm90IGJlaW5nIGNvbmZpZ3VyZWQgYW5kIHdhcyBsb2dnZWQgZWFybGllciBpbiB0aGlzIGNhc2UKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdQREYgY2Fubm90IGJlIGdlbmVyYXRlZCEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yIGFuZCBjaGVjayB0aGUgbG9nIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGZpbGUgZXhpc3RzCiAgICBpZiAoICEtZSAkUERGRmlsZVBhdGggKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJQREYgZmlsZSAnJFBERkZpbGVQYXRoJyBkb2VzIG5vdCBleGlzdCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnUERGIGNhbm5vdCBiZSBnZW5lcmF0ZWQhJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvciBhbmQgY2hlY2sgdGhlIGxvZyBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyByZXR1cm4gdGhlIGRvY3VtZW50IGFzIHN0cmluZwogICAgbXkgJFBERiA9IFBERjo6QVBJMi0+b3BlbigkUERGRmlsZVBhdGgpOwoKICAgIG15ICRQREZTdHJpbmcgPSAkUERGLT5zdHJpbmdpZnkoKTsKICAgICRQREYtPmVuZCgpOwoKICAgICMgYXNzZW1ibGUgZmlsZW5hbWUKICAgIGlmICggJFNlbGYtPntVc2VyVGltZVpvbmV9ICkgewogICAgICAgICREYXRlVGltZU9iamVjdC0+VG9UaW1lWm9uZSggVGltZVpvbmUgPT4gJFNlbGYtPntVc2VyVGltZVpvbmV9ICk7CiAgICB9CiAgICBteSAkRmlsZW5hbWUgPSAnVGlja2V0XycgLiAkVGlja2V0e1RpY2tldE51bWJlcn0gLiAnXyc7CiAgICAkRmlsZW5hbWUgLj0gJERhdGVUaW1lT2JqZWN0LT5Gb3JtYXQoIEZvcm1hdCA9PiAnJVktJW0tJWRfJUhfJU0nICk7CiAgICAkRmlsZW5hbWUgLj0gJy5wZGYnOwoKICAgIG15ICRDbGVhbmVkRmlsZW5hbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5GaWxlbmFtZUNsZWFuVXAoCiAgICAgICAgRmlsZW5hbWUgPT4gJEZpbGVuYW1lLAogICAgICAgIFR5cGUgICAgID0+ICdBdHRhY2htZW50JywKICAgICk7CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgRmlsZW5hbWUgICAgPT4gJENsZWFuZWRGaWxlbmFtZSwKICAgICAgICBDb250ZW50VHlwZSA9PiAiYXBwbGljYXRpb24vcGRmIiwKICAgICAgICBDb250ZW50ICAgICA9PiAkUERGU3RyaW5nLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgKTsKfQoKc3ViIF9DcmVhdGVIVE1MQ29udGVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlVGlja2V0ID0gJXsgJFBhcmFte1RpY2tldH0gfTsKCiAgICBteSAkTGF5b3V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwogICAgbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJE1haW5PYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICREaXNwbGF5U2V0dGluZ3MgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0UHJpbnQnKSAvLyB7fTsKCiAgICBteSAkT3JkZXIgPSAkU2VsZi0+e0FydGljbGVTb3J0fSBlcSAncmV2ZXJzZScgPyAnREVTQycgOiAnQVNDJzsKCiAgICAjIEdldCBhbGwgYXJ0aWNsZXMuCiAgICBteSBAQXJ0aWNsZUJveCA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgKTsKCiAgICBpZiAoICRPcmRlciBlcSAnREVTQycgKSB7CiAgICAgICAgQEFydGljbGVCb3ggPSByZXZlcnNlIEBBcnRpY2xlQm94OwogICAgfQoKICAgICMgc2hvdyBvbmx5IHNwZWNpZmllZCBhcnRpY2xlCiAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUlEfSkgewogICAgICAgIEFSVElDTEU6CiAgICAgICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZUJveCkgewogICAgICAgICAgICBuZXh0IEFSVElDTEUgaWYgISRBcnRpY2xlLT57QXJ0aWNsZUlEfTsKICAgICAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICRTZWxmLT57QXJ0aWNsZUlEfSBuZSAkQXJ0aWNsZS0+e0FydGljbGVJRH07CgogICAgICAgICAgICBAQXJ0aWNsZUJveCA9ICgkQXJ0aWNsZSk7CgogICAgICAgICAgICBsYXN0IEFSVElDTEU7CiAgICAgICAgfQogICAgfQoKICAgICMgYWdlIGRlc2lnbgogICAgJFRpY2tldHtBZ2V9ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJBZ2UoCiAgICAgICAgQWdlICAgPT4gJFRpY2tldHtBZ2V9LAogICAgICAgIFNwYWNlID0+ICcgJwogICAgKTsKCiAgICBteSAkVGlja2V0SW5mb0hUTUwgPSAkRGlzcGxheVNldHRpbmdzLT57VGlja2V0SW5mb3JtYXRpb259ID8gJFNlbGYtPl9SZW5kZXJUaWNrZXRJbmZvKCAlVGlja2V0ICkgOiAnJzsKCiAgICAjIHNldCBkaXNwbGF5IG9wdGlvbnMKICAgICRQYXJhbXtIb29rfSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rJykgfHwgJ1RpY2tldCMnOwoKICAgICMgbnVtYmVyIG9mIGFydGljbGVzCiAgICAkUGFyYW17QXJ0aWNsZUNvdW50fSA9IHNjYWxhciBAQXJ0aWNsZUJveDsKCiAgICAjIHByaW50IGxvZ28KICAgICRQYXJhbXtQREZMb2dvfSA9ICcnOwogICAgaWYgKCAkRGlzcGxheVNldHRpbmdzLT57UHJpbnRMb2dvRmlsZX0gKSB7CiAgICAgICAgJFBhcmFte1BERkxvZ299ID0gJERpc3BsYXlTZXR0aW5ncy0+e1ByaW50TG9nb0ZpbGV9OwogICAgfQoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0hlYWRlcicsCiAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJVRpY2tldCB9LAogICAgKTsKCiAgICBteSBAQXJ0aWNsZUlEczsKICAgIG15ICRBcnRpY2xlV2lkZ2V0c0hUTUwgPSAnJzsKCiAgICBBUlRJQ0xFOgogICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZUJveCkgewoKICAgICAgICAkQXJ0aWNsZVdpZGdldHNIVE1MIC49ICRTZWxmLT5fQXJ0aWNsZVJlbmRlcigKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICAgICA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIHB1c2ggQEFydGljbGVJRHMsICRBcnRpY2xlLT57QXJ0aWNsZUlEfTsKICAgIH0KCiAgICAkUGFyYW17QXJ0aWNsZUl0ZW1zfSA9ICRBcnRpY2xlV2lkZ2V0c0hUTUw7CgogICAgIyBzaG93IG5vIGFydGljbGVzIGJsb2NrIGlmIHRpY2tldCBkb2VzIG5vdCBjb250YWluIGFydGljbGVzCiAgICBpZiAoICFAQXJ0aWNsZUJveCApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSGludE5vQXJ0aWNsZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyByZXR1cm4gb3V0cHV0CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQ3VzdG9tZXJUaWNrZXRQcmludCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlVGlja2V0LAogICAgICAgICAgICBUaWNrZXRJbmZvSFRNTCA9PiAkVGlja2V0SW5mb0hUTUwsCiAgICAgICAgfSwKICAgICk7Cn0KCj1oZWFkMiBfQXJ0aWNsZVJlbmRlcigpCgpSZXR1cm5zIGFydGljbGUgaHRtbC4KCkltcGxlbWVudGF0aW9uIGJhc2VkIG9uCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBZ2VudDo6TUlNRUJhc2UtPkFydGljbGVSZW5kZXIoKSBhbmQKS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldEFydGljbGVDb250ZW50LT5SdW4oKQoKUmVzdWx0OgogICAgJEhUTUwgPSAiPGRpdj4uLi48L2Rpdj4iOwoKPWN1dAoKc3ViIF9BcnRpY2xlUmVuZGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXJ0aWNsZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICRQYXJhbXtTaG93QnJvd3NlckxpbmtNZXNzYWdlfSA9IDA7CgogICAgbXkgJExheW91dE9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRBcnRpY2xlQmFzZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpDdXN0b21lcjo6QmFzZScpOwoKIyBGaXJzdCBwYXJ0IGlzIGJhc2VkIG9uIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBZ2VudDo6TUlNRUJhc2UtPkFydGljbGVSZW5kZXIoKQoKICAgICMgR2V0IGFydGljbGUgZGF0YS4KICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QmFja2VuZEZvckFydGljbGUoJVBhcmFtKTsKCiAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAlUGFyYW0sCiAgICAgICAgUmVhbE5hbWVzID0+IDEsCiAgICApOwogICAgaWYgKCAhJUFydGljbGUgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBcnRpY2xlIG5vdCBmb3VuZCAoQXJ0aWNsZUlEPSRQYXJhbXtBcnRpY2xlSUR9KSEiCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBHZXQgY2hhbm5lbCBzcGVjaWZpYyBmaWVsZHMKICAgIG15ICVBcnRpY2xlRmllbGRzID0gJExheW91dE9iamVjdC0+QXJ0aWNsZUZpZWxkcyglUGFyYW0pOwoKICAgICMgR2V0IGR5bmFtaWMgZmllbGRzIGFuZCBhY2NvdW50ZWQgdGltZQogICAgbXkgJUFydGljbGVNZXRhRmllbGRzID0gJEFydGljbGVCYXNlT2JqZWN0LT5BcnRpY2xlTWV0YUZpZWxkcygKICAgICAgICAlUGFyYW0sCiAgICAgICAgRGlzcGxheVNldHRpbmdzU291cmNlID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldFByaW50JwogICAgKTsKCiAgICAjIFNob3cgY3JlYXRlZCBieSBzdHJpbmcsIGlmIGNyZWF0b3IgaXMgZGlmZmVyZW50IGZyb20gYWRtaW4gdXNlci4KICAgIGlmICggJEFydGljbGV7Q3JlYXRlQnl9ID4gMSApIHsKICAgICAgICAkQXJ0aWNsZXtDcmVhdGVCeVVzZXJ9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlck5hbWUoIFVzZXJJRCA9PiAkQXJ0aWNsZXtDcmVhdGVCeX0gKTsKICAgIH0KCiAgICBteSAlQ29tbXVuaWNhdGlvbkNoYW5uZWwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29tbXVuaWNhdGlvbkNoYW5uZWwnKS0+Q2hhbm5lbEdldCgKICAgICAgICBDaGFubmVsSUQgPT4gJEFydGljbGV7Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0sCiAgICApOwoKIyBJbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50VGlja2V0QXJ0aWNsZUNvbnRlbnQgZnJvbSBoZXJlIG9uLgoKICAgIG15ICRBcnRpY2xlU3RvcmFnZSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpBcnRpY2xlOjpCYWNrZW5kOjpNSU1FQmFzZTo6QXJ0aWNsZVN0b3JhZ2UnKTsKCiAgICBteSAkUmljaFRleHRFbmFibGVkID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpab29tUmljaFRleHRGb3JjZScpCiAgICAgICAgfHwgJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0KICAgICAgICB8fCAwOwoKICAgICMgU2hvdyBIVE1MIGlmIFJpY2hUZXh0IGlzIGVuYWJsZWQgYW5kIEhUTUwgYXR0YWNobWVudCBpc24ndCBtaXNzaW5nLgogICAgbXkgJFNob3dIVE1MID0gJFJpY2hUZXh0RW5hYmxlZDsKCiAgICBteSAkSFRNTEJvZHlBdHRhY2hJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlOjpNSU1FQmFzZScpLT5IVE1MQm9keUF0dGFjaG1lbnRJREdldCgKICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICA9PiAkQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAkU2hvd0hUTUwgJiYgISRIVE1MQm9keUF0dGFjaElEICkgewogICAgICAgICRTaG93SFRNTCA9IDA7CiAgICB9CgogICAgbXkgJEFydGljbGVDb250ZW50OwogICAgaWYgKCAkU2hvd0hUTUwgKSB7CiAgICAgICAgJEFydGljbGVDb250ZW50ID0gJExheW91dE9iamVjdC0+QXJ0aWNsZVByZXZpZXcoCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJEFydGljbGV7QXJ0aWNsZUlEfSwKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICA9PiAkQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gMCwKICAgICAgICAgICAgQXJ0aWNsZVN0b3JhZ2UgICAgICA9PiAkQXJ0aWNsZVN0b3JhZ2UsCiAgICAgICAgICAgIFNvdXJjZUFydGljbGVJRCAgICAgPT4gJFNlbGYtPntTb3VyY2VBcnRpY2xlSUR9LAogICAgICAgICAgICBSZXN1bHRUeXBlICAgICAgICAgID0+ICdodG1sJywKICAgICAgICApOwoKICAgIH0KICAgIGVsc2UgewogICAgICAgICRBcnRpY2xlQ29udGVudCA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVQcmV2aWV3KAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJEFydGljbGV7VGlja2V0SUR9LAogICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+IDAsCiAgICAgICAgICAgIEFydGljbGVTdG9yYWdlICAgICAgPT4gJEFydGljbGVTdG9yYWdlLAogICAgICAgICAgICBTb3VyY2VBcnRpY2xlSUQgICAgID0+ICRTZWxmLT57U291cmNlQXJ0aWNsZUlEfSwKICAgICAgICAgICAgUmVzdWx0VHlwZSAgICAgICAgICA9PiAncGxhaW4nLAogICAgICAgICk7CgogICAgICAgICMgaHRtbCBxdW90aW5nCiAgICAgICAgJEFydGljbGVDb250ZW50ID0gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCgKICAgICAgICAgICAgTmV3TGluZSAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdEZWZhdWx0Vmlld05ld0xpbmUnKSwKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJEFydGljbGVDb250ZW50LAogICAgICAgICAgICBWTWF4ICAgICAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0RlZmF1bHRWaWV3TGluZXMnKSB8fCA1MDAwLAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICBMaW5rRmVhdHVyZSAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJEFydGljbGVDb250ZW50ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTm8gc3VjaCBhcnRpY2xlIScsCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBiYXNlIHVybAogICAgbXkgJFVSTDsKCiAgICBpZiAoICEkU2VsZi0+e1ZlcnNpb25WaWV3fSApIHsKICAgICAgICAkVVJMID0gJ0FjdGlvbj1BZ2VudFRpY2tldEF0dGFjaG1lbnQ7U3ViYWN0aW9uPUhUTUxWaWV3JwogICAgICAgICAgICAuICI7VGlja2V0SUQ9JEFydGljbGV7VGlja2V0SUR9O0FydGljbGVJRD0kQXJ0aWNsZXtBcnRpY2xlSUR9O0ZpbGVJRD0iOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFVSTCA9ICdBY3Rpb249QWdlbnRUaWNrZXRBdHRhY2htZW50O1N1YmFjdGlvbj1IVE1MVmlldycKICAgICAgICAgICAgLiAiO1RpY2tldElEPSRBcnRpY2xle1RpY2tldElEfTtBcnRpY2xlSUQ9JEFydGljbGV7QXJ0aWNsZUlEfTtWZXJzaW9uVmlldz0xO1NvdXJjZUFydGljbGVJRD0kU2VsZi0+e1NvdXJjZUFydGljbGVJRH07RmlsZUlEPSI7CiAgICB9CgogICAgIyByZXBsYWNlIGxpbmtzIHRvIGlubGluZSBpbWFnZXMgaW4gaHRtbCBjb250ZW50CiAgICBteSAlQXRtQm94ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgIEFydGljbGVJRCAgICAgICA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgIFNvdXJjZUFydGljbGVJRCA9PiAkU2VsZi0+e1NvdXJjZUFydGljbGVJRH0sCiAgICApOwoKICAgICMgRG8gbm90IGxvYWQgZXh0ZXJuYWwgaW1hZ2VzIGlmICdCbG9ja0xvYWRpbmdSZW1vdGVDb250ZW50JyBpcyBlbmFibGVkLgogICAgbXkgJExvYWRFeHRlcm5hbEltYWdlcyA9IDE7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QmxvY2tMb2FkaW5nUmVtb3RlQ29udGVudCcpICkgewogICAgICAgICRMb2FkRXh0ZXJuYWxJbWFnZXMgPSAwOwogICAgfQoKICAgIG15ICRTZW5kZXJJbml0aWFscyAgPSAkTGF5b3V0T2JqZWN0LT5Vc2VySW5pdGlhbHNHZXQoCiAgICAgICAgRnVsbG5hbWUgPT4gJEFydGljbGV7RnJvbVJlYWxuYW1lfSwKICAgICk7CgogICAgbXkgJFNlbmRlckltYWdlID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBZ2VudDo6QmFzZScpLT5fQXJ0aWNsZVNlbmRlckltYWdlKAogICAgICAgIFNlbmRlciA9PiAkQXJ0aWNsZXtGcm9tfSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAkQXJ0aWNsZUNvbnRlbnQgPX4gc3sKICAgICAgICAoPXwifCcpY2lkOiguKj8pKCJ8J3w+fFwvPnxccykKICAgIH0KICAgIHsKICAgICAgICBteSAkU3RhcnQ9ICQxOwogICAgICAgIG15ICRDb250ZW50SUQgPSAkMjsKICAgICAgICBteSAkRW5kID0gJDM7CiAgICAgICAgbXkgJENvbnRlbnQgPSAnJzsKCiAgICAgICAgIyBpbXByb3ZlIGh0bWwgcXVhbGl0eQogICAgICAgIGlmICggJFN0YXJ0IG5lICciJyAmJiAkU3RhcnQgbmUgJ1wnJyApIHsKICAgICAgICAgICAgJFN0YXJ0IC49ICciJzsKICAgICAgICB9CiAgICAgICAgaWYgKCAkRW5kIG5lICciJyAmJiAkRW5kIG5lICdcJycgKSB7CiAgICAgICAgICAgICRFbmQgPSAnIicgLiAkRW5kOwogICAgICAgIH0KCiAgICAgICAgIyBmaW5kIG1hdGNoaW5nIGF0dGFjaG1lbnQgYW5kIHJlcGxhY2UgaXQgd2l0aCBiYXNlNjQgb2YgaW1hZ2UKICAgICAgICBBVFRBQ0hNRU5UX0lEOgogICAgICAgIGZvciBteSAkQXR0YWNobWVudElEICggc29ydCBrZXlzICVBdG1Cb3ggKSB7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVF9JRCBpZiBsYyAkQXRtQm94eyRBdHRhY2htZW50SUR9e0NvbnRlbnRJRH0gbmUgbGMgIjwkQ29udGVudElEPiI7CgogICAgICAgICAgICBteSAlQXR0YWNobWVudCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGV7QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIEZpbGVJRCAgICA9PiAkQXR0YWNobWVudElELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgKCAkQ29udGVudFR5cGUgKSA9ICVBdHRhY2htZW50ICYmICRBdHRhY2htZW50e0NvbnRlbnRUeXBlfSA/ICggJEF0dGFjaG1lbnR7Q29udGVudFR5cGV9ID1+IC9eKFteO10rKS8gKSA6ICgpOwoKICAgICAgICAgICAgJENvbnRlbnQgPSAkQ29udGVudFR5cGUgJiYgJEF0dGFjaG1lbnR7Q29udGVudH0gPyAiZGF0YTokQ29udGVudFR5cGU7YmFzZTY0LCIgLiBNSU1FOjpCYXNlNjQ6OmVuY29kZV9iYXNlNjQoICRBdHRhY2htZW50e0NvbnRlbnR9ICkgOiAiIjsKCiAgICAgICAgICAgIGxhc3QgQVRUQUNITUVOVF9JRDsKICAgICAgICB9CgogICAgICAgICMgcmV0dXJuIG5ldyBydW50aW1lIHVybAogICAgICAgICRTdGFydCAuICRDb250ZW50IC4gJEVuZDsKICAgIH1lZ3hpOwoKICAgICMgaW5saW5lIGltYWdlcyB1c2luZyBDb250ZW50LUxvY2F0aW9uIGFzIGlkZW50aWZpZXIgaW5zdGVhZCBvZiBDb250ZW50LUlEIGV2ZW4gUkZDMjU1NwogICAgIyBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyNTU3LnR4dAogICAgIyBmaW5kIG1hdGNoaW5nIGF0dGFjaG1lbnQgYW5kIHJlcGxhY2UgaXQgd2l0aCBydW50bGltZSB1cmwgdG8gaW1hZ2UKICAgIEFUVEFDSE1FTlQ6CiAgICBmb3IgbXkgJEF0dGFjaG1lbnRJRCAoIHNvcnQga2V5cyAlQXRtQm94ICkgewogICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJEF0bUJveHskQXR0YWNobWVudElEfXtDb250ZW50SUR9OwoKICAgICAgICAjIGNvbnRlbnQgaWQgY2xlYW51cAogICAgICAgICRBdG1Cb3h7JEF0dGFjaG1lbnRJRH17Q29udGVudElEfSA9fiBzL148Ly87CiAgICAgICAgJEF0bUJveHskQXR0YWNobWVudElEfXtDb250ZW50SUR9ID1+IHMvPiQvLzsKCiAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkQXRtQm94eyRBdHRhY2htZW50SUR9e0NvbnRlbnRJRH07CgogICAgICAgICRBcnRpY2xle0JvZHl9ID1+IHN7CiAgICAgICAgICAgICg9fCJ8JykoXFEkQXRtQm94eyRBdHRhY2htZW50SUR9e0NvbnRlbnRJRH1cRSkoInwnfD58XC8+fFxzKQogICAgICAgIH0KICAgICAgICB7CiAgICAgICAgICAgIG15ICRTdGFydD0gJDE7CiAgICAgICAgICAgIG15ICRDb250ZW50SUQgPSAkMjsKICAgICAgICAgICAgbXkgJEVuZCA9ICQzOwoKICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBGaWxlSUQgICAgPT4gJEF0dGFjaG1lbnRJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICggJENvbnRlbnRUeXBlICkgPSAlQXR0YWNobWVudCAmJiAkQXR0YWNobWVudHtDb250ZW50VHlwZX0gPyAoICRBdHRhY2htZW50e0NvbnRlbnRUeXBlfSA9fiAvXihbXjtdKykvICkgOiAoKTsKCiAgICAgICAgICAgIG15ICRDb250ZW50ID0gJENvbnRlbnRUeXBlICYmICRBdHRhY2htZW50e0NvbnRlbnR9ID8gImRhdGE6JENvbnRlbnRUeXBlO2Jhc2U2NCwiIC4gTUlNRTo6QmFzZTY0OjplbmNvZGVfYmFzZTY0KCAkQXR0YWNobWVudHtDb250ZW50fSApIDogIiI7CiAgICAgICAgICAgICRTdGFydCAuICRDb250ZW50IC4gJEVuZDsKICAgICAgICB9ZWd4aTsKICAgIH0KCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBDb250ZW50ICAgICAgICAgICAgPT4gJEFydGljbGVDb250ZW50LAogICAgICAgIENvbnRlbnRBbHRlcm5hdGl2ZSA9PiAnJywKICAgICAgICBDb250ZW50SUQgICAgICAgICAgPT4gJycsCiAgICAgICAgQ29udGVudFR5cGUgICAgICAgID0+ICd0ZXh0L2h0bWw7IGNoYXJzZXQ9InV0Zi04IicsCiAgICAgICAgRGlzcG9zaXRpb24gICAgICAgID0+ICdpbmxpbmUnLAogICAgKTsKCiAgICAjIGlmIHRoZXJlIGlzIHVuZXhwZWN0ZWRseSBwZ3AgZGVjcnlwdGVkIGNvbnRlbnQgaW4gdGhlIGh0bWwgZW1haWwgKE9FKSwKICAgICMgd2Ugd2lsbCB1c2UgdGhlIGFydGljbGUgYm9keSAocGxhaW4gdGV4dCkgZnJvbSB0aGUgZGF0YWJhc2UgYXMgZmFsbCBiYWNrCiAgICAjIHNlZSBidWcjOTY3MgogICAgaWYgKAogICAgICAgICREYXRhe0NvbnRlbnR9ID1+IG17CiAgICAgICAgXiAuKiAtLS0tLUJFR0lOIFsgXSBQR1AgWyBdIE1FU1NBR0UtLS0tLSAgLiogJCAgICAgICMgZ3JlcCBQR1AgYmVnaW4gdGFnCiAgICAgICAgLisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUEdQIHBhcnRzIG1heSBiZSBuZXN0ZWQgaW4gaHRtbAogICAgICAgIF4gLiogLS0tLS1FTkQgWyBdIFBHUCBbIF0gTUVTU0FHRS0tLS0tICAuKiAkICAgICAgICAjIGdyZXAgUEdQIGVuZCB0YWcKICAgIH14bXMKICAgICAgICApCiAgICB7CgogICAgICAgICMgaHRtbCBxdW90aW5nCiAgICAgICAgJEFydGljbGV7Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICBOZXdMaW5lICAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0RlZmF1bHRWaWV3TmV3TGluZScpLAogICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkQXJ0aWNsZXtCb2R5fSwKICAgICAgICAgICAgVk1heCAgICAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdEZWZhdWx0Vmlld0xpbmVzJykgfHwgNTAwMCwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICAgICAgTGlua0ZlYXR1cmUgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHVzZSB0aGUgYXJ0aWNsZSBib2R5IGFzIGNvbnRlbnQsIGJlY2F1c2UgcGdwIHdhcyBkZWZpbml0bHkgZGVjcnlwdGVkIGlmIHBvc3NpYmxlCiAgICAgICAgJERhdGF7Q29udGVudH0gPSAkQXJ0aWNsZXtCb2R5fTsKICAgIH0KCiAgICAkQXJ0aWNsZUNvbnRlbnQgPSAkRGF0YXtDb250ZW50fTsKCiAgICAjIGV4dHJhY3Qgc3R5bGVzIGZyb20gYXJ0aWNsZXMKICAgIG15IEBTdHlsZXM7CiAgICAkQXJ0aWNsZUNvbnRlbnQgPX4gcy8oPHN0eWxlW148Pl0qPikoLio/KSg8XC9zdHlsZT4pL3B1c2ggQFN0eWxlcywgWyQxLCAkMiwgJDNdOyAiIi9nc2U7CiAgICBteSAkQ29tYmluZWRTdHlsZXMgPSBqb2luKCJcbiIsIG1hcCB7ICRfLT5bMV0gfSBAU3R5bGVzKTsKCiAgICAjcmVtb3ZlIG1ldGEgdGFnCiAgICAkQXJ0aWNsZUNvbnRlbnQgPX4gcy88bWV0YVtePD5dKj4vL2c7CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1RpY2tldFByaW50SFRNTC9NSU1FQmFzZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgIEFydGljbGVGaWVsZHMgICAgICAgID0+IFwlQXJ0aWNsZUZpZWxkcywKICAgICAgICAgICAgQ29tbXVuaWNhdGlvbkNoYW5uZWwgPT4gJENvbW11bmljYXRpb25DaGFubmVse0Rpc3BsYXlOYW1lfSwKICAgICAgICAgICAgQXJ0aWNsZU1ldGFGaWVsZHMgICAgPT4gXCVBcnRpY2xlTWV0YUZpZWxkcywKICAgICAgICAgICAgU2VuZGVySW1hZ2UgICAgICAgICAgPT4gJFNlbmRlckltYWdlLAogICAgICAgICAgICBTZW5kZXJJbml0aWFscyAgICAgICA9PiAkU2VuZGVySW5pdGlhbHMsCiAgICAgICAgICAgIEhUTUwgICAgICAgICAgICAgICAgID0+ICRBcnRpY2xlQ29udGVudCwKICAgICAgICAgICAgU3R5bGVzICAgICAgICAgICAgICAgPT4gJENvbWJpbmVkU3R5bGVzCiAgICAgICAgfSwKICAgICkKfQoKPWhlYWQyIF9QcmludFBERigpCgpHZW5lcmF0ZXMgYSBQREYgZnJvbSBhbiBIVE1MIGZpbGUgdXNpbmcgR29vZ2xlIENocm9tZSBpbiBoZWFkbGVzcyBtb2RlLgoKVGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGUgcGF0aCB0byB0aGUgSFRNTCBmaWxlIHRvIGJlIHNwZWNpZmllZCBpbiB0aGUKQzxIVE1MRmlsZVBhdGg+IHBhcmFtZXRlci4gSXQgcmV0cmlldmVzIHRoZSBwYXRoIHRvIHRoZSBHb29nbGUgQ2hyb21lIGJpbmFyeQpmcm9tIHRoZSBjb25maWd1cmF0aW9uIGFuZCBleGVjdXRlcyBDaHJvbWUgd2l0aCBzcGVjaWZpYyBmbGFncyB0byBjb252ZXJ0IHRoZQpIVE1MIGZpbGUgdG8gYSBQREYuCgpSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSByZXN1bHRpbmcgLnBkZiBmaWxlLgoKPWN1dAoKc3ViIF9QcmludFBERiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgIyBGaWxlVGVtcE9iamVjdCBtdXN0IGJlIHBhc3NlZCB0byBwcmV2ZW50IHByZW1hdHVyZSBmaWxlIGRlbGV0aW9uCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoSFRNTEZpbGVQYXRoIEZpbGVUZW1wT2JqZWN0KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJEZpbGVUZW1wT2JqZWN0ID0gJFBhcmFteydGaWxlVGVtcE9iamVjdCd9OwoKICAgIG15ICRIVE1MRmlsZVBhdGggPSAkUGFyYW17SFRNTEZpbGVQYXRofTsKICAgIG15ICgkRmlsZUhhbmRsZSwgJFBERkZpbGVQYXRoKSA9ICRGaWxlVGVtcE9iamVjdC0+VGVtcEZpbGUoCiAgICAgICAgU3VmZml4ID0+ICcucGRmJwogICAgKTsKICAgICRGaWxlSGFuZGxlLT5jbG9zZSgpOwoKICAgIG15ICRDaHJvbWVQYXRoID0gJENvbmZpZ09iamVjdC0+R2V0KCdHb29nbGVDaHJvbWU6OkJpbicpOwogICAgaWYgKCAhJENocm9tZVBhdGggKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJHb29nbGUgQ2hyb21lIHBhdGggbm90IGNvbmZpZ3VyZWQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkQ29tbWFuZFJlc3VsdCA9IGAnJENocm9tZVBhdGgnIC0tYWdncmVzc2l2ZS1jYWNoZS1kaXNjYXJkIC0taGVhZGxlc3MgLS1wcmludC10by1wZGY9JyRQREZGaWxlUGF0aCcgLS1uby1wZGYtaGVhZGVyLWZvb3RlciAtLXZpcnR1YWwtdGltZS1idWRnZXQ9MjUwMDAgJyRIVE1MRmlsZVBhdGgnIDI+JjFgOwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICBNZXNzYWdlICA9PiAiQ2hyb21lIFBERiBQcmludDogIiAuICRDb21tYW5kUmVzdWx0LAogICAgKTsKCiAgICByZXR1cm4gJFBERkZpbGVQYXRoOwp9CgpzdWIgX1JlbmRlclRpY2tldEluZm8gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRQcmludCIpIC8vIHt9OwoKICAgICMgdGlja2V0IHR5cGUKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlR5cGUnKSAmJiAkQ29uZmlnLT57QXR0cmlidXRlc1ZpZXd9LT57VHlwZX0gKSB7CgogICAgICAgIG15ICVUeXBlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKS0+VHlwZUdldCgKICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1R5cGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFZhbGlkID0+ICRUeXBle1ZhbGlkSUR9LAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRpY2tldCBzZXJ2aWNlCiAgICBpZiAoCiAgICAgICAgJFBhcmFte1NlcnZpY2V9CiAgICAgICAgJiYKICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpCiAgICAgICAgJiYgJENvbmZpZy0+e0F0dHJpYnV0ZXNWaWV3fS0+e1NlcnZpY2V9CiAgICAgICAgKQogICAgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgaWYgKAogICAgICAgICAgICAkUGFyYW17U0xBfQogICAgICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpCiAgICAgICAgICAgICYmICRDb25maWctPntBdHRyaWJ1dGVzVmlld30tPntTTEF9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU0xBJywKICAgICAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyB0aWNrZXQgc3RhdGUKICAgIGlmICggJENvbmZpZy0+e0F0dHJpYnV0ZXNWaWV3fS0+e1N0YXRlfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRpY2tldCBwcmlvcml0eQogICAgaWYgKCAkQ29uZmlnLT57QXR0cmlidXRlc1ZpZXd9LT57UHJpb3JpdHl9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgdGlja2V0IHF1ZXVlCiAgICBpZiAoICRDb25maWctPntBdHRyaWJ1dGVzVmlld30tPntRdWV1ZX0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJEFnZW50VXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyB0aWNrZXQgb3duZXIKICAgIGlmICggJENvbmZpZy0+e0F0dHJpYnV0ZXNWaWV3fS0+e093bmVyfSApIHsKICAgICAgICBteSAkT3duZXJOYW1lID0gJEFnZW50VXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17T3duZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3duZXInLAogICAgICAgICAgICBEYXRhID0+IHsgT3duZXJOYW1lID0+ICRPd25lck5hbWUgfSwKICAgICAgICApOwogICAgfQoKICAgICMgdGlja2V0IHJlc3BvbnNpYmxlCiAgICBpZiAoCiAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlJlc3BvbnNpYmxlJykKICAgICAgICAmJgogICAgICAgICRDb25maWctPntBdHRyaWJ1dGVzVmlld30tPntSZXNwb25zaWJsZX0KICAgICAgICApCiAgICB7CiAgICAgICAgbXkgJFJlc3BvbnNpYmxlTmFtZSA9ICRBZ2VudFVzZXJPYmplY3QtPlVzZXJOYW1lKAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1Jlc3BvbnNpYmxlSUR9LAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3BvbnNpYmxlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZU5hbWUgPT4gJFJlc3BvbnNpYmxlTmFtZSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRUaWNrZXRPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwogICAgbXkgJEJhY2tlbmRPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRpY2tldCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydUaWNrZXQnXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICk7CgogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBza2lwIHRoZSBkeW5hbWljIGZpZWxkIGlmIGlzIG5vdCBkZXNpZ25lZCBmb3IgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICAgICAgbXkgJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlID0gJEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgQmVoYXZpb3IgICAgICAgICAgID0+ICdJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZScsCiAgICAgICAgKTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlOwoKICAgICAgICBteSAkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICApOwoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhZGVmaW5lZCAkVmFsdWU7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJFZhbHVlIGVxICIiOwoKICAgICAgICAjIGdldCBwcmludCBzdHJpbmcgZm9yIHRoaXMgZHluYW1pYyBmaWVsZAogICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRWYWx1ZSwKIyAgICAgICAgICAgIFZhbHVlTWF4Q2hhcnMgICAgICA9PiAxMDAsCiAgICAgICAgICAgIEhUTUxPdXRwdXQgICAgICAgICA9PiAwLAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICApOwoKICAgICAgICBteSAkTGFiZWwgPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9OwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0RHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkTGFiZWwsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e0xpbmt9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldER5bmFtaWNGaWVsZExpbmsnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgICAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgICAgICAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57TGlua1ByZXZpZXd9LAogICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0RHluYW1pY0ZpZWxkUGxhaW4nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0N1c3RvbWVyVGlja2V0Wm9vbS9UaWNrZXRJbmZvJywKICAgICAgICBEYXRhICAgICAgICAgPT4ge30sCiAgICApOwp9CgojIEVPIFJvdGhlciBPU1MKMTsK</File>
        <File Location="Custom/Kernel/Output/HTML/TicketZoom/Agent/Base.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL091dHB1dC9IVE1ML1RpY2tldFpvb20vQWdlbnQvQmFzZS5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZDQwNzVjMDMwNTdkNWZlYWEyYzc1ZGZjMWY2NmE4ZGVkMzNlM2FhIC0gS2VybmVsL091dHB1dC9IVE1ML1RpY2tldFpvb20vQWdlbnQvQmFzZS5wbQojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBZ2VudDo6QmFzZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBEaWdlc3Q6Ok1ENSBxdyhtZDVfaGV4KTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyhJc0hhc2hSZWZXaXRoRGF0YSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkVuY29kZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN5c3RlbUFkZHJlc3MnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgQXJ0aWNsZVJlbmRlcigpCgpSZXR1cm5zIGFydGljbGUgaHRtbC4KCiAgICBteSAkSFRNTCA9ICRBcnRpY2xlQmFzZU9iamVjdC0+QXJ0aWNsZVJlbmRlcigKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgID0+IDEyMywgICAgICAgICAjIChyZXF1aXJlZCkKICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgICAgID0+IDEyMywgICAgICAgICAjIChyZXF1aXJlZCkKICAgICAgICBTaG93QnJvd3NlckxpbmtNZXNzYWdlID0+IDEsICAgICAgICAgICAjIChvcHRpb25hbCkgRGVmYXVsdDogMC4KICAgICAgICBBcnRpY2xlQWN0aW9ucyAgICAgICAgID0+IFtdLCAgICAgICAgICAjIChvcHRpb25hbCkKICAgICk7CgpSZXN1bHQ6CiAgICAkSFRNTCA9ICI8ZGl2Pi4uLjwvZGl2PiI7Cgo9Y3V0CgpzdWIgQXJ0aWNsZVJlbmRlciB7CiAgICBkaWUgJ1ZpcnR1YWwgbWV0aG9kIGluIGJhc2UgY2xhc3MgbXVzdCBub3QgYmUgY2FsbGVkLic7Cn0KCj1oZWFkMiBBcnRpY2xlTWV0YUZpZWxkcygpCgpSZXR1cm5zIGNvbW1vbiBmaWVsZHMgZm9yIGFueSBhcnRpY2xlLgoKICAgIG15ICVBcnRpY2xlTWV0YUZpZWxkcyA9ICRBcnRpY2xlQmFzZU9iamVjdC0+QXJ0aWNsZU1ldGFGaWVsZHMoCiAgICAgICAgVGlja2V0SUQgID0+IDEyMywgICAjIChyZXF1aXJlZCkKICAgICAgICBBcnRpY2xlSUQgPT4gMTIzLCAgICMgKHJlcXVpcmVkKQogICAgKTsKClJldHVybnM6CgogICAgJUFydGljbGVNZXRhRmllbGRzID0gKAogICAgICAgIER5bmFtaWNGaWVsZF9JdGVtID0+IHsKICAgICAgICAgICAgTGFiZWwgPT4gJ0l0ZW0nLCAgICAgICAgICAgICMgbWFuZGF0b3J5CiAgICAgICAgICAgIFZhbHVlID0+ICdWYWx1ZScsICAgICAgICAgICAjIG1hbmRhdG9yeQogICAgICAgICAgICBMaW5rID0+ICdodHRwOi8vLi4uJywgICAgICAgIyBvcHRpb25hbAogICAgICAgIH0sCiAgICAgICAgQWNjb3VudGVkVGltZSA9PiB7CiAgICAgICAgICAgIC4uLgogICAgICAgIH0sCiAgICApOwoKPWN1dAoKc3ViIEFydGljbGVNZXRhRmllbGRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXJ0aWNsZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwogICAgbXkgJExheW91dE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgbXkgJVJlc3VsdDsKIyBSb3RoZXJPU1MgLyBUaWNrZXRQcmludEhUTUwKICAgIG15ICREaXNwbGF5U2V0dGluZ3NTb3VyY2UgPSAkUGFyYW17RGlzcGxheVNldHRpbmdzU291cmNlfSB8fCAnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tJzsKIyBFTyBUaWNrZXRQcmludEhUTUwKCiAgICAjIHNob3cgYWNjb3VudGVkIGFydGljbGUgdGltZQogICAgaWYgKAogICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0Ojpab29tVGltZURpc3BsYXknKQogICAgICAgICYmICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWNjb3VudFRpbWUnKQogICAgICAgICkKICAgIHsKICAgICAgICBteSAkQXJ0aWNsZVRpbWUgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkUGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICApOwogICAgICAgIGlmICgkQXJ0aWNsZVRpbWUpIHsKICAgICAgICAgICAgJFJlc3VsdHtUaW1lfSA9IHsKICAgICAgICAgICAgICAgIExhYmVsID0+ICJUaW1lIiwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRBcnRpY2xlVGltZSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiB0aWNrZXQgaXMgbm9ybWFsIG9yIHByb2Nlc3MgdGlja2V0CiAgICBteSAkSXNQcm9jZXNzVGlja2V0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRDaGVja0ZvclByb2Nlc3NUeXBlKAogICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXRJRH0KICAgICk7CgojIFJvdGhlck9TUyAvIFRpY2tldFByaW50SFRNTAojICAgIyBnZXQgem9vbSBzZXR0aW5ncwojICAgbXkgJERpc3BsYXlTZXR0aW5ncyA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tIik7CiAgICBteSAkRGlzcGxheVNldHRpbmdzID0gJENvbmZpZ09iamVjdC0+R2V0KCREaXNwbGF5U2V0dGluZ3NTb3VyY2UpOwojIEVPIFRpY2tldFByaW50SFRNTAoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgY29uZmlnIGZvciBmcm9udGVuZCBtb2R1bGUKICAgIG15ICREeW5hbWljRmllbGRGaWx0ZXIgPSB7CiAgICAgICAgJXsgJERpc3BsYXlTZXR0aW5ncy0+e0R5bmFtaWNGaWVsZH0gfHwge30gfSwKICAgICAgICBJc0hhc2hSZWZXaXRoRGF0YSggJERpc3BsYXlTZXR0aW5ncy0+e0R5bmFtaWNGaWVsZFdpZGdldERpc3BsYXl9ICkKICAgICAgICA/ICV7CiAgICAgICAgICAgICREaXNwbGF5U2V0dGluZ3MtPntEeW5hbWljRmllbGRXaWRnZXREeW5hbWljRmllbGR9CiAgICAgICAgICAgICAgICB8fCB7fQogICAgICAgICAgICB9CiAgICAgICAgOiAoKSwKICAgICAgICAkSXNQcm9jZXNzVGlja2V0CiAgICAgICAgPyAlewogICAgICAgICAgICAkRGlzcGxheVNldHRpbmdzLT57UHJvY2Vzc1dpZGdldER5bmFtaWNGaWVsZH0KICAgICAgICAgICAgICAgIHx8IHt9CiAgICAgICAgICAgIH0KICAgICAgICA6ICgpLAogICAgfTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIGFydGljbGUgb2JqZWN0CiAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydBcnRpY2xlJ10sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJER5bmFtaWNGaWVsZEZpbHRlciB8fCB7fSwKICAgICk7CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICBteSAkVmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFBhcmFte0FydGljbGVJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISRWYWx1ZTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkVmFsdWUgZXEgJyc7CgogICAgICAgICMgZ2V0IHByaW50IHN0cmluZyBmb3IgdGhpcyBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICBWYWx1ZU1heENoYXJzICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpEeW5hbWljRmllbGRzWm9vbU1heFNpemVBcnRpY2xlJykKICAgICAgICAgICAgICAgIHx8IDE2MCwgICAgIyBsaW1pdCBmb3IgYXJ0aWNsZSBkaXNwbGF5CiAgICAgICAgICAgIExheW91dE9iamVjdCA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICk7CgogICAgICAgIG15ICRMYWJlbCA9ICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH07CgogICAgICAgICRSZXN1bHR7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gewogICAgICAgICAgICBMYWJlbCA9PiAkTGFiZWwsCiAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgIFRpdGxlID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgfTsKCiAgICAgICAgaWYgKCAkVmFsdWVTdHJnLT57TGlua30gKSB7CiAgICAgICAgICAgICRSZXN1bHR7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LT57TGlua30gPSAkVmFsdWVTdHJnLT57TGlua307CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlUmVzdWx0Owp9Cgo9aGVhZDEgUFJJVkFURSBGVU5DVElPTlMKCj1oZWFkMiBfQXJ0aWNsZVNlbmRlckltYWdlKCkKCkdldCBVUkwgdXNlZCBmb3IgYXJ0aWNsZSBzZW5kZXIgaW1hZ2UuCgogICAgbXkgJFNlbmRlckltYWdlID0gJEFydGljbGVCYXNlT2JqZWN0LT5fQXJ0aWNsZVNlbmRlckltYWdlKAogICAgICAgIFNlbmRlciA9PiAnSm9obiBEb2UgPGpkb2VAZXhhbXBsZS5jb20+JywKICAgICk7CgpSZXR1cm5zOgoKICAgICRTZW5kZXJJbWFnZSA9ICcvL2dyYXZhdGFyLmNvbS9hdmF0YXIvMjhhNThhZjFkYjI0OTYyZTgxMjEyMTE1ZTdjYWM2ODU/cz04MCc7Cgo9Y3V0CgpzdWIgX0FydGljbGVTZW5kZXJJbWFnZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRSZXN1bHQgPSAnJzsKCiAgICByZXR1cm4gJFJlc3VsdCBpZiAhJFBhcmFte1NlbmRlcn07CgogICAgbXkgJFNpemUgPSA4MDsKCiAgICAjIEdldCBlbWFpbCBhZGRyZXNzIGZyb20gc2VuZGVyIGZpZWxkLgogICAgbXkgJEVtYWlsUGFyc2VyID0gS2VybmVsOjpTeXN0ZW06OkVtYWlsUGFyc2VyLT5uZXcoCiAgICAgICAgJXskU2VsZn0sCiAgICAgICAgTW9kZSA9PiAnU3RhbmRhbG9uZScsCiAgICApOwogICAgbXkgQEFkZHJlc3NlcyA9ICRFbWFpbFBhcnNlci0+U3BsaXRBZGRyZXNzTGluZSggTGluZSA9PiAkUGFyYW17U2VuZGVyfSApOwogICAgaWYgKEBBZGRyZXNzZXMpIHsKICAgICAgICBteSAkRW1haWwgPSAkRW1haWxQYXJzZXItPkdldEVtYWlsQWRkcmVzcyggRW1haWwgPT4gJEFkZHJlc3Nlc1swXSApOwogICAgICAgIGlmICgkRW1haWwpIHsKICAgICAgICAgICAgbXkgJERlZmF1bHRJY29uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGcm9udGVuZDo6R3JhdmF0YXI6OkFydGljbGVEZWZhdWx0SW1hZ2UnKSB8fCAnbXAnOwoKICAgICAgICAgICAgIyBHZXQgY3VycmVudCB1c2VyJ3MgZW1haWwgYW5kIGNvbXBhcmUgaXQgdG8gdGhlIHNlbmRlcidzIGVtYWlsLgogICAgICAgICAgICBpZiAoICRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICAgICAgICAgbXkgJUN1cnJlbnRVc2VyRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPkdldFVzZXJEYXRhKCBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gKTsKICAgICAgICAgICAgICAgIGlmICggJEVtYWlsIGVxICRDdXJyZW50VXNlckRhdGF7VXNlckVtYWlsfSApIHsKICAgICAgICAgICAgICAgICAgICAkRGVmYXVsdEljb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0Zyb250ZW5kOjpHcmF2YXRhcjo6RGVmYXVsdEltYWdlJykgfCAnbXAnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbmNvZGUnKS0+RW5jb2RlT3V0cHV0KCBcJEVtYWlsICk7CiAgICAgICAgICAgICRSZXN1bHQgPSAnLy93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci8nIC4gbWQ1X2hleCggbGMgJEVtYWlsICkgLiAnP3M9JyAuICRTaXplIC4gJyZkPScgLiAkRGVmYXVsdEljb247CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUmVzdWx0Owp9CgpzdWIgX0FydGljbGVNb2R1bGVNZXRhIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXJ0aWNsZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayB3aGV0aGVyIGF1dG8gYXJ0aWNsZSBsaW5rcyBzaG91bGQgYmUgdXNlZAogICAgcmV0dXJuIGlmICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Olpvb21Db2xsZWN0TWV0YScpOwogICAgcmV0dXJuIGlmICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Olpvb21Db2xsZWN0TWV0YUZpbHRlcnMnKTsKCiAgICBteSAkQXJ0aWNsZVBsYWluID0gJExheW91dE9iamVjdC0+QXJ0aWNsZVByZXZpZXcoCiAgICAgICAgJVBhcmFtLAogICAgICAgIFJlc3VsdFR5cGUgPT4gJ3BsYWluJywKICAgICk7CgogICAgbXkgQERhdGE7CgogICAgIyBmaW5kIHdvcmRzIHRvIHJlcGxhY2UKICAgIG15ICVDb25maWcgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Olpvb21Db2xsZWN0TWV0YUZpbHRlcnMnKSB9OwoKICAgIEZJTFRFUjoKICAgIGZvciBteSAkRmlsdGVyICggdmFsdWVzICVDb25maWcgKSB7CgogICAgICAgIG15ICVGaWx0ZXJEYXRhOwoKICAgICAgICAjIGNoZWNrIGZvciBuZWVkZWQgZGF0YQogICAgICAgIG5leHQgRklMVEVSIGlmICEkRmlsdGVyLT57UmVnRXhwfTsKICAgICAgICBuZXh0IEZJTFRFUiBpZiAhJEZpbHRlci0+e01ldGF9OwogICAgICAgIG5leHQgRklMVEVSIGlmICEkRmlsdGVyLT57TWV0YX0tPntOYW1lfTsKICAgICAgICBuZXh0IEZJTFRFUiBpZiAhJEZpbHRlci0+e01ldGF9LT57VVJMfTsKCiAgICAgICAgIyBpdGVyYWdlIHRocm91Z2ggcmVndWxhciBleHByZXNzaW9ucyBhbmQgY3JlYXRlIGEgaGFzaCB3aXRoIGZvdW5kIG1hdGNoZXMKICAgICAgICBteSBATWF0Y2hlczsKICAgICAgICBmb3IgbXkgJFJlZ0V4cCAoIEB7ICRGaWx0ZXItPntSZWdFeHB9IH0gKSB7CgogICAgICAgICAgICBteSBAQ291bnQgICAgPSAkUmVnRXhwID1+IG17XCh9Z3g7CiAgICAgICAgICAgIG15ICRFbGVtZW50cyA9IHNjYWxhciBAQ291bnQ7CgogICAgICAgICAgICBpZiAoIG15IEBNYXRjaERhdGEgPSAkQXJ0aWNsZVBsYWluID1+IG17KCg/PCFcdykkUmVnRXhwKX1neGkgKSB7CiAgICAgICAgICAgICAgICBteSAkQ291bnRlciA9IDA7CgogICAgICAgICAgICAgICAgTUFUQ0g6CiAgICAgICAgICAgICAgICB3aGlsZSAoICRNYXRjaERhdGFbJENvdW50ZXJdICkgewoKICAgICAgICAgICAgICAgICAgICBteSAkV2hvbGVNYXRjaFN0cmluZyA9ICRNYXRjaERhdGFbJENvdW50ZXJdOwogICAgICAgICAgICAgICAgICAgICRXaG9sZU1hdGNoU3RyaW5nID1+IHMvXlxzK3xccyskLy9nOwogICAgICAgICAgICAgICAgICAgIGlmICggZ3JlcCB7ICRfLT57TmFtZX0gZXEgJFdob2xlTWF0Y2hTdHJpbmcgfSBATWF0Y2hlcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENvdW50ZXIgKz0gJEVsZW1lbnRzICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBNQVRDSDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIG15ICVQYXJ0czsKICAgICAgICAgICAgICAgICAgICBmb3IgKCAxIC4uICRFbGVtZW50cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFBhcnRzeyRffSA9ICRNYXRjaERhdGFbICRDb3VudGVyICsgJF8gXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJENvdW50ZXIgKz0gJEVsZW1lbnRzICsgMTsKCiAgICAgICAgICAgICAgICAgICAgcHVzaCBATWF0Y2hlcywgewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkV2hvbGVNYXRjaFN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgUGFydHMgPT4gXCVQYXJ0cywKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIHNjYWxhciBATWF0Y2hlcyApIHsKCiAgICAgICAgICAgICRGaWx0ZXJEYXRhe05hbWV9ID0gJEZpbHRlci0+e01ldGF9LT57TmFtZX07CgogICAgICAgICAgICAjIGl0ZXJhdGUgdHJvdWdoIG1hdGNoZXMgYW5kIGJ1aWxkIFVSTHMgZnJvbSBjb25maWd1cmF0aW9uCiAgICAgICAgICAgIGZvciBteSAkTWF0Y2ggKEBNYXRjaGVzKSB7CgogICAgICAgICAgICAgICAgbXkgJE1hdGNoUXVvdGUgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRNYXRjaC0+e05hbWV9ICk7CiAgICAgICAgICAgICAgICBteSAkVVJMICAgICAgICA9ICRGaWx0ZXItPntNZXRhfS0+e1VSTH07CiAgICAgICAgICAgICAgICBteSAkVVJMUHJldmlldyA9ICRGaWx0ZXItPntNZXRhfS0+e1VSTFByZXZpZXd9OwoKICAgICAgICAgICAgICAgICMgcmVwbGFjZSB0aGUgd2hvbGUga2V5d29yZAogICAgICAgICAgICAgICAgbXkgJE1hdGNoTGlua0VuY29kZSA9ICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoICRNYXRjaC0+e05hbWV9ICk7CiAgICAgICAgICAgICAgICAkVVJMICAgICAgICA9fiBzLzxNQVRDSD4vJE1hdGNoTGlua0VuY29kZS9nOwogICAgICAgICAgICAgICAgJFVSTFByZXZpZXcgPX4gcy88TUFUQ0g+LyRNYXRjaExpbmtFbmNvZGUvZzsKCiAgICAgICAgICAgICAgICAjIHJlcGxhY2UgdGhlIGtleXdvcmQgY29tcG9uZW50cwogICAgICAgICAgICAgICAgZm9yIG15ICRQYXJ0ICggc29ydCBrZXlzICV7ICRNYXRjaC0+e1BhcnRzfSB8fCB7fSB9ICkgewogICAgICAgICAgICAgICAgICAgICRNYXRjaExpbmtFbmNvZGUgPSAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCAkTWF0Y2gtPntQYXJ0c30tPnskUGFydH0gKTsKICAgICAgICAgICAgICAgICAgICAkVVJMICAgICAgICA9fiBzLzxNQVRDSCRQYXJ0Pi8kTWF0Y2hMaW5rRW5jb2RlL2c7CiAgICAgICAgICAgICAgICAgICAgJFVSTFByZXZpZXcgPX4gcy88TUFUQ0gkUGFydD4vJE1hdGNoTGlua0VuY29kZS9nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHB1c2ggQHsgJEZpbHRlckRhdGF7TWF0Y2hlc30gfSwgewogICAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgPT4gJE1hdGNoLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgVVJMICAgICAgICA9PiAkVVJMLAogICAgICAgICAgICAgICAgICAgIFVSTFByZXZpZXcgPT4gJFVSTFByZXZpZXcsCiAgICAgICAgICAgICAgICAgICAgVGFyZ2V0ICAgICA9PiAkRmlsdGVyLT57TWV0YX0tPntUYXJnZXR9IHx8ICdfYmxhbmsnLAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwdXNoIEBEYXRhLCBcJUZpbHRlckRhdGE7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBARGF0YTsKfQoKMTsK</File>
        <File Location="Custom/Kernel/Output/HTML/TicketZoom/Customer/Base.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL091dHB1dC9IVE1ML1RpY2tldFpvb20vQ3VzdG9tZXIvQmFzZS5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZDQwNzVjMDMwNTdkNWZlYWEyYzc1ZGZjMWY2NmE4ZGVkMzNlM2FhIC0gS2VybmVsL091dHB1dC9IVE1ML1RpY2tldFpvb20vQ3VzdG9tZXIvQmFzZS5wbQojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpDdXN0b21lcjo6QmFzZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgY29yZSBtb2R1bGVzCgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyhJc0hhc2hSZWZXaXRoRGF0YSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEFydGljbGVSZW5kZXIoKQoKUmV0dXJucyBhcnRpY2xlIGh0bWwuCgogICAgbXkgJEhUTUwgPSAkQXJ0aWNsZUJhc2VPYmplY3QtPkFydGljbGVSZW5kZXIoCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICA9PiAxMjMsICAgICAgICAgIyAocmVxdWlyZWQpCiAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICAgICA9PiAxMjMsICAgICAgICAgIyAocmVxdWlyZWQpCiAgICAgICAgU2hvd0Jyb3dzZXJMaW5rTWVzc2FnZSA9PiAxLCAgICAgICAgICAgIyAob3B0aW9uYWwpIERlZmF1bHQ6IDAuCiAgICAgICAgQXJ0aWNsZUFjdGlvbnMgICAgICAgICA9PiBbXSwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICApOwoKUmVzdWx0OgogICAgJEhUTUwgPSAiPGRpdj4uLi48L2Rpdj4iOwoKPWN1dAoKc3ViIEFydGljbGVSZW5kZXIgewogICAgZGllICdWaXJ0dWFsIG1ldGhvZCBpbiBiYXNlIGNsYXNzIG11c3Qgbm90IGJlIGNhbGxlZC4nOwp9Cgo9aGVhZDIgQXJ0aWNsZU1ldGFGaWVsZHMoKQoKUmV0dXJucyBjb21tb24gZmllbGRzIGZvciBhbnkgYXJ0aWNsZS4KCiAgICBteSAlQXJ0aWNsZU1ldGFGaWVsZHMgPSAkQXJ0aWNsZUJhc2VPYmplY3QtPkFydGljbGVNZXRhRmllbGRzKAogICAgICAgIFRpY2tldElEICA9PiAxMjMsICAgIyAocmVxdWlyZWQpCiAgICAgICAgQXJ0aWNsZUlEID0+IDEyMywgICAjIChyZXF1aXJlZCkKICAgICk7CgpSZXR1cm5zOgoKICAgICVBcnRpY2xlTWV0YUZpZWxkcyA9ICgKICAgICAgICBEeW5hbWljRmllbGRfSXRlbSA9PiB7CiAgICAgICAgICAgIExhYmVsID0+ICdJdGVtJywgICAgICAgICAgICAjIG1hbmRhdG9yeQogICAgICAgICAgICBWYWx1ZSA9PiAnVmFsdWUnLCAgICAgICAgICAgIyBtYW5kYXRvcnkKICAgICAgICAgICAgTGluayA9PiAnaHR0cDovLy4uLicsICAgICAgICMgb3B0aW9uYWwKICAgICAgICB9LAogICAgICAgIEFjY291bnRlZFRpbWUgPT4gewogICAgICAgICAgICAuLi4KICAgICAgICB9LAogICAgKTsKCj1jdXQKCnN1YiBBcnRpY2xlTWV0YUZpZWxkcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldElEIEFydGljbGVJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgbXkgJVJlc3VsdDsKIyBSb3RoZXJPU1MgLyBUaWNrZXRQcmludEhUTUwKICAgIG15ICREaXNwbGF5U2V0dGluZ3NTb3VyY2UgPSAkUGFyYW17RGlzcGxheVNldHRpbmdzU291cmNlfSB8fCAnVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRab29tJzsKIyBFTyBUaWNrZXRQcmludEhUTUwKCiAgICAjIHNob3cgYWNjb3VudGVkIGFydGljbGUgdGltZQogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0Wm9vbScpLT57Wm9vbVRpbWVEaXNwbGF5fSApIHsKICAgICAgICBteSAkQXJ0aWNsZVRpbWUgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkUGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICApOwogICAgICAgIGlmICgkQXJ0aWNsZVRpbWUpIHsKICAgICAgICAgICAgJFJlc3VsdHtUaW1lfSA9IHsKICAgICAgICAgICAgICAgIExhYmVsID0+ICJUaW1lIiwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRBcnRpY2xlVGltZSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBjb25maWcgZm9yIGZyb250ZW5kIG1vZHVsZQogICAgbXkgJER5bmFtaWNGaWVsZEZpbHRlciA9IHsKIyBSb3RoZXJPU1MgLyBUaWNrZXRQcmludEhUTUwKIyAgICAgICAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0Wm9vbScpLT57RHluYW1pY0ZpZWxkfSB8fCB7fSB9LAogICAgICAgICV7ICRDb25maWdPYmplY3QtPkdldCgkRGlzcGxheVNldHRpbmdzU291cmNlKS0+e0R5bmFtaWNGaWVsZH0gfHwge30gfSwKIyBFTyBUaWNrZXRQcmludEhUTUwKICAgIH07CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciBhcnRpY2xlIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsnQXJ0aWNsZSddLAogICAgICAgIEZpZWxkRmlsdGVyID0+ICREeW5hbWljRmllbGRGaWx0ZXIgfHwge30sCiAgICApOwogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBza2lwIHRoZSBkeW5hbWljIGZpZWxkIGlmIGlzIG5vdCBkZXNpbmdlZCBmb3IgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICAgICAgbXkgJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlID0gJEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgQmVoYXZpb3IgICAgICAgICAgID0+ICdJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZScsCiAgICAgICAgKTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlOwoKICAgICAgICBteSAkVmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFBhcmFte0FydGljbGVJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISRWYWx1ZTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkVmFsdWUgZXEgJyc7CgogICAgICAgICMgZ2V0IHByaW50IHN0cmluZyBmb3IgdGhpcyBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICBWYWx1ZU1heENoYXJzICAgICAgPT4gMTYwLAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICApOwoKICAgICAgICBteSAkTGFiZWwgPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9OwoKICAgICAgICAkUmVzdWx0eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9IHsKICAgICAgICAgICAgTGFiZWwgPT4gJExhYmVsLAogICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICBUaXRsZSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgIH07CgogICAgICAgIGlmICggJFZhbHVlU3RyZy0+e0xpbmt9ICkgewogICAgICAgICAgICAkUmVzdWx0eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfS0+e0xpbmt9ID0gJFZhbHVlU3RyZy0+e0xpbmt9OwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkVmFsdWVTdHJnLT57TGlua1ByZXZpZXd9ICkgewogICAgICAgICAgICAkUmVzdWx0eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfS0+e0xpbmtQcmV2aWV3fSA9ICRWYWx1ZVN0cmctPntMaW5rUHJldmlld307CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlUmVzdWx0Owp9CgoxOwo=</File>
        <File Location="Custom/Kernel/Output/HTML/TicketZoom/TicketInformation.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL091dHB1dC9IVE1ML1RpY2tldFpvb20vVGlja2V0SW5mb3JtYXRpb24ucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQojICRvcmlnaW46IG90b2JvIC0gZmQ0MDc1YzAzMDU3ZDVmZWFhMmM3NWRmYzFmNjZhOGRlZDMzZTNhYSAtIEtlcm5lbC9PdXRwdXQvSFRNTC9UaWNrZXRab29tL1RpY2tldEluZm9ybWF0aW9uLnBtCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpY2tldFpvb206OlRpY2tldEluZm9ybWF0aW9uOwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBuYW1lc3BhY2U6OmF1dG9jbGVhbjsKdXNlIHV0Zjg7Cgp1c2UgcGFyZW50ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6QmFzZSc7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpMYW5ndWFnZSAgICAgICAgICAgICAgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzSGFzaFJlZldpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJFVzZXJPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgbXkgJVRpY2tldCAgICA9ICRQYXJhbXtUaWNrZXR9LT4lKjsKICAgIG15ICVBY2xBY3Rpb24gPSAkUGFyYW17QWNsQWN0aW9ufS0+JSo7CgojIFJvdGhlck9TUyAvIFRpY2tldFByaW50SFRNTAogICAgbXkgJERpc3BsYXlTZXR0aW5nc1NvdXJjZSA9ICRQYXJhbXtEaXNwbGF5U2V0dGluZ3NTb3VyY2V9IHx8ICdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20nOwojIEVPIFRpY2tldFByaW50SFRNTAoKICAgICMgU2hvdyBjcmVhdGVkIGJ5IG5hbWUsIGlmIGRpZmZlcmVudCB0aGVuIHJvb3QgdXNlciAoSUQ9MSkuCiAgICBpZiAoICRUaWNrZXR7Q3JlYXRlQnl9ID4gMSApIHsKICAgICAgICAkVGlja2V0e0NyZWF0ZWRCeVVzZXJ9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKCBVc2VySUQgPT4gJFRpY2tldHtDcmVhdGVCeX0gKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ3JlYXRlZEJ5JywKICAgICAgICAgICAgRGF0YSA9PiB7JVRpY2tldH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRUaWNrZXR7QXJjaGl2ZUZsYWd9IGVxICd5JyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXJjaGl2ZUZsYWcnLAogICAgICAgICAgICBEYXRhID0+IHsgJVRpY2tldCwgJUFjbEFjdGlvbiB9LAogICAgICAgICk7CiAgICB9CgogICAgIyB0aWNrZXQgdHlwZQogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6VHlwZScpICkgewoKICAgICAgICBteSAlVHlwZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyktPlR5cGVHZXQoCiAgICAgICAgICAgIElEID0+ICRUaWNrZXR7VHlwZUlEfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVHlwZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVmFsaWQgPT4gJFR5cGV7VmFsaWRJRH0sCiAgICAgICAgICAgICAgICAlVGlja2V0LAogICAgICAgICAgICAgICAgJUFjbEFjdGlvbgogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyB0aWNrZXQgc2VydmljZQogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICYmICRUaWNrZXR7U2VydmljZX0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICBEYXRhID0+IHsgJVRpY2tldCwgJUFjbEFjdGlvbiB9LAogICAgICAgICk7CiAgICAgICAgaWYgKCAkVGlja2V0e1NMQX0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU0xBJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyAlVGlja2V0LCAlQWNsQWN0aW9uIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBmaXJzdCByZXNwb25zZSB0aW1lIGlmIG5lZWRlZAogICAgaWYgKCBkZWZpbmVkICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWV9ICkgewogICAgICAgICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWVIdW1hbn0gPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckFnZSgKICAgICAgICAgICAgQWdlICAgICAgICAgICAgICAgID0+ICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWV9LAogICAgICAgICAgICBUaW1lU2hvd0Fsd2F5c0xvbmcgPT4gMSwKICAgICAgICAgICAgU3BhY2UgICAgICAgICAgICAgID0+ICcgJywKICAgICAgICApOwogICAgICAgICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWVXb3JraW5nVGltZX0gPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckFnZSgKICAgICAgICAgICAgQWdlICAgICAgICAgICAgICAgID0+ICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWVXb3JraW5nVGltZX0sCiAgICAgICAgICAgIFRpbWVTaG93QWx3YXlzTG9uZyA9PiAxLAogICAgICAgICAgICBTcGFjZSAgICAgICAgICAgICAgPT4gJyAnLAogICAgICAgICk7CiAgICAgICAgaWYgKCA2MCAqIDYwICogMSA+ICRUaWNrZXR7Rmlyc3RSZXNwb25zZVRpbWV9ICkgewogICAgICAgICAgICAkVGlja2V0e0ZpcnN0UmVzcG9uc2VUaW1lQ2xhc3N9ID0gJ1dhcm5pbmcnOwogICAgICAgIH0KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRmlyc3RSZXNwb25zZVRpbWUnLAogICAgICAgICAgICBEYXRhID0+IHsgJVRpY2tldCwgJUFjbEFjdGlvbiB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IHVwZGF0ZSB0aW1lIGlmIG5lZWRlZAogICAgaWYgKCBkZWZpbmVkICRUaWNrZXR7VXBkYXRlVGltZX0gKSB7CiAgICAgICAgJFRpY2tldHtVcGRhdGVUaW1lSHVtYW59ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJBZ2UoCiAgICAgICAgICAgIEFnZSAgICAgICAgICAgICAgICA9PiAkVGlja2V0e1VwZGF0ZVRpbWV9LAogICAgICAgICAgICBUaW1lU2hvd0Fsd2F5c0xvbmcgPT4gMSwKICAgICAgICAgICAgU3BhY2UgICAgICAgICAgICAgID0+ICcgJywKICAgICAgICApOwogICAgICAgICRUaWNrZXR7VXBkYXRlVGltZVdvcmtpbmdUaW1lfSA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyQWdlKAogICAgICAgICAgICBBZ2UgICAgICAgICAgICAgICAgPT4gJFRpY2tldHtVcGRhdGVUaW1lV29ya2luZ1RpbWV9LAogICAgICAgICAgICBUaW1lU2hvd0Fsd2F5c0xvbmcgPT4gMSwKICAgICAgICAgICAgU3BhY2UgICAgICAgICAgICAgID0+ICcgJywKICAgICAgICApOwogICAgICAgIGlmICggNjAgKiA2MCAqIDEgPiAkVGlja2V0e1VwZGF0ZVRpbWV9ICkgewogICAgICAgICAgICAkVGlja2V0e1VwZGF0ZVRpbWVDbGFzc30gPSAnV2FybmluZyc7CiAgICAgICAgfQogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdVcGRhdGVUaW1lJywKICAgICAgICAgICAgRGF0YSA9PiB7ICVUaWNrZXQsICVBY2xBY3Rpb24gfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBzb2x1dGlvbiB0aW1lIGlmIG5lZWRlZAogICAgaWYgKCBkZWZpbmVkICRUaWNrZXR7U29sdXRpb25UaW1lfSApIHsKICAgICAgICAkVGlja2V0e1NvbHV0aW9uVGltZUh1bWFufSA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyQWdlKAogICAgICAgICAgICBBZ2UgICAgICAgICAgICAgICAgPT4gJFRpY2tldHtTb2x1dGlvblRpbWV9LAogICAgICAgICAgICBUaW1lU2hvd0Fsd2F5c0xvbmcgPT4gMSwKICAgICAgICAgICAgU3BhY2UgICAgICAgICAgICAgID0+ICcgJywKICAgICAgICApOwogICAgICAgICRUaWNrZXR7U29sdXRpb25UaW1lV29ya2luZ1RpbWV9ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJBZ2UoCiAgICAgICAgICAgIEFnZSAgICAgICAgICAgICAgICA9PiAkVGlja2V0e1NvbHV0aW9uVGltZVdvcmtpbmdUaW1lfSwKICAgICAgICAgICAgVGltZVNob3dBbHdheXNMb25nID0+IDEsCiAgICAgICAgICAgIFNwYWNlICAgICAgICAgICAgICA9PiAnICcsCiAgICAgICAgKTsKICAgICAgICBpZiAoIDYwICogNjAgKiAxID4gJFRpY2tldHtTb2x1dGlvblRpbWV9ICkgewogICAgICAgICAgICAkVGlja2V0e1NvbHV0aW9uVGltZUNsYXNzfSA9ICdXYXJuaW5nJzsKICAgICAgICB9CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NvbHV0aW9uVGltZScsCiAgICAgICAgICAgIERhdGEgPT4geyAlVGlja2V0LCAlQWNsQWN0aW9uIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgbnVtYmVyIG9mIHRpY2tldHMgd2l0aCB0aGUgc2FtZSBjdXN0b21lciBpZCBpZiBmZWF0dXJlIGlzIGFjdGl2ZToKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpab29tQ3VzdG9tZXJUaWNrZXRzJykgKSB7CiAgICAgICAgaWYgKCAkVGlja2V0e0N1c3RvbWVySUR9ICkgewogICAgICAgICAgICAkVGlja2V0e0N1c3RvbWVySURUaWNrZXRzfSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJFRpY2tldHtDdXN0b21lcklEfSwKICAgICAgICAgICAgICAgIFJlc3VsdCAgICAgPT4gJ0NPVU5UJywKICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gJ3JvJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0N1c3RvbWVySURUaWNrZXRzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyB0b3RhbCBhY2NvdW50ZWQgdGltZSBpZiBmZWF0dXJlIGlzIGFjdGl2ZToKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBY2NvdW50VGltZScpICkgewogICAgICAgICRUaWNrZXR7VGlja2V0VGltZVVuaXRzfSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRlZFRpbWVHZXQoJVRpY2tldCk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RvdGFsQWNjb3VudGVkVGltZScsCiAgICAgICAgICAgIERhdGEgPT4gXCVUaWNrZXQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgcGVuZGluZyB1bnRpbCwgaWYgc2V0OgogICAgaWYgKCAkVGlja2V0e1VudGlsVGltZX0gKSB7CiAgICAgICAgaWYgKCAkVGlja2V0e1VudGlsVGltZX0gPCAtMSApIHsKICAgICAgICAgICAgJFRpY2tldHtQZW5kaW5nVW50aWxDbGFzc30gPSAnV2FybmluZyc7CiAgICAgICAgfQoKICAgICAgICBteSAkQ3VyU3lzRFRPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgICAgICAkVGlja2V0e1VudGlsVGltZUh1bWFufSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgRXBvY2ggPT4gKCAkVGlja2V0e1VudGlsVGltZX0gKyAkQ3VyU3lzRFRPYmplY3QtPlRvRXBvY2goKSApLAogICAgICAgICAgICB9LAogICAgICAgICktPlRvU3RyaW5nKCk7CgogICAgICAgICRUaWNrZXR7UGVuZGluZ1VudGlsfSAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckFnZSgKICAgICAgICAgICAgQWdlICAgPT4gJFRpY2tldHtVbnRpbFRpbWV9LAogICAgICAgICAgICBTcGFjZSA9PiAnICcKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQZW5kaW5nVW50aWwnLAogICAgICAgICAgICBEYXRhID0+IFwlVGlja2V0LAogICAgICAgICk7CiAgICB9CgogICAgIyBDaGVjayBpZiBhZ2VudCBoYXMgcGVybWlzc2lvbiB0byBzdGFydCBjaGF0cyB3aXRoIGFnZW50cy4KICAgIG15ICRFbmFibGVDaGF0ICAgICAgICAgICAgICAgICAgICAgICAgPSAxOwogICAgbXkgJENoYXRTdGFydGluZ0FnZW50c0dyb3VwICAgICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnQ2hhdEVuZ2luZTo6UGVybWlzc2lvbkdyb3VwOjpDaGF0U3RhcnRpbmdBZ2VudHMnKSAgfHwgJ3VzZXJzJzsKICAgIG15ICRDaGF0UmVjZWl2aW5nQWdlbnRzR3JvdXAgICAgICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoYXRFbmdpbmU6OlBlcm1pc3Npb25Hcm91cDo6Q2hhdFJlY2VpdmluZ0FnZW50cycpIHx8ICd1c2Vycyc7CiAgICBteSAkQ2hhdFN0YXJ0aW5nQWdlbnRzR3JvdXBQZXJtaXNzaW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPlBlcm1pc3Npb25DaGVjaygKICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEdyb3VwTmFtZSA9PiAkQ2hhdFN0YXJ0aW5nQWdlbnRzR3JvdXAsCiAgICAgICAgVHlwZSAgICAgID0+ICdydycsCiAgICApOwoKICAgIGlmICggISRDb25maWdPYmplY3QtPkdldCgnQ2hhdEVuZ2luZTo6QWN0aXZlJykgfHwgISRDaGF0U3RhcnRpbmdBZ2VudHNHcm91cFBlcm1pc3Npb24gKSB7CiAgICAgICAgJEVuYWJsZUNoYXQgPSAwOwogICAgfQogICAgaWYgKAogICAgICAgICRFbmFibGVDaGF0CiAgICAgICAgJiYgISRDb25maWdPYmplY3QtPkdldCgnQ2hhdEVuZ2luZTo6Q2hhdERpcmVjdGlvbjo6QWdlbnRUb0FnZW50JykKICAgICAgICApCiAgICB7CiAgICAgICAgJEVuYWJsZUNoYXQgPSAwOwogICAgfQoKICAgIG15ICVPbmxpbmVEYXRhOwogICAgaWYgKCRFbmFibGVDaGF0KSB7CiAgICAgICAgbXkgJFZpZGVvQ2hhdEVuYWJsZWQgICAgICAgICAgICAgICA9IDA7CiAgICAgICAgbXkgJFZpZGVvQ2hhdEFnZW50c0dyb3VwICAgICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnQ2hhdEVuZ2luZTo6UGVybWlzc2lvbkdyb3VwOjpWaWRlb0NoYXRBZ2VudHMnKSB8fCAndXNlcnMnOwogICAgICAgIG15ICRWaWRlb0NoYXRBZ2VudHNHcm91cFBlcm1pc3Npb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBHcm91cE5hbWUgPT4gJFZpZGVvQ2hhdEFnZW50c0dyb3VwLAogICAgICAgICAgICBUeXBlICAgICAgPT4gJ3J3JywKICAgICAgICApOwoKICAgICAgICAjIEVuYWJsZSB0aGUgdmlkZW8gY2hhdCBmZWF0dXJlIGlmIHN5c3RlbSBpcyBlbnRpdGxlZCBhbmQgYWdlbnQgaXMgYSBtZW1iZXIgb2YgY29uZmlndXJlZCBncm91cC4KICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnQ2hhdEVuZ2luZTo6QWN0aXZlJykgJiYgJFZpZGVvQ2hhdEFnZW50c0dyb3VwUGVybWlzc2lvbiApIHsKICAgICAgICAgICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAnS2VybmVsOjpTeXN0ZW06OlZpZGVvQ2hhdCcsIFNpbGVudCA9PiAxICkgKSB7CiAgICAgICAgICAgICAgICAkVmlkZW9DaGF0RW5hYmxlZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWaWRlb0NoYXQnKS0+SXNFbmFibGVkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEZJRUxEOgogICAgICAgIGZvciBteSAkRmllbGQgKHF3KE93bmVySUQgUmVzcG9uc2libGVJRCkpIHsKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAhJFRpY2tldHskRmllbGR9OwogICAgICAgICAgICBuZXh0IEZJRUxEIGlmICRGaWVsZCBlcSAnUmVzcG9uc2libGVJRCcgJiYgISRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpOwoKICAgICAgICAgICAgbXkgJFVzZXJJRCA9ICRUaWNrZXR7JEZpZWxkfTsKCiAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntFbmFibGVDaGF0fSAgICAgICAgID0gJEVuYWJsZUNoYXQ7CiAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntBZ2VudEVuYWJsZUNoYXR9ICAgID0gMDsKICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e0NoYXRBY2Nlc3N9ICAgICAgICAgPSAwOwogICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VmlkZW9DaGF0QXZhaWxhYmxlfSA9IDA7CiAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntWaWRlb0NoYXRTdXBwb3J0fSAgID0gMDsKICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e1ZpZGVvQ2hhdEVuYWJsZWR9ICAgPSAkVmlkZW9DaGF0RW5hYmxlZDsKCiAgICAgICAgICAgICMgRGVmYXVsdCBzdGF0dXMgaXMgb2ZmbGluZS4KICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e1VzZXJTdGF0ZX0gICAgICAgICAgICA9IFRyYW5zbGF0YWJsZSgnT2ZmbGluZScpOwogICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VXNlclN0YXRlRGVzY3JpcHRpb259ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdVc2VyIGlzIGN1cnJlbnRseSBvZmZsaW5lLicpOwoKICAgICAgICAgICAgIyBXZSBhbHNvIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHJlY2VpdmluZyBhZ2VudCBoYXMgY2hhdCBwZXJtaXNzaW9ucy4KICAgICAgICAgICAgbXkgJVVzZXJHcm91cHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvblVzZXJHZXQoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJVVzZXJHcm91cHNSZXZlcnNlID0gcmV2ZXJzZSAlVXNlckdyb3VwczsKICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e0NoYXRBY2Nlc3N9ID0gJFVzZXJHcm91cHNSZXZlcnNleyRDaGF0UmVjZWl2aW5nQWdlbnRzR3JvdXB9ID8gMSA6IDA7CgogICAgICAgICAgICBteSAlVXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICApOwogICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VmlkZW9DaGF0U3VwcG9ydH0gPSAkVXNlcntWaWRlb0NoYXRIYXNXZWJSVEN9OwoKICAgICAgICAgICAgIyBDaGVjayBhZ2VudCdzIGF2YWlsYWJpbGl0eS4KICAgICAgICAgICAgaWYgKCAkT25saW5lRGF0YXskRmllbGR9LT57Q2hhdEFjY2Vzc30gKSB7CiAgICAgICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57QWdlbnRDaGF0QXZhaWxhYmlsaXR5fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGF0JyktPkFnZW50QXZhaWxhYmlsaXR5R2V0KAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgICAgICAgICAgICAgRXh0ZXJuYWwgPT4gMCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAkT25saW5lRGF0YXskRmllbGR9LT57QWdlbnRDaGF0QXZhaWxhYmlsaXR5fSA9PSAzICkgewogICAgICAgICAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntVc2VyU3RhdGV9ICAgICAgICAgICAgPSBUcmFuc2xhdGFibGUoJ0FjdGl2ZScpOwogICAgICAgICAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntBZ2VudEVuYWJsZUNoYXR9ICAgICAgPSAxOwogICAgICAgICAgICAgICAgICAgICRPbmxpbmVEYXRheyRGaWVsZH0tPntVc2VyU3RhdGVEZXNjcmlwdGlvbn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1VzZXIgaXMgY3VycmVudGx5IGFjdGl2ZS4nKTsKICAgICAgICAgICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VmlkZW9DaGF0QXZhaWxhYmxlfSAgID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJE9ubGluZURhdGF7JEZpZWxkfS0+e0FnZW50Q2hhdEF2YWlsYWJpbGl0eX0gPT0gMiApIHsKICAgICAgICAgICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VXNlclN0YXRlfSAgICAgICAgICAgID0gVHJhbnNsYXRhYmxlKCdBd2F5Jyk7CiAgICAgICAgICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e0FnZW50RW5hYmxlQ2hhdH0gICAgICA9IDE7CiAgICAgICAgICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e1VzZXJTdGF0ZURlc2NyaXB0aW9ufSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVXNlciB3YXMgaW5hY3RpdmUgZm9yIGEgd2hpbGUuJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRPbmxpbmVEYXRheyRGaWVsZH0tPntBZ2VudENoYXRBdmFpbGFiaWxpdHl9ID09IDEgKSB7CiAgICAgICAgICAgICAgICAgICAgJE9ubGluZURhdGF7JEZpZWxkfS0+e1VzZXJTdGF0ZX0gICAgICAgICAgICA9IFRyYW5zbGF0YWJsZSgnVW5hdmFpbGFibGUnKTsKICAgICAgICAgICAgICAgICAgICAkT25saW5lRGF0YXskRmllbGR9LT57VXNlclN0YXRlRGVzY3JpcHRpb259ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdVc2VyIHNldCB0aGVpciBzdGF0dXMgdG8gdW5hdmFpbGFibGUuJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBvd25lciBpbmZvCiAgICB7CiAgICAgICAgbXkgJU93bmVySW5mbyA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRUaWNrZXR7T3duZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3duZXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICAgICAlT3duZXJJbmZvLAogICAgICAgICAgICAgICAgJUFjbEFjdGlvbiwKICAgICAgICAgICAgICAgICggJE9ubGluZURhdGF7T3duZXJJRH0gLy8ge30gKS0+JSosCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpICkgewoKICAgICAgICAjIHNob3cgcmVzcG9uc2libGUKICAgICAgICBteSAlUmVzcG9uc2libGVJbmZvID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJFRpY2tldHtSZXNwb25zaWJsZUlEfSB8fCAxLAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSZXNwb25zaWJsZScsCiAgICAgICAgICAgIERhdGEgPT4geyAlVGlja2V0LCAlUmVzcG9uc2libGVJbmZvLCAlQWNsQWN0aW9uLCAleyAkT25saW5lRGF0YXtSZXNwb25zaWJsZUlEfSAvLyB7fSB9IH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBkaXNwbGF5IG9wdGlvbnMKICAgICRQYXJhbXtXaWRnZXRUaXRsZX0gPSBUcmFuc2xhdGFibGUoJ1RpY2tldCBJbmZvcm1hdGlvbicpOwogICAgJFBhcmFte0hvb2t9ICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rJykgfHwgJ1RpY2tldCMnOwoKICAgICMgY2hlY2sgaWYgdGlja2V0IGlzIG5vcm1hbCBvciBwcm9jZXNzIHRpY2tldAogICAgbXkgJElzUHJvY2Vzc1RpY2tldCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0Q2hlY2tGb3JQcm9jZXNzVHlwZSgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfQogICAgKTsKCiMgUm90aGVyT1NTIC8gVGlja2V0UHJpbnRIVE1MCiMKIyAgICMgZ2V0IHpvb20gc2V0dGluZ3MgZGVwZW5kaW5nIG9uIHRpY2tldCB0eXBlCiMgICAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSIpOwojCiAgICAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJERpc3BsYXlTZXR0aW5nc1NvdXJjZSk7CiMgRU8gVGlja2V0UHJpbnRIVE1MCgogICAgIyBvdmVyd3JpdGUgZGlzcGxheSBvcHRpb25zIGZvciBwcm9jZXNzIHRpY2tldAogICAgaWYgKCRJc1Byb2Nlc3NUaWNrZXQpIHsKICAgICAgICAkUGFyYW17V2lkZ2V0VGl0bGV9ID0gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9LT57UHJvY2Vzc0Rpc3BsYXl9LT57V2lkZ2V0VGl0bGV9OwoKICAgICAgICAjIGdldCB0aGUgREYgd2hlcmUgdGhlIFByb2Nlc3NFbnRpdHlJRCBpcyBzdG9yZWQKICAgICAgICBteSAkUHJvY2Vzc0VudGl0eUlERmllbGQgPSAnRHluYW1pY0ZpZWxkXycKICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkR5bmFtaWNGaWVsZFByb2Nlc3NNYW5hZ2VtZW50UHJvY2Vzc0lEIik7CgogICAgICAgICMgZ2V0IHRoZSBERiB3aGVyZSB0aGUgQXRpdml0eUVudGl0eUlEIGlzIHN0b3JlZAogICAgICAgIG15ICRBY3Rpdml0eUVudGl0eUlERmllbGQgPSAnRHluYW1pY0ZpZWxkXycKICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkR5bmFtaWNGaWVsZFByb2Nlc3NNYW5hZ2VtZW50QWN0aXZpdHlJRCIpOwoKICAgICAgICBteSAkUHJvY2Vzc0RhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OlByb2Nlc3MnKS0+UHJvY2Vzc0dldCgKICAgICAgICAgICAgUHJvY2Vzc0VudGl0eUlEID0+ICRUaWNrZXR7JFByb2Nlc3NFbnRpdHlJREZpZWxkfSwKICAgICAgICApOwogICAgICAgIG15ICRBY3Rpdml0eURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJvY2Vzc01hbmFnZW1lbnQ6OkFjdGl2aXR5JyktPkFjdGl2aXR5R2V0KAogICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgID0+ICdBZ2VudEludGVyZmFjZScsCiAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJFRpY2tldHskQWN0aXZpdHlFbnRpdHlJREZpZWxkfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBwcm9jZXNzIGluZm9ybWF0aW9uIGluIHRoZSBzaWRlYmFyCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Byb2Nlc3NEYXRhJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBQcm9jZXNzICA9PiAkUHJvY2Vzc0RhdGEtPntOYW1lfSAgfHwgJycsCiAgICAgICAgICAgICAgICBBY3Rpdml0eSA9PiAkQWN0aXZpdHlEYXRhLT57TmFtZX0gfHwgJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGNvbmZpZyBmb3IgZnJvbnRlbmQgbW9kdWxlCiAgICBteSAkRHluYW1pY0ZpZWxkRmlsdGVyID0gewogICAgICAgIElzSGFzaFJlZldpdGhEYXRhKCAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc317RHluYW1pY0ZpZWxkV2lkZ2V0RGlzcGxheX0gKQogICAgICAgID8gJXsKICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20iKQogICAgICAgICAgICAgICAgLT57RHluYW1pY0ZpZWxkV2lkZ2V0RHluYW1pY0ZpZWxkfQogICAgICAgICAgICAgICAgfHwge30KICAgICAgICAgICAgfQogICAgICAgIDogKCksCiAgICAgICAgJElzUHJvY2Vzc1RpY2tldAogICAgICAgID8gJXsKICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20iKQogICAgICAgICAgICAgICAgLT57UHJvY2Vzc1dpZGdldER5bmFtaWNGaWVsZH0KICAgICAgICAgICAgICAgIHx8IHt9CiAgICAgICAgICAgIH0KICAgICAgICA6ICgpLAogICAgICAgICV7ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tIiktPntEeW5hbWljRmllbGR9IHx8IHt9IH0sCiAgICB9OwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsnVGlja2V0J10sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJER5bmFtaWNGaWVsZEZpbHRlciB8fCB7fSwKICAgICk7CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIHRvIHN0b3JlIGR5bmFtaWMgZmllbGRzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcHJvY2VzcyB3aWRnZXQgYW5kIGluIHRoZSBzaWRlYmFyCiAgICBteSAoQEZpZWxkc1NpZGViYXIpOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRpY2tldCBvYmplY3QKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggJER5bmFtaWNGaWVsZC0+QCogKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgdW5sZXNzIElzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIHVubGVzcyBkZWZpbmVkICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9OwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9IGVxICcnOwoKICAgICAgICAjIENoZWNrIGlmIHRoaXMgZmllbGQgaXMgc3VwcG9zZWQgdG8gYmUgaGlkZGVuIGZyb20gdGhlIHRpY2tldCBpbmZvcm1hdGlvbiBib3guCiAgICAgICAgIyAgIEZvciBleGFtcGxlLCBpdCdzIGRpc3BsYXllZCBieSBhIGRpZmZlcmVudCBtZWNoYW5pc20gKGkuZS4gYXN5bmMgd2lkZ2V0KS4KICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZgogICAgICAgICAgICAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+SGFzQmVoYXZpb3IoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNIaWRkZW5JblRpY2tldEluZm9ybWF0aW9uJywKICAgICAgICAgICAgKTsKCiAgICAgICAgIyB1c2UgdHJhbnNsYXRpb24gaGVyZSB0byBiZSBhYmxlIHRvIHJlZHVjZSB0aGUgY2hhcmFjdGVyIGxlbmd0aCBpbiB0aGUgdGVtcGxhdGUKICAgICAgICBteSAkTGFiZWwgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH0gKTsKCiAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFRpY2tldHsiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGRDb25maWctPntOYW1lfSJ9LAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgVmFsdWVNYXhDaGFycyAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6RHluYW1pY0ZpZWxkc1pvb21NYXhTaXplU2lkZWJhcicpIHx8IDE4LCAgICAjIGxpbWl0IGZvciBzaWRlYmFyIGRpc3BsYXkKICAgICAgICApOwoKICAgICAgICBpZiAoICRTZWxmLT57RGlzcGxheVNldHRpbmdzfS0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gKSB7CiAgICAgICAgICAgIHB1c2ggQEZpZWxkc1NpZGViYXIsIHsKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICBMYWJlbCAgICAgICAgICAgICAgICAgICAgICAgPT4gJExhYmVsLAogICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rfSwKICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua1ByZXZpZXd9LAogICAgICAgICAgICAgICAgRmllbGRUeXBlICAgICAgICAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRDb25maWctPntGaWVsZFR5cGV9LAogICAgICAgICAgICAgICAgVGl0bGVGaWVsZENvbmZpZyAgICAgICAgICAgID0+ICggJER5bmFtaWNGaWVsZENvbmZpZy0+e0ZpZWxkVHlwZX0gZXEgJ1RpdGxlJyApID8gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30gOiB1bmRlZiwKCiAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGRfJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IiA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBleGFtcGxlIG9mIGR5bmFtaWMgZmllbGRzIG9yZGVyIGN1c3RvbWl6YXRpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0RHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTGFiZWwgPT4gJExhYmVsLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUaWNrZXREeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICdfUGxhaW4nLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICBUaXRsZSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgZHluYW1pYyBmaWVsZHMgaW4gdGhlIHNpZGViYXIKICAgIEZJRUxEOgogICAgZm9yIG15ICRGaWVsZCAoQEZpZWxkc1NpZGViYXIpIHsKCiAgICAgICAgIyBoYW5kbGUgdGl0bGVzIHNlcGFyYXRlbHkKICAgICAgICBpZiAoICRGaWVsZC0+e1RpdGxlRmllbGRDb25maWd9ICkgewogICAgICAgICAgICBteSAkU3R5bGUgPSAicGFkZGluZy1sZWZ0OjRweDtmb250LXNpemU6JEZpZWxkLT57VGl0bGVGaWVsZENvbmZpZ317Rm9udFNpemV9cHg7Y29sb3I6JEZpZWxkLT57VGl0bGVGaWVsZENvbmZpZ317Rm9udENvbG9yfTsiOwoKICAgICAgICAgICAgaWYgKCAkRmllbGQtPntUaXRsZUZpZWxkQ29uZmlnfXtDQkZvbnRTdHlsZVVuZGVyTGluZVZhbHVlfSApIHsKICAgICAgICAgICAgICAgICRTdHlsZSAuPSAidGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggJEZpZWxkLT57VGl0bGVGaWVsZENvbmZpZ317Q0JGb250U3R5bGVJdGFsaWNWYWx1ZX0gKSB7CiAgICAgICAgICAgICAgICAkU3R5bGUgLj0gImZvbnQtc3R5bGU6aXRhbGljOyI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkRmllbGQtPntUaXRsZUZpZWxkQ29uZmlnfXtDQkZvbnRTdHlsZUJvbGRWYWx1ZX0gKSB7CiAgICAgICAgICAgICAgICAkU3R5bGUgLj0gImZvbnQtd2VpZ2h0OmJvbGQ7IjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXREeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGV4dCAgICAgICA9PiAkRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgU3R5bGUgICAgICA9PiAkU3R5bGUsCiAgICAgICAgICAgICAgICAgICAgVGl0bGVGaWVsZCA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEZpZWxkLT57RmllbGRUeXBlfSBlcSAnU2V0JyApIHsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0RHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIExhYmVsICAgICA9PiAkRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRGaWVsZC0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICBIVE1MVmFsdWUgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IEZJRUxEOwogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldER5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIGlmICggJEZpZWxkLT57TGlua30gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0RHluYW1pY0ZpZWxkTGluaycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAkRmllbGQtPntOYW1lfSA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgJVRpY2tldCwKCiAgICAgICAgICAgICAgICAgICAgIyBhbGlhcyBmb3IgdGlja2V0IHRpdGxlLCBUaXRsZSB3aWxsIGJlIG92ZXJ3cml0dGVuCiAgICAgICAgICAgICAgICAgICAgVGlja2V0VGl0bGUgPT4gJFRpY2tldHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgPT4gJEZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICA9PiAkRmllbGQtPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyA9PiAkRmllbGQtPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRGaWVsZC0+e05hbWV9IiA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXREeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRmllbGQtPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbS9UaWNrZXRJbmZvcm1hdGlvbicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsgJVBhcmFtLCAlVGlja2V0LCAlQWNsQWN0aW9uIH0sCiAgICApOwoKICAgIHJldHVybiB7CiAgICAgICAgT3V0cHV0ID0+ICRPdXRwdXQsCiAgICB9Owp9CgoxOwo=</File>
        <File Location="Kernel/Config/Files/XML/TicketPrintHTML.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KICAgIDxTZXR0aW5nIE5hbWU9Ikdvb2dsZUNocm9tZTo6QmluIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHBhdGggdG8gdGhlIEdvb2dsZSBDaHJvbWUgb3IgQ2hyb21pdW0gYmluYXJ5LiBJZiBzZXQsIHRoaXMgYmluYXJ5IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIFBoYW50b21KUzo6QmluLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6R29vZ2xlQ2hyb21lPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVSZWdleD0iIiBWYWx1ZVR5cGU9IkZpbGUiPi91c3IvYmluL2Nocm9taXVtPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFByaW50IyMjUHJpbnRMb2dvRmlsZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TcGVjaWZpZXMgdGhlIGZpbGUgZm9yIHRoZSBsb2dvIGluIHRoZSBwYWdlIGhlYWRlciBlbmNvZGVkIHRvIGJhc2U2NCAoNzAwIHggMTAwIHBpeGVsKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0UHJpbnQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj4KICAgICAgICAgICAgICAgIGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBcndBQUFCckVBWUFBQURGam8yK0FBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCS2lRQUFTb2tCcE8xU2x3QUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQ0FBU1VSQlZIaWM3ZDE1Z0ZWMS9mL3gxL3NPTXlESzRvSUxxUWlLQ3hFSXd5YWE1bEtwcVlrTHFKbWxhWmFXWnF1bS9pdzErMzdMek53UysyYW1aa21tdVdLbWdxZ0VERE1Fa2hzaWZrWE5XRndBRVppWjgvNzk4ZVo4SFpTZGMrNlo1Zm40NTNQTzU5NTVmejR5NDduM3Z1L252RC9tN3U0dTVNVE1ySC8velRlWHBQYnRlL2VXcENTSjFqMWFzMmlsWFhhSnRsT25hRHQzampaK1h1cllNZHF1WGFOZHNDRGkxTlJJVXFrMGVyUzdlMDNOdmZmbTloOEU1TURNYk5DZzlPLzc2MStYSlBkUm8rS3hQbjJpUC8zL0FGaWR0OStPZHVwVVNYTC83VzhscWE1dXpCaDNYdWtBQUFBQW9DbGJTWklHRHg0MFNKS1NaUERnZURUeVVtWXJWa1QvZSs5Ri96dnZSUHYrKzVKVUtpMWVMRWtORGErOElrbTllOCtkNis0K1preGpZNW4rTTdDUzhiRjMwNWlaRFJteS9mYVMxTmk0Ly82U1ZDcEY2LzZwVDhXejBnUlYvSStUdjBoczFOWis5YXZ4KzAyUzhvd0xiSmhJN082OGM1emRmMyswL2ZvVk55TzBQbVBHU0ZLdlhpZWR4QnNOQUFDUU1qTWJQUGpZWStQczlOTWx5WDNnd0RqdjFpMTlWaEZ6YTNraUFTU2xDYUMwalMvZ3pTTHg0NTYyenp3VGowK2VMRW03N3ZxdmYvRStEU2lmdVA3MTdTdEo3ci8vZmZTbTE3OU50WHg1dEhQbVJQd1hYNHd4WDNvcDJsaWcyTmc0WVlLN2UxM2RHMjlrTXk1SThLNG5NN1BxNmtnOG1aMTRZdlFlZlhTMGUrNVoxTHpXN29jL2RIZWZPdlduUHkxNkprQlRzYko5MjIwbHFiSnkyclRvN2Q2OXlEbWh0ZnZlOStKNmVPV1ZSYzhFQUFDVVg2eFRLNVVrYWRDZ1NHaTRuM3h5c2JOQ2lCV0EwdGl4a21UMjE3OUtVdnYyRHp6Zzd2N1VVK25qQURaRjB4VzcxZFdSZUpWMjI2M0lPVW16WjBmNzVKT1M1UDdFRTlFKytHQWtnT2ZQTDI1dUxRc0ozZzh4TXhzd0lFb2xsRW9ublJSOWFVSTN2dUZvT1pZc2thUmV2YnAyNVJ0Uk5DZXhjdmY2NitQc3JMT0tuUTNhaGpmZmxLVGEydTdkS2RrQUFFRGJFeXZXemp0UGt0eXZ1cXJvK1dCOUxGb2tTZTYzM2lwSnBkSjExMFZKd2hkZUtIWmVRTXRrWmpadzRENzdTRktwTkhGaTBmTlp1NGFHYUI5N1RKTGMvL1FuU1VxU3YvN1YzWDNhdExSVUJGSnRQc0c3NmgvNDk3NFh2Wi8vZkxUeERXL0xsZDRhcysyMnNYSnQ2ZEppNXdPRVNQREdMVnBTang2RlRnWnR6RjU3eGZYdytlZUxuZ2tBQU1qZnFpdldYbnN0ZXJsenJHV0tCVXZwTGVXVmxaZGM0dTQrYVZMNmV3V3dOdkU1UEwzRCsvenppNTNOeGtwTFFEejBrQ1NaWFhOTmZQRXpmbnlCazJvV1duZ0NjLzJsdCtURU43ZEhIUlYvMkxFRS9JTnZMa2FNaUxhbEozWlRzYVNkeEM2YXArMjJLM29HYUh1U0pFcURBQUNBdG1QSWtIUlRheEs3TFZ0RmhTU1puWGFhSkRVMHZQQkNmSzQvOTl5bUpUZ0FyRTNSSlJrMlZmdjIwVWIrem4zY3VNanoxZFJFYWRWUm84ek1Eanl3WGJzaVoxbUVWbjhCakYvd0p6OHBTZFhWNmU3cTk5NGJqKzYzWDNFenk1LzdyRmxGendGWXMzUUZMMUErRlJYLytVL1Jjd0FBQU9WVlh4K2JZcU8xNmRneDJxdXZscVNCQXg5L1BPN1FKWkVQcklsN2xENXBiZHdIRFpJa3N5amxzSGp4ckZtUkQvenFWODNNUm82TUw0aGFzMWFYNERVekd6SmtwNTBpZ3grL1dMTW8waXdOR0ZEazNNck5QWXJUQTgzVEgvNVE5QXpRbHN5ZEswbFRwL0xGRndBQWJZMVoyMXZKMVJhWkhYQ0FKSlZLc1pKdjhPQWhRNHFlRTlEOFRKcFU5QXpLSS9iV01oczlXcEplZnJtdUxyNEFPdmpnUXFlVm94YWY0RTJYWHNldEdSZGZMRWxKRXJVVjNVZU5TcDlWM0F6THorek9PMk8zd1ZpeEREUlA2ZVlXTDcxVTdEelFGcmhmZGxuVW5FK1NvdWNDQUFDQVBNVUtYdmZ4NDJNQjJDR0hGRDBqb0xtb3JMenp6amg2NjYxaVoxSnUvZnBKVXFuMDZLT1JQN3pubmxqaDI5SkxWbnlneFNaNDR4ZXk2NjZTdEhqeFUwOUY3NldYUnB2ZXF0RldwTnZreFlySUZTdSs4cFVpWndPc1M5UGEwTzVISFJXOWI3NVo1SnpRMnNTdXEyYmYvcmE3ZTIzdGIzNVQ5SXdBQUFCUVRwdHRKa2xKY3UrOXNhTDNVNThxZUVKQW9XSlR3aWpSWVBiRkwwYnZzbVZGenFrNFJ4OHRTV1l6WnNUMTRSdmZhTG9wWjB0a3NhS3A2R21zdjhpd2YvbkxjWHpOTmRIYnFWT0JVOHJRdkhuUi92dmZrbVFXQ2JBa2VlKzlPSC9ubldnWEw0NytkT1hqQXc5RUFtUEdqSExQR01oQ2ZHR3p3dzV4L0tNZlNaTDc4Y2ZIbzF0dVdkakUwSUxFcnNwbXNYdHFrbHgwVVZ3WDI4b3RTQUFBWUhYaTgrTkJCOFh4WTQ4VlBSOFVLVDVQUzRNR3hZS1QyYk9MblE5UXJDaFowTCsvSkpWS1AvNXg5SDdtTTlIR0Z5UnRqZG5ERDB1UysybW54WFVpOG5NdFFiTlA4RWJpSjFia210MThzOVMwOUVKekZ5dklwTnBhU1RLYk1FR1MzUC81VDBrcWxhSVdaSks4K0dMODRiejdiakh6QkpxWHBrWFFYM3d4TnNXb3FrcDN5Mnlka3VUYWErUG84TU96ak92K2s1OUlVa1ZGWEQ5YnE2cXErZlBkM1o5NktyNEFBd0FBa1BKTzhMNzhzaVNWU3AvK2RMWnhXNGJHeGkyMmtLUlNhYXV0SkNsSm9qVkwyNTQ5b3ovMndqRkxOemt2ZW9GV2ZCNnZxaG8rM04xOTRzVDMzeTkyUGtEellHYld0MjlWbFNSMTZKQnVUcm5OTnRHbWQ4cW5iWmN1a3VTKzdiYnhzN3Z2M3JSMTc5MDduaGUxY0tXV3RzblpnZ1hSbm5GRzVPdWEveDVYemJiWWZOVEtpVDhvOS92dWk5N0JnNHVjMDVxbHQ1WkhMUlAzc1dNbGFmbnlwNTkyZDU4NWM4bVM0dVlHdER6dTdtUEd4SXBNNmZYWGk1MU4vdUtMckh5dUU2WFN3b1h1N2xPbXhBY1FBQUFBWktXK252ZFo2MmZWeEZGYUtpSHV6SldPT3k3YXlzcnl6R2J2dlNWcCtmSUxMNHp6aXk0cXo3aEE4eGI1cXhVcjR1elZWMWR0TjV5WjJiQmhuVHRMVW1OamZNSGp2di8rOFZpMDdtbWVyN2x0aHBrbXR1KytPejZ2WDNLSkpOWFdYbjY1ZS9OY0t0dnNWdkJHN1l1K2ZTWEovY0VIbzNmbm5ZdWMwd2VpVklMMDV6OUxrdGtkZDBoU3o1NlBQNzVxUWdvQTFsKzhZS1RGN2tlT3pEWjIxS0N0cWZubEw3T01Dd0FBMEJMa3U0TDNoUmRpWmRlZWUyWWJ0KzB3TXhzNk5GYjZOalJjY1VYMG5YQkNlVVpmdmx5U0docy84UWwzOTJuVDRnNWJBT1ZoWnRhdlg1UmtiTi8reUNNbEtVbWlOckJaWExlbFVyUGFPOHdzUHJkWFZwNTZhbk83QTZEWi9FTTEzZDNTL2Vtbm83Zm94Tzc4K2RGR3ByNmlva2VQZUFHUFgyUk56ZC8vVG1JWEFBQUFBSUFONSs0K2VmS2NPYkYzd29rblJsOWFrbkhod254SGp4SndwVks2V1R1QWNuSjNuekhqN2JjanYzYnJyWEVkaUpJM3BWSmEydUd5eTZMTiszcXdmdExyMDRvVmp6d1NDN1hTbGI3Rkt6ekIyelN4bXlUMzN4KzlzWVM3L0NLaDYvNk5iMGhTVlZXYTBMMzAwbmpoYVI1L1VBQUFBQUFBdERhUjRCa3pScExhdFl0U0N0SXJyK1E1cHRseHg1bVpEUmlRSnBRQUZDbEszOHlkRy9tNC8vZi9KS20rdmtjUFNUTDc1amZqV1VXWHhrbHJpai94aEpsWi8vNVJpN2hJaFNWNG94VER2dnRLVXBMY2MwLzBkdWhRM2xuRUptaG1OOTBVNTMzNnhBdks5ZGMzdDZYV0FBQUFBQUMwQmU3dWt5YTk5bG9jcDVzUXB5VVRzeGExUHlzcXpqNDduL2dBTm9XNysvVHA3NzBYSzMydnUwNlNPblhhWTQ5NDdNd3o0MW5wcG1qbDFxZVBKRlZXUHZwbzBTdDZ5NTdnalJXN3c0ZExrdnZERDBkdjdMNVpMdTRUSjBwU2t2VHZIMzhnWjU0WjN3d1U5UWNCQUFBQUFBQ2FpZ1ZZenowWFo5LzlicjZqSFgrOHJaVHZPQUEyaGJ2N3VIRU5EWEY5aUFXYlZWV1I4Sld1dVNiYVdOQlpQcC80UkxTUjZCMDZkT3V0eXp0K0dSTzhrZGo5K01jbEtVa2VlaWg2eTVYWVRYK3hVVXUzYytjRERuQjNyNnQ3OXRueWpBOEFBQUFBQURaV21zaVJac3pJWjRTNEJYelFvTUdEODRrUElBOXhCLzViYjhYQ3pYUFBqYjVQZmpJZW5UMjd2TFBwMzErU0dockdqalV6Njl1M2ZBdGFjMC93bXBrTkg3N1ZWcEtVSlBmZUc3MWR1dVE5YnBnelI0cGZiTk5hdXVQR2xUdVREd0FBQUFBQU5vYTd1M3VTU0pMWkwzNlI1MWhKRW5zRUFXaVpZbVh2cEVtU1ZGV1ZycXhOVi9hV2gxbDhVZFNodzIyM2xldk9nTndTdkdabUkwZFdWRWpTOHVXMzN4Njl1KzZhMTNpcmlsOWtmZjJ3WVUxL3NRQUFBQUFBb09XcXJQenpuK05vNmRJODRwdnRzMDhlY1FHVVY3cTMxcW9yZTBlTmlrZnp1WDU4MU5GSFMxSjE5Y1VYNXoxU3JpdDRaOC8rK2M4bHlleXd3L0ljNXdOMzNTVkpWVlVISFJSRm1PZk5LOCs0QUFBQUFBQWdUMDAzUXplYk1DR2ZVWVlPelNjdWdDTEZBdEF4WXlTcFZOcDMzK2lOelJ6ejk2TWZ4U1pzeHgrZjF3aVpKM2pOektxclI0eUk0L1BPeXpyKzZyai84cGVTVkZzN2NtVFRDejRBQUFBQUFHaDkzS2RPelNkeXQyNlJpQ2xYYVVrQTVlVHVQbVhLUC84WloybWk5NWxuOGgwMUxkSHcyOSthbVEwZW5HNEtsNTNNRXJ4eEFkeG1temorOWEremlydDIxMTRiR2ZodmY5dFhLcys0QUFBQUFBQ2dLTzc1YnA2VUpMdnNrbWQ4QU1XSzBnMnZ2aXBKalkzNzd4Kzl0Ylg1anRxcFU0eDl5eTFOUzl0bUllTVZ2RGZjRU8xMjIyVWJkMVh1Tjk4c1NiVzFVVU1EQUFBQUFBQzBIYVhTMjIvbkczL0hIZk9NRDZCNWNIZWZOdTJkZCtMczBFT2p6WHRGNzdCaGtqUm56bmUrazFYRVRVN3dSa21Ha1NQakxMOWFFaUdLcWRmVm5YRUdLM1lCQUFBQUFHaWJHaHZ6VGZDNmI3RkZudkVCTkMreG9uZkJBa21xcnova2tPaDk3cmw4eC96eGo4M01CZzdzMDJkVFkyMTBndGZNYk1DQXJsM2orTHJyTm5VaWF4ZTFNZXJyVHowMTBycEprdTk0QUFBQUFBQ2d1VEo3NzcwODQ1ZEttMitlWjN3QXpaTzcrL1RwOCtiRjJaRkhSdnZXVy9tTTFxR0RKSlZLdi91ZG1abFphYVB6dEp1MGdyZFV1dUNDT09yV2JWUGlyTm5DaFRIT3NjZkdQM0MrRjNBQUFBQUFBTkQ4VlZTMGI1OW5mUGVxcWp6akEyamVZa1Z2MVBwT2tyUnlRVU5EUHFNTkdTSkpnd2FkZlBMR1J0amdCSytaMlpBaE8rMFV4K2VjczdFRHIxMlVYaWlWVGpnaGRyZDcrZVY4eGdFQUFBQUFBQzFQeDQ3NXhsKzBLTi80QUZvQ2QvZTZ1c2NlaTdQdmZqZmZzUzY3ek16c3dBTmpaZStHMktnVnZFbHkrZVZ4dE9FRHJnLzM2NitQeE82amorWVJId0FBQUFBQXRGeU5qZHR2bjJkOHMzeHIvQUpvV1dKRjc2OStGV2NQUFpUUEtEdnZMRWxMbG16NGd0cjFUdkRHWm1yOStzWFp4aThaWHJ0WSt0elFjUDc1K2NRSEFBQUFBQUF0M3c0NzVCcy9Ta1lDd0ljbHlSbG54RkUrdFhuZEw3akF6R3pvMEsyM1h0K2YyYUFWdkdiZi8vN0tIOXVrMnIwZkZTVVprdVMwMDZpMUN3QUFBQUFBMXFaVTJtdXZmQ0pIZnNMOWhSZnlpUStnSll1U0RXKzhJVWxtMy9wV1BxTjA3U3BKalkzcnY1SjNuWWxhTTdPQkE3dDNqN1BqajkvWXFhMTlqREZqNGg5b3dvUTg0Z01BQUFBQWdOYkRQYjNET0d1dnZSYTNZci83Ymo3eEFiUUc3dTQxTmJmZEZzZDVsWmc5ODB3enM5NjkxNzJwNUhxdHhEVTc2Nnc0eW5vWHlmcDZTVXFTaXk3S05pNEFBQUFBQUdoTnpNd0dEZXJTSmM3Njk4OW5sQmt6OG9rTG9MVnlUemRmUzVKc0kyKzNuU1IxNlhMQ0NldDY1aG9UdkUwenhHWnBiWW1zM1hDRHUzdHQ3VXN2NVJNZkFBQUFBQUMwRm1hSEhCSkg3ZHJsTThMNDhmbkVCZEFhUlVXQzZkTWx5ZXlPTy9JWjVkeHoxL1dNdGE3Zy9TQkR2TzIyMlV3b3RXeVpKTlhYWDNGRnRuRUJBQUFBQUVCcmxTU25uSkpuL0ZJcHIxdXRBYlIyRFEwWFh4eEhLMVprRzNuQWdMaURZYi85MXZTTXRTWjR6ZGE5Qkhqai9PRVBzWm5hdkhuNXhBY0FBQUFBQUsxQkpEWjIzVFdPRHo4OG4xRWlQMUZUUTRrR0FCdk8zWDNhdEZkZWtXS3ZzWHpHT1Bua05UMzJrUVN2bWRtQUFiRmJtL3RCQitVeG9TUzU5dG84NGdJQUFBQUFnTmJvc3N1aXphczB3OTEzdTd1N1oxMURFMEJia3lSWFg1MUhYTE5qanpVek8vREFqMTRIVjd1Q3QxUWFNU0tPc3Q1VTdmSEhtOWFtQUFBQUFBQUFXQjB6cytycVk0NkpzeE5Qekhlc08rL01NejZBdGlIMkdxdXRqYlBKazdPTnZzMDJrclJreVVkTE5hdzJ3V3QyN0xIWlRpQzQvKzUzZWNRRmdKWXVyNVVDN28yTmVjUUZBQUFBS3ozelltWTJlUEMrKzhieExiZmtPOXJycjB0U3o1NVBQcG52T0FEYUdyTWJic2duOG5ISGZiam4veEs4VWRPbVk4YzRTM2Vsek1yeTVUSEcvZmRuR3hjQVdvc0ZDL0tJYWpaL2ZoNXhBUUFBV282bFMvT0k2czZlTWxtTHhPNm5QeTFKN21QSFJtK25Udm1PZXQxMTd1NWp4ckF3QWtDMjNPKzlONDZ5M1hUTmZjUUlXeW50SzYzNmhHSEQ0cWg5K3l3SE5udmtFWGYzcVZQZmZUZkx1QURRV3BqOTR4L1pSblNYcElhR3JPTUNBQUMwTEVueS9QTnhWRitmWmR6czM3KzFQZGJFb0VIZitZNGt1VC80WUR5YWQySjM4V0pKYW15ODhjWjh4d0hRRmpYTmc3by85bGkyMGJ0M2w2VHE2ajMyU0h0V1NmQ2FEUitlN1lEQi9TOS95U011QUxRV1ZWWDMzQk5IYjd5UlJUeXpCeDVvdW9zbkFBQkFXeFR2aDk1NUo4Nnl1dFUvN2xDdHFManBwbXppdFQyUjBCMDZWSklHRG56cXFlaTk4c3BvS3l2TE1RZjNYLzk2MWI4UEFNaEwrbmsvVzJaUnlrYjZTQTNlanhicHpjWWpqK1FURndCYVBuZjNpUlBmZjErU1NxV1RUb3JlSlVzMkx0cWNPWkxVMlBpMXIyVXpPd0FBZ05haHZ2Njg4K0lvVFNodXFQUVcvbTk4dzkxOTh1UjQzNFUxTXpNYk9uVHJyU09oKzZVdnhhWnA0OGZIbzVNbXhYUHlXV2kyWnErK0trbkxsMTkyV1huSEJkQldWVlRrVTdJMlNUNjRmcTZzMVZBcVNWSjE5VnR2eFhtWEx0a01OWHQyTEVuZWJiZHM0Z0ZBNnhlMXgrSldDL2RMTG9uZUk0Nkk5c08zcXYzNzM5SGVjWWNrVlZWZGNVVWtqTlByT1FBQUFGSm1abjM3VmxWSjBtYWJmZXRia3VSK3hobng2SWMvdDhaS1hTbE5TRjUrZVh5KzNkZ0VjWGJNekhyM2p0S0tuVHVubTVIdHRKTWt1V2RiY25IZGMrblFJWTY2ZFl2elhYYUplUXdZRVAxNzdSVnRhYldidkplYisxRkh4UzczN0JFRW9IemlpNjdacytPc1Y2OXNvcjd3UXJ3dTdibW5TZExnd1IvL3VDUWx5Y3laMlF3UTNHKzdMUzZjcDV5U1pWd0FhRXZNekE0OHNGMDdTVnE4T040NEowbERnN3Q3WFIyYnFBRUFBR3lxK09BZEM1M2F0WXN2MUJjdW5EL2YzWDNXckRUUlc3eFlDSERVVVpMa1BucDA5RzYvZlpGemFpbk1icnJKM2IybTVzd3ppNTRMZ0xZblhtZGlZWlowNG9uWlJJMjlkNlJ0dDIwblNVblN1M2MyZ1QrcytHODJBYUNsYzNjZk42NmhJYzdTRmJzQUFBREl5cXFiZ2plL3pjR2p0TUdSUjhieDNYZEhiMFZGa1hOcU9mNzJOMG5hWW91enp5NTZKZ0RhdXNtVG84MHF3V3NtU1VuU3A4L0tXeVN5V2hyOFlUTm01Qk1YQUFBQUFJRFdyV2twQnJNYmI0eGVFcnZydzJ6cVZFbHExMjdreUZVWFRBQkFNZExyVXZaeGUvVXFwUWQ1RE5EUThQTExlY1FGQUFBQUFLQXQ2TnIxNElQanFIdjNZbWZTTXJpUEhTdEo3ZHNmZEpDNys2UkppeFlWUFNjQWtLVEd4bncyNXpUcjJiTWtTVW1TZFlKM3lSSjM5K25UNTgzTE5pNEFBQUFBQUcySGUvLytSYytoZVd0c2pQYktLeVdwcnU2SUk5emRuM3BxOGVJaVp3VUFIelp0MnB0dnh0R0tGZGxHM25YWGxTdDRlL2JNTm5BK0dXa0FBQUFBQU5vU3N5alJnRFZKUzFhY2NZWWtWVmRmY1lXWjJmRGhXMjFWNUt3QW9DbDNkL2NraWJQWFg4OHk5ditWYUpBMjN6ekx3TkliYjJRYkR3QUFBQUNBdHVqVlY0dWVRY3ZRcFV1MFAvaUJKSzFZTVd0VzdGcC8xbG0yVXBHekE0Q1UyZHk1V2NaejMyR0hsUW5leXNvc0E1dGx2ZFFZQUFBQUFJQzJwNkxpa1VmaWlFM0NOa3k2Z3ZmNjZ5V3B1bnJzV0RPelljTzIyNjdJV1FGQWtyejNYcllSMjdVcnBRZFpoazBTRXJ3QUFBQUFBR3lLMkNUc3RkZmk3S2FiaXAxTlMvZlp6MHBTUThPa1NiR3lkODg5aTU0UmdMYXF2ajdiZURrbGVGbkJDd0FBQUFCQWRqcDErczUzSk1uc3pqdUxua3ZMdHNzdTBUNzl0Sm5aNE1GRGhoUTZIUUJ0VVBZSjNwV0ozV3hMTkdRL1VRQUFBQUFBMmlaMzkzSGpsaTJMc3hOT01ETWJPUENHR3lUSjdQampvejlXcEpwdHVXVXhzMHgxN2h4dHVqbmNEanRFbTNYZVlWTkZDUWYzUng4MU14c3k1TWdqM2QyblRIbmlpYUpuQnFDMXl6cHZXbEd4TXNGYkttVVpsbDArQVNBN1VTc3MzaWdueVU0N1JkdllLRW5MbHIzOHNydjd6Sm5jT1FFQUFMQ3h6TXo2OVl2RWFGWFZqanRLVW1OakpGUzdkcDB6SnhLc3phY0dycnQ3WGQyRUNYR1d0czJQbWRuSWtSVVZrdlRxcTVIb2JXam8zVnVTM1BmWko1NHpmSGc4KzRBRG90MWlpL0xPc2xNblNVcVMrKzgzTTZ1dUhqclUzYjIyOXJubnlqc1BBRzJGV1h5ZXowNjdkaVpKMWRWdnZoa2RXUlViSHovZTNYM3ExQU1QekNZZUFMUWRUVzhWYzcvODh1aE5yNmNmTHFtVEZtZS82eTVKYW1pNDhFSjM5My8rOC9YWHl6TmJBQUNBbGlkcXNLYnZyeTY5Tk5vMDBmamhCVkNMRmtYN2h6OUlVa1hGeFJlN3UwK2V2SEJoT2ViYUZzVHZvMlBIT0R2NjZHaS84SVZvRHowMDJtd1hwcTNaQ3k5SVVydDJRNFpFRGVUMDl3OEFteTYrU0hyb29UZys3TEJzb3I3enpzb0w1UHo1MlFSTXNTc2xBR3lvZUdQN3VjOUprdnVUVDBidnB6OGQ3WnBxcFcrK2ViUmYrbEk4cTdZMmJqSHIxU3ZmMlFJQUFMUTg4VVg2S2FmRTJkLy9IdTErKzBXN3BnUmlXbkxnNjErWHBNYkdtaG96czczMy90akg4cHhyV3hJTHhKWXVqZmFPTzZLTjk4V2xVcXo0TmJ2NjZuaDJXcW9pTDN2c0lVbU5qVC8vZWI3akFHaXJ6TExPbTg2ZnYvSUZiTUdDYkFOdnUyMjI4UUNnOVRJejY5czN2Ulh0OTcrUHRxcHE0NkxGQzBXUy9PWTNXY3dOQUFDZ05ZZ3YwcU5FZ1B1Tk4wWnZsQTdZY0QxN3hrL2Zja3NtazhNYVJVM2NLRWxXVTNQZWVkRTdZRUE4Tm5GaXZtT2ZmbnFzdEJzMkxNOXhBTFJGMlNaNDNmOHZ3WnYxQ3Q2dHRvcUV4Y1ltS0FDZ2JXbmYvcmpqNG1qcnJiT0plTkJCWm1ZREJzU0tCd0FBQUtRcmR6ZmJMSXRvWm9jY1ltWTJkT2p1dTJjUkQrc1dLM3VmZjE2U2R0MTEvLzJqNythYjh4a3RWblNiL2VwWCtjUUgwSmJZU25IV3JWdTIwUmNzeUNuQkd4UHUwQ0Z1YlFBQXJKMVoxTnpOV3FrMGRHZ2VjUUVBQUZxYXZONXZOVGIyNlpOSFhLeVp1L3VZTWJGSlVWM2Q2YWRIMytqUitZdzJaRWlzNUUxckFRUEF4aGs2TksxNGtPMkMyRkpwNGNLVkNkNy8vQ2ZMd0I4WU9EQ2Z1QURRdXBodHRWVStjYk5hRVF3QUFOQ3l1ZWZ6Zmt0S053ZER1ZmxLa3JSOCtUbm5SRjlOVFI1am1WMTRZUjV4QWJRZGpZMzU1RW5kNTgxYmVjdkJzOC9tTVVCYUd3Y0FzSGJ1NmEwYTJUSXIxMjdEQUFBQXpWdGU3N2RRUEhmM21UTlhySWl6azA2S3RyNCsyMUgyMnk4Mk14NDhPTnU0QU5vSzk3MzN6aWZ5cTYrV0pLbFVtakVqai9CbUpIZ0JBQUFBQUVEKzNOMXJhMTk2S2M1dXZUV1BNWkxrN0xQemlBdWdMY2huQmEvWjlPa2xTWm95SmIwQUxsMmE1UUR1QXdiRWJxV1ZsVm5HQlFBQUFBQUFXSlBHeHYvKzd6aUtFZzdaR1RVcThoeGR1bVFiRjBEcmwvVkMyTGkrVlZRODgwd3BLdFlrU1R3d2MyYTJBM1hxSkVtbDB2RGgyY1lGQUFBQUFBRDRLSGYzYWRObXpZcXphZE95amQ2aFE0eHh4QkhaeGdYUUdwbVpEUnUyNDQ1eDFxdFh0dEhuekhGM256UnAwYUlQMVdhY1BqM2JnVUtTSEhaWUhuRUJBQUFBQUFEV3hQMHZmOGtuOG9nUitjUUYwTnJVMXg5K2VCeGxYUXYrZzVLN3F5UjQzYWRPelhhZzFPYytsMDljQUFBQUFBQ0ExVE9iTUNHZnVKLzlySm5aZ1FlMmE1ZEhmQUN0aDltaGgrWVRlUTBKM2lSNTVKRjhCdXpiMTh4czRNQWVQZktKRHdBQUFBQUE4R0hQUEJOdDFyVjR0OWhDa2hZdjd0Y3YyN2dBV29OVjl5UTc2S0E4eG5CLzRvbjB1UFJCcC91MGFhKzhFbWZQUDUvSHdCVVZSeDZaUjF3QUFBQUFBSUNtM04yblRuMzMzVGliT3plZlVmYmJMNSs0QUZvNnMzMzNqYU9zTjJWY3NrU1NGaTE2K3VtMHA3UzZwNWs5L0hDMkE0Y2s2ZHMzajdnQUFBQUFBQUJyOXVhYmVVUTFZMU41QUt1WEpBY2NrRS9rOGVQZDNXZk5XcjQ4N1ZsdGdqZEo4a253bW4wd01BQUFBQUFBUUhta0szbXo1ZjdKVCtZUkYwRExaN2Jqam5uRWRmOW8zbmExQ2Q3T25kTWFEa3VYWmprQnMrblRzNHdIQUFBQUFBQ3didmtrZUtYdTNkbHpDTURxdmZOT0hsRlhWM25oSXdsZWQvZHg0NVl0aStPLy9DV2JvU05SN0g3ZmZkbkVBd0FBQUFBQVdEL3VEUTE1eGkrVjBscWJBQkRjeDQ3Tk51Snp6MFZ0OGRtelAveEl1N1gvNEU5L0d1M25QeDl0NTg0Yk40R0xMNDRKTEZpd2NUOFBBQURRY3BtWkRSNGNleEVreVdtblJlL0FnYXMrcTY1T2t0ei81My9jM2V2cW5uMjJ2TE5FYTJkbU5uUm96NTZTbENTeG0zT1NWRlJJVXFtMGFKRWt1Zi9yWC9HK1BkMTFIZ0JhaDFKcDg4MGx5VDJ2RWJwM3p5c3lnSmFwcm03Y09Fa2FOR2pxVkVseUh6Um9VK0taL2VwWGEzcHN0U1VhWWxEMzJ0cm5ucE9rSkRueXlPaDk3YlgxRzNMKy9CajRhMStMTjRoWFhiWCswd1VBQUdnZHpNd0dEZnJtTnlYSlBVcFZtWjEzWHJTeDZjSUhiZlNYU2pObW1KbFZWMTl5U1RHelJtc1RmNGNYWENCSmpZMHZ2aWpGRndueDJPalJjZjdIUDhhejQrOXYwS0M3N3pZekd6NThzODJLbVRVQVpDdEpObmJCMnZweGp5L0tBRUNLdktwN2ZLVmtObXBVOUg1MDVlMzZ1ZXN1U2VyWk05Ni9yYzRhRTd4TkoxUlhOMkdDSkZWVjdiNTc5SDN4aS9Ib2xWZkcrYzkrRnVjalI4YnpldlJ3ZDYrcGlUZU1BQUFBYlVtczJEMzg4RGhMdjJrdnJmTjlWNGdWbFdZLytsRWsyaTY5Tkk4NW92V0x2NS8wNysrS0s2SnR0NDQ3K0ZJalJraFNmZjN0dDV1Wm1hM3YzeThBTkU5bStkYklUZStFQUlDbTNOMm5USG41WlVucTBHSEFBRWt5KzhFUDR0RTFWVHBJRThIbm5CUHRTU2U1dTQ4WjA5aTRwbkhXOHcxZVRHaml4UGZmajdQYmIxKzFCUUFBZ0swa1NkWFY2UjFNY2I3eExyb29Fc2FUSnNVWDZBODl0S256Uk9zV0s4QlBQVFdPMHc4R0c4ZjltR01rcWJyNjdMT2o1OXByTjNWK0FGQXVabVo5KzFaVlNWS0hEdm5zWnA5eWYrdXRQT01EYU5uYzNaOTZhdkhpT0VzWHl2N3NaMlptL2ZwdHVhVWttYTFZNGU0K2ZmcDc3MjFvZkw2SkJ3QUF5RkIxZGRUYWxmYllJNXVJa1NCMnYrVVdNN05ody9MOWdJcVd5OHhzeUpDUGZ6eU9yN3N1Mitnbm41eHRQQUFvajZxcTZ1bzRXdDg3R0RaT1JjV3NXWG5HQjlBNnVidlBtUEgyMnh1YjJFMlI0QVVBQU1pUVdXeGlsYjF1M1NTcG9lSGVlODNNK3ZlUHpXS0FLTVd3elRhU2xDVDMzUmU5SFR0bU84cjIyMmNiRHdES3cyeS8vZklkWWRreVNlclI0OVZYOHgwSEFOYU1CQzhBQUVDR3pONTlOOThSQmc2VXBLcXFXMitsTm1yYlptWjI0SUVkT3NUWjNYZEgyNnRYUHFORkFnTUFXaHF6S0RXVG4xbXoxbFViRXdEeXhnY0NBQUNBRENWSlRVMGNMVjJhNXpnZjFFWWRQYnBwN1YrMGZyRml0N0pTa2hZdHV2UE82UDNrSi9NZDllMjM4NDBQQU5tSjJ2VnBxYVNoUS9NY3kzM2l4RHpqQThENklNRUxBQUNRRVhmM3FWUFR4TzZ2ZjEyZVVVOC9YWktxcTYrK21rUnY2eFlyZHFPR3BObHR0MFY3MUZIbEdmMmVVcTE1YlFBQUNiNUpSRUZVZThvekRnQmtJMGt1dkRDTzhuNWRIRGN1My9nQXNHNGtlQUVBQUhMUXFkTkZGOFhSakJubEdmR2NjeVNwdWpvMlkwc1RnV2o1ek14NjkyN2ZYcElXTGZyVG55VEpmZFNvOG93K2FWSzBWMTFWbnZFQVlPT1ptUTBjdU04K2NYelNTZm1PNWk1SkRRMGtlQUVVandRdkFBQkF4dHpkeDQyTG1xV2xVdm9COC8zM3l6UDZLYWRJMHBJbGQ5NFp0L0pudmRrV3lzWE1iUGp3cmJhU3BDNWRIbjQ0K280OXRqeWpMMXdvU2FYU3lKR3hNcjIrdmp6akFzQ0dNek1iTUtCclYwa3FsWDczdStpdHFNaDMxS2VlaWwzdjU4M0xkeHdBV0RjU3ZBQUFBRGx4ZDU4eTVWLy9pdU96emlydjJPbW1NazgrYVdZMlpNaE9PNVZ6Zkd5OFdJSFdwNDhrclZneGVYTDBmdXBUNVJrOU5na3lPK1dVK1B1ZE83Yzg0d0xBaGpNejY5OS84ODBscVZUNjYxK2pONjI5bXkvMzIyOHZ4emdBc0Q1SThBSUFBT1RNM2IyMjlwWmJKTW5zNXo4djcrZ0RCMHBTa2t5ZEdwdk9ISFpZZWNmSCtqSXpxNjcrd2hja3FWUktTeVBzdGx0NVovSDk3N3U3MTlRODlGQjV4d1dBOVJkM3FPeThzeVJWVmo3NVpQUWRjRUI1Um84N2N1cnIvL3puOG93SEFPdEdnaGNBQUtDTXBrNDkvM3hKY3IvdnZ2S092TzIyTWU2REQwWWk4YXFyb2dUQVpwdVZkeDVJUllLaVM1ZG9mLy83NkV0WGhIWHFWTjdaL09ZM1VZcUJXcnNBbWg5cm9ycjYxRk9qTjYxeFAyQkFlV2Z6WC8vbDdqNWp4dHR2bDNkY0FGZ3pFcndBQUFCbDR1N3VuaVNTMUw3OUNTZEU3L2p4NVoxRjdDWnVkdDU1a3JSaXhjeVpVY0xoa0VQS080KzJLeElVUnh3Ulo4ODhFMjNVVGk2L3VLVzVVNmZ5bGhBQmdQVVJyMCt4TXJlNitoLy9pTDZiYjQ1SHUzUXA3MnhtejVha1RwMSs5clB5amdzQTYwYUNGd0FBb016YzNTZE9qRnM4MjdYNy9PZWpkOHFVWW1iVHE1Y2tKY2tqajhSSzBqdnVhSHJyS3paZC9IdnV1V2UwRHp3UWZmZmZINDhXVXh2WkxEWnRXN1pzMUtqWUZMQ2hvWWg1QUlDMDZoME4xZFdubmhwdHZDNG1TZnBGNk5DaHhjek9QZHF6em1xNmlTb0FOQ2Z0aXA0QUFBQkFXK1h1UG1uU29rVlJLaUZxNDY1WU1YWnNQRHBrU0hsbkV5dDdwUk5QalBib28rTUQ5L1hYUzFLcDlJdGZ4S1piYjc1WjNubTFQTEdiK3k2N1NGSkZ4UTkrRUwxZitVcTBsWlVGVFV2U0I0bmR5c3Bqam9sYXV5dFdGRGtmQUcxRGJCN1pyVnVjOWVzblNhVlMranFYYmlLNS8vN3gzQTRkeWo3QnRYQy82YWFvcGYvSUkwWFBCUURXaEFRdkFBQkF3V0pGNzF0dm1abjE3WHZ3d1pMVXZ2MDk5MGlTV1ZHbEU5TGF2Ti85cmlRbHlkbG54eVp0Y1d1cyszWFhSYzNXNTU4dlpuN05SL3k3UkExSTkzUFBsYVNLaXBOT2lrZUxUZWltek82OFU1TGVmLytVVTBqc0FsbTc0SUpWYThPMmJhWFM1cHRMa3Z1V1cwYlB4ejRXL2VXdUxiNnBYbnBKa3BZdmo5ZEJBR2pPU1BBQ0FBQTBFKzd1TTJjdVdXSm0xcnQzMUdqdDJqVTIzM0lmTmFyWTJVWEMxLzNzcytQOHJMTWlzZm40NDlFZmlkOWx5KzY3TC8zdktHcW1lVEV6NjljdkVoYnQyNDhZRWIybm55NUo3dnZzVTl6TTFzd3NWbUQzN0hudXVlN3VZOFkwTmhZOUo2RDE2ZHRYa3N5aWJldlNnZ1l0MStMRmttUTJZa1JyZlQwRDBQcVE0QVVBQUdobTNOMW56VnErUFBZTGo1SUpnd2JGWmx6dWwxNGF6eW9WdkpkQ2xIUndqeFhIVXJRZE9peGRHcVVkSG53d0huL29JVW1xcUhqNDRaWlM0aUZ1SmU3UlE1SXFLZzQ5VkpMY0krRmVWZldaejhSNVZWVnhNMXliK25wSk12dm1OMk9sN3VqUlJjOElBRnFHK0FMTUxHcVQxOVRNbkZuMGpBQmdmWkhnQlFBQWFLWjhwVGo3eVU5aXhXeWE2STJWdlZMWHJrWE5iL1U2ZG96MitPTWx5U3phSkhHUHhHOWEwbUh5NUtadHFmVGNjNUxVMFBEc3MrN3VkWFh6NTJjOXMwamNkdThleDN2dUdXMjY0aTZ0QlRsc1dNeG4xMTJsbHJRUzdkLy9scVFrT2VHRStQZWJNS0hvR1FGQXl4QWxhOHkrOElWSTdLYTE4QUdnNVNEQkN3QUEwRUxFQjgvNzdvdEU1ZDU3UzFLcGRQdnQ4ZWgrK3hVNXQzVkxOM0hiYTY5VjJ5OS9XWktTSk01S3BYUTM5ZmZlaTU0MzNvajJQLytKZHVuU2FOOTlkL1hqUk1MYlBXcEFtbTIvZmZSSFd5cWxDZWpXNG9FSEpDbEpUanN0cjhRNEFMUk95NVpKa3Z2eHgwZE4rYmllQWtCTFJJSVhBQUNnaFlsRTN2LytyNW5aeUpHeCsvakxMLy93aC9Ib2hSZEcyNzU5UWRQTFNDUm9wZDY5VjIzWFQ1cE9ibjJpRnFUNytlZExVbDNkRFRlc3V0SWJBTEIyYytkS2t0bHh4MFZpZDhxVW9tY0VBSnVxNE5wdEFJRFEwSkJQM0tqRkNLQjFTamZOaWcrb2wxMFdmV25KZ2RqOERLMUYxRFJPa3I1OTNkMXJhNisvbnNRdXNHRktwYnplYjZGbGlPdG9SY1dBQVhGSERJbGRBSzBIQ1Y0QWFCYWlkbUxXa2lTOXRSbEFXeENKdjVkZWtxVGEya01PaWI1VFQ0MUhYMys5dUpsaHc4MmFKVW51eHh3VENmd2pqa2hYYmhjOU02RGx5dWY5RnBxcnQ5K085c3RmYm5vZG5UeDU0Y0ppNXdVQTJTUEJDd0ROd3JoeDJjYUxsYnZ1VHo2WmJWd0FMWUUzVVZ0N3l5M1J1L3Z1MFY1OGNiU0xGeGN5T2F6QmdnWFJmdXRia3JSc1dicFM5NTU3aXB3VjBMcGsvWDRMelV2VTFKV3V1VWFTU3FVK2ZTS3htMjVLQ2dDdGwzRmpGd0FVeTh6TXJGU1NwT3JxYWRPaXQxKy9UWW5wUG5wMEpBYSs5clZObnlHQTFzYk1iTml3enAwbHFhRWhYZUViTlYzVHpjaVF0OWcwenV6R0d5WEovWmUvakVURW1qYVBBN0Fwek15R0Q5OXNNMGxhc2VMNTU2TjM1NTJMbkJNMjFadzUwZjdwVDlGZWUyMWNSMW1wRGFEdEljRUxBTTJFbWRuUW9iSENyckh4YjMrTDNsMTIyYkFvNDhkTFVuMTkzSUkyZlhxNkN6MEFySm1aV2YvK3NhbFpaZVdYdmhTOVgvOTZ0R2xOWDJ5YXlaTWx5VDBTdW9zVy9mR1A3dTZ6WmkxZlh1eThnTGJGekt5NnVybzZqcU1tcTdUZGRrWE9DV3Z5MWx1UzVCN1h6MUlwYXVZMk5qN3dRSlNzbVRxMXlOa0JRSE5DZ2hjQW1oa3pzMEdEdW5TUkpQZXp6NDYrbzQ2S1IzdjFpamJkSkdUbXpIamVIWGRJVXVmT3Q5L3U3ajV1SEp1SUFOaDBjVDNhYjc4NFB1MDBTWEkvK3VoNGRNc3RpNXRaYzVhdXpMM3JyamovN1c5ak01LzBEZzBBellHWjJjQ0IzYnBKVXFsMHpqblJlOWhoMGZib0VXMUZSUkZ6YXozU2hRYnhSWmJadkhtUzVCN3RCeldSWjgrT3g1OTlOdHBZWVYxVE0yY09tMGtDd1BvaHdRc0FBSUQxWW1iV3QyOVZsU1MxYi8rWnowaFNxWFRNTVpMay90blB4ck82ZHk5cWZ1V1YzaG9jZDF3a1NTUjBkOXR0L0hoMzl6RmpHaHVMbXhzQUFBRGFFaEs4QUFBQXlFU3MrUDNFSnlUSi9lQ0RvM2ZvMEhoc3lKQTRUKzlFYUs3U2Q4WXZ2QkJuTlRXU1pEWnBraVExTnY3OTcrN3UwNmJObWxYVURBRUFBSUNtU1BBQ0FBQ2dMS0xXK05aYlMxSkRRNTgrMGJmSEh0RkdEWEwzSFhlTU5sWUNtOFV0MU5JMjIwUmJXUmx0eDQ3UnRtOGZiYnA3K3Z2dlI1dld0bDJ3SU9KRTZRVDNOOStNL3JsejR6d1N1VkxjRW16MjNITnNkZ1lBQUlDVzVQOEQ5RkFKbGpsaDltVUFBQUFBU1VWT1JLNUNZSUk9CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRQcmludCMjI1dpZGdldHMjIyMwMTAwLVRpY2tldEluZm9ybWF0aW9uIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlByaW50aW5nIGluZm9ybWF0aW9uIHVzdWFsbHkgdmlzaWJsZSBpbiB0aGUgVGlja2V0IEluZm9ybWF0aW9uIFdpZGdldCBmb3IgdGhlIFpvb20gVmlldyBzaWRlYmFyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRQcmludDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpUaWNrZXRJbmZvcm1hdGlvbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFByaW50IyMjV2lkZ2V0cyMjIzAyMDAtQ3VzdG9tZXJJbmZvcm1hdGlvbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QcmludGluZyBpbmZvcm1hdGlvbiB1c3VhbGx5IHZpc2libGUgaW4gdGhlIEN1c3RvbWVyIEluZm9ybWF0aW9uIFdpZGdldCBmb3IgdGhlIFpvb20gVmlldyBzaWRlYmFyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRQcmludDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpDdXN0b21lckluZm9ybWF0aW9uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0UHJpbnQjIyNUaWNrZXRJbmZvcm1hdGlvbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QcmludGluZyBpbmZvcm1hdGlvbiB1c3VhbGx5IHZpc2libGUgaW4gdGhlIEN1c3RvbWVyIEluZm9ybWF0aW9uIFdpZGdldCBmb3IgdGhlIFpvb20gVmlldyBzaWRlYmFyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkN1c3RvbWVyOjpWaWV3OjpUaWNrZXRQcmludDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iQ2hlY2tib3giPjE8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0UHJpbnQjIyNQcmludExvZ29GaWxlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNwZWNpZmllcyB0aGUgZmlsZSBmb3IgdGhlIGxvZ28gaW4gdGhlIHBhZ2UgaGVhZGVyIGVuY29kZWQgdG8gYmFzZTY0ICg3MDAgeCAxMDAgcGl4ZWwpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRQcmludDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPgogICAgICAgICAgICAgICAgZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFyd0FBQUJyRUFZQUFBREZqbzIrQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJLaVFBQVNva0JwTzFTbHdBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFDQUFTVVJCVkhpYzdkMTVnRlYxL2YveDEvc09NeURLNG9JTHFRaUtDeEVJd3lhYTVsS3BxWWtMcUptbGFaYVdacXVtL2l3MSszN0x6TndTKzJhbVprbW11V0ttZ3FnRURETUVraHNpZmtYTldGd0FFWmlaOC83OThlWjhIWlNkYys2WjVmbjQ1M1BPNTk1NWZ6NHk0N24zdnUvbnZEL203dTR1NU1UTXJILy96VGVYcFBidGUvZVdwQ1NKMWoxYXMyaWxYWGFKdGxPbmFEdDNqalorWHVyWU1kcXVYYU5kc0NEaTFOUklVcWswZXJTN2UwM052ZmZtOWg4RTVNRE1iTkNnOU8vNzYxK1hKUGRSbytLeFBuMmlQLzMvQUZpZHQ5K09kdXBVU1hMLzdXOGxxYTV1ekJoM1h1a0FBQUFBb0NsYlNaSUdEeDQwU0pLU1pQRGdlRFR5VW1ZclZrVC9lKzlGL3p2dlJQdisrNUpVS2kxZUxFa05EYSs4SWttOWU4K2Q2KzQrWmt4alk1bitNN0NTOGJGMzA1aVpEUm15L2ZhUzFOaTQvLzZTVkNwRjYvNnBUOFd6MGdSVi9JK1R2MGhzMU5aKzlhdngrMDJTOG93TGJKaEk3TzY4YzV6ZGYzKzAvZm9WTnlPMFBtUEdTRkt2WGllZHhCc05BQUNRTWpNYlBQallZK1BzOU5NbHlYM2d3RGp2MWkxOVZoRnphM2tpQVNTbENhQzBqUy9nelNMeDQ1NjJ6endUajArZUxFbTc3dnF2Zi9FK0RTaWZ1UDcxN1N0SjdyLy9mZlNtMTc5TnRYeDV0SFBtUlB3WFg0d3hYM29wMmxpZzJOZzRZWUs3ZTEzZEcyOWtNeTVJOEs0bk03UHE2a2c4bVoxNFl2UWVmWFMwZSs1WjFMelc3b2MvZEhlZk92V25QeTE2SmtCVHNiSjkyMjBscWJKeTJyVG83ZDY5eURtaHRmdmU5K0o2ZU9XVlJjOEVBQUNVWDZ4VEs1VWthZENnU0dpNG4zeHlzYk5DaUJXQTB0aXhrbVQyMTc5S1V2djJEenpnN3Y3VVUrbmpBRFpGMHhXNzFkV1JlSlYyMjYzSU9VbXpaMGY3NUpPUzVQN0VFOUUrK0dBa2dPZlBMMjV1TFFzSjNnOHhNeHN3SUVvbGxFb25uUlI5YVVJM3Z1Rm9PWllza2FSZXZicDI1UnRSTkNleGN2ZjY2K1BzckxPS25RM2FoamZmbEtUYTJ1N2RLZGtBQUVEYkV5dld6anRQa3R5dnVxcm8rV0I5TEZva1NlNjMzaXBKcGRKMTEwVkp3aGRlS0haZVFNdGtaalp3NEQ3N1NGS3BOSEZpMGZOWnU0YUdhQjk3VEpMYy8vUW5TVXFTdi83VjNYM2F0TFJVQkZKdFBzRzc2aC80OTc0WHZaLy9mTFR4RFcvTGxkNGFzKzIyc1hKdDZkSmk1d09FU1BER0xWcFNqeDZGVGdadHpGNTd4Zlh3K2VlTG5na0FBTWpmcWl2V1huc3Rlcmx6ckdXS0JVdnBMZVdWbFpkYzR1NCthVkw2ZXdXd052RTVQTDNEKy96emk1M054a3BMUUR6MGtDU1pYWE5OZlBFemZueUJrMm9XV25nQ2MvMmx0K1RFTjdkSEhSVi8yTEVFL0lOdkxrYU1pTGFsSjNaVHNhU2R4QzZhcCsyMkszb0dhSHVTSkVxREFBQ0F0bVBJa0hSVGF4SzdMVnRGaFNTWm5YYWFKRFUwdlBCQ2ZLNC85OXltSlRnQXJFM1JKUmsyVmZ2MjBVYit6bjNjdU1qejFkUkVhZFZSbzh6TURqeXdYYnNpWjFtRVZuOEJqRi93Sno4cFNkWFY2ZTdxOTk0YmorNjNYM0V6eTUvN3JGbEZ6d0ZZczNRRkwxQStGUlgvK1UvUmN3QUFBT1ZWWHgrYllxTzE2ZGd4MnF1dmxxU0JBeDkvUE83UUpaRVBySWw3bEQ1cGJkd0hEWklrc3lqbHNIanhyRm1SRC96cVY4M01SbzZNTDRoYXMxYVg0RFV6R3pKa3A1MGlneCsvV0xNbzBpd05HRkRrM01yTlBZclRBODNUSC81UTlBelFsc3lkSzBsVHAvTEZGd0FBYlkxWjIxdkoxUmFaSFhDQUpKVktzWkp2OE9BaFE0cWVFOUQ4VEpwVTlBektJL2JXTWhzOVdwSmVmcm11THI0QU92amdRcWVWb3hhZjRFMlhYc2V0R1JkZkxFbEpFclVWM1VlTlNwOVYzQXpMeit6T08yTzN3Vml4RERSUDZlWVdMNzFVN0R6UUZyaGZkbG5VbkUrU291Y0NBQUNBUE1VS1h2Zng0Mk1CMkNHSEZEMGpvTG1vckx6enpqaDY2NjFpWjFKdS9mcEpVcW4wNktPUlA3em5ubGpoMjlKTFZueWd4U1o0NHhleTY2NlN0SGp4VTA5Rjc2V1hScHZlcXRGV3BOdmt4WXJJRlN1KzhwVWlad09zUzlQYTBPNUhIUlc5Yjc1WjVKelEyc1N1cTJiZi9yYTdlMjN0YjM1VDlJd0FBQUJRVHB0dEprbEpjdSs5c2FMM1U1OHFlRUpBb1dKVHdpalJZUGJGTDBidnNtVkZ6cWs0Ung4dFNXWXpac1QxNFJ2ZmFMb3BaMHRrc2FLcDZHbXN2OGl3Zi9uTGNYek5OZEhicVZPQlU4clF2SG5SL3Z2ZmttUVdDYkFrZWUrOU9IL25uV2dYTDQ3K2RPWGpBdzlFQW1QR2pITFBHTWhDZkdHend3NXgvS01mU1pMNzhjZkhvMXR1V2RqRTBJTEVyc3Btc1h0cWtseDBVVndYMjhvdFNBQUFZSFhpOCtOQkI4WHhZNDhWUFI4VUtUNVBTNE1HeFlLVDJiT0xuUTlRckNoWjBMKy9KSlZLUC81eDlIN21NOUhHRnlSdGpkbkREMHVTKzJtbnhYVWk4bk10UWJOUDhFYmlKMWJrbXQxOHM5UzA5RUp6Rnl2SXBOcGFTVEtiTUVHUzNQLzVUMGtxbGFJV1pKSzgrR0w4NGJ6N2JqSHpCSnFYcGtYUVgzd3hOc1dvcWtwM3kyeWRrdVRhYStQbzhNT3pqT3YrazU5SVVrVkZYRDlicTZxcStmUGQzWjk2S3I0QUF3QUFrUEpPOEw3OHNpU1ZTcC8rZExaeFc0Ykd4aTIya0tSU2FhdXRKQ2xKb2pWTDI1NDlvei8yd2pGTE56a3Zlb0ZXZkI2dnFobyszTjE5NHNUMzN5OTJQa0R6WUdiV3QyOVZsU1IxNkpCdVRybk5OdEdtZDhxbmJaY3VrdVMrN2JieHM3dnYzclIxNzkwN25oZTFjS1dXdHNuWmdnWFJubkZHNU91YS94NVh6YmJZZk5US2lUOG85L3Z1aTk3Qmc0dWMwNXFsdDVaSExSUDNzV01sYWZueXA1OTJkNTg1YzhtUzR1WUd0RHp1N21QR3hJcE02ZlhYaTUxTi91S0xySHl1RTZYU3dvWHU3bE9teEFjUUFBQUFaS1crbnZkWjYyZlZ4RkZhS2lIdXpKV09PeTdheXNyeXpHYnZ2U1ZwK2ZJTEw0enppeTRxejdoQTh4YjVxeFVyNHV6VlYxZHRONXlaMmJCaG5UdExVbU5qZk1IanZ2Lys4VmkwN21tZXI3bHRocGttdHUrK096NnZYM0tKSk5YV1huNjVlL05jS3R2c1Z2Qkc3WXUrZlNYSi9jRUhvM2Zubll1YzB3ZWlWSUwwNXo5TGt0a2RkMGhTejU2UFA3NXFRZ29BMWwrOFlLVEY3a2VPekRaMjFLQ3RxZm5sTDdPTUN3QUEwQkxrdTRMM2hSZGlaZGVlZTJZYnQrMHdNeHM2TkZiNk5qUmNjVVgwblhCQ2VVWmZ2bHlTR2hzLzhRbDM5Mm5UNGc1YkFPVmhadGF2WDVSa2JOLyt5Q01sS1VtaU5yQlpYTGVsVXJQYU84d3NQcmRYVnA1NmFuTzdBNkRaL0VNMTNkM1MvZW1ubzdmb3hPNzgrZEZHcHI2aW9rZVBlQUdQWDJSTnpkLy9UbUlYQUFBQUFJQU41KzQrZWZLY09iRjN3b2tuUmw5YWtuSGh3bnhIanhKd3BWSzZXVHVBY25KM256SGo3YmNqdjNicnJYRWRpSkkzcFZKYTJ1R3l5NkxOKzNxd2Z0THIwNG9Wanp3U0M3WFNsYjdGS3p6QjJ6U3hteVQzM3grOXNZUzcvQ0toNi82TmIwaFNWVldhMEwzMDBuamhhUjUvVUFBQUFBQUF0RGFSNEJrelJwTGF0WXRTQ3RJcnIrUTVwdGx4eDVtWkRSaVFKcFFBRkNsSzM4eWRHL200Ly9mL0pLbSt2a2NQU1RMNzVqZmpXVVdYeGtscmlqL3hoSmxaLy81Umk3aEloU1Y0b3hURHZ2dEtVcExjYzAvMGR1aFEzbG5FSm1obU45MFU1MzM2eEF2SzlkYzN0NlhXQUFBQUFBQzBCZTd1a3lhOTlsb2NwNXNRcHlVVHN4YTFQeXNxemo0N24vZ0FOb1c3Ky9UcDc3MFhLMzJ2dTA2U09uWGFZNDk0N013ejQxbnBwbWpsMXFlUEpGVldQdnBvMFN0Nnk1N2dqUlc3dzRkTGt2dkREMGR2N0w1Wkx1NFRKMHBTa3ZUdkgzOGdaNTRaM3d3VTlRY0JBQUFBQUFDYWlnVll6ejBYWjkvOWJyNmpIWCs4clpUdk9BQTJoYnY3dUhFTkRYRjlpQVdiVlZXUjhKV3V1U2JhV05CWlBwLzRSTFNSNkIwNmRPdXR5enQrR1JPOGtkajkrTWNsS1VrZWVpaDZ5NVhZVFgreFVVdTNjK2NERG5CM3I2dDc5dG55akE4QUFBQUFBRFpXbXNpUlpzeklaNFM0Qlh6UW9NR0Q4NGtQSUE5eEIvNWJiOFhDelhQUGpiNVBmakllblQyN3ZMUHAzMStTR2hyR2pqVXo2OXUzZkF0YWMwL3dtcGtOSDc3VlZwS1VKUGZlRzcxZHV1UTlicGd6UjRwZmJOTmF1dVBHbFR1VER3QUFBQUFBTm9hN3UzdVNTSkxaTDM2UjUxaEpFbnNFQVdpWlltWHZwRW1TVkZXVnJxeE5WL2FXaDFsOFVkU2h3MjIzbGV2T2dOd1N2R1ptSTBkV1ZFalM4dVczM3g2OXUrNmExM2lyaWw5a2ZmMndZVTEvc1FBQUFBQUFvT1dxclB6em4rTm82ZEk4NHB2dHMwOGVjUUdVVjdxMzFxb3JlMGVOaWtmenVYNTgxTkZIUzFKMTljVVg1ejFTcml0NFo4LysrYzhseWV5d3cvSWM1d04zM1NWSlZWVUhIUlJGbU9mTks4KzRBQUFBQUFBZ1QwMDNRemViTUNHZlVZWU96U2N1Z0NMRkF0QXhZeVNwVk5wMzMraU56Unp6OTZNZnhTWnN4eCtmMXdpWkozak56S3FyUjR5STQvUE95enIrNnJqLzhwZVNWRnM3Y21UVEN6NEFBQUFBQUdoOTNLZE96U2R5dDI2UmlDbFhhVWtBNWVUdVBtWEtQLzhaWjJtaTk1bG44aDAxTGRIdzI5K2FtUTBlbkc0S2w1M01Fcnh4QWR4bW16ais5YSt6aXJ0MjExNGJHZmh2Zjl0WEtzKzRBQUFBQUFDZ0tPNzVicDZVSkx2c2ttZDhBTVdLMGcydnZpcEpqWTM3N3grOXRiWDVqdHFwVTR4OXl5MU5TOXRtSWVNVnZEZmNFTzEyMjJVYmQxWHVOOThzU2JXMVVVTURBQUFBQUFDMEhhWFMyMi9uRzMvSEhmT01ENkI1Y0hlZk51MmRkK0xzMEVPanpYdEY3N0Joa2pSbnpuZStrMVhFVFU3d1JrbUdrU1BqTEw5YUVpR0txZGZWblhFR0szWUJBQUFBQUdpYkdodnpUZkM2YjdGRm52RUJOQyt4b25mQkFrbXFyei9ra09oOTdybDh4L3p4ajgzTUJnN3MwMmRUWTIxMGd0Zk1iTUNBcmwzaitMcnJOblVpYXhlMU1lcnJUejAxMHJwSmt1OTRBQUFBQUFDZ3VUSjc3NzA4NDVkS20yK2VaM3dBelpPNysvVHA4K2JGMlpGSFJ2dldXL21NMXFHREpKVkt2L3VkbVpsWmFhUHp0SnUwZ3JkVXV1Q0NPT3JXYlZQaXJObkNoVEhPc2NmR1AzQytGM0FBQUFBQUFORDhWVlMwYjU5bmZQZXFxanpqQTJqZVlrVnYxUHBPa3JSeVFVTkRQcU1OR1NKSmd3YWRmUExHUnRqZ0JLK1oyWkFoTyswVXgrZWNzN0VEcjEyVVhpaVZUamdoZHJkNytlVjh4Z0VBQUFBQUFDMVB4NDc1eGwrMEtOLzRBRm9DZC9lNnVzY2VpN1B2ZmpmZnNTNjd6TXpzd0FOalplK0cyS2dWdkVseStlVnh0T0VEcmcvMzY2K1B4TzZqaitZUkh3QUFBQUFBdEZ5TmpkdHZuMmQ4czN4ci9BSm9XV0pGNzY5K0ZXY1BQWlRQS0R2dkxFbExsbXo0Z3RyMVR2REdabXI5K3NYWnhpOFpYcnRZK3R6UWNQNzUrY1FIQUFBQUFBQXQzdzQ3NUJzL1NrWUN3SWNseVJsbnhGRSt0WG5kTDdqQXpHem8wSzIzWHQrZjJhQVZ2R2JmLy83S0g5dWsycjBmRlNVWmt1UzAwNmkxQ3dBQUFBQUExcVpVMm11dmZDSkhmc0w5aFJmeWlRK2dKWXVTRFcrOElVbG0zL3BXUHFOMDdTcEpqWTNydjVKM25ZbGFNN09CQTd0M2o3UGpqOS9ZcWExOWpERmo0aDlvd29RODRnTUFBQUFBZ05iRFBiM0RPR3V2dlJhM1lyLzdiajd4QWJRRzd1NDFOYmZkRnNkNWxaZzk4MHd6czk2OTE3MnA1SHF0eERVNzY2dzR5bm9YeWZwNlNVcVNpeTdLTmk0QUFBQUFBR2hOek13R0RlclNKYzc2OTg5bmxCa3o4b2tMb0xWeVR6ZGZTNUpzSTIrM25TUjE2WExDQ2V0NjVob1R2RTB6eEdacGJZbXMzWENEdTN0dDdVc3Y1Uk1mQUFBQUFBQzBGbWFISEJKSDdkcmxNOEw0OGZuRUJkQWFSVVdDNmRNbHlleU9PL0laNWR4ejEvV010YTdnL1NCRHZPMjIyVXdvdFd5WkpOWFhYM0ZGdG5FQkFBQUFBRUJybFNTbm5KSm4vRklwcjF1dEFiUjJEUTBYWHh4SEsxWmtHM25BZ0xpRFliLzkxdlNNdFNaNHpkYTlCSGpqL09FUHNabmF2SG41eEFjQUFBQUFBSzFCSkRaMjNUV09Eejg4bjFFaVAxRlRRNGtHQUJ2TzNYM2F0RmRla1dLdnNYekdPUG5rTlQzMmtRU3ZtZG1BQWJGYm0vdEJCK1V4b1NTNTl0bzg0Z0lBQUFBQWdOYm9zc3VpemFzMHc5MTN1N3U3WjExREUwQmJreVJYWDUxSFhMTmpqelV6Ty9EQWoxNEhWN3VDdDFRYU1TS09zdDVVN2ZISG05YW1BQUFBQUFBQVdCMHpzK3JxWTQ2SnN4TlB6SGVzTysvTU16NkF0aUgyR3F1dGpiUEprN09OdnMwMmtyUmt5VWRMTmF3MndXdDI3TEhaVGlDNC8rNTNlY1FGZ0pZdXI1VUM3bzJOZWNRRkFBQUFLejN6WW1ZMmVQQysrOGJ4TGJma085cnJyMHRTejU1UFBwbnZPQURhR3JNYmJzZ244bkhIZmJqbi94SzhVZE9tWThjNFMzZWx6TXJ5NVRIRy9mZG5HeGNBV29zRkMvS0lhalovZmg1eEFRQUFXbzZsUy9PSTZzNmVNbG1MeE82blB5MUo3bVBIUm0rblR2bU9ldDExN3U1anhyQXdBa0MyM08rOU40NnkzWFROZmNRSVd5bnRLNjM2aEdIRDRxaDkreXdITm52a0VYZjNxVlBmZlRmTHVBRFFXcGo5NHgvWlJuU1hwSWFHck9NQ0FBQzBMRW55L1BOeFZGK2ZaZHpzMzcrMVBkYkVvRUhmK1k0a3VULzRZRHlhZDJKMzhXSkphbXk4OGNaOHh3SFFGalhOZzdvLzlsaTIwYnQzbDZUcTZqMzJTSHRXU2ZDYURSK2U3WURCL1M5L3lTTXVBTFFXVlZYMzNCTkhiN3lSUlR5ekJ4NW91b3NuQUFCQVd4VHZoOTU1Sjg2eXV0VS83bEN0cUxqcHBteml0VDJSMEIwNlZKSUdEbnpxcWVpOThzcG9LeXZMTVFmM1gvOTYxYjhQQU1oTCtuay9XMlpSeWtiNlNBM2VqeGJwemNZamorUVRGd0JhUG5mM2lSUGZmMStTU3FXVFRvcmVKVXMyTHRxY09aTFUyUGkxcjJVek93QUFnTmFodnY2ODgrSW9UU2h1cVBRVy9tOTh3OTE5OHVSNDM0VTFNek1iT25UcnJTT2grNlV2eGFacDQ4ZkhvNU1teFhQeVdXaTJacSsrS2tuTGwxOTJXWG5IQmRCV1ZWVGtVN0kyU1Q2NGZxNnMxVkFxU1ZKMTlWdHZ4WG1YTHRrTU5YdDJMRW5lYmJkczRnRkE2eGUxeCtKV0MvZExMb25lSTQ2STlzTzNxdjM3MzlIZWNZY2tWVlZkY1VVa2pOUHJPUUFBQUZKbVpuMzdWbFZKMG1hYmZldGJrdVIreGhueDZJYy90OFpLWFNsTlNGNStlWHkrM2RnRWNYYk16SHIzanRLS25UdW5tNUh0dEpNa3VXZGJjbkhkYytuUUlZNjZkWXZ6WFhhSmVRd1lFUDE3N1JWdGFiV2J2SmViKzFGSHhTNzM3QkVFb0h6aWk2N1pzK09zVjY5c29yN3dRcnd1N2JtblNkTGd3Ui8vdUNRbHljeVoyUXdRM0crN0xTNmNwNXlTWlZ3QWFFdk16QTQ4c0YwN1NWcThPTjQ0SjBsRGc3dDdYUjJicUFFQUFHeXErT0FkQzUzYXRZc3YxQmN1bkQvZjNYM1dyRFRSVzd4WUNIRFVVWkxrUG5wMDlHNi9mWkZ6YWluTWJyckozYjJtNXN3emk1NExnTFluWG1kaVlaWjA0b25aUkkyOWQ2UnR0MjBuU1VuU3UzYzJnVCtzK0c4MkFhQ2xjM2NmTjY2aEljN1NGYnNBQUFESXlxcWJnamUvemNHanRNR1JSOGJ4M1hkSGIwVkZrWE5xT2Y3Mk4wbmFZb3V6enk1NkpnRGF1c21UbzgwcXdXc21TVW5TcDgvS1d5U3lXaHI4WVRObTVCTVhBQUFBQUlEV3JXa3BCck1iYjR4ZUVydnJ3MnpxVkVscTEyN2t5RlVYVEFCQU1kTHJVdlp4ZS9VcXBRZDVETkRROFBMTGVjUUZBQUFBQUtBdDZOcjE0SVBqcUh2M1ltZlNNcmlQSFN0Sjdkc2ZkSkM3KzZSSml4WVZQU2NBa0tUR3hudzI1elRyMmJNa1NVbVNkWUozeVJKMzkrblQ1ODNMTmk0QUFBQUFBRzJIZS8vK1JjK2hlV3RzalBiS0t5V3BydTZJSTl6ZG4zcHE4ZUlpWndVQUh6WnQycHR2eHRHS0ZkbEczblhYbFN0NGUvYk1ObkErR1drQUFBQUFBTm9Tc3lqUmdEVkpTMWFjY1lZa1ZWZGZjWVdaMmZEaFcyMVY1S3dBb0NsM2QvY2tpYlBYWDg4eTl2K1ZhSkEyM3p6THdOSWJiMlFiRHdBQUFBQ0F0dWpWVjR1ZVFjdlFwVXUwUC9pQkpLMVlNV3RXN0ZwLzFsbTJVcEd6QTRDVTJkeTVXY1p6MzJHSGxRbmV5c29zQTV0bHZkUVlBQUFBQUlDMnA2TGlrVWZpaUUzQ05reTZndmY2NnlXcHVucnNXRE96WWNPMjI2N0lXUUZBa3J6M1hyWVIyN1VycFFkWmhrMFNFcndBQUFBQUFHeUsyQ1RzdGRmaTdLYWJpcDFOUy9mWnowcFNROE9rU2JHeWQ4ODlpNTRSZ0xhcXZqN2JlRGtsZUZuQkN3QUFBQUJBZGpwMStzNTNKTW5zemp1TG5rdkx0c3N1MFQ3OXRKblo0TUZEaGhRNkhRQnRVUFlKM3BXSjNXeExOR1EvVVFBQUFBQUEyaVozOTNIamxpMkxzeE5PTURNYk9QQ0dHeVRKN1Bqam96OVdwSnB0dVdVeHMweDE3aHh0dWpuY0RqdEVtM1hlWVZORkNRZjNSeDgxTXhzeTVNZ2ozZDJuVEhuaWlhSm5CcUMxeXpwdldsR3hNc0ZiS21VWmxsMCtBU0E3VVNzczNpZ255VTQ3UmR2WUtFbkxscjM4c3J2N3pKbmNPUUVBQUxDeHpNejY5WXZFYUZYVmpqdEtVbU5qSkZTN2RwMHpKeEtzemFjR3JydDdYZDJFQ1hHV3RzMlBtZG5Ja1JVVmt2VHFxNUhvYldqbzNWdVMzUGZaSjU0emZIZzgrNEFEb3QxaWkvTE9zbE1uU1VxUysrODNNNnV1SGpyVTNiMjI5cm5ueWpzUEFHMkZXWHllejA2N2RpWkoxZFZ2dmhrZFdSVWJIei9lM1gzcTFBTVB6Q1llQUxRZFRXOFZjNy84OHVoTnI2Y2ZMcW1URm1lLzZ5NUphbWk0OEVKMzkzLys4L1hYeXpOYkFBQ0FsaWRxc0tidnJ5NjlOTm8wMGZqaEJWQ0xGa1g3aHo5SVVrWEZ4UmU3dTArZXZIQmhPZWJhRnNUdm8yUEhPRHY2NkdpLzhJVm9EejAwMm13WHBxM1pDeTlJVXJ0MlE0WkVEZVQwOXc4QW15NitTSHJvb1RnKzdMQnNvcjd6enNvTDVQejUyUVJNc1NzbEFHeW9lR1A3dWM5Smt2dVRUMGJ2cHo4ZDdacHFwVysrZWJSZitsSThxN1kyYmpIcjFTdmYyUUlBQUxRODhVWDZLYWZFMmQvL0h1MSsrMFc3cGdSaVduTGc2MStYcE1iR21ob3pzNzMzL3RqSDhweHJXeElMeEpZdWpmYU9PNktOOThXbFVxejROYnY2Nm5oMldxb2lMM3ZzSVVtTmpULy9lYjdqQUdpcnpMTE9tODZmdi9JRmJNR0NiQU52dTIyMjhRQ2c5VEl6NjlzM3ZSWHQ5NytQdHFwcTQ2TEZDMFdTL09ZM1djd05BQUNnTllndjBxTkVnUHVOTjBadmxBN1ljRDE3eGsvZmNrc21rOE1hUlUzY0tFbFdVM1BlZWRFN1lFQThObkZpdm1PZmZucXN0QnMyTE05eEFMUkYyU1o0M2Y4dndadjFDdDZ0dG9xRXhjWW1LQUNnYlduZi9yamo0bWpycmJPSmVOQkJabVlEQnNTS0J3QUFBS1FyZHpmYkxJdG9ab2NjWW1ZMmRPanV1MmNSRCtzV0szdWZmMTZTZHQxMS8vMmo3K2FiOHhrdFZuU2IvZXBYK2NRSDBKYllTbkhXclZ1MjBSY3N5Q25CR3hQdTBDRnViUUFBckoxWjFOek5XcWswZEdnZWNRRUFBRnFhdk41dk5UYjI2Wk5IWEt5WnUvdVlNYkZKVVYzZDZhZEgzK2pSK1l3MlpFaXM1RTFyQVFQQXhoazZOSzE0a08yQzJGSnA0Y0tWQ2Q3Ly9DZkx3QjhZT0RDZnVBRFF1cGh0dFZVK2NiTmFFUXdBQU5DeXVlZnpma3RLTndkRHVmbEtrclI4K1RublJGOU5UUjVqbVYxNFlSNXhBYlFkalkzNTVFbmQ1ODFiZWN2QnM4L21NVUJhR3djQXNIYnU2YTBhMlRJcjEyN0RBQUFBelZ0ZTc3ZFFQSGYzbVROWHJJaXprMDZLdHI0KzIxSDIyeTgyTXg0OE9OdTRBTm9LOTczM3ppZnlxNitXSktsVW1qRWpqL0JtSkhnQkFBQUFBRUQrM04xcmExOTZLYzV1dlRXUE1aTGs3TFB6aUF1Z0xjaG5CYS9aOU9rbFNab3lKYjBBTGwyYTVRRHVBd2JFYnFXVmxWbkdCUUFBQUFBQVdKUEd4di8rN3ppS0VnN1pHVFVxOGh4ZHVtUWJGMERybC9WQzJMaStWVlE4ODB3cEt0WWtTVHd3YzJhMkEzWHFKRW1sMHZEaDJjWUZBQUFBQUFENEtIZjNhZE5tellxemFkT3lqZDZoUTR4eHhCSFp4Z1hRR3BtWkRSdTI0NDV4MXF0WHR0SG56SEYzbnpScDBhSVAxV2FjUGozYmdVS1NISFpZSG5FQkFBQUFBQURXeFAwdmY4a244b2dSK2NRRjBOclUxeDkrZUJ4bFhRditnNUs3cXlSNDNhZE96WGFnMU9jK2wwOWNBQUFBQUFDQTFUT2JNQ0dmdUovOXJKblpnUWUyYTVkSGZBQ3RoOW1oaCtZVGVRMEozaVI1NUpGOEJ1emIxOHhzNE1BZVBmS0pEd0FBQUFBQThHSFBQQk50MXJWNHQ5aENraFl2N3RjdjI3Z0FXb05WOXlRNzZLQTh4bkIvNG9uMHVQUkJwL3UwYWErOEVtZlBQNS9Id0JVVlJ4NlpSMXdBQUFBQUFJQ20zTjJuVG4zMzNUaWJPemVmVWZiYkw1KzRBRm82czMzM2phT3NOMlZjc2tTU0ZpMTYrdW0wcDdTNnA1azkvSEMyQTRjazZkczNqN2dBQUFBQUFBQnI5dWFiZVVRMVkxTjVBS3VYSkFjY2tFL2s4ZVBkM1dmTldyNDg3Vmx0Z2pkSjhrbndtbjB3TUFBQUFBQUFRSG1rSzNtejVmN0pUK1lSRjBETFo3Ympqbm5FZGY5bzNuYTFDZDdPbmRNYURrdVhaamtCcytuVHM0d0hBQUFBQUFDd2J2a2tlS1h1M2RsekNNRHF2Zk5PSGxGWFYzbmhJd2xlZC9keDQ1WXRpK08vL0NXYm9TTlI3SDdmZmRuRUF3QUFBQUFBV0QvdURRMTV4aStWMGxxYkFCRGN4NDdOTnVKenowVnQ4ZG16UC94SXU3WC80RTkvR3UzblB4OXQ1ODRiTjRHTEw0NEpMRml3Y1Q4UEFBRFFjcG1aRFI0Y2V4RWt5V21uUmUvQWdhcytxNjVPa3R6LzUzL2MzZXZxbm4yMnZMTkVhMmRtTm5Sb3o1NlNsQ1N4bTNPU1ZGUklVcW0wYUpFa3VmL3JYL0crUGQxMUhnQmFoMUpwODgwbHlUMnZFYnAzenlzeWdKYXBybTdjT0VrYU5HanFWRWx5SHpSb1UrS1ovZXBYYTNwc3RTVWFZbEQzMnRybm5wT2tKRG55eU9oOTdiWDFHM0wrL0JqNGExK0xONGhYWGJYKzB3VUFBR2dkek13R0Rmcm1OeVhKUFVwVm1aMTNYclN4NmNJSGJmU1hTak5tbUpsVlYxOXlTVEd6Um1zVGY0Y1hYQ0JKalkwdnZpakZGd254Mk9qUmNmN0hQOGF6NCs5djBLQzc3ell6R3o1OHM4MkttVFVBWkN0Sk5uYkIydnB4ankvS0FFQ0t2S3A3ZktWa05tcFU5SDUwNWUzNnVlc3VTZXJaTTk2L3JjNGFFN3hOSjFSWE4yR0NKRlZWN2I1NzlIM3hpL0hvbFZmRytjOStGdWNqUjhiemV2UndkNitwaVRlTUFBQUFiVW1zMkQzODhEaEx2Mmt2cmZOOVY0Z1ZsV1kvK2xFazJpNjlOSTg1b3ZXTHY1LzA3KytLSzZKdHQ0NDcrRklqUmtoU2ZmM3R0NXVabWEzdjN5OEFORTltK2RiSVRlK0VBSUNtM04yblRIbjVaVW5xMEdIQUFFa3krOEVQNHRFMVZUcElFOEhubkJQdFNTZTV1NDhaMDlpNHBuSFc4dzFlVEdqaXhQZmZqN1BiYjErMUJRQUFnSzBrU2RYVjZSMU1jYjd4THJvb0VzYVRKc1VYNkE4OXRLbnpST3NXSzhCUFBUV08wdzhHRzhmOW1HTWtxYnI2N0xPajU5cHJOM1YrQUZBdVptWjkrMVpWU1ZLSER2bnNacDl5Zit1dFBPTURhTm5jM1o5NmF2SGlPRXNYeXY3c1oyWm0vZnB0dWFVa21hMVk0ZTQrZmZwNzcyMW9mTDZKQndBQXlGQjFkZFRhbGZiWUk1dUlrU0IyditVV003Tmh3L0w5Z0lxV3k4eHN5SkNQZnp5T3I3c3UyK2dubjV4dFBBQW9qNnFxNnVvNFd0ODdHRFpPUmNXc1dYbkdCOUE2dWJ2UG1QSDIyeHViMkUyUjRBVUFBTWlRV1d4aWxiMXUzU1Nwb2VIZWU4M00rdmVQeldLQUtNV3d6VGFTbENUMzNSZTlIVHRtTzhyMjIyY2JEd0RLdzJ5Ly9mSWRZZGt5U2VyUjQ5Vlg4eDBIQU5hTUJDOEFBRUNHek41OU45OFJCZzZVcEtxcVcyK2xObXJiWm1aMjRJRWRPc1RaM1hkSDI2dFhQcU5GQWdNQVdocXpLRFdUbjFtejFsVWJFd0R5eGdjQ0FBQ0FEQ1ZKVFUwY0xWMmE1emdmMUVZZFBicHA3ViswZnJGaXQ3SlNraFl0dXZQTzZQM2tKL01kOWUyMzg0MFBBTm1KMnZWcHFhU2hRL01jeTMzaXhEempBOEQ2SU1FTEFBQ1FFWGYzcVZQVHhPNnZmMTJlVVU4L1haS3FxNisrbWtSdjZ4WXJkcU9HcE5sdHQwVjcxRkhsR2YyZVVxMTViUUFBQ2I1SlJFRlVlOG96RGdCa0kwa3V2RENPOG41ZEhEY3UzL2dBc0c0a2VBRUFBSExRcWRORkY4WFJqQm5sR2ZHY2N5U3B1am8yWTBzVGdXajV6TXg2OTI3ZlhwSVdMZnJUbnlUSmZkU284b3crYVZLMFYxMVZudkVBWU9PWm1RMGN1TTgrY1h6U1NmbU81aTVKRFEwa2VBRVVqd1F2QUFCQXh0emR4NDJMbXFXbFV2b0I4LzMzeXpQNkthZEkwcElsZDk0WnQvSm52ZGtXeXNYTWJQandyYmFTcEM1ZEhuNDQrbzQ5dGp5akwxd29TYVhTeUpHeE1yMit2anpqQXNDR016TWJNS0JyVjBrcWxYNzN1K2l0cU1oMzFLZWVpbDN2NTgzTGR4d0FXRGNTdkFBQUFEbHhkNTh5NVYvL2l1T3p6aXJ2Mk9tbU1rOCthV1kyWk1oT081VnpmR3k4V0lIV3A0OGtyVmd4ZVhMMGZ1cFQ1Ums5TmdreU8rV1UrUHVkTzdjODR3TEFoak16Njk5Lzg4MGxxVlQ2NjErak42MjlteS8zMjI4dnh6Z0FzRDVJOEFJQUFPVE0zYjIyOXBaYkpNbnM1ejh2NytnREIwcFNra3lkR3B2T0hIWlllY2ZIK2pJenE2Nyt3aGNrcVZSS1N5UHN0bHQ1Wi9IOTc3dTcxOVE4OUZCNXh3V0E5UmQzcU95OHN5UlZWajc1WlBRZGNFQjVSbzg3Y3Vyci8vem44b3dIQU90R2doY0FBS0NNcGs0OS8zeEpjci92dnZLT3ZPMjJNZTZERDBZaThhcXJvZ1RBWnB1VmR4NUlSWUtpUzVkb2YvLzc2RXRYaEhYcVZON1ovT1kzVVlxQldyc0FtaDlyb3JyNjFGT2pONjF4UDJCQWVXZnpYLy9sN2o1anh0dHZsM2RjQUZnekVyd0FBQUJsNHU3dW5pU1MxTDc5Q1NkRTcvang1WjFGN0NadWR0NTVrclJpeGN5WlVjTGhrRVBLTzQrMkt4SVVSeHdSWjg4OEUyM1VUaTYvdUtXNVU2ZnlsaEFCZ1BVUnIwK3hNcmU2K2gvL2lMNmJiNDVIdTNRcDcyeG16NWFrVHAxKzlyUHlqZ3NBNjBhQ0Z3QUFvTXpjM1NkT2pGczgyN1g3L09lamQ4cVVZbWJUcTVja0pja2pqOFJLMGp2dWFIcnJLelpkL0h2dXVXZTBEendRZmZmZkg0OFdVeHZaTERadFc3WnMxS2pZRkxDaG9ZaDVBSUMwNmgwTjFkV25uaHB0dkM0bVNmcEY2TkNoeGN6T1BkcXp6bXE2aVNvQU5DZnRpcDRBQUFCQVcrWHVQbW5Tb2tWUktpRnE0NjVZTVhac1BEcGtTSGxuRXl0N3BSTlBqUGJvbytNRDkvWFhTMUtwOUl0ZnhLWmJiNzVaM25tMVBMR2IreTY3U0ZKRnhROStFTDFmK1VxMGxaVUZUVXZTQjRuZHlzcGpqb2xhdXl0V0ZEa2ZBRzFEYkI3WnJWdWM5ZXNuU2FWUytqcVhiaUs1Ly83eDNBNGR5ajdCdFhDLzZhYW9wZi9JSTBYUEJRRFdoQVF2QUFCQXdXSkY3MXR2bVpuMTdYdnd3WkxVdnYwOTkwaVNXVkdsRTlMYXZOLzlyaVFseWRsbnh5WnRjV3VzKzNYWFJjM1c1NTh2Wm43TlIveTdSQTFJOTNQUGxhU0tpcE5PaWtlTFRlaW16TzY4VTVMZWYvK1VVMGpzQWxtNzRJSlZhOE8yYmFYUzVwdExrdnVXVzBiUHh6NFcvZVd1TGI2cFhucEprcFl2ajlkQkFHak9TUEFDQUFBMEUrN3VNMmN1V1dKbTFydDMxR2p0MmpVMjMzSWZOYXJZMlVYQzEvM3NzK1A4ckxNaXNmbjQ0OUVmaWQ5bHkrNjdMLzN2S0dxbWVURXo2OWN2RWhidDI0OFlFYjJubnk1Sjd2dnNVOXpNMXN3c1ZtRDM3SG51dWU3dVk4WTBOaFk5SjZEMTZkdFhrc3lpYmV2U2dnWXQxK0xGa21RMllrUnJmVDBEMFBxUTRBVUFBR2htM04xbnpWcStQUFlMajVJSmd3YkZabHp1bDE0YXp5b1Z2SmRDbEhSd2p4WEhVclFkT2l4ZEdxVWRIbnd3SG4vb0lVbXFxSGo0NFpaUzRpRnVKZTdSUTVJcUtnNDlWSkxjSStGZVZmV1p6OFI1VlZWeE0xeWIrbnBKTXZ2bU4yT2w3dWpSUmM4SUFGcUcrQUxNTEdxVDE5VE1uRm4wakFCZ2ZaSGdCUUFBYUtaOHBUajd5VTlpeFd5YTZJMlZ2VkxYcmtYTmIvVTZkb3oyK09NbHlTemFKSEdQeEc5YTBtSHk1S1p0cWZUY2M1TFUwUERzcys3dWRYWHo1MmM5czBqY2R1OGV4M3Z1R1cyNjRpNnRCVGxzV014bjExMmxsclFTN2QvL2xxUWtPZUdFK1BlYk1LSG9HUUZBeXhBbGE4eSs4SVZJN0thMThBR2c1U0RCQ3dBQTBFTEVCOC83N290RTVkNTdTMUtwZFB2dDhlaCsreFU1dDNWTE4zSGJhNjlWMnk5L1daS1NKTTVLcFhRMzlmZmVpNTQzM29qMlAvK0pkdW5TYU45OWQvWGpSTUxiUFdwQW1tMi9mZlJIV3lxbENlalc0b0VISkNsSlRqc3RyOFE0QUxST3k1WkprdnZ4eDBkTitiaWVBa0JMUklJWEFBQ2doWWxFM3YvK3I1blp5Skd4Ky9qTEwvL3doL0hvaFJkRzI3NTlRZFBMU0NSb3BkNjlWMjNYVDVwT2JuMmlGcVQ3K2VkTFVsM2REVGVzdXRJYkFMQjJjK2RLa3RseHgwVmlkOHFVb21jRUFKdXE0TnB0QUlEUTBKQlAzS2pGQ0tCMVNqZk5pZytvbDEwV2ZXbkpnZGo4REsxRjFEUk9rcjU5M2QxcmE2Ky9uc1F1c0dGS3BiemViNkZsaU90b1JjV0FBWEZIRElsZEFLMEhDVjRBYUJhaWRtTFdraVM5dFJsQVd4Q0p2NWRla3FUYTJrTU9pYjVUVDQxSFgzKzl1SmxodzgyYUpVbnV4eHdUQ2Z3ampraFhiaGM5TTZEbHl1ZjlGcHFydDkrTzlzdGZibm9kblR4NTRjSmk1d1VBMlNQQkN3RE53cmh4MmNhTGxidnVUejZaYlZ3QUxZRTNVVnQ3eXkzUnUvdnUwVjU4Y2JTTEZ4Y3lPYXpCZ2dYUmZ1dGJrclJzV2JwUzk1NTdpcHdWMExway9YNEx6VXZVMUpXdXVVYVNTcVUrZlNLeG0yNUtDZ0N0bDNGakZ3QVV5OHpNckZTU3BPcnFhZE9pdDErL1RZbnBQbnAwSkFhKzlyVk5ueUdBMXNiTWJOaXd6cDBscWFFaFhlRWJOVjNUemNpUXQ5ZzB6dXpHR3lYSi9aZS9qRVRFbWphUEE3QXB6TXlHRDk5c00wbGFzZUw1NTZOMzU1MkxuQk0yMVp3NTBmN3BUOUZlZTIxY1IxbXBEYUR0SWNFTEFNMkVtZG5Rb2JIQ3JySHhiMytMM2wxMjJiQW80OGRMVW4xOTNJSTJmWHE2Q3owQXJKbVpXZi8rc2FsWlplV1h2aFM5WC85NnRHbE5YMnlheVpNbHlUMFN1b3NXL2ZHUDd1NnpaaTFmWHV5OGdMYkZ6S3k2dXJvNmpxTW1xN1RkZGtYT0NXdnkxbHVTNUI3WHoxSXBhdVkyTmo3d1FKU3NtVHExeU5rQlFITkNnaGNBbWhrenMwR0R1blNSSlBleno0NitvNDZLUjN2MWlqYmRKR1RtekhqZUhYZElVdWZPdDkvdTdqNXVISnVJQU5oMGNUM2FiNzg0UHUwMFNYSS8rdWg0ZE1zdGk1dFpjNWF1ekwzcnJqai83VzlqTTUvMERnMEF6WUdaMmNDQjNicEpVcWwwempuUmU5aGgwZmJvRVcxRlJSRnphejNTaFFieFJaYlp2SG1TNUI3dEJ6V1JaOCtPeDU5OU50cFlZVjFUTTJjT20wa0N3UG9od1FzQUFJRDFZbWJXdDI5VmxTUzFiLytaejBoU3FYVE1NWkxrL3RuUHhyTzZkeTlxZnVXVjNob2NkMXdrU1NSMGQ5dHQvSGgzOXpGakdodUxteHNBQUFEYUVoSzhBQUFBeUVTcytQM0VKeVRKL2VDRG8zZm8wSGhzeUpBNFQrOUVhSzdTZDhZdnZCQm5OVFdTWkRacGtpUTFOdjc5Nys3dTA2Yk5tbFhVREFFQUFJQ21TUEFDQUFDZ0xLTFcrTlpiUzFKRFE1OCswYmZISHRGR0RYTDNIWGVNTmxZQ204VXQxTkkyMjBSYldSbHR4NDdSdG04ZmJicDcrdnZ2UjV2V3RsMndJT0pFNlFUM045K00vcmx6NHp3U3VWTGNFbXoyM0hOc2RnWUFBSUNXNVA4RDlGQUpsamxoOW1VQUFBQUFTVVZPUks1Q1lJST0KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpDdXN0b21lclRpY2tldFByaW50IyMjQXR0cmlidXRlc1ZpZXciIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgdGhlIGVuYWJsZWQgdGlja2V0IGF0dHJpYnV0ZXMgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZSAoMCA9IERpc2FibGVkIGFuZCAxID0gRW5hYmxlZCkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6Q3VzdG9tZXI6OlZpZXc6OlRpY2tldFByaW50PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlF1ZXVlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNlcnZpY2UiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNMQSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT3duZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlc3BvbnNpYmxlIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdG9ib19jb25maWc+Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentTicketPrint.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpTY3JpcHRVc2FnZSkKPCFET0NUWVBFIGh0bWw+CjxodG1sPgoKICAgIFslIEluc2VydFRlbXBsYXRlKCJDb3B5cmlnaHQudHQiKSAlXQoKICAgIDxoZWFkPgogICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiIC8+CiAgICAgICAgPG1ldGEgaWQ9InZpZXdwb3J0IiBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iIj4KICAgICAgICA8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vaW5kZXgsbm9mb2xsb3ciIC8+CgogICAgICAgIFslIEluc2VydFRlbXBsYXRlKCJUaWNrZXRQcmludEhUTUwvUHJpbnRTdHlsZXMudHQiKSAlXQoKICAgICAgICA8dGl0bGU+WyUgRGF0YS5UaXRsZUFyZWEgfCBodG1sICVdWyUgQ29uZmlnKCJQcm9kdWN0TmFtZSIpICVdPC90aXRsZT4KICAgIDwvaGVhZD4KICAgIDxib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXIiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IkFSSUFSb2xlTWFpbiBUaWNrZXRQcmludCBVc2VBcnRpY2xlQ29sb3JzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGxpbmUgTm9NYXJnaW4iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLlByaW9yaXR5KSB8IGh0bWwgJV0iPjxzcGFuIGNsYXNzPSJQcmlvcml0eUlELVslIERhdGEuUHJpb3JpdHlJRCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLlByaW9yaXR5KSB8IGh0bWwgJV08L3NwYW4+PC9kaXY+CiAgICAgICAgICAgICAgICA8aDE+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Ib29rICVdWyUgQ29uZmlnKCdUaWNrZXQ6Okhvb2tEaXZpZGVyJykgJV1bJSBEYXRhLlRpY2tldE51bWJlciB8IGh0bWwgJV0gJm1kYXNoOyA8YnIgLz5bJSBEYXRhLlRpdGxlIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9oMT4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBERkxvZ28iPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJbJSBEYXRhLlBERkxvZ28gfCBodG1sICVdIj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgIFslIEZPUkVBQ0ggV2lkZ2V0IElOIERhdGEuV2lkZ2V0czsgJV0KICAgICAgICAgICAgWyUgV2lkZ2V0Lk91dHB1dCAlXQogICAgWyUgRU5EOyAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiSGVhZGVyIikgJV0KCiAgICAgICAgPGRpdiBpZD0iQXJ0aWNsZUl0ZW1zIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGludE5vQXJ0aWNsZXMiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaGlzIGl0ZW0gaGFzIG5vIGFydGljbGVzIHlldC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhpbnROb0FydGljbGVzIikgJV0KICAgICAgICAgICAgWyUgRGF0YS5BcnRpY2xlSXRlbXMgJV0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgICAvLzwhW0NEQVRBWwogICAgICAgICAgICAgICAgInVzZSBzdHJpY3QiOwoKICAgICAgICAgICAgICAgIENvcmUuSW5pdC5FeGVjdXRlSW5pdCgnSlNfTE9BREVEJyk7CgogICAgICAgICAgICAgICAgQ29yZS5BcHAuUmVhZHkoZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgICAgICBDb3JlLkluaXQuRXhlY3V0ZUluaXQoJ0RPQ1VNRU5UX1JFQURZJyk7CgogICAgICAgICAgICAgICAgICAgIFslIFBST0NFU1MgSlNEYXRhSW5zZXJ0ICVdCgogICAgICAgICAgICAgICAgICAgIENvcmUuSW5pdC5FeGVjdXRlSW5pdCgnQ09ORklHX0xPQURFRCcpOwogICAgICAgICAgICAgICAgICAgIENvcmUuSW5pdC5FeGVjdXRlSW5pdCgnQVBQX0dMT0JBTF9FQVJMWScpOwogICAgICAgICAgICAgICAgICAgIENvcmUuSW5pdC5FeGVjdXRlSW5pdCgnQVBQX0dMT0JBTCcpOwogICAgICAgICAgICAgICAgICAgIENvcmUuSW5pdC5FeGVjdXRlSW5pdCgnQVBQX0dMT0JBTF9MQVRFJyk7CgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vXV0+CiAgICAgICAgPC9zY3JpcHQ+CgogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICAgICAgLy88IVtDREFUQVsKICAgICAgICAgICAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgICAgICAgICAgIENvcmUuQXBwLlJlYWR5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBDb3JlLkluaXQuRXhlY3V0ZUluaXQoJ0FQUF9NT0RVTEVfRUFSTFknKTsKCiAgICAgICAgICAgICAgICAgICAgWyUgUFJPQ0VTUyBKU09uRG9jdW1lbnRDb21wbGV0ZUluc2VydCAlXQoKICAgICAgICAgICAgICAgICAgICBDb3JlLkluaXQuRXhlY3V0ZUluaXQoJ0FQUF9NT0RVTEUnKTsKICAgICAgICAgICAgICAgICAgICBDb3JlLkluaXQuRXhlY3V0ZUluaXQoJ0FQUF9NT0RVTEVfTEFURScpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vXV0+CiAgICAgICAgPC9zY3JpcHQ+CgogICAgPC9ib2R5Pgo8L2h0bWw+Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/TicketPrintHTML/MIMEBase.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBjYjc1MTliNjE3MDY5NzlhN2ViZTQ2YTU0YTlkNzEwYjY0NDI3NjYyIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZ2VudFRpY2tldFpvb20vQXJ0aWNsZVJlbmRlci9NSU1FQmFzZS50dAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpTY3JpcHRVc2FnZSkKCjxkaXY+CiAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgRXhwYW5kZWQgWyUgRGF0YS5TZW5kZXJUeXBlIHwgaHRtbCAlXSBbJSBJRiBEYXRhLlNlbmRlclR5cGUgPT0gJ2N1c3RvbWVyJyAlXUluY29taW5nWyUgRUxTRSAlXU91dGdvaW5nWyUgRU5EICVdIFslIElGIERhdGEuSXNWaXNpYmxlRm9yQ3VzdG9tZXIgJV1WaXNpYmxlRm9yQ3VzdG9tZXJbJSBFTFNFICVdTm90VmlzaWJsZUZvckN1c3RvbWVyWyUgRU5EICVdIj4KICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDI+CiAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIiMlcyIsIERhdGEuQXJ0aWNsZU51bWJlcikgfCBodG1sICVdICZuZGFzaDsgWyUgRGF0YS5BcnRpY2xlRmllbGRzLlN1YmplY3QuVmFsdWUgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgJm5kYXNoOyA8c3BhbiBjbGFzcz0iWyUgRGF0YS5BcnRpY2xlRmllbGRzLlNlbmRlci5WYWx1ZUhpZGRlbiB8IGh0bWwgJV0iPlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TZW5kZXIuVmFsdWUgfCBodG1sICVdPC9zcGFuPiA8c3BhbiBjbGFzcz0iWyUgRGF0YS5BcnRpY2xlRmllbGRzLlNlbmRlci5SZWFsbmFtZUhpZGRlbiB8IGh0bWwgJV0iPlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TZW5kZXIuUmVhbG5hbWUgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgJm5kYXNoOyA8c3BhbiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdOiBbJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV0iPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJ2aWEgJXMiLCBUcmFuc2xhdGUoRGF0YS5Db21tdW5pY2F0aW9uQ2hhbm5lbCkpIHwgaHRtbCAlXQpbJSBJRiBEYXRhLkNyZWF0ZUJ5VXNlciAlXQogICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJieSAlcyIsIERhdGEuQ3JlYXRlQnlVc2VyKSB8IGh0bWwgJV0KWyUgRU5EICVdCiAgICAgICAgICAgIDwvaDI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iSW5mbyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVNYWlsSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgWyUgRk9SRUFDSCBBcnRpY2xlRmllbGQgSU4gRGF0YS5BcnRpY2xlTWV0YUZpZWxkcyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHNob3cgYWNjb3VudGVkIHRpbWUgYW5kIGR5bmFtaWMgZmllbGRzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKEFydGljbGVGaWVsZC52YWx1ZS5MYWJlbCkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIEFydGljbGVGaWVsZC52YWx1ZS5MaW5rICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBBcnRpY2xlRmllbGQudmFsdWUuVGl0bGUgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEFydGljbGVGaWVsZC52YWx1ZS5MaW5rIHwgSW50ZXJwb2xhdGUgJV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIEFydGljbGVGaWVsZC52YWx1ZS5MaW5rUHJldmlldyAlXSBkYXRhLXRyaWdnZXI9ImZsb2F0ZXIiIGRhdGEtZmxvYXRlci11cmw9IlslIEFydGljbGVGaWVsZC52YWx1ZS5MaW5rUHJldmlldyB8IEludGVycG9sYXRlICVdIlslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IkR5bmFtaWNGaWVsZExpbmsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgQXJ0aWNsZUZpZWxkLnZhbHVlLlZhbHVlICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBBcnRpY2xlRmllbGQudmFsdWUuVGl0bGUgJV0iPlslIEFydGljbGVGaWVsZC52YWx1ZS5WYWx1ZSAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGhyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9ImNsb3NlZCI+CiAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLkhUTUwgJV0KICAgICAgICAgICAgICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU3R5bGVzICVdCiAgICAgICAgICAgICAgICAgICAgICAgIC5jay1jb250ZW50ICN0ZW1wbGF0ZUNvbnRhaW5lciB0ZC5ib2R5Q29udGVudCA+IGgxIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMDAwMjNjICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNrLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkhUTUwgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo=</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/TicketPrintHTML/CustomerMIMEBase.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBjYjc1MTliNjE3MDY5NzlhN2ViZTQ2YTU0YTlkNzEwYjY0NDI3NjYyIC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZ2VudFRpY2tldFpvb20vQXJ0aWNsZVJlbmRlci9NSU1FQmFzZS50dAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpTY3JpcHRVc2FnZSkKCjxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBFeHBhbmRlZCBbJSBEYXRhLlNlbmRlclR5cGUgfCBodG1sICVdIFslIElGIERhdGEuU2VuZGVyVHlwZSA9PSAnY3VzdG9tZXInICVdSW5jb21pbmdbJSBFTFNFICVdT3V0Z29pbmdbJSBFTkQgJV0iPgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDI+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiIyVzIiwgRGF0YS5BcnRpY2xlTnVtYmVyKSB8IGh0bWwgJV0gJm5kYXNoOyBbJSBEYXRhLkFydGljbGVGaWVsZHMuU3ViamVjdC5WYWx1ZSB8IHRydW5jYXRlKDEwMCkgfCBodG1sICVdCiAgICAgICAgICAgICZuZGFzaDsgPHNwYW4gY2xhc3M9IlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TZW5kZXIuVmFsdWVIaWRkZW4gfCBodG1sICVdIj5bJSBEYXRhLkFydGljbGVGaWVsZHMuU2VuZGVyLlZhbHVlIHwgaHRtbCAlXTwvc3Bhbj4gPHNwYW4gY2xhc3M9IlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TZW5kZXIuUmVhbG5hbWVIaWRkZW4gfCBodG1sICVdIj5bJSBEYXRhLkFydGljbGVGaWVsZHMuU2VuZGVyLlJlYWxuYW1lIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgJm5kYXNoOyA8c3BhbiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdOiBbJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV0iPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvc3Bhbj4KICAgICAgICA8L2gyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgPHRlbXBsYXRlIHNoYWRvd3Jvb3Rtb2RlPSJjbG9zZWQiPgogICAgICAgICAgICBbJSBJRiBEYXRhLkFydGljbGVDb250ZW50ICVdCiAgICAgICAgICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TdHlsZXMgJV0KICAgICAgICAgICAgICAgICAgICAuY2stY29udGVudCAjdGVtcGxhdGVDb250YWluZXIgdGQuYm9keUNvbnRlbnQgPiBoMSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMwMDAyM2MgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2stY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5BcnRpY2xlQ29udGVudCAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KPC9kaXY+Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/TicketPrintHTML/PrintStyles.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpTY3JpcHRVc2FnZSkKCiMgdGVtcG9yYXJpbHkgY29udGFpbnMgY29waWVzIG9mIHRoZSBmb2xsb3dpbmcgQ1NTIGZpbGVzOgojCiMgQ29yZS5BZ2VudC5DdXN0b21lclVzZXIuT3BlblRpY2tldC5jc3MKIyBDb3JlLkFnZW50LkRhZW1vbi5jc3MKIyBDb3JlLkFuaW1hdGlvbnMuY3NzCiMgQ29yZS5EZWZhdWx0LmNzcwojIENvcmUuRGlhbG9nLmNzcwojIENvcmUuRm9vdGVyLmNzcwojIENvcmUuRm9ybXMuY3NzCiMgQ29yZS5IZWFkZXIuY3NzCiMgQ29yZS5JbnB1dEZpZWxkcy5jc3MKIyBDb3JlLkxvZ2luLmNzcwojIENvcmUuT3ZlcnZpZXdDb250cm9sLmNzcwojIENvcmUuT3ZlcnZpZXdMYXJnZS5jc3MKIyBDb3JlLk92ZXJ2aWV3TWVkaXVtLmNzcwojIENvcmUuT3ZlcnZpZXdTbWFsbC5jc3MKIyBDb3JlLlBhZ2VMYXlvdXQuY3NzCiMgQ29yZS5QcmludC5jc3MKIyBDb3JlLlJlc2V0LmNzcwojIENvcmUuVGFibGUuY3NzCiMgQ29yZS5UaWNrZXREZXRhaWwuY3NzCiMgQ29yZS5Ub29sdGlwLmNzcwojIENvcmUuV2lkZ2V0LmNzcwojIENvcmUuV2lkZ2V0TWVudS5jc3MKIyBDb3JlLkR5bmFtaWNGaWVsZERCLmNzcwoKPHN0eWxlPgoKLyoqCiAqIEBwYWNrYWdlICAgICBBZHZhbmNlZFRpY2tldFByaW50CiAqIEBzZWN0aW9uICAgICBBcHBsaWNhdGlvbgogKiBAc3Vic2VjdGlvbiAgVGlja2V0CiAqLwoKCiogewogICAgb3JwaGFuczogNTsKICAgIHdpZG93czogNTsKfQoKYm9keSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgd2lkdGg6IDc3NXB4OwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KCmRpdi5UaWNrZXRQcmludCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC1hdXRvLWZsb3c6IHJvdyBkZW5zZTsKICAgIGdyaWQtYXV0by1yb3dzOiBtaW4tY29udGVudDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgIGNvbHVtbi1nYXA6IDRweDsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7Cn0KCmRpdi5DdXN0b21lclRpY2tldFByaW50IHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcik7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBjb2x1bW4tZ2FwOiB1bnNldDsKfQoKZGl2LlRpY2tldFByaW50ID4gLkhlYWRsaW5lIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgaGVpZ2h0OiBmaXQtY29udGVudDsKICAgIGFsaWduLWl0ZW1zOiBlbmQ7CiAgICBncmlkLWNvbHVtbjogMSAvIHNwYW4gMjsKfQoKZGl2LkN1c3RvbWVyVGlja2V0UHJpbnQgPiAuSGVhZGxpbmUgewogICAgZ3JpZC1jb2x1bW46IDE7Cn0KCmRpdi5UaWNrZXRQcmludCBkaXYuSGVhZGxpbmUgPiBoMSB7CiAgICBtYXJnaW46IDA7CiAgICBsaW5lLWhlaWdodDogMS41ZW07CiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZsZXgtZ3JvdzogMTsKfQoKZGl2I1BERkxvZ28gewogICAgd2lkdGg6IDMwJTsKICAgIG1hcmdpbi1sZWZ0OiAxMnB4Owp9CgpkaXYjUERGTG9nbyA+IGltZyB7CiAgICB3aWR0aDogMTAwJTsKfQoKZGl2LlRpY2tldFByaW50IGgyLApkaXYuVGlja2V0UHJpbnQgaDIgKiB7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogMTNweDsKfQoKZGl2LlRpY2tldFByaW50IC5XaWRnZXRTaW1wbGUsCmRpdi5UaWNrZXRQcmludCAub29vV2lkZ2V0IHsKICAgIHBhZGRpbmc6IDVweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkOwogICAgYm9yZGVyLWNvbG9yOiAjY2RjZGQ4OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICBtYXJnaW4tYm90dG9tOiAxNXB4Owp9CgpkaXYuVGlja2V0UHJpbnQgLm9vb1dpZGdldCB7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgbWFyZ2luLXJpZ2h0OiAycHg7CiAgICBtYXJnaW4tbGVmdDogMnB4Owp9CgpkaXYuVGlja2V0UHJpbnQgPiAuV2lkZ2V0U2ltcGxlIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBmbG9hdDogbm9uZTsKfQoKZGl2LkN1c3RvbWVyVGlja2V0UHJpbnQgPiAuV2lkZ2V0U2ltcGxlIHsKICAgIG1heC13aWR0aDogMTAwJTsKfQoKZGl2LlRpY2tldFByaW50ICNBcnRpY2xlSXRlbXMgewogICAgZ3JpZC1jb2x1bW46IDEgLyBzcGFuIDI7Cn0KCmRpdi5UaWNrZXRQcmludC5DdXN0b21lclRpY2tldFByaW50ICNBcnRpY2xlSXRlbXMgewogICAgZ3JpZC1jb2x1bW46IDE7Cn0KCmRpdi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlICosCmRpdi5UaWNrZXRQcmludCAub29vV2lkZ2V0ICogewogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuMWVtOwogICAgZmxleC1ncm93OiAxOwp9CgpkaXYuVGlja2V0UHJpbnQgLm9vb1dpZGdldCBoMyB7CiAgICBwYWRkaW5nOiA2cHggOHB4OwogICAgbWFyZ2luOiAwOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgdGV4dC1zaGFkb3c6IDFweCAxcHggI2ZmZjsKICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7Cn0KCmRpdi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlIC5Db250ZW50IHsKICAgIHBhZGRpbmc6IDRweDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCmRpdi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlIGZpZWxkc2V0IHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCmRpdi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlIC5Db250ZW50IC5XYXJuaW5nLApkaXYuVGlja2V0UHJpbnQgLldpZGdldFNpbXBsZSAuQ29udGVudCAuRXJyb3IsCmRpdi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlIC5Db250ZW50IC5Ob3RpY2UsCmRpdi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlIC5Db250ZW50IC5Db25maXJtYXRpb24gewogICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKfQoKZGl2LlRpY2tldFByaW50ICNBcnRpY2xlVGFibGVCb2R5IC5TY3JvbGxlcnsKICAgIGhlaWdodDogdW5zZXQ7Cn0KCi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlID4gLkhlYWRlciAuV2lkZ2V0QWN0aW9uLAouVGlja2V0UHJpbnQgLldpZGdldFNpbXBsZSA+IC5IZWFkZXIgLkNvbnRyb2xSb3csCi5UaWNrZXRQcmludCBkaXYuSGVhZGxpbmUgPiBkaXYuRmxhZywKLlRpY2tldFByaW50IC5IYW5kbGUsCi5UaWNrZXRQcmludCAuSXRlbUFjdGlvbnMsCi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlIC5JdGVtUm93LAouVGlja2V0UHJpbnQgLldpZGdldFNpbXBsZSAuQXJ0aWNsZU1haWxDb250ZW50ID4gLkF2YXRhciwKLlRpY2tldFByaW50IC5XaWRnZXRTaW1wbGUgLkFydGljbGVNYWlsQ29udGVudEhUTUxXcmFwcGVyOjpiZWZvcmUsCi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlIC5BcnRpY2xlTWFpbENvbnRlbnRIVE1MV3JhcHBlcjo6YWZ0ZXIsCi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlIC5BcnRpY2xlQXR0YWNobWVudHMsCi5UaWNrZXRQcmludCAjV2lkZ2V0VGlja2V0IC5EYXRhVGFibGUgdGg6bGFzdC1vZi10eXBlLAouVGlja2V0UHJpbnQgI1dpZGdldFRpY2tldCAuRGF0YVRhYmxlIHRkOmxhc3Qtb2YtdHlwZSwKLlRpY2tldFByaW50ICsgI0Zvb3RlciB7CiAgICBkaXNwbGF5OiBub25lOwp9CgouVGlja2V0UHJpbnQgLldpZGdldFNpbXBsZSBhIHsKICAgIGNvbG9yOiBpbmhlcml0Owp9CgouVGlja2V0UHJpbnQgLldpZGdldFNpbXBsZSA+IC5IZWFkZXIgaDIsCi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlID4gLkhlYWRlciBoMyB7CiAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoKLlRpY2tldFByaW50IGRpdi5IZWFkbGluZSA+IGgxIHsKICAgIG1hcmdpbi1sZWZ0OiAwOwp9CgouVGlja2V0UHJpbnQgdGFibGUuRGF0YVRhYmxlIHRoZWFkLAouVGlja2V0UHJpbnQgdGFibGUuRGF0YVRhYmxlIHRoZWFkIHRoIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgouVGlja2V0UHJpbnQgLlRpY2tldExpc3QgI0FydGljbGVUYWJsZSB0aGVhZCwKLlRpY2tldFByaW50IC5UaWNrZXRMaXN0ICNBcnRpY2xlVGFibGUgdGhlYWQgdGgsCi5UaWNrZXRQcmludCAuVGlja2V0TGlzdCAjQXJ0aWNsZVRhYmxlIHRib2R5LAouVGlja2V0UHJpbnQgLlRpY2tldExpc3QgI0FydGljbGVUYWJsZSB0Ym9keSB0ciB0ZCwKLlRpY2tldFByaW50IC5UaWNrZXRMaXN0ICNBcnRpY2xlVGFibGUgdGJvZHkgdHIsCi5UaWNrZXRQcmludCAuVGlja2V0TGlzdCAjQXJ0aWNsZVRhYmxlIHRoZWFkOmhvdmVyIHRoLAouVGlja2V0UHJpbnQgLlRpY2tldExpc3QgI0FydGljbGVUYWJsZSB0Ym9keSB0cjpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgZ3JheSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSAhaW1wb3J0YW50Owp9CgouVGlja2V0UHJpbnQgI0FydGljbGVJdGVtcyAuV2lkZ2V0U2ltcGxlIC5BcnRpY2xlTWFpbENvbnRlbnRIVE1MV3JhcHBlciB7CiAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgbWFyZ2luLXJpZ2h0OiAwcHg7Cn0KCi5UaWNrZXRQcmludCAjQXJ0aWNsZUl0ZW1zIC5BcnRpY2xlTWFpbEhlYWRlciB7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQ7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7CiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgYm9yZGVyLWNvbG9yOiAjY2RjZGQ4OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgbWFyZ2luLXRvcDogNXB4OwogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgpkaXYuVGlja2V0UHJpbnQuQ3VzdG9tZXJUaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlIC5Db250ZW50IC5GaWVsZENvbnRhaW5lciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKfQoKZGl2LlRpY2tldFByaW50LkN1c3RvbWVyVGlja2V0UHJpbnQgLldpZGdldFNpbXBsZSAuQ29udGVudCAuRmllbGRDb250YWluZXIgPiAqIHsKICAgIGxpbmUtaGVpZ2h0OiAxLjNlbTsKICAgIG1pbi1oZWlnaHQ6IDE3cHg7CiAgICBwYWRkaW5nLXRvcDogMC4zZW07CiAgICBwYWRkaW5nLWJvdHRvbTogMXB4OwogICAgdGV4dC13cmFwOiB3cmFwOwp9CgouVGlja2V0UHJpbnQgLldpZGdldFNpbXBsZSAuQ29udGVudCBsYWJlbCwKLlRpY2tldFByaW50IC5vb29XaWRnZXQgcC5vb28xMiBzcGFuLAouVGlja2V0UHJpbnQgI0FydGljbGVJdGVtcyAuQXJ0aWNsZU1haWxIZWFkZXIgbGFiZWwgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzAwMDIzYzsKICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7Cn0KCi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlIC5Db250ZW50IGxhYmVsLAouVGlja2V0UHJpbnQgLm9vb1dpZGdldCBwLm9vbzEyIHNwYW4gewogICAgd2lkdGg6IDMwJTsKfQoKLlRpY2tldFByaW50ICNBcnRpY2xlSXRlbXMgLkFydGljbGVNYWlsSGVhZGVyIGxhYmVsIHsKICAgIHdpZHRoOiAxNSU7Cn0KCi5UaWNrZXRQcmludCAub29vV2lkZ2V0IHAub29vMTIgewogICAgbGluZS1oZWlnaHQ6IDEuM2VtOwogICAgbWluLWhlaWdodDogMTdweDsKICAgIHBhZGRpbmctdG9wOiAwLjNlbTsKICAgIHBhZGRpbmctYm90dG9tOiAxcHg7CiAgICB0ZXh0LXdyYXA6IHdyYXA7CiAgICBtYXJnaW4tbGVmdDogOHB4Owp9CgouVGlja2V0UHJpbnQgI29vb01vcmUgewogICAgZGlzcGxheTogbm9uZTsKfQoKLlRpY2tldFByaW50LkN1c3RvbWVyVGlja2V0UHJpbnQgLldpZGdldFNpbXBsZSAuQ29udGVudCBsYWJlbCB7CiAgICBmbGV4OiAzMCU7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwp9CgouVGlja2V0UHJpbnQgI0FydGljbGVJdGVtcyAuQXJ0aWNsZU1haWxIZWFkZXIgLlRhYmxlTGlrZSBwLlZhbHVlIHsKICAgIHdpZHRoOiA4NSU7CiAgICBwYWRkaW5nLWxlZnQ6IDRweDsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5UaWNrZXRQcmludCAuV2lkZ2V0U2ltcGxlIC5Db250ZW50IHAuVmFsdWUgewogICAgbWFyZ2luLWxlZnQ6IDMwJTsKfQoKLlRpY2tldFByaW50LkN1c3RvbWVyVGlja2V0UHJpbnQgLldpZGdldFNpbXBsZSAuQ29udGVudCBwLlZhbHVlIHsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgZmxleDogNzAlOwogICAgcGFkZGluZy1sZWZ0OiA4cHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAwOwp9CgouVGlja2V0UHJpbnQgI0R5bmFtaWNGaWVsZHNXaWRnZXQgLkZpZWxkQ29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMHB4IDFmcjsKICAgIGNvbHVtbi1nYXA6IDEwcHg7Cn0KCi5UaWNrZXRQcmludCAjRHluYW1pY0ZpZWxkc1dpZGdldCAuRmllbGRDb250YWluZXIgbGFiZWwgewogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBncmlkLWNvbHVtbjogMTsKfQoKLlRpY2tldFByaW50ICNEeW5hbWljRmllbGRzV2lkZ2V0IC5GaWVsZENvbnRhaW5lciA+IHAgewogICAgZ3JpZC1jb2x1bW46IDI7Cn0KCi8qClRlbXBvcmFyeSBDb3B5IG9mIFJlbGV2YW50IENTUyB1bnRpbCBjaGFuZ2VkIGluIFN0YW5kYXJkIChQbGFubmVkIGZvciAxMS4xIGF0IGxhdGVzdCkKd2l0aCBhZGRlZCBAbWVkaWEgcHJpbnQKKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIEN1c3RvbWVyIFVzZXIgT3BlbiBUaWNrZXQgSWNvbgogKi8KCkBtZWRpYSBzY3JlZW4sIHByaW50IHsKCiAgICAuSXRlbVJvdyBpLk9wZW5UaWNrZXQgewogICAgICAgIGNvbG9yOiByZWQ7CiAgICB9CgogICAgLkl0ZW1Sb3cgaS5Ob09wZW5UaWNrZXQgewogICAgICAgIGNvbG9yOiBncmVlbjsKICAgIH0KCiAgICAuSXRlbVJvdyBpLmZhLXBvd2VyLW9mZiB7CiAgICAgICAgY29sb3I6ICMzMzM7CiAgICB9Cgp9IC8qIGVuZCBAbWVkaWEgKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIEFwcGxpY2F0aW9uCiAqIEBzdWJzZWN0aW9uICBEYWVtb24gc3RhcnQgaW5mb3JtYXRpb24KICovCgpAbWVkaWEgc2NyZWVuLCBwcmludCB7CgogICAgLkRhZW1vbkluZm9Db250ZW50IC5JbmZvUGFyYWdyYXBoIHsKICAgICAgICBtYXJnaW4tbGVmdDogMTVweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7CiAgICB9CgogICAgLkRhZW1vbkluZm9Db250ZW50IC5TdHJvbmcgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgfQoKICAgIC5EYWVtb25JbmZvQ29udGVudCB1bCB7CiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBkaXNjOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxNnB4OwogICAgfQoKICAgIC5EYWVtb25JbmZvQ29udGVudCBsaSB7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDZweDsKICAgIH0KCiAgICAuRGFlbW9uSW5mb0NvbnRlbnQgbGVnZW5kIHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYzsKICAgICAgICBjb2xvcjogIzMzMzMzMzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgIH0KCn0gLyogZW5kIEBtZWRpYSAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQW5pbWF0aW9ucwogKi8KCkBtZWRpYSBzY3JlZW4sIHByaW50IHsKCiAgICAuQW5pbWF0aW9uU2hha2UgewogICAgICAgIGFuaW1hdGlvbjogc2hha2UgMC44MnMgY3ViaWMtYmV6aWVyKC4zNiwuMDcsLjE5LC45NykgYm90aDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgICBwZXJzcGVjdGl2ZTogMTAwMHB4OwogICAgfQoKICAgIEBrZXlmcmFtZXMgc2hha2UgewogICAgICAgIDEwJSwgOTAlIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMXB4LCAwLCAwKTsKICAgICAgICB9CgogICAgICAgIDIwJSwgODAlIHsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgycHgsIDAsIDApOwogICAgICAgIH0KCiAgICAgICAgMzAlLCA1MCUsIDcwJSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTRweCwgMCwgMCk7CiAgICAgICAgfQoKICAgICAgICA0MCUsIDYwJSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNHB4LCAwLCAwKTsKICAgICAgICB9CiAgICB9Cgp9IC8qIGVuZCBAbWVkaWEgKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIERlZmF1bHQgU2V0dGluZ3MKICovCgpAbWVkaWEgc2NyZWVuLCBwcmludCB7CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiBGYWxsYmFjayBDb2xvciBEZWZpbml0aW9ucwogICAgICovCgogICAgOnJvb3QgewogICAgICAgIC0tY29sTWFpbkRhcms6ICMwMDAyM2M7CiAgICAgICAgLS1jb2xNYWluTGlnaHQ6ICMwMDAwOTk7CiAgICAgICAgLS1jb2xNYWluSG92ZXI6ICMwMDFiZmY7CiAgICAgICAgLS1jb2xCR0VsZW1lbnQ6ICNmZmY7CiAgICAgICAgLS1jb2xCR0xpZ2h0OiAjZjdmN2Y5OwogICAgICAgIC0tY29sQkdMaWdodE1lZGl1bTogI2VlZWVmMjsKICAgICAgICAtLWNvbEJHTWVkaXVtOiAjZTVlNWViOwogICAgICAgIC0tY29sQkdNZWRpdW1EYXJrOiAjY2RjZGQ4OwogICAgICAgIC0tY29sQkdEYXJrOiAjYmZjMGNlOwogICAgICAgIC0tY29sVGV4dExpZ2h0OiAjN2Y4MDlkOwogICAgICAgIC0tY29sVGV4dE1lZGl1bTogIzU0NTU3YzsKICAgICAgICAtLWNvbFRleHREYXJrOiAjMDAwMjNjOwogICAgICAgIC0tY29sVGV4dEVycjogI2VhMjQwMDsKICAgICAgICAtLWNvbFRleHRXYXJuOiAjZjVhZjM2OwogICAgICAgIC0tY29sVGV4dExpbms6ICMwMDFiZmY7CiAgICAgICAgLS1jb2xIaWdobGlnaHQ6ICNmZWYyMzU7CiAgICAgICAgLS1jb2xOb3RpZnlPSzogI2M0Y2RmYTsKICAgICAgICAtLWNvbE5vdGlmeVdhcm46ICNmZmZjY2M7CiAgICAgICAgLS1jb2xOb3RpZnlFcnI6ICNmOWJjYjI7CiAgICAgICAgLS1jb2xIb3ZlckxpZ2h0OiAjZmZmY2NjOwogICAgICAgIC0tY29sSG92ZXJEYXJrOiAjZmVmMjM1OwogICAgICAgIC0tY29sU2hhZG93RGFyazogcmdiYSgwLCAyLCA3MSwgMC4xNik7CiAgICB9CgoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIEZvbnRzCiAgICAgKi8KCiAgICBib2R5IHsKICAgICAgICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLlJUTCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgLyogdGhpcyB3aWxsIGluaGVyaXQgdG8gYWxsIGVsZW10ZW50cyBiZWNhdXNlIG9mIHJlc2V0LmNzcyAqLwogICAgICAgIGRpcmVjdGlvbjogcnRsOwogICAgfQoKICAgICNWaWV3TW9kZVN3aXRjaCB7CiAgICAgICAgbWFyZ2luOiA1cHggMHB4OwogICAgfQoKICAgICNBamF4RXJyb3JEaWFsb2cgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgI0FqYXhFcnJvckRpYWxvZ0lubmVyIHsKICAgICAgICB3aWR0aDogNTUwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgfQoKICAgICNBamF4RXJyb3JEaWFsb2dJbm5lciAuSWNvbiB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzMHB4OwogICAgICAgIGhlaWdodDogMzBweDsKICAgICAgICBtYXJnaW46IDBweCBhdXRvIDIwcHggYXV0bzsKICAgICAgICBsaW5lLWhlaWdodDogMzBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEhpZ2hsaWdodCk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAycyBlYXNlOwogICAgICAgIGZsb2F0OiBub25lOwogICAgfQoKICAgICNBamF4RXJyb3JEaWFsb2dJbm5lciAuSWNvbiArIHAgewogICAgICAgIG1hcmdpbjogMHB4IGF1dG8gNXB4IGF1dG87CiAgICAgICAgd2lkdGg6IDkwJTsKICAgIH0KCiAgICAjQWpheEVycm9yRGlhbG9nSW5uZXIgLkljb24gaSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgbWFyZ2luLXRvcDogLTNweDsKICAgIH0KCiAgICAjQWpheEVycm9yRGlhbG9nSW5uZXIgLkNvbW11bmljYXRpb25FcnJvciAuSWNvbiB7CiAgICAgICAgYmFja2dyb3VuZDogI2I4Mzg0ZTsKICAgIH0KCiAgICAjQWpheEVycm9yRGlhbG9nSW5uZXIgLkljb24uR3JlZW4gewogICAgICAgIGJhY2tncm91bmQ6IGdyZWVuOwogICAgfQoKICAgICNBamF4RXJyb3JEaWFsb2dJbm5lciAuRnVsbEVycm9yTWVzc2FnZSB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgICAgICBtYXJnaW46IDVweCAwcHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgTG9hZGluZyBEaWFsb2cKICAgICAqLwoKICAgIC5EaWFsb2dXYWl0aW5nIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLkRpYWxvZ1dhaXRpbmcgcCB7CiAgICAgICAgcGFkZGluZzogMTBweCAxMHB4IDEwcHggMTBweDsKICAgIH0KCiAgICAuRGlhbG9nIC5Jbm5lckNvbnRlbnQgLldhaXRpbmcgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgICAgei1pbmRleDogOTk5OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxMDAlOwogICAgfQoKICAgIC5EaWFsb2cgLklubmVyQ29udGVudCAuV2FpdGluZyBpIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIG1hcmdpbi10b3A6IC03cHg7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAtN3B4OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIFByaW50IGVsZW1lbnRzIC0gT25seSBzaG93IHdoZW4gcGFnZSBpcyBwcmludGVkCiAgICAgKi8KICAgIC5QcmludE9ubHkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgSGlkZGVuIGVsZW1lbnRzIC0gRWxlbWVudHMgdGhhdCBhcmUgaGlkZGVuIGF0IGZpcnN0CiAgICAgKi8KICAgIC5IaWRkZW4gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLkludmlzaWJsZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gICAgICBBUklBIChBY2Nlc3NpYmlsaXR5KQogICAgICogQHN1YnN1YnNlY3Rpb24gICBBbGVydE1lc3NhZ2UKICAgICAqIEBub3RlICAgICAgICAgICAgVGhpcyBkZWZpbml0aW9uIGFsbG93cyB0byBjcmVhdGUgdGV4dCBvbiB0aGUgcGFnZQogICAgICogICAgICAgICAgICAgICAgICB3aGljaCBpcyBub3Qgc2VlbiwgYnV0IHdpbGwgYmUgcmVhZCBieSB0aGUgc2NyZWVuIHJlYWRlci4KICAgICAqICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTsgY2Fubm90IGJlIHVzZWQgaW4gdGhpcyBjYXNlLgogICAgICovCgogICAgLkFSSUFBbGVydE1lc3NhZ2UgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogICAgICAgIGxlZnQ6IC0xMDAwMHB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIHRvcDogLTEwMDAwcHg7CiAgICB9CgogICAgLlJUTCAuQVJJQUFsZXJ0TWVzc2FnZSB7CiAgICAgICAgbGVmdDogYXV0bzsKICAgICAgICByaWdodDogLTEwMDAwcHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgRWxlbWVudFBvb2wgLSBIaWRlIGVsZW1lbnRzIGZvciBsYXRlciB1c2Ugd2l0aCBKYXZhU2NyaXB0CiAgICAgKi8KICAgICNVSUVsZW1lbnRQb29sIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIExpbmtzCiAgICAgKi8KCiAgICBhIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgY29sb3I6ICMwMDFiZmY7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaW5rKTsKICAgIH0KCiAgICBhOmhvdmVyLAogICAgYTpmb2N1cyB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBIZWFkaW5ncwogICAgICovCiAgICBoMSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICB9CgogICAgaDIgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIH0KCiAgICBoMyB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgfQoKICAgIGg0IHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgIH0KCiAgICBoNSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgUGFyYWdyYXBocwogICAgICogQG5vdGUgICAgICAgIFVzZSBwYXJhZ3JhcGhzIGluc3RlYWQgb2YgPGRpdj5zIGZvciB0ZXh0LW9ubHksIG11bHRpbGluZSBjb250ZW50IQogICAgICovCiAgICBwIHsKICAgICAgICAvKiBpbmNyZWFzZSBsaW5lLWhlaWdodCBmb3IgcmVhZGFiaWxpdHkgKi8KICAgICAgICBsaW5lLWhlaWdodDogMS4zZW07CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgQ29kZSBFeGFtcGxlcwogICAgICovCiAgICBjb2RlIHsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIFRleHQgbW9kaWZpZXJzCiAgICAgKi8KICAgIHN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB9CgogICAgZW0gewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBSZWd1bGFyIGxpc3RzCiAgICAgKiBAbm90ZSAgICAgICAgTGlzdCBlbGVtZW50cyAodWwsIG9sKSBhcmUgYmVpbmcgcmVzZXQgYnkgZGVmYXVsdCB0byBhdm9pZCBicm93c2VyIHN0eWxpbmcsIHNvIHdlCiAgICAgICAgICAgICAgICAgICAgbmVlZCB0byBkZWZpbmUgb3VyIG93biAnZGVmYXVsdCcgbGlzdHMgdXNpbmcgYSBjbGFzcy4KICAgICAqLwoKICAgIHVsLkRlZmF1bHQgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlOwogICAgICAgIG1hcmdpbjogNXB4IDBweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICB9CgogICAgdWwuRGVmYXVsdCBsaSB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEzMCU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogM3B4OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIERlZmluaXRpb24gbGlzdHMKICAgICAqLwogICAgZGwgewogICAgICAgIG1hcmdpbjogNXB4IDA7CiAgICB9CgogICAgZHQgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zZW07CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgfQoKICAgIGRkIHsKICAgICAgICBsaW5lLWhlaWdodDogMS4zZW07CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOwogICAgfQoKICAgIC5SVEwgZGQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICAgIG1hcmdpbi1yaWdodDogMTVweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBUZXh0CiAgICAgKi8KICAgIC5DZW50ZXIgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAuTGVmdCB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIH0KCiAgICAuRmxvYXRMZWZ0IHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgfQoKICAgIC5SaWdodCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICB9CgogICAgLkZsb2F0UmlnaHQgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgIH0KCiAgICAuRXJyb3IgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RXJyKTsKICAgIH0KCiAgICAuV2FybmluZyB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRXYXJuKTsKICAgIH0KCiAgICAuTm90aWNlIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIC5Db25maXJtYXRpb24gewogICAgICAgIGNvbG9yOiAjMDY5ZDA3OwogICAgfQoKICAgIC5TbWFsbCB7CiAgICAgICAgZm9udC1zaXplOiA5MCU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgRXJyb3JzCiAgICAgKiBAbm90ZSAgICAgICAgRXJyb3IgZmllbGRzIGZvciBmb3JtcwogICAgICovCgogICAgLkVycm9yQm94LAogICAgLlN1Y2Nlc3NCb3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweCA4cHggNHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIH0KCiAgICAuRXJyb3JCb3guSGlkZGVuLAogICAgLlN1Y2Nlc3NCb3guSGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5FcnJvckJveCB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbE5vdGlmeUVycik7CiAgICB9CgogICAgLlN1Y2Nlc3NCb3ggewogICAgICAgIGNvbG9yOiAjRkZGOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbE5vdGlmeU9LKTsKICAgIH0KCiAgICAuRXJyb3JCb3ggc3BhbiBhLAogICAgLlN1Y2Nlc3NCb3ggc3BhbiBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgZWFzZSAwLjJzOwogICAgfQoKICAgIC5FcnJvckJveCBzcGFuIGE6aG92ZXIsCiAgICAuU3VjY2Vzc0JveCBzcGFuIGE6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBEcmFnICYgZHJvcCB1cGxvYWQKICAgICAqLwoKICAgIGRpdi5EbkRVcGxvYWRCb3ggewogICAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgICAgICB3aWR0aDogNjIycHg7CiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgfQoKICAgIGRpdi5EbkRVcGxvYWQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBtaW4taGVpZ2h0OiA2MHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIG1heC13aWR0aDogNjIycHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgIH0KCiAgICBzcGFuLlJlYWR5Rm9yVXBsb2FkIHsKICAgICAgICBwYWRkaW5nOiAzMHB4IDBweCA1cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICB9CgogICAgZGl2LkRuRFVwbG9hZDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICBpbnB1dC5BamF4RG5EVXBsb2FkLkVycm9yICsgZGl2LkRuRFVwbG9hZCB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRFcnIpOwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sVGV4dEVycik7CiAgICB9CgogICAgZGl2LkRuRFVwbG9hZC5EcmFnT3ZlciB7CiAgICAgICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdNZWRpdW1EYXJrKTsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICB9CgogICAgZGl2LkRuRFVwbG9hZCBpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMHB4OwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICBtYXJnaW4tbGVmdDogLTIwcHg7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICB9CgogICAgZGl2LkRuRFVwbG9hZCBpLmZhLXNwaW5uZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgZGl2LkRuRFVwbG9hZC5VcGxvYWRpbmcgaS5mYS1kb3dubG9hZCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICBkaXYuRG5EVXBsb2FkLlVwbG9hZGluZyBpLmZhLXNwaW5uZXIgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKICAgIGRpdi5EbkRVcGxvYWQgLlVwbG9hZFJ1bm5pbmcgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgZGl2LkRuRFVwbG9hZC5VcGxvYWRpbmcgLlJlYWR5Rm9yVXBsb2FkIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIGRpdi5EbkRVcGxvYWQuVXBsb2FkaW5nIC5VcGxvYWRSdW5uaW5nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICAuQXR0YWNobWVudExpc3RDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXgtd2lkdGg6IDYyMnB4OwogICAgfQoKICAgIC5BdHRhY2htZW50TGlzdENvbnRhaW5lciAuQnVzeSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLkF0dGFjaG1lbnRMaXN0Q29udGFpbmVyIC5CdXN5IGkgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgIH0KCiAgICB0YWJsZS5BdHRhY2htZW50TGlzdCB7CiAgICAgICAgY2xlYXI6IG5vbmU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiA2MjJweDsKICAgICAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkOwogICAgfQoKICAgIHRhYmxlLkF0dGFjaG1lbnRMaXN0IC5GaWxlbmFtZSB7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgdGFibGUuQXR0YWNobWVudExpc3QgLlByb2dyZXNzIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgICBtYXJnaW46IDNweCAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sSGlnaGxpZ2h0KTsKICAgICAgICB3aWR0aDogMHB4OwogICAgfQoKICAgIHRhYmxlLkF0dGFjaG1lbnRMaXN0IC5GaWxldHlwZSB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIHRhYmxlLkF0dGFjaG1lbnRMaXN0IC5GaWxlc2l6ZSB7CiAgICAgICAgd2lkdGg6IDE1JTsKICAgIH0KCiAgICB0YWJsZS5BdHRhY2htZW50TGlzdCAuRGVsZXRlIHsKICAgICAgICB3aWR0aDogMTVweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgdGFibGUuQXR0YWNobWVudExpc3QgLkF0dGFjaG1lbnREZWxldGU6Zm9jdXMgaSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICB0YWJsZS5BdHRhY2htZW50TGlzdC5EYXRhVGFibGUgdGhlYWQgdGggewogICAgICAgIGxpbmUtaGVpZ2h0OiAxMnB4OwogICAgfQoKICAgIC8qKgogICAgICogQG5vdGUgICAgVXNlIHRoZSBjbGFzcyBJbnZpc2libGVUZXh0IHRvIGhpZGUgdGV4dCBmcm9tIHRoZSBzY3JlZW4sCiAgICAgKiAgICAgICAgICB3aGlsZSBpdCBpcyBzdGlsbCByZWNvZ25pemVkIGFuZCByZWFkIGJ5IHNjcmVlbiByZWFkZXJzLgogICAgICovCiAgICAuSW52aXNpYmxlVGV4dCB7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWluZGVudDogLTk5OTlweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogICAgfQoKICAgIGEuRGlzYWJsZWRMaW5rIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgU3BhY2luZ3MKICAgICAqLwogICAgLlNwYWNpbmcgewogICAgICAgIG1hcmdpbjogMTNweDsKICAgIH0KCiAgICAuU3BhY2luZ1RvcCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTNweDsKICAgIH0KCiAgICAuU3BhY2luZ1RvcFNtYWxsIHsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICB9CgogICAgLlNwYWNpbmdUb3BMYXJnZSB7CiAgICAgICAgbWFyZ2luLXRvcDogODlweDsKICAgIH0KCiAgICAuU3BhY2luZ0JvdHRvbSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTNweDsKICAgIH0KCiAgICAuU3BhY2luZ0JvdHRvbU1lZGl1bSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzRweCAhaW1wb3J0YW50OwogICAgfQoKICAgIC5TcGFjaW5nQm90dG9tTGFyZ2UgewogICAgICAgIG1hcmdpbi1ib3R0b206IDg5cHg7CiAgICB9CgogICAgLlNwYWNpbmdMZWZ0IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgIH0KCiAgICAuU3BhY2luZ1JpZ2h0IHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgSW5kZW50cwogICAgICovCiAgICAuSW5kZW50IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEzcHggIWltcG9ydGFudDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBCb3ggYWxpZ25tZW50CiAgICAgKi8KICAgIC5DZW50ZXJCb3ggewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgQ29udHJvbGxpbmcgdGhlIGRpc3BsYXk6IHZhbHVlCiAgICAgKiBAbm90ZSAgICAgICAgVGhpcyBpcyBlc3BlY2lhbGx5IGhlbHBmdWwgZm9yIGxpbmtzLiBXaGVuCiAgICAgKiAgICAgICAgICAgICAgdGhleSBoYXZlIHRoaXMgY2xhc3MsIHRoZSBlbnRpcmUgYmxvY2sgd2lsbCBiZSBjbGlja2FibGUuCiAgICAgKi8KICAgIC5Bc0Jsb2NrIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBDbGVhcgogICAgICovCiAgICAuQ2xlYXIgewogICAgICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgY2xlYXI6IGJvdGggIWltcG9ydGFudDsKICAgIH0KCiAgICAuQ2xlYXJOb25lIHsKICAgICAgICBjbGVhcjogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5DbGVhckxlZnQsCiAgICAuUlRMIC5DbGVhclJpZ2h0IHsKICAgICAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIGNsZWFyOiBsZWZ0ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLkNsZWFyUmlnaHQsCiAgICAuUlRMIC5DbGVhckxlZnQgewogICAgICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgY2xlYXI6IHJpZ2h0ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgTWFpbkJveAogICAgICovCiAgICAuTWFpbkJveCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDE2cHggMTBweCA3cHggMTBweDsKICAgIH0KCiAgICAuUlRMIC5NYWluQm94IHsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4IDhweCAxNnB4OwogICAgfQoKICAgIC5PdmVydmlld0JveCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5NYWluQm94ID4gaDEgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAxMHB4IDhweCAxNXB4IDhweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLk1haW5Cb3ggPiAuQXN0ZXJpc2tFeHBsYW5hdGlvbiB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIH0KCiAgICAuUlRMIC5NYWluQm94ID4gLkFzdGVyaXNrRXhwbGFuYXRpb24gewogICAgICAgIHBhZGRpbmctbGVmdDogMHB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKICAgIH0KCiAgICAuQXN0ZXJpc2tFeHBsYW5hdGlvbiB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICB9CgogICAgLk1haW5Cb3guRm9ybVNjcmVlbiA+IGgxLAogICAgLk1haW5Cb3guRm9ybVNjcmVlbiA+IC5Bc3Rlcmlza0V4cGxhbmF0aW9uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMjQlOwogICAgfQoKICAgIC5NYWluQm94LkZvcm1TY3JlZW4uTm9TaWRlYmFyID4gaDEsCiAgICAuTWFpbkJveC5Gb3JtU2NyZWVuLk5vU2lkZWJhciA+IC5Bc3Rlcmlza0V4cGxhbmF0aW9uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMzAlOwogICAgfQoKICAgIC5SVEwgLk1haW5Cb3guRm9ybVNjcmVlbiA+IGgxLAogICAgLlJUTCAuTWFpbkJveC5Gb3JtU2NyZWVuID4gLkFzdGVyaXNrRXhwbGFuYXRpb24gewogICAgICAgIG1hcmdpbi1yaWdodDogMjQlOwogICAgfQoKICAgIC5SVEwgLk1haW5Cb3guRm9ybVNjcmVlbi5Ob1NpZGViYXIgPiBoMSwKICAgIC5SVEwgLk1haW5Cb3guRm9ybVNjcmVlbi5Ob1NpZGViYXIgPiAuQXN0ZXJpc2tFeHBsYW5hdGlvbiB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAzMCU7CiAgICB9CgogICAgLk92ZXJ2aWV3Qm94ID4gaDEgewogICAgICAgIG1hcmdpbjogMTBweCAwcHg7CiAgICAgICAgcGFkZGluZzogOHB4IDExcHggN3B4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBCcmVhZCBjcnVtYgogICAgICovCgogICAgLkJyZWFkQ3J1bWIgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDBweCAycHggMTVweCAwcHg7CiAgICAgICAgcGFkZGluZzogN3B4IDE1cHggNHB4IDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAwcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTVweDsKICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGJveC1zaGFkb3c6IDFweCAxcHggMHB4IHZhcigtLWNvbFNoYWRvd0RhcmspOwogICAgfQoKICAgIC5SVEwgLkJyZWFkQ3J1bWIgewogICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4OwogICAgfQoKICAgIC5CcmVhZENydW1iIGxpIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwcHggMnB4IDBweCAycHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzNXB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgfQoKICAgIC5CcmVhZENydW1iIGxpID4gYSwKICAgIC5CcmVhZENydW1iIGxpID4gc3BhbiB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBhZGRpbmc6IDBweCAycHggM3B4IDJweDsKICAgIH0KCiAgICAuQnJlYWRDcnVtYiBsaTpmaXJzdC1jaGlsZCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgfQoKICAgIC5CcmVhZENydW1iIGxpOmZpcnN0LWNoaWxkIGEgaSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAuQnJlYWRDcnVtYiBsaTpmaXJzdC1jaGlsZCBhOmhvdmVyIGkgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLlJUTCAuQnJlYWRDcnVtYiBsaSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAwcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogMzVweDsKICAgIH0KCiAgICAuUlRMIC5CcmVhZENydW1iIGxpOmZpcnN0LWNoaWxkIHsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4OwogICAgfQoKICAgIC5CcmVhZENydW1iIGxpOmZpcnN0LWNoaWxkOmFmdGVyLAogICAgLkJyZWFkQ3J1bWIgbGk6Zmlyc3QtY2hpbGQ6YmVmb3JlIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5CcmVhZENydW1iIGEgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5CcmVhZENydW1iIGE6YWZ0ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgd2lkdGg6IDBweDsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgZWFzZSAwLjNzOwogICAgfQoKICAgIC5CcmVhZENydW1iIGE6aG92ZXI6YWZ0ZXIsCiAgICAuQnJlYWRDcnVtYiBhOmZvY3VzOmFmdGVyLAogICAgLkJyZWFkQ3J1bWIgYTphY3RpdmU6YWZ0ZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIC5CcmVhZENydW1iIGxpOmJlZm9yZSwKICAgIC5CcmVhZENydW1iIGxpOmFmdGVyIHsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGNvbnRlbnQ6ICIgIjsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGJvcmRlci13aWR0aDogMjJweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMjRweDsKICAgIH0KCiAgICAuQnJlYWRDcnVtYiBsaTphZnRlciB7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogI2ZmZjsKICAgIH0KCiAgICAuUlRMIC5CcmVhZENydW1iIGxpOmFmdGVyIHsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZmOwogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgICAgcmlnaHQ6IDBweDsKICAgIH0KCiAgICAuQnJlYWRDcnVtYiBsaTpiZWZvcmUgewogICAgICAgIGxlZnQ6IC01cHg7CiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIzOCwgMjM4LCAyMzgsIDApOwogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICB6LWluZGV4OiAyOwogICAgfQoKICAgIC5SVEwgLkJyZWFkQ3J1bWIgbGk6YmVmb3JlIHsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIHJpZ2h0OiAtNXB4OwogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tY29sQkdMaWdodCk7CiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIFN0YW5kYXJkIFdpZHRocwogICAgICovCiAgICAuVzEwcGMgewogICAgICAgIHdpZHRoOiAxMCU7CiAgICB9CgogICAgLlcyMHBjIHsKICAgICAgICB3aWR0aDogMjAlOwogICAgfQoKICAgIC5XMjVwYyB7CiAgICAgICAgd2lkdGg6IDI1JTsKICAgIH0KCiAgICAuVzMzcGMgewogICAgICAgIHdpZHRoOiAzMyU7CiAgICB9CgogICAgLlc1MHBjIHsKICAgICAgICB3aWR0aDogNTAlOwogICAgfQoKICAgIC5XNjBwYyB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgIH0KCiAgICAuVzcwcGMgewogICAgICAgIHdpZHRoOiA3MCU7CiAgICB9CgogICAgLlc3NXBjIHsKICAgICAgICB3aWR0aDogNzUlOwogICAgfQoKICAgIC5XODBwYyB7CiAgICAgICAgd2lkdGg6IDgwJTsKICAgIH0KCiAgICAuVzkwcGMgewogICAgICAgIHdpZHRoOiA5MCU7CiAgICB9CgogICAgLlc5NXBjIHsKICAgICAgICB3aWR0aDogOTUlOwogICAgfQoKICAgIC5XMTAwcGMgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIC5XNTBweCB7CiAgICAgICAgd2lkdGg6IDUwcHg7CiAgICB9CgogICAgLlc5NTBweCB7CiAgICAgICAgd2lkdGg6IDk1MHB4OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIE1lc3NhZ2VCb3gKICAgICAqLwoKICAgIC5NZXNzYWdlQm94IHsKICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xOb3RpZnlXYXJuKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICAuTWVzc2FnZUJveC5XaXRoSWNvbiB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgfQoKICAgIC5NZXNzYWdlQm94LldpdGhJY29uID4gaSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDEycHg7CiAgICAgICAgdG9wOiAxMnB4OwogICAgfQoKICAgIC5NZXNzYWdlQm94IHAgewogICAgICAgIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4IDE5cHg7CiAgICB9CgogICAgLk1lc3NhZ2VCb3ggcCwKICAgIC5NZXNzYWdlQm94IGEgewogICAgICAgIGNvbG9yOiByZ2JhKDAsMiw2MCwwLjgpOwogICAgfQoKICAgIC5NZXNzYWdlQm94LkluZm8gYSwKICAgIC5NZXNzYWdlQm94LkVycm9yIGEgewogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIGVhc2UgMC4zczsKICAgIH0KCiAgICAuTWVzc2FnZUJveCBhOmhvdmVyLAogICAgLk1lc3NhZ2VCb3ggYTpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAuTWVzc2FnZUJveCBhOmhvdmVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICB9CgogICAgLk1lc3NhZ2VCb3ggPiBwICsgcCB7CiAgICAgICAgbWFyZ2luLXRvcDogMnB4OwogICAgfQoKICAgIC5NZXNzYWdlQm94LkVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xOb3RpZnlFcnIpOwogICAgfQoKICAgIC5NZXNzYWdlQm94LkNvbmZpcm1hdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sTm90aWZ5T0spOwogICAgfQoKICAgIC5NZXNzYWdlQm94IHAgYTphZnRlciB7CiAgICAgICAgY29udGVudDogIlwyMTkyIjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIHRyYW5zaXRpb246IG1hcmdpbiBlYXNlIDAuM3M7CiAgICB9CgogICAgLk1lc3NhZ2VCb3ggcCBhOmhvdmVyOmFmdGVyIHsKICAgICAgICBtYXJnaW4tbGVmdDogNXB4OwogICAgfQoKICAgIC5NZXNzYWdlQm94LkluZm8gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbE5vdGlmeU9LKTsKICAgIH0KCiAgICAuTWVzc2FnZUJveCBhLkJ1dHRvbjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICB9CgogICAgLk1lc3NhZ2VCb3ggYS5CdXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgICBwYWRkaW5nOiAzcHggN3B4OwogICAgfQoKICAgIC5NZXNzYWdlQm94IGEuQnV0dG9uOmhvdmVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICB9CgogICAgLk1lc3NhZ2VCb3guSW5mbyBhLkJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sTWFpbkxpZ2h0KTsKICAgIH0KCiAgICAuTWVzc2FnZUJveC5JbmZvIGEuQnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xNYWluSG92ZXIpOwogICAgfQoKICAgIC5NZXNzYWdlQm94LkluZm8gYS5CdXR0b24gaSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbEhpZ2hsaWdodCk7CiAgICB9CgogICAgZm9ybSAuTWVzc2FnZUJveHsKICAgICAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDBweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBGbGFnCiAgICAgKi8KCiAgICAuRmxhZy5TbWFsbCB7CiAgICAgICAgd2lkdGg6IDE3cHg7CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgbWFyZ2luOiAwcHggYXV0bzsKICAgIH0KCiAgICAuRmxhZyBzcGFuIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIC8qIHNldCBhIGRlZmF1bHQgY29sb3IgZm9yIHByaW9yaXRpZXMgKi8KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0RhcmspOwogICAgfQoKICAgIC5GbGFnIHNwYW4uRXNjYWxhdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbFRleHRFcnIpOwogICAgfQoKICAgIC5GbGFnIHNwYW4uTmV3IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xOb3RpZnlPSyk7CiAgICB9CgogICAgLkZsYWcgc3Bhbi5XYXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xOb3RpZnlXYXJuKTsKICAgIH0KCiAgICAuRmxhZyBzcGFuLlByaW9yaXR5SUQtMSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjojMDNjNGYwOwogICAgfQoKICAgIC5GbGFnIHNwYW4uUHJpb3JpdHlJRC0yIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiM4M2JmYzg7CiAgICB9CgogICAgLkZsYWcgc3Bhbi5Qcmlvcml0eUlELTMgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6I2NkY2RjZDsKICAgIH0KCiAgICAuRmxhZyBzcGFuLlByaW9yaXR5SUQtNCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjojZmZhYWFhOwogICAgfQoKICAgIC5GbGFnIHNwYW4uUHJpb3JpdHlJRC01IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiNlYTI0MDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgIlVucmVhZCIgc3RhcgogICAgICovCiAgICBzcGFuLlVucmVhZEFydGljbGVzLAogICAgZGl2LlVucmVhZEFydGljbGVzIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDZweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwcHggM3B4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgc3Bhbi5VbnJlYWRBcnRpY2xlcyBpLAogICAgZGl2LlVucmVhZEFydGljbGVzIGkgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbEJHTWVkaXVtKTsKICAgIH0KCiAgICBzcGFuLlVucmVhZEFydGljbGVzIGVtLAogICAgZGl2LlVucmVhZEFydGljbGVzIGVtIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIHNwYW4uVW5yZWFkQXJ0aWNsZXMgaTpmaXJzdC1jaGlsZCwKICAgIGRpdi5VbnJlYWRBcnRpY2xlcyBpOmZpcnN0LWNoaWxkIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sQkdEYXJrKSAhaW1wb3J0YW50OwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIGxlZnQ6IC0xcHg7CiAgICAgICAgdG9wOiAtMXB4OwogICAgfQoKICAgIHNwYW4uVW5yZWFkQXJ0aWNsZXMuUmVtYXJrYWJsZSBpLAogICAgZGl2LlVucmVhZEFydGljbGVzLlJlbWFya2FibGUgaSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbE1haW5MaWdodCk7CiAgICB9CgogICAgc3Bhbi5VbnJlYWRBcnRpY2xlcy5PcmRpbmFyeSwKICAgIGRpdi5VbnJlYWRBcnRpY2xlcy5PcmRpbmFyeSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgdGJvZHkgdHI6aG92ZXIgc3Bhbi5VbnJlYWRBcnRpY2xlcyBpIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sTm90aWZ5T0spOwogICAgfQoKICAgIHNwYW4uSW1wb3J0YW50QXJ0aWNsZXMgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgbWFyZ2luOiAtMnB4IDBweCAwcHggMjNweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dEVycik7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgfQoKICAgIHNwYW4uSW1wb3J0YW50QXJ0aWNsZXMgZW0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgc3Bhbi5JbXBvcnRhbnRBcnRpY2xlcyBpIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dEVycik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgQ2hhcnRzCiAgICAgKi8KICAgIC5DaGFydCB7CiAgICAgICAgd2lkdGg6IDI0MHB4OwogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICB9CgogICAgI0NoYXJ0VG9vbHRpcCB7CiAgICAgICAgcGFkZGluZzogMnB4IDhweCAzcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgRGF0ZXBpY2tlcgogICAgICovCiAgICAuRGF0ZXBpY2tlckljb24gewogICAgICAgIG1hcmdpbjogMXB4IDAgMCA0cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLkRhdGVwaWNrZXJJY29uLkRpc2FibGVkTGluayB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICB9CgogICAgLlJUTCAuRGF0ZXBpY2tlckljb24gewogICAgICAgIG1hcmdpbjogMCA0cHggMCAwOwogICAgfQoKICAgIC8qIFZhY2F0aW9uIERheXMgKi8KICAgIHRkLkhpZ2hsaWdodCBhLnVpLXN0YXRlLWRlZmF1bHQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEhpZ2hsaWdodCk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sSGlnaGxpZ2h0KSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIFRvZGF5ICovCiAgICAudWktZGF0ZXBpY2tlci1jdXJyZW50LWRheSB7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tY29sQkdNZWRpdW0pICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLypXZWVrZW5kKi8KICAgIC51aS1kYXRlcGlja2VyLXdlZWstZW5kIHsKICAgIH0KCiAgICAjdWktZGF0ZXBpY2tlci1kaXYgewogICAgICAgIC8qCiAgICAgICAgICogei1pbmRleCBmb3IgYXV0b2NvbXBsZXRlIGRyb3Bkb3ducyBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgei1pbmRleCBmb3IgbW9kZXJuaXplZCBzZWxlY3QgZHJvcGRvd25zCiAgICAgICAgICogY29tcGFyZSBDb3JlLklucHV0RmllbGRzLmNzcyBsaW5lIDMwNQogICAgICAgICAqIGltcG9ydGFudCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBpdCB3b3VsZCBvdGhlcndpc2UgYmUgb3ZlcndyaXR0ZW4gYnkganF1ZXJ5LXVpIGNzcwogICAgICAgICAqICovCiAgICAgICAgei1pbmRleDogNjEwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIEF1dG9jb21wbGV0aW9uCiAgICAgKi8KCiAgICAudWktYXV0b2NvbXBsZXRlIHsKICAgICAgICAvKgogICAgICAgICAqIHotaW5kZXggZm9yIGF1dG9jb21wbGV0ZSBkcm9wZG93bnMgaGFzIHRoZSBzYW1lIHZhbHVlIGFzIHotaW5kZXggZm9yIG1vZGVybml6ZWQgc2VsZWN0IGRyb3Bkb3ducwogICAgICAgICAqIGNvbXBhcmUgQ29yZS5JbnB1dEZpZWxkcy5jc3MgbGluZSAzMDUKICAgICAgICAgKiBpbXBvcnRhbnQgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaXQgd291bGQgb3RoZXJ3aXNlIGJlIG92ZXJ3cml0dGVuIGJ5IGpxdWVyeS11aSBjc3MKICAgICAgICAgKiAqLwogICAgICAgIHotaW5kZXg6IDYxMDAgIWltcG9ydGFudDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB9CgogICAgLnVpLWF1dG9jb21wbGV0ZSAudWktbWVudS1pdGVtIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICB9CgogICAgLnVpLW92ZXJsYXktYXV0b2NvbXBsZXRlIHsKICAgICAgICB6LWluZGV4OiA2MTAwICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLnVpLWF1dG9jb21wbGV0ZSAudWktbWVudS1pdGVtLXdyYXBwZXIudWktc3RhdGUtYWN0aXZlIHsKICAgICAgICBib3JkZXI6IDBweDsKICAgICAgICBtYXJnaW46IDBweDsKICAgIH0KCiAgICAudWktbWVudS1pdGVtOmhvdmVyLAogICAgLnVpLW1lbnUtaXRlbTpmb2N1cywKICAgIC51aS1tZW51LWl0ZW06YWN0aXZlLAogICAgLnVpLWF1dG9jb21wbGV0ZSAudWktbWVudS1pdGVtLXdyYXBwZXIudWktc3RhdGUtYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0xpZ2h0TWVkaXVtKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBJY29ucwogICAgICovCiAgICAuSWNvbklubGluZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgfQoKICAgIC5JY29uUmVhZHkgewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL2ljb25zL3RpY2sucG5nKTsKICAgIH0KCiAgICAuSWNvbk5vdFJlYWR5IHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9pY29ucy9jcm9zcy5wbmcpOwogICAgfQoKICAgIC5JY29uTm90UmVhZHlHcmV5IHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9pY29ucy9jcm9zc19zdy5wbmcpOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIERpYWxvZyBwb3B1cCB3aWR0aAogICAgICovCiAgICBpZnJhbWUuVGV4dE9wdGlvbiB7CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICB9CgogICAgaWZyYW1lLlRleHRPcHRpb24uQ3VzdG9tZXIgewogICAgICAgIHdpZHRoOiA4MDBweDsKICAgIH0KCiAgICBpZnJhbWUuVGV4dE9wdGlvbi5DdXN0b21lclVzZXJBZGRyZXNzQm9vayB7CiAgICAgICAgd2lkdGg6IDk2MHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDY1dmg7CiAgICAgICAgbWF4LWhlaWdodDogODB2aDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uIGdsb2JhbCBzZWFyY2gKICAgICAqLwogICAgI1NlYXJjaEZvcm0sCiAgICAjQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyU2VhcmNoRm9ybSwgI0FnZW50Q3VzdG9tZXJVc2VySW5mb3JtYXRpb25DZW50ZXJTZWFyY2hGb3JtLAogICAgI0FnZW50VGlja2V0Q3VzdG9tZXJJRFNlbGVjdGlvbiB7CiAgICAgICAgd2lkdGg6IDc2MHB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgICB9CgogICAgI1NlYXJjaEZvcm0gI1NlYXJjaFByb2ZpbGUsCiAgICAjQWdlbnRDdXN0b21lckluZm9ybWF0aW9uQ2VudGVyU2VhcmNoRm9ybSAjU2VhcmNoUHJvZmlsZSB7CiAgICAgICAgbWF4LXdpZHRoOiAzNTBweDsKICAgIH0KCiAgICAjQXJ0aWNsZUZpbHRlckRpYWxvZ0Zvcm0gewogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgIH0KCiAgICAjQ29udGV4dFNldHRpbmdzRGlhbG9nIHsKICAgICAgICB3aWR0aDogNDUwcHg7CiAgICAgICAgbWF4LWhlaWdodDogMTAwcHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiBnbG9iYWwgbWVzc2FnZSBmb3JtYXQKICAgICAqLwogICAgLkFydGljbGVCb2R5IHsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLGZpeGVkOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xFbGVtZW50KTsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDcwcHg7CiAgICB9CgogICAgLkFydGljbGVIVE1MIHsKICAgICAgICBwYWRkaW5nOiAycHggNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xFbGVtZW50KTsKICAgICAgICBtaW4taGVpZ2h0OiA3MHB4OwogICAgfQoKICAgIC5BcnRpY2xlTWFpbENvbnRlbnQgLkFydGljbGVIVE1MIHsKICAgICAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIENoYXQKICAgICAqLwoKICAgIC5BcnRpY2xlQ2hhdCAuTmFtZSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIH0KCiAgICAuQXJ0aWNsZUNoYXQgLlRpbWUgewogICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgfQoKICAgIC5BcnRpY2xlQ2hhdCAuU3lzdGVtR2VuZXJhdGVkIC5OYW1lIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5BcnRpY2xlQ2hhdCAuU3lzdGVtR2VuZXJhdGVkIC5UZXh0IHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICB9CgogICAgLkFydGljbGVDaGF0IC5Pd24gLk5hbWUgewogICAgICAgIGNvbG9yOiByZWQ7CiAgICB9CgogICAgLkFydGljbGVDaGF0ID4gZGl2IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZTsKICAgIH0KCiAgICAuQXJ0aWNsZUNoYXQgPiBkaXYgPiBkaXYgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKICAgIH0KCiAgICAuQXJ0aWNsZUNoYXQgPiBkaXYgPiBkaXYgPiBzcGFuIHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogICAgfQoKICAgICNDaGF0U3RhcnREaWFsb2cgewogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgI0NoYXRTdGFydERpYWxvZyBmb3JtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgfQoKICAgICNDaGF0U3RhcnREaWFsb2cgZm9ybSB0ZXh0YXJlYSB7CiAgICAgICAgd2lkdGg6IDM4MHB4OwogICAgICAgIGhlaWdodDogMzBweDsKICAgICAgICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgfQoKICAgICNDaGF0U3RhcnREaWFsb2cgZm9ybSAuUHJpbWFyeSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAyMHB4OwogICAgICAgIHRvcDogMTFweDsKICAgIH0KCiAgICAjQ2hhdFN0YXJ0RGlhbG9nIGZvcm0gLlByaW1hcnkgc3BhbiB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgfQoKICAgICNDaGF0U3RhcnREaWFsb2cgZm9ybSAuUHJpbWFyeTpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLkNoYXRQcm90b2NvbCB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiAxNTBweDsKICAgICAgICB3aWR0aDogNjE3cHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiBnbG9iYWwgalF1ZXJ5IFVJIG9wdGltaXphdGlvbnMKICAgICAqLwogICAgLyoKICAgICogQnVnICM4Mjg4OiBBdXRvY29tcGxldGUgc2VhcmNoIHJlc3VsdHMgc2hvdyB1cCBpbiBUaW1lcyBmb250IHdoZW4gdXNpbmcgSW50ZXJuZXQgRXhwbG9yZXIKICAgICovCiAgICAudWktbWVudS1pdGVtIHsKICAgICAgICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgIH0KCiAgICAudWktbWVudSAudWktbWVudS1pdGVtIGEgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICBib3JkZXI6IDBweDsKICAgICAgICB0ZXh0LXdyYXA6IG5vd3JhcDsKICAgIH0KCiAgICAudWktY29ybmVyLWFsbCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMHB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLnVpLXdpZGdldC1oZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pIWltcG9ydGFudDsKICAgICAgICBib3JkZXI6IDBweCAhaW1wb3J0YW50OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWwgIWltcG9ydGFudDsKICAgIH0KCiAgICAudWktc3RhdGUtZGVmYXVsdCwKICAgIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGVmYXVsdCwKICAgIC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kZWZhdWx0IHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0xpZ2h0KSAhaW1wb3J0YW50OwogICAgfQoKICAgIC51aS1zdGF0ZS1ob3ZlciwKICAgIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaG92ZXIsCiAgICAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsCiAgICAudWktc3RhdGUtZm9jdXMsCiAgICAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWZvY3VzLAogICAgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3VzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR01lZGl1bURhcmspICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiBDS0VkaXRvclJlc2l6ZUhhbmRsZQogICAgICovCgogICAgLlJpY2hUZXh0RmllbGQgLnVpLXJlc2l6YWJsZS1zIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgd2lkdGg6IDMwcHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWFyZ2luLXRvcDogLTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBjdXJzb3I6IHMtcmVzaXplOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CgogICAgICAgIGkgewogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgICAgICBtYXJnaW4tdG9wOiAtMnB4OwogICAgICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBmb250LXNpemU6IDlweDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBlbmQgQHN1YnNlY3Rpb24gQ0tFZGl0b3JSZXNpemVIYW5kbGUKICAgICAqLwoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gZ2xvYmFsIG52ZDMgaW1wcm92ZW1lbnRzL2ZpeGVzCiAgICAgKi8KCiAgICAubnZ0b29sdGlwIHsKICAgICAgICBmb250LXNpemU6IDExcHggIWltcG9ydGFudDsKICAgICAgICBib3JkZXI6IDBweCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qCiAgICAgKiBAc3Vic2VjdGlvbiBQb3B1cC1JZnJhbWUgKGZvciByZXNwb25zaXZlKQogICAgICovCiAgICBpZnJhbWUuUG9wdXBJZnJhbWUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgei1pbmRleDogOTk5OTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBGbG9hdGVycwogICAgICovCgogICAgYm9keSA+IGRpdi5NZXRhRmxvYXRlciB7CiAgICAgICAgd2lkdGg6IDYwMHB4OwogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sRWxlbWVudCk7CiAgICAgICAgYm94LXNoYWRvdzogMnB4IDFweCAzcHggdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICB6LWluZGV4OiA5OTk7CiAgICAgICAgbWFyZ2luLXRvcDogLTVweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0xpZ2h0TWVkaXVtKTsKICAgICAgICBib3JkZXItdG9wOiAzMHB4IHNvbGlkIHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgfQoKICAgIGJvZHkgPiBkaXYuTWV0YUZsb2F0ZXI6YWZ0ZXIsCiAgICBib2R5ID4gZGl2Lk1ldGFGbG9hdGVyOmJlZm9yZSB7CiAgICAgICAgYm90dG9tOiAzOTlweDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBjb250ZW50OiAiICI7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICBib2R5ID4gZGl2Lk1ldGFGbG9hdGVyLkxlZnQ6YWZ0ZXIsCiAgICBib2R5ID4gZGl2Lk1ldGFGbG9hdGVyLkxlZnQ6YmVmb3JlIHsKICAgICAgICBsZWZ0OiAxNXB4OwogICAgICAgIG1hcmdpbi10b3A6IC0xcHg7CiAgICB9CgogICAgYm9keSA+IGRpdi5NZXRhRmxvYXRlci5SaWdodDphZnRlciwKICAgIGJvZHkgPiBkaXYuTWV0YUZsb2F0ZXIuUmlnaHQ6YmVmb3JlIHsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIHJpZ2h0OiAxNXB4OwogICAgfQoKICAgIGJvZHkgPiBkaXYuTWV0YUZsb2F0ZXIuQm90dG9tOmFmdGVyLAogICAgYm9keSA+IGRpdi5NZXRhRmxvYXRlci5Cb3R0b206YmVmb3JlIHsKICAgICAgICBib3R0b206IGF1dG87CiAgICAgICAgdG9wOiAxMDAlOwogICAgfQoKICAgIGJvZHkgPiBkaXYuTWV0YUZsb2F0ZXI6YWZ0ZXIgewogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgICAgIGJvcmRlci13aWR0aDogMTVweDsKICAgICAgICBtYXJnaW4tbGVmdDogLTE1cHg7CiAgICB9CgogICAgYm9keSA+IGRpdi5NZXRhRmxvYXRlci5Cb3R0b206YWZ0ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAjZmZmOwogICAgfQoKICAgIGJvZHkgPiBkaXYuTWV0YUZsb2F0ZXI6YmVmb3JlIHsKICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTcwLCAxNzAsIDE3MCwgMCk7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBib3JkZXItd2lkdGg6IDE2cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xNnB4OwogICAgfQoKICAgIGJvZHkgPiBkaXYuTWV0YUZsb2F0ZXIuQm90dG9tOmJlZm9yZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE3MCwgMTcwLCAxNzAsIDApOwogICAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgYm9keSA+IGRpdi5NZXRhRmxvYXRlciA+IGkuZmEtc3BpbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMHB4OwogICAgICAgIG1hcmdpbi10b3A6IC0xMHB4OwogICAgfQoKICAgIGJvZHkgPiBkaXYuTWV0YUZsb2F0ZXIgPiBkaXYuQ29udGVudCA+IGlmcmFtZSB7CiAgICAgICAgaGVpZ2h0OiAyMDAlOwogICAgICAgIGxlZnQ6IC01MCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogLTUwJTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNSk7CiAgICAgICAgd2lkdGg6IDIwMCU7CiAgICB9CgogICAgYm9keSA+IGRpdi5NZXRhRmxvYXRlciA+IGRpdi5Db250ZW50ID4gaWZyYW1lLk5vU2NhbGUgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIGJvZHkgPiBkaXYuTWV0YUZsb2F0ZXIgPiBhIHsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogLTMwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IDMwcHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgfQoKICAgIGJvZHkgPiBkaXYuTWV0YUZsb2F0ZXIgPiBkaXYuQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICBib2R5ID4gZGl2Lk1ldGFGbG9hdGVyID4gZGl2Lk5vUHJldmlldyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBtYXJnaW46IDIzJSBhdXRvOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxNTAlOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgfQoKICAgIGJvZHkgPiBkaXYuTWV0YUZsb2F0ZXIgPiBkaXYuTm9QcmV2aWV3IGkgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgfQoKICAgIGJvZHkgPiBkaXYuTWV0YUZsb2F0ZXIgPiBhLlNjYWxlIHsKICAgICAgICBsZWZ0OiAwcHg7CiAgICB9CgogICAgYm9keSA+IGRpdi5NZXRhRmxvYXRlciA+IGEuT3BlbiB7CiAgICAgICAgbGVmdDogMjVweDsKICAgIH0KCiAgICBib2R5ID4gZGl2Lk1ldGFGbG9hdGVyID4gYS5DbG9zZSB7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uIENvZGVNaXJyb3IgKENLRWRpdG9yIDUgUGFja2FnZSkKICAgICAqLwoKICAgIC5DTVRvb2xiYXJDb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgICBoZWlnaHQ6IDM1cHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdMaWdodCk7CiAgICB9CgogICAgLkNNVG9vbGJhckljb25zIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogdGFibGU7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKICAgICAgICBib3JkZXItc3BhY2luZzogOHB4OwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdMaWdodCk7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgfQoKICAgIC5DTVRvb2xiYXJJY29ucyBkaXYgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICAgICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOwogICAgfQoKICAgIC5DTVRvb2xiYXJJY29ucyBkaXY6aG92ZXIgewogICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCByZWQ7CiAgICB9CgogICAgLkNNSW5kZW50IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9pY29ucy9DTS1JbmRlbnQucG5nKTsKICAgIH0KCiAgICAuQ01Db21tZW50IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9pY29ucy9DTS1Db21tZW50LnBuZyk7CiAgICB9CgogICAgLkNNU2VhcmNoIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9pY29ucy9DTS1TZWFyY2gucG5nKTsKICAgIH0KCiAgICAuQ01TZWFyY2hSZXBsYWNlIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9pY29ucy9DTS1TZWFyY2hSZXBsYWNlLnBuZyk7CiAgICB9CgogICAgLkNNU2VsZWN0QWxsIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZy9pY29ucy9DTS1TZWxlY3RBbGwucG5nKTsKICAgIH0KCiAgICAuQ01NYXhpbWl6ZSB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWcvaWNvbnMvQ00tTWF4aW1pemUucG5nKTsKICAgIH0KCiAgICAvKioKICAgICAqIGVuZCBAc3Vic2VjdGlvbiBDb2RlTWlycm9yIChDS0VkaXRvciA1IFBhY2thZ2UpCiAgICAgKi8KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uIEFKQVggTG9hZGVyCiAgICAgKi8KCiAgICAuQUpBWExvYWRlciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICBtYXJnaW46IDRweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKICAgIH0KCiAgICAuQUpBWExvYWRlcjphZnRlciwKICAgICNDYW52YXMgLkFjdGl2aXR5IC5Mb2FkZXI6YWZ0ZXIsCiAgICAuTG9hZGluZyA+IC5IZWFkZXIgaDI6YWZ0ZXIsCiAgICAuT3ZlcnZpZXdDb250cm9sLkxvYWRpbmcgLkNvbnRyb2xSb3c6YWZ0ZXIgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBmYS1zcGluIDJzIGluZmluaXRlIGxpbmVhcjsKICAgICAgICBhbmltYXRpb246IGZhLXNwaW4gMnMgaW5maW5pdGUgbGluZWFyOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgICAgIGNvbnRlbnQ6ICJcZjFjZSI7CiAgICAgICAgZm9udC1mYW1pbHk6IEZvbnRBd2Vzb21lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgIH0KCiAgICB9CgogICAgLyoKICAgICAqIEBzdWJzZWN0aW9uIE1lZGlhIFF1ZXJ5IFJlc2V0LUNTUyAoZm9yIGRlc2t0b3Agc2NyZWVuIHJlc29sdXRpb25zKQogICAgICovCiAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkgewoKICAgICAgICAvKgogICAgICAgICAqIEBzdWJzZWN0aW9uIFJlc3BvbnNpdmUgY2xhc3NlcwogICAgICAgICAqLwogICAgICAgIC5TY3JlZW5YTCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICAuU21hbGxlck9yRXF1YWxTY3JlZW5YTCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICAuU2NyZWVuTCwgLlNjcmVlbk0sIC5TY3JlZW5TLCAuU2NyZWVuWFMsCiAgICAgICAgLlNtYWxsZXJPckVxdWFsU2NyZWVuTCwgLlNtYWxsZXJPckVxdWFsU2NyZWVuTSwKICAgICAgICAuU21hbGxlck9yRXF1YWxTY3JlZW5TLCAuU21hbGxlck9yRXF1YWxTY3JlZW5YUyB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIC8qCiAgICAgICAgICogQHN1YnNlY3Rpb24gUmVzcG9uc2l2ZSBmb290ZXIgY2xhc3NlcwogICAgICAgICAqIEBkZXNjcmlwdGlvbiBVc2VkIHRvIGRldGVybWluZXRoZSBhY3RpdmUgc2NyZWVuIHNpemUgaW4gSmF2YVNjcmlwdAogICAgICAgICAqLwogICAgICAgICNSZXNwb25zaXZlRm9vdGVyIC5WaXNpYmxlLVNjcmVlblhMIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgICNSZXNwb25zaXZlRm9vdGVyIC5WaXNpYmxlLVNjcmVlbkwsCiAgICAgICAgI1Jlc3BvbnNpdmVGb290ZXIgLlZpc2libGUtU2NyZWVuTSwKICAgICAgICAjUmVzcG9uc2l2ZUZvb3RlciAuVmlzaWJsZS1TY3JlZW5TLAogICAgICAgICNSZXNwb25zaXZlRm9vdGVyIC5WaXNpYmxlLVNjcmVlblhTIHsKICAgICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgLlJlc3BvbnNpdmVIYW5kbGUgewogICAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICAuRXJyb3JCb3gsIC5TdWNjZXNzQm94IHsKICAgICAgICAgICAgbWFyZ2luOiAwcHggMHB4IDIwcHggMHB4OwogICAgICAgICAgICBsaW5lLWhlaWdodDogMTUwJTsKICAgICAgICB9CgogICAgICAgIC8qIEZpbHRlcnMgKi8KCiAgICAgICAgLlRhYmxlRmlsdGVyQ29udGFpbmVyIHsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH0KCiAgICAgICAgLlRhYmxlRmlsdGVyQ29udGFpbmVyIC5GaWx0ZXJSZW1vdmUgewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHJpZ2h0OiA2cHg7CiAgICAgICAgICAgIHRvcDogNTAlOwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IC02cHg7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciBlYXNlIDAuM3M7CiAgICAgICAgfQoKICAgICAgICAuVGFibGVGaWx0ZXJDb250YWluZXIgLkZpbHRlclJlbW92ZTpmb2N1cywKICAgICAgICAuVGFibGVGaWx0ZXJDb250YWluZXIgLkZpbHRlclJlbW92ZTpob3ZlciwKICAgICAgICAuVGFibGVGaWx0ZXJDb250YWluZXIgLkZpbHRlclJlbW92ZTphY3RpdmUgewogICAgICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIH0KCiAgICAgICAgLlRhYmxlRmlsdGVyQ29udGFpbmVyIGlucHV0LAogICAgICAgIC5UYWJsZUZpbHRlckNvbnRhaW5lciBpbnB1dC5GaWx0ZXJCb3ggewogICAgICAgICAgICBwYWRkaW5nOiA3cHggIWltcG9ydGFudDsKICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgfQoKICAgICAgICAuZmEgewogICAgICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIH0KICAgIH0KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIERpYWxvZ3MKICovCgpAbWVkaWEgc2NyZWVuLCBwcmludCB7CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgT3ZlcmxheQogICAgICovCiAgICAjT3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHkgPSA1MCk7CiAgICAgICAgei1pbmRleDogMzUwMDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBEaWFsb2cKICAgICAqLwogICAgLkRpYWxvZyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHotaW5kZXg6IDYwMDA7CiAgICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIGJvcmRlcjogMTBweCBzb2xpZCB3aGl0ZTsKICAgIH0KCiAgICAuRGlhbG9nLk1vZGFsLkFsZXJ0IHsKICAgICAgICB6LWluZGV4OiA2NTAwOwogICAgfQoKICAgIC5EaWFsb2cuRnVsbHNpemUgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBsZWZ0OiAwcHggIWltcG9ydGFudDsKICAgIH0KCiAgICAuRGlhbG9nID4gLkhlYWRlciB7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDI1cHg7CiAgICB9CgogICAgLkRpYWxvZyA+IC5IZWFkZXIgLkNsb3NlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgIHJpZ2h0OiA4cHg7CiAgICAgICAgdG9wOiA3cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAuUlRMIC5EaWFsb2cgPiAuSGVhZGVyIC5DbG9zZSB7CiAgICAgICAgcmlnaHQ6IGF1dG87CiAgICAgICAgbGVmdDogOHB4OwogICAgfQoKICAgIC5EaWFsb2cgPiAuSGVhZGVyIGgxIHsKICAgICAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgfQoKICAgIC5EaWFsb2cgPiAuQ29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIH0KCiAgICAuRGlhbG9nID4gLkNvbnRlbnQgPiAuSW5uZXJDb250ZW50IHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDI1cHggMTBweCAxMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEVsZW1lbnQpOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgI0FnZW50U3BsaXRTZWxlY3Rpb24gewogICAgICAgIG1pbi13aWR0aDogMzMwcHg7CiAgICB9CgogICAgI1RpbWVMaW5lT3ZlcmZsb3cgewogICAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgICAgICBtYXgtaGVpZ2h0OiAxMTczcHg7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgIH0KCiAgICAuUlRMIC5EaWFsb2cgPiAuQ29udGVudCA+IC5Jbm5lckNvbnRlbnQgewogICAgICAgIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4IDI1cHg7CiAgICB9CgogICAgLkRpYWxvZyA+IC5Db250ZW50ID4gLkNvbnRlbnRGb290ZXIgewogICAgICAgIHBhZGRpbmc6IDZweCAwIDVweDsKICAgICAgICBtaW4taGVpZ2h0OiAyMHB4OwogICAgfQoKICAgIC5EaWFsb2cgPiAuRm9vdGVyIHsKICAgICAgICBwYWRkaW5nOiA2cHggMCA1cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5EaWFsb2cgPiAuRm9vdGVyLkNvbnRlbnRGb290ZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBzdWJzZWN0aW9uICAgICAgIEFsZXJ0CiAgICAgKi8KCiAgICAuRGlhbG9nLkFsZXJ0IC5Jbm5lckNvbnRlbnQgLmZhIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDI1cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RXJyKTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgfQoKICAgIC5EaWFsb2cuQWxlcnQgaDIsCiAgICAuRGlhbG9nLkFsZXJ0IHAgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAuRGlhbG9nLkFsZXJ0IHsKICAgICAgICB3aWR0aDogNDUwcHg7CiAgICAgICAgdG9wOiAxMDBweDsKICAgICAgICBsZWZ0OiAzMDBweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uIER5bmFtaWMgRmllbGQgUmljaFRleHQgSWZyYW1lCiAgICAgKi8KICAgIC5PdmVybGF5RHluYW1pY0ZpZWxkUmljaFRleHRpRnJhbWUgewogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgICAgd2lkdGg6IDgwMHB4OwogICAgfQoKICAgIC8qKgogICAgICogc3Vic2VjdGlvbiAgIFNldHRpbmdzCiAgICAgKi8KCiAgICAuRGlhbG9nIGZpZWxkc2V0IHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgfQoKICAgIC5EaWFsb2cgLldpZGdldFNldHRpbmdzRm9ybSBmaWVsZHNldCwKICAgIC5EaWFsb2cgZmllbGRzZXQuTm9NYXJnaW4gewogICAgICAgIG1hcmdpbi1ib3R0b206IDBweDsKICAgIH0KCiAgICAuRGlhbG9nIC5GaWVsZC5MYXlvdXRHcmlkIHsKICAgICAgICBwYWRkaW5nLXRvcDogN3B4OwogICAgfQoKICAgIC5EaWFsb2cgLkZpZWxkLkxheW91dEdyaWQgLlRhYmxlbGlrZSB7CiAgICAgICAgd2lkdGg6IDk4JTsKICAgIH0KCiAgICAuRGlhbG9nIC5GaWVsZCAuRm9jdXNGaWVsZCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IC05OTk5cHg7CiAgICAgICAgei1pbmRleDogLTE7CiAgICB9CgogICAgLkRpYWxvZyAuQnV0dG9ucyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdNZWRpdW1EYXJrKTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBtYXJnaW46IDE1cHggLThweCAtOHB4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMTBweCA5cHggMTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLkRpYWxvZyAuRmllbGQuTGF5b3V0R3JpZCAuQWxsb2NhdGlvbkxpc3QgewogICAgICAgIG1heC1oZWlnaHQ6IDE5MnB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgfQoKICAgIC5GaWVsZC5MYXlvdXRHcmlkIC5BbGxvY2F0aW9uTGlzdC5BdmFpbGFibGVGaWVsZHMgewogICAgICAgIG1heC1oZWlnaHQ6IDE1NXB4OwogICAgfQoKICAgIC5EaWFsb2cgLkZpZWxkLkxheW91dEdyaWQgLkFsbG9jYXRpb25MaXN0Lk9yZGVyTnVtYmVycyB7CiAgICAgICAgbGlzdC1zdHlsZTogZGVjaW1hbCBpbnNpZGU7CiAgICB9CgogICAgLkZpbHRlcklucHV0Q29udGFpbmVyIHsKICAgICAgICB3aWR0aDogOTglOwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgfQoKICAgIC5GaWx0ZXJJbnB1dENvbnRhaW5lciBpbnB1dCB7CiAgICAgICAgd2lkdGg6IDk1JTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDdweCBhdXRvOwogICAgfQoKICAgICNDb250ZXh0U2V0dGluZ3NEaWFsb2dPdmVydmlld1NtYWxsIHsKICAgICAgICB3aWR0aDogOTUwcHg7CiAgICAgICAgbWF4LWhlaWdodDogNjAwcHg7CiAgICB9CgogICAgLyogUHVyZSBjb250aW51b3VzIHRleHQgZGlhbG9ncyAqLwoKICAgIC5UZXh0RGlhbG9nIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxNTAlOwogICAgICAgIHdpZHRoOiA1NTBweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWF4LWhlaWdodDogNDUwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICB9CgogICAgLlRleHREaWFsb2cgcCwKICAgIC5UZXh0RGlhbG9nIGxpLAogICAgLlRleHREaWFsb2cgYSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgfQoKICAgIC5UZXh0RGlhbG9nIHVsIHsKICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTsKICAgICAgICBtYXJnaW46IDBweCAwcHggN3B4IDIwcHg7CiAgICB9CgogICAgLlRleHREaWFsb2cgdWwgbGkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTMwJTsKICAgIH0KCiAgICAuVGV4dERpYWxvZyBoMSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIG1hcmdpbi10b3A6IDdweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICB9CgogICAgLlRleHREaWFsb2cgPiBwIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICB9CgogICAgLyogRWxhc3RpY3NlYXJjaCBRdWlja1Jlc3VsdHMgKi8KCiAgICAjRWxhc3RpY3NlYXJjaFF1aWNrUmVzdWx0IHRkIHsKICAgICAgICBtYXgtd2lkdGg6IDQwMHB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIH0KCiAgICAjRWxhc3RpY3NlYXJjaFF1aWNrUmVzdWx0IGgzIHsKICAgICAgICBwYWRkaW5nOiA4cHggMHB4IDRweCAyMHB4OwogICAgICAgIG1hcmdpbjogMHB4OwogICAgfQoKICAgIC8qIEVycm9yIHNjcmVlbnMgaW4gb3ZlcmxheXMgKi8KCiAgICAuRGlhbG9nLk1vZGFsICNBcHBXcmFwcGVyID4gI0hlYWRlciwKICAgIC5EaWFsb2cuTW9kYWwgLkVycm9yU2NyZWVuIH4gI0Zvb3RlciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuRGlhbG9nLk1vZGFsIC5FcnJvclNjcmVlbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMHB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLkRpYWxvZy5Nb2RhbCAuRXJyb3JTY3JlZW4gLkNlbnRlckJveCB7CiAgICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICAgIH0KCiAgICAuRGlhbG9nLk1vZGFsIC5FcnJvclNjcmVlbiAuV2lkZ2V0U2ltcGxlIC5Db250ZW50IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgIH0KCn0gLyogZW5kIEBtZWRpYSAqLwoKCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIEZvb3RlcgogKi8KCkBtZWRpYSBzY3JlZW4sIHByaW50IHsKCiAgICAjRm9vdGVyIHsKICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgICAgbWluLWhlaWdodDogMTVweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDlweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgI0Zvb3RlciBhLAogICAgI0Zvb3RlciB1bCBsaSBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICAjRm9vdGVyIGE6aG92ZXIsCiAgICAjRm9vdGVyIHVsIGxpIGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgfQoKICAgICNGb290ZXIgdWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgbGVmdDogMjEycHg7CiAgICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CgogICAgLlJUTCAjRm9vdGVyIHVsIHsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIHJpZ2h0OiAyMTJweDsKICAgIH0KCiAgICAjRm9vdGVyIHVsIGxpIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBwYWRkaW5nOiAwIDRweCAwIDRweDsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLlJUTCAjRm9vdGVyIHVsIGxpIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICAjRm9vdGVyIHVsIGxpOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICB9Cgp9IC8qIGVuZCBAbWVkaWEgKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIEZvcm1zCiAqLwoKQG1lZGlhIHNjcmVlbiwgcHJpbnQgewoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIElucHV0IGZvY3VzCiAgICAgKiBAbm90ZSAgICAgICAgRG9lcyBub3Qgd29yayBpbiBJRTYsIG9ubHkgcGFydGlhbGx5IGluIElFNyAobm8gZm9jdXMpCiAgICAgKi8KCiAgICBpbnB1dFt0eXBlPXRleHRdLAogICAgaW5wdXRbdHlwZT1wYXNzd29yZF0sCiAgICBpbnB1dFt0eXBlPWVtYWlsXSwKICAgIHRleHRhcmVhLAogICAgc2VsZWN0W211bHRpcGxlPW11bHRpcGxlXSB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICAvKiBPcGVyYSAxMC41IGhhcyBwZXIgZGVmYXVsdCBhIGdyZXkgYmFja2dyb3VuZCAqLwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkY7CiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDNweCB2YXIoLS1jb2xCR0xpZ2h0KSwgaW5zZXQgLTFweCAtMXB4IDNweCB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDNweCB2YXIoLS1jb2xCR0xpZ2h0KSwgaW5zZXQgLTFweCAtMXB4IDNweCB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgIH0KCiAgICBzZWxlY3RbbXVsdGlwbGU9bXVsdGlwbGVdIHsKICAgICAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDNweCAjZWVlLCBpbnNldCAtMXB4IC0xcHggM3B4ICNlZWU7CiAgICB9CgogICAgLkRhdGFUYWJsZSBzZWxlY3RbbXVsdGlwbGU9bXVsdGlwbGVdIHsKICAgICAgICBtaW4td2lkdGg6IDBweDsKICAgIH0KCiAgICBzZWxlY3RbbXVsdGlwbGU9bXVsdGlwbGVdIG9wdGlvbiB7CiAgICAgICAgcGFkZGluZzogMnB4OwogICAgfQoKICAgIHNlbGVjdFttdWx0aXBsZT1tdWx0aXBsZV0gb3B0aW9uOm50aC1jaGlsZChvZGQpIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgIH0KCiAgICBpbnB1dCNTdWJqZWN0IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgfQoKICAgIGlucHV0W3R5cGU9dGV4dF0sCiAgICBpbnB1dFt0eXBlPXBhc3N3b3JkXSwKICAgIGlucHV0W3R5cGU9ZW1haWxdLAogICAgdGV4dGFyZWEgewogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICBpbnB1dFt0eXBlPXRleHRdOmZvY3VzLAogICAgaW5wdXRbdHlwZT1wYXNzd29yZF06Zm9jdXMsCiAgICBpbnB1dFt0eXBlPWVtYWlsXTpmb2N1cywKICAgIHRleHRhcmVhOmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgb3V0bGluZTogMDsKICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgIH0KCiAgICA6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgeyAvKiBXZWJLaXQsIEJsaW5rLCBFZGdlICovCiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIGVhc2UgMC4zczsKICAgIH0KCiAgICA6LW1vei1wbGFjZWhvbGRlciB7IC8qIE1vemlsbGEgRmlyZWZveCA0IHRvIDE4ICovCiAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICAgICB0cmFuc2l0aW9uOiBjb2xvciBlYXNlIDAuM3M7CiAgICAgICBvcGFjaXR5OiAxOwogICAgfQoKICAgIDo6LW1vei1wbGFjZWhvbGRlciB7IC8qIE1vemlsbGEgRmlyZWZveCAxOSsgKi8KICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgICAgIHRyYW5zaXRpb246IGNvbG9yIGVhc2UgMC4zczsKICAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7IC8qIEludGVybmV0IEV4cGxvcmVyIDEwLTExICovCiAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICAgICB0cmFuc2l0aW9uOiBjb2xvciBlYXNlIDAuM3M7CiAgICB9CgogICAgOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyAvKiBNaWNyb3NvZnQgRWRnZSAqLwogICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgICAgdHJhbnNpdGlvbjogY29sb3IgZWFzZSAwLjNzOwogICAgfQoKICAgIDpmb2N1czo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7IC8qIFdlYktpdCwgQmxpbmssIEVkZ2UgKi8KICAgICAgICBjb2xvcjogdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICA6Zm9jdXM6LW1vei1wbGFjZWhvbGRlciB7IC8qIE1vemlsbGEgRmlyZWZveCA0IHRvIDE4ICovCiAgICAgICBjb2xvcjogdmFyKC0tY29sQkdEYXJrKTsKICAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgOmZvY3VzOjotbW96LXBsYWNlaG9sZGVyIHsgLyogTW96aWxsYSBGaXJlZm94IDE5KyAqLwogICAgICAgY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICAgICBvcGFjaXR5OiAxOwogICAgfQoKICAgIDpmb2N1czotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyAvKiBJbnRlcm5ldCBFeHBsb3JlciAxMC0xMSAqLwogICAgICAgY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgOmZvY3VzOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyAvKiBNaWNyb3NvZnQgRWRnZSAqLwogICAgICAgY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgVGV4dGFyZWEKICAgICAqIEBub3RlICAgICAgICBGaXhlZCBmb250IG5lZWRlZCBpbiB0ZXh0YXJlYXMgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGxpbmUgd3JhcHBpbmcgaXMgaW5jb3JyZWN0LgogICAgICovCiAgICB0ZXh0YXJlYSB7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSxmaXhlZDsKICAgIH0KCiAgICAuRHluYW1pY0ZpZWxkU2V0IHRleHRhcmVhLAogICAgLlJvdy5NdWx0aUNvbHVtbiB0ZXh0YXJlYSB7CiAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAuUm93X0R5bmFtaWNGaWVsZCB0ZXh0YXJlYSB7CiAgICAgICAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgSW5wdXQgUmVhZG9ubHkKICAgICAqLwogICAgaW5wdXRbdHlwZT10ZXh0XVtyZWFkb25seV0sCiAgICBpbnB1dFt0eXBlPXBhc3N3b3JkXVtyZWFkb25seV0sCiAgICBpbnB1dFt0eXBlPWVtYWlsXVtyZWFkb25seV0sCiAgICB0ZXh0YXJlYVtyZWFkb25seV0gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTWVkaXVtKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBCdXR0b25zCiAgICAgKi8KICAgIGJ1dHRvbi5QcmltYXJ5IHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgIH0KCiAgICBhLkNlcnRpZmljYXRlUmVsYXRpb25BZGQsCiAgICBidXR0b24uQ2VydGlmaWNhdGVSZWxhdGlvbkFkZCwKICAgIGEuQ2VydGlmaWNhdGVSZWFkLAogICAgYnV0dG9uLkFkZCwKICAgIGEuQWRkLAogICAgYnV0dG9uLlJlbW92ZSwKICAgIGEuUmVtb3ZlLAogICAgYnV0dG9uLlRyYXNoQ2FuLAogICAgYS5UcmFzaENhbiwKICAgIGEuUGVuY2lsLAogICAgYnV0dG9uLlJlc2V0LAogICAgYS5SZXNldCB7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDFweDsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDFweDsKICAgICAgICBib3JkZXItc3R5bGU6IG5vbmU7CiAgICAgICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiA5OTk7CiAgICB9CgogICAgYnV0dG9uLkFkZCwKICAgIGEuQWRkIHsKICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ZpbHRlcl9hZGQucG5nKSBuby1yZXBlYXQgY2VudGVyOwogICAgfQoKICAgIGJ1dHRvbi5BZGQ6aG92ZXIsCiAgICBidXR0b24uQWRkOmZvY3VzLAogICAgYS5BZGQ6aG92ZXIsCiAgICBhLkFkZDpmb2N1cyB7CiAgICAgICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9maWx0ZXJfYWRkX2hvdmVyLnBuZykgbm8tcmVwZWF0IGNlbnRlcjsKICAgIH0KCiAgICBidXR0b24uQ2VydGlmaWNhdGVSZWxhdGlvbkFkZCwKICAgIGEuQ2VydGlmaWNhdGVSZWxhdGlvbkFkZCB7CiAgICAgICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9pY29ucy9jZXJ0aWZpY2F0ZS1wbHVzLnBuZykgbm8tcmVwZWF0IGNlbnRlcjsKICAgIH0KCiAgICBhLkNlcnRpZmljYXRlUmVhZCB7CiAgICAgICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9pY29ucy9jZXJ0aWZpY2F0ZS5wbmcpIG5vLXJlcGVhdCBjZW50ZXI7CiAgICB9CgogICAgYnV0dG9uLlJlbW92ZSwKICAgIGEuUmVtb3ZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ZpbHRlcl9yZW1vdmUucG5nKSBuby1yZXBlYXQgY2VudGVyOwogICAgfQoKICAgIGJ1dHRvbi5SZW1vdmU6aG92ZXIsCiAgICBidXR0b24uUmVtb3ZlOmZvY3VzLAogICAgYS5SZW1vdmU6aG92ZXIsCiAgICBhLlJlbW92ZTpmb2N1cyB7CiAgICAgICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9maWx0ZXJfcmVtb3ZlX2hvdmVyLnBuZykgbm8tcmVwZWF0IGNlbnRlcjsKICAgIH0KCiAgICBhLlRyYXNoQ2FuIGkuZmEtdHJhc2gtbywKICAgIGEuUGVuY2lsIGkuZmEtZWRpdCB7CiAgICAgICAgdGV4dC1pbmRlbnQ6IDBweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIHRvcDogNHB4OwogICAgICAgIHotaW5kZXg6IDk5ODsKICAgIH0KCiAgICBidXR0b24uUmVzZXQsCiAgICBhLlJlc2V0ewogICAgICAgIGhlaWdodDogMjJweDsKICAgICAgICB3aWR0aDogMjJweDsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICB9CgogICAgLkFkZEJ1dHRvbiwKICAgIC5SZW1vdmVCdXR0b24gewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90ZSAgICBQdXNoLWxvb2thbGlrZSBmb3IgYWN0aXZlIHN0YXRlCiAgICAgKi8KICAgIGJ1dHRvbi5BZGQ6YWN0aXZlLAogICAgYS5BZGQ6YWN0aXZlLAogICAgYnV0dG9uLlJlbW92ZTphY3RpdmUsCiAgICBhLlJlbW92ZTphY3RpdmUsCiAgICBidXR0b24uVHJhc2hDYW46YWN0aXZlLAogICAgYS5UcmFzaENhbjphY3RpdmUsCiAgICBidXR0b24uUmVzZXQ6YWN0aXZlIHsKICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIH0KCgogICAgLkdldEFsbEFKQVggewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBtYXJnaW4tbGVmdDogM3B4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIC5HZXRBbGxBSkFYIHNwYW4gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtOTk5OXB4OwogICAgICAgIHRvcDogLTk5OTlweDsKICAgIH0KCiAgICAuUlRMIC5HZXRBbGxBSkFYIHsKICAgICAgICBtYXJnaW46IDAgM3B4IDAgMDsKICAgIH0KCiAgICAuQWRkaXRpb25sRmllbGRJY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAuQWRkaXRpb25sRmllbGRJY29uIHNwYW4gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtOTk5OXB4OwogICAgICAgIHRvcDogLTk5OTlweDsKICAgIH0KCiAgICAuUlRMIC5BZGRpdGlvbmxGaWVsZEljb24gewogICAgICAgIG1hcmdpbjogMCAzcHggMCAwOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gICAgR2VuZXJpY0FnZW50IENsZWFyU2VsZWN0CiAgICAgKi8KCiAgICAuR2VuZXJpY0FnZW50Q2xlYXJTZWxlY3QgewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBtYXJnaW4tbGVmdDogM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLkdlbmVyaWNBZ2VudENsZWFyU2VsZWN0IHNwYW4gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtOTk5OXB4OwogICAgICAgIHRvcDogLTk5OTlweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICAgIFRyZWUgc2VsZWN0aW9uIGljb24gYW5kIG92ZXJsYXkgZm9yIHNlbGVjdCBib3hlcwogICAgICovCgogICAgLlNob3dUcmVlU2VsZWN0aW9uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLlNob3dUcmVlU2VsZWN0aW9uIHNwYW4gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtOTk5OXB4OwogICAgICAgIHRvcDogLTk5OTlweDsKICAgIH0KCiAgICAuU2hvd1RyZWVTZWxlY3Rpb246Zm9jdXMgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xIaWdobGlnaHQpOwogICAgfQoKICAgIC5GaWVsZCAuU2hvd1RyZWVTZWxlY3Rpb24sIC5XaWRnZXRTZXR0aW5nc0Zvcm0gLlNob3dUcmVlU2VsZWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB9CgogICAgLldpZGdldFNldHRpbmdzRm9ybSAuU2hvd1RyZWVTZWxlY3Rpb24gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0b3A6IC00cHg7CiAgICB9CgogICAgI1RyZWVDb250YWluZXIgI1RyZWVTZWFyY2ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAjVHJlZUNvbnRhaW5lciAjVHJlZVNlYXJjaCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDlweDsKICAgICAgICB0b3A6IDRweDsKICAgICAgICB3aWR0aDogMTZweDsKICAgIH0KCiAgICAuRGlhbG9nVHJlZVNlYXJjaCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHJpZ2h0OiAxMHB4OwogICAgfQoKICAgICNUcmVlQ29udGFpbmVyICNUcmVlU2VhcmNoIGlucHV0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDEwcHggMTJweCAwcHggMTJweDsKICAgICAgICB3aWR0aDogOTIlOwogICAgfQoKICAgIC5KU1RyZWVGaWVsZCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGhlaWdodDogNzIlOwogICAgICAgIG1hcmdpbjogMTBweCAxMnB4OwogICAgICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMHB4IDBweCA2cHggdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDBweCAwcHggNnB4IHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMHB4IDBweCA2cHggdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwcHggMTBweCAxMHB4IDEwcHg7CiAgICB9CgogICAgLkpTVHJlZUZpZWxkLkluT3ZlcmxheSB7CiAgICAgICAgbWFyZ2luOiA1cHggNXB4IDVweCAwcHg7CiAgICAgICAgd2lkdGg6IDg1JTsKICAgICAgICBmbG9hdDogbGVmdDsKICAgIH0KCiAgICAuSlNUcmVlRmllbGQgLkRpc2FibGVkID4gYSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgfQoKICAgIC5KU1RyZWVGaWVsZCAuanN0cmVlLXNlYXJjaCB7CiAgICAgICAgY29sb3I6ICNFMDcwMDY7CiAgICB9CgogICAgLkpTVHJlZUZpZWxkIC5qc3RyZWUtc2VhcmNoLmpzdHJlZS1jbGlja2VkIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIC5KU1RyZWVGaWVsZCAuanN0cmVlLWNsaWNrZWQgewogICAgICAgIGJhY2tncm91bmQ6ICNmMzk2MGQ7CiAgICAgICAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAgI2ZmZTdiZCAwJSwgI2ZiYmE0OSAyMCUsICNmNmFkM2UgNTElLCAjZjM5NjBkIDUxJSwgI2U5ODIwNyA5NSUsICNlMDcwMDYgMTAwJSk7CiAgICAgICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSwjZmZlN2JkKSwgY29sb3Itc3RvcCgyMCUsI2ZiYmE0OSksIGNvbG9yLXN0b3AoNTElLCNmNmFkM2UpLCBjb2xvci1zdG9wKDUxJSwjZjM5NjBkKSwgY29sb3Itc3RvcCg5NSUsI2U5ODIwNyksIGNvbG9yLXN0b3AoMTAwJSwjZTA3MDA2KSk7CiAgICAgICAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAgI2ZmZTdiZCAwJSwjZmJiYTQ5IDIwJSwjZjZhZDNlIDUxJSwjZjM5NjBkIDUxJSwjZTk4MjA3IDk1JSwjZTA3MDA2IDEwMCUpOwogICAgICAgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICAjZmZlN2JkIDAlLCNmYmJhNDkgMjAlLCNmNmFkM2UgNTElLCNmMzk2MGQgNTElLCNlOTgyMDcgOTUlLCNlMDcwMDYgMTAwJSk7CiAgICAgICAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICAjZmZlN2JkIDAlLCNmYmJhNDkgMjAlLCNmNmFkM2UgNTElLCNmMzk2MGQgNTElLCNlOTgyMDcgOTUlLCNlMDcwMDYgMTAwJSk7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgICNmZmU3YmQgMCUsI2ZiYmE0OSAyMCUsI2Y2YWQzZSA1MSUsI2YzOTYwZCA1MSUsI2U5ODIwNyA5NSUsI2UwNzAwNiAxMDAlKTsKICAgICAgICBib3JkZXItY29sb3I6ICNmMzk2MGQ7CiAgICAgICAgcGFkZGluZzogMHB4IDNweDsKICAgIH0KCiAgICAuSlNUcmVlRmllbGQgLmpzdHJlZS1ob3ZlcmVkIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0TWVkaXVtKTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbEJHTWVkaXVtRGFyayk7CiAgICB9CgogICAgLkpTVHJlZUZpZWxkIGE6Zm9jdXMgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sQkdNZWRpdW1EYXJrKTsKICAgIH0KCiAgICAjU3VibWl0VHJlZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEyMHB4OwogICAgICAgIG1hcmdpbjogMHB4IGF1dG87CiAgICB9CgogICAgLlJUTCAuU2hvd1RyZWVTZWxlY3Rpb24gewogICAgICAgIG1hcmdpbjogMCAzcHggMCAwOwogICAgfQoKICAgIC5PdmVybGF5VHJlZVNlbGVjdG9yIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBGb3JtCiAgICAgKi8KCiAgICBmb3JtIGZpZWxkc2V0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICB9CgogICAgLlRhYmxlTGlrZU92ZXJmbG93IHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBsaW5lLWhlaWdodDogaW5pdGlhbDsKICAgIH0KCiAgICBmaWVsZHNldCA+IGxlZ2VuZCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLldpZGdldFNldHRpbmdzRm9ybSBmaWVsZHNldCBsZWdlbmQgewogICAgICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgfQoKICAgIGZpZWxkc2V0ID4gbGVnZW5kID4gc3BhbiB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbEJHTWVkaXVtRGFyayk7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogNXB4IDBweCA1cHggMzAlOwogICAgICAgIHRleHQtaW5kZW50OiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgfQoKICAgIGZvcm0gZmllbGRzZXQgPiBwLk5vVmFsdWUgewogICAgICAgIHBhZGRpbmc6IDVweCAwcHggNXB4IDMwJTsKICAgICAgICB0ZXh0LWluZGVudDogOHB4OwogICAgfQoKICAgIC5GaWVsZEV4cGxhbmF0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBtYXJnaW46IDVweCAwOwogICAgfQoKICAgIC5TaWRlYmFyQ29sdW1uIC5GaWVsZEV4cGxhbmF0aW9uLkVycm9yIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xUZXh0RXJyKTsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dEVycik7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE1MCU7CiAgICAgICAgbWFyZ2luOiA3cHggMHB4OwogICAgICAgIHBhZGRpbmc6IDdweCAxMHB4OwogICAgfQoKICAgIGZvcm0gbGFiZWwuTWFuZGF0b3J5IHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspICFpbXBvcnRhbnQ7CiAgICB9CgogICAgZm9ybSBsYWJlbC5NYW5kYXRvcnkgc3Bhbi5NYXJrZXIgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdG9wOiAwLjM1ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDFweDsKICAgICAgICByaWdodDogMnB4OwogICAgICAgIGxlZnQ6IGF1dG87CiAgICB9CgogICAgLlJUTCBmb3JtIGxhYmVsLk1hbmRhdG9yeSBzcGFuLk1hcmtlciB7CiAgICAgICAgbGVmdDogMnB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgfQoKICAgIGZvcm0gbGFiZWwuTGFiZWxFcnJvciB7CiAgICAgICAgY29sb3I6ICNmZjUwNWUgIWltcG9ydGFudDsKICAgIH0KCiAgICAuQ3VzdG9tZXJDb250YWluZXIsCiAgICAuQ2NDdXN0b21lckNvbnRhaW5lciwKICAgIC5CY2NDdXN0b21lckNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdMaWdodCk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDFweCAxcHggNXB4IHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDVweCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDFweCAxcHggNXB4IHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgcGFkZGluZzogNXB4IDdweCAxMHB4IDZweDsKICAgICAgICB3aWR0aDogNzQlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICB9CgogICAgLkN1c3RvbWVyQ29udGFpbmVyID4gZGl2LAogICAgLkNjQ3VzdG9tZXJDb250YWluZXIgPiBkaXYsCiAgICAuQmNjQ3VzdG9tZXJDb250YWluZXIgPiBkaXYgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgIH0KCiAgICAuQ3VzdG9tZXJDb250YWluZXIgLkN1c3RvbWVyVGlja2V0VGV4dCwKICAgIC5DY0N1c3RvbWVyQ29udGFpbmVyIC5DdXN0b21lclRpY2tldFRleHQsCiAgICAuQmNjQ3VzdG9tZXJDb250YWluZXIgLkN1c3RvbWVyVGlja2V0VGV4dCAgewogICAgICAgIHdpZHRoOiBjYWxjKCAxMDAlIC0gNzBweCApOwogICAgICAgIG1hcmdpbi1sZWZ0OiA3cHg7CiAgICB9CgogICAgLkN1c3RvbWVyQ29udGFpbmVyIC5DdXN0b21lclRpY2tldFRleHQgewogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMXMgZWFzZSwgYm9yZGVyIDFzIGVhc2U7CiAgICB9CgogICAgLkN1c3RvbWVyQ29udGFpbmVyIC5DdXN0b21lclRpY2tldFRleHQuTWFpbkN1c3RvbWVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xIb3ZlckxpZ2h0KTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bSk7CiAgICB9CgogICAgLkN1c3RvbWVyQ29udGFpbmVyIC5DdXN0b21lclRpY2tldFRleHQuUmFkaW8gewogICAgICAgIHdpZHRoOiBjYWxjKCAxMDAlIC0gODhweCApOwogICAgICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICB9CgogICAgLkN1c3RvbWVyQ29udGFpbmVyIC5Cb3hMYWJlbCwKICAgIC5DY0N1c3RvbWVyQ29udGFpbmVyIC5Cb3hMYWJlbCwKICAgIC5CY2NDdXN0b21lckNvbnRhaW5lciAuQm94TGFiZWwgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIHJpZ2h0OiAxMDAlOwogICAgICAgIHRvcDogMTBweDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHRleHQtc2hhZG93OiAxcHggMXB4IDFweCAjRkZGRkZGOwogICAgICAgIG1pbi13aWR0aDogMjBweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICB9CgogICAgI0VtYWlsUmVjaXBpZW50c0xpc3Qgc3BhbiwKICAgICNFbWFpbFJlY2lwaWVudHNMaXN0IGEuQ29sbGFwc2UgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgI0VtYWlsUmVjaXBpZW50c0xpc3QuRXhwYW5kZWQgc3BhbiwKICAgICNFbWFpbFJlY2lwaWVudHNMaXN0LkV4cGFuZGVkIGEuRXhwYW5kIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICB9CgogICAgLk1vdmVDdXN0b21lckJ1dHRvbiA+IHNwYW4gewogICAgICAgIGJvcmRlcjogc29saWQgMXB4OwogICAgICAgIGZvbnQtc2l6ZTogN3B4OwogICAgICAgIHBhZGRpbmc6IDAuNHB4IDAuOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIGxpbmUtaGVpZ2h0OiA4LjVweDsKICAgICAgICBoZWlnaHQ6IDguNXB4OyAgLyp2ZXJ5IGRpZmZlcmVudCBiZWhhdmlvdXIgZmYgdnMgY2hyb21lIChoZXJlIHcvd28gcmFkaW8pIHZzIC4uLiovCiAgICB9CgogICAgLk1vdmVDdXN0b21lckJ1dHRvbi5Ub01vdmUgPiBzcGFuIHsKICAgICAgICBwYWRkaW5nOiAwLjRweCAxLjVweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBub3RlICAgICAgICBHaXZlIHRoZSB1c2VyIGEgaGludCBhYm91dCBsaW5rZWQgbGFiZWwgZWxlbWVudHMgKHRoZXkgYXJlIGNsaWNrYWJsZSBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgZ2l2ZSBmb2N1cyB0byB0aGUgbGlua2VkIGVsZW1lbnQuCiAgICAgKi8KCiAgICBmb3JtIGxhYmVsW2Zvcl0gewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICBmb3JtIGlucHV0LkVycm9yLAogICAgZm9ybSB0ZXh0YXJlYS5FcnJvciwKICAgIGZvcm0gaW5wdXQuRXJyb3I6Zm9jdXMsCiAgICBmb3JtIHRleHRhcmVhLkVycm9yOmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbFRleHRFcnIpOwogICAgfQoKICAgIC8qCiAgICAgKiBUaGlzIHdpbGwgYmUgZGlzcGxheWVkIGJ5IENvcmUuVUkuVG9vbHRpcHMKICAgICAqLwogICAgZGl2LlRvb2x0aXBFcnJvck1lc3NhZ2UgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgVGFibGVMaWtlCiAgICAgKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgYSB0YWJsZS1saWtlLCBhbGlnbmVkIGxhYmVsLXZhbHVlIHN0cnVjdHVyZQogICAgICovCgogICAgZmllbGRzZXQuVGFibGVMaWtlID4gbGFiZWw6bm90KC5jay1sYWJlbCksCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93ID4gbGFiZWw6bm90KC5jay1sYWJlbCksCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLlJvdyA+IC5GaWVsZENlbGwgbGFiZWw6bm90KC5jay1sYWJlbCkgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjllbTsKICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgICAgIG1pbi1oZWlnaHQ6IDE3cHg7CiAgICAgICAgcGFkZGluZy10b3A6IDAuM2VtOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxcHg7CiAgICAgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgdmFyKC0tY29sQkdMaWdodE1lZGl1bSk7CiAgICAgICAgdGV4dC13cmFwOiB3cmFwOwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuUm93Lk11bHRpQ29sdW1uID4gLkZpZWxkQ2VsbCBsYWJlbCB7CiAgICAgICAgZmxvYXQ6IG5vbmU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuOWVtOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDAuM2VtOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxcHg7CiAgICB9CgoKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlID4gbGFiZWwsCiAgICAuUlRMIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cgPiBsYWJlbCB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB9CgogICAgLm9vb1RpdGxlID4gcCAsCiAgICAub29vVGl0bGUgPiBwIHsKICAgICAgICBsaW5lLWhlaWdodDogMS45ZW07CiAgICAgICAgcGFkZGluZy10b3A6IDNweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogM3B4OwogICAgICAgIG1pbi1oZWlnaHQ6IDIwcHg7CiAgICAgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgdmFyKC0tY29sQkdMaWdodE1lZGl1bSk7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkLAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5GaWVsZCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuUm93ID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuOWVtOwogICAgICAgIG1hcmdpbi1sZWZ0OiAzMCU7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOwogICAgICAgIHBhZGRpbmctdG9wOiAzcHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDNweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogMHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDIwcHg7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlIC5Sb3cgPiAuRmllbGRDZWxsID4gLkZpZWxkLlJpY2hUZXh0RmllbGQgewogICAgICAgIHBhZGRpbmctdG9wOiAwcHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDBweDsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLlJvdy5NdWx0aVZhbHVlIHsKICAgICAgICBncmlkLXJvdy1nYXA6IDJweDsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93Lk11bHRpQ29sdW1uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMTUlOwogICAgICAgIHdpZHRoOiBjYWxjKCA4MCUgLSA0MHB4ICk7CiAgICAgICAgZ3JpZC1jb2x1bW4tZ2FwOiAxNnB4OwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuUm93Lk11bHRpQ29sdW1uIC5GaWVsZENlbGwgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlIC5Sb3cuTXVsdGlWYWx1ZSA+IC5GaWVsZENlbGwgPiAuRmllbGQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLlJvdy5NdWx0aVZhbHVlID4gLkZpZWxkQ2VsbC5NdWx0aVZhbHVlXzAgPiAuRmllbGQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuUm93Lk11bHRpQ29sdW1uID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlIC5Sb3cuTXVsdGlDb2x1bW4gPiAuRmllbGRDZWxsID4gLlJpY2hUZXh0RmllbGQsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLkR5bmFtaWNGaWVsZFNldCA+IC5Sb3cuTXVsdGlDb2x1bW4gPiAuRmllbGRDZWxsID4gLlJpY2hUZXh0RmllbGQgeyAvKiBoYXMgdG8gb3ZlcnJpZGUgbm9ybWFsIHNldHMgKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCkgIWltcG9ydGFudDsKICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpOwogICAgfQoKICAgIC8qIER5bmFtaWMgRmllbGQgU2V0ICovCgogICAgZmllbGRzZXQuVGFibGVMaWtlIC5ERlNldE91dGVyRmllbGQgewogICAgICAgIG1heC13aWR0aDogNjMwcHg7IC8qd2lkdGggNjIwcHggKyBsZWZ0IG1hcmdpbiovCiAgICAgICAgd2lkdGg6IGNhbGMoIDcwJSAtIDQ2cHggKTsgIC8qIHdpZHRoIG9mIEFkZFJlbW92ZVZhbHVlUm93ICsgbGVmdCBtYXJnaW4qLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlIC5EeW5hbWljRmllbGRTZXQgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLkR5bmFtaWNGaWVsZFNldCA+IC5Sb3cgPiAuRmllbGRDZWxsIGxhYmVsOm5vdCguY2stbGFiZWwpIHsKICAgICAgICB3aWR0aDogMjQlOwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuRHluYW1pY0ZpZWxkU2V0ID4gLlJvdyA+IC5GaWVsZENlbGwgPiAuRmllbGQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAyNCU7CiAgICAgICAgd2lkdGg6IGNhbGMoIDc2JSAtIDQ4cHggKTsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLkR5bmFtaWNGaWVsZFNldCA+IC5Sb3cgPiAuRmllbGRDZWxsID4gLlJpY2hUZXh0RmllbGQgewogICAgICAgIHdpZHRoOiBjYWxjKCA3NiUgLSAzOHB4ICkgIWltcG9ydGFudDsKICAgICAgICBtYXgtd2lkdGg6IGNhbGMoIDc2JSAtIDM4cHggKTsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLkR5bmFtaWNGaWVsZFNldCA+IC5Sb3cuTXVsdGlWYWx1ZSA+IC5GaWVsZENlbGwuTXVsdGlWYWx1ZV8wID4gLkZpZWxkIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLkR5bmFtaWNGaWVsZFNldCA+IC5Sb3cuTXVsdGlDb2x1bW4gewogICAgICAgIGdyaWQtY29sdW1uLWdhcDogOHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogOHB4OwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuRHluYW1pY0ZpZWxkU2V0ID4gLlJvdy5NdWx0aUNvbHVtbiA+IC5GaWVsZENlbGwgPiAuRmllbGQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpOwogICAgfQoKICAgIC8qIG11bHRpdmFsdWUgc2V0cy4gbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgY29tcGV0aW5nIENTUyBzcGVjaWZpY2l0aWVzKi8KICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cuTXVsdGlWYWx1ZSA+IC5GaWVsZENlbGwgPiAuRmllbGQuREZTZXRPdXRlckZpZWxkIC5EeW5hbWljRmllbGRTZXQgLkZpZWxkID4gOm5vdCguQUpBWExvYWRlciwgW3R5cGU9ImNoZWNrYm94Il0sIC51aS1yZXNpemFibGUtcyksCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93ID4gLkZpZWxkQ2VsbCA+IC5GaWVsZC5ERlNldE91dGVyRmllbGQgLkR5bmFtaWNGaWVsZFNldCAuRmllbGQgPiA6bm90KC5BSkFYTG9hZGVyLCAuY2stZWRpdG9yLCBbdHlwZT0iY2hlY2tib3giXSwgLnVpLXJlc2l6YWJsZS1zKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIH0KCiAgICAvKiBmb3IgZHJvcGRvd24gc2VsZWN0aW9uZmllbGRzIGR1ZSB0byBkZWVwZXIgbmVzdGluZyAqLwogICAgZmllbGRzZXQuVGFibGVMaWtlIC5EeW5hbWljRmllbGRTZXQgLklucHV0RmllbGRfSW5wdXRDb250YWluZXIgewogICAgICAgIHdpZHRoOiBpbmhlcml0OwogICAgICAgIGJveC1zaXppbmc6IGluaGVyaXQ7CiAgICB9CgogICAgLyogVE9ETyBjaGVjayBpZiBpdCBtYWtlcyBzZW5zZSB0byBkbyB0aGlzIG9ubHkgaWYgaW5wdXQgaXMgZGlyZWN0IGNoaWxkICovCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93ID4gLkZpZWxkQ2VsbCA+IC5GaWVsZC5ERlNldE91dGVyRmllbGQgLkR5bmFtaWNGaWVsZFNldCAuUm93X0R5bmFtaWNGaWVsZCBpbnB1dDpub3QoW3R5cGU9ImNoZWNrYm94Il0pIHsKICAgICAgICBtaW4td2lkdGg6IDE1MHB4OyAvKmtpbmQgb2YgcmFuZG9tLCBub3QgaWRlYWwqLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgICAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMHB4OwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cgPiAuRmllbGRDZWxsID4gLkZpZWxkLkRGU2V0T3V0ZXJGaWVsZCAuRHluYW1pY0ZpZWxkU2V0IC5Sb3dfRHluYW1pY0ZpZWxkIC5EeW5hbWljRmllbGREYXRlID4gaW5wdXQgewogICAgICAgIHdpZHRoOiB1bnNldDsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLkR5bmFtaWNGaWVsZFNldCAuQWRkUmVtb3ZlVmFsdWVSb3cgewogICAgICAgIGdyaWQtY29sdW1uOiAzOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlIC5EeW5hbWljRmllbGRTZXQgLlJvdy5NdWx0aUNvbHVtbiAuQWRkUmVtb3ZlVmFsdWVSb3cgewogICAgICAgIGdyaWQtY29sdW1uOiAyOwogICAgfQoKICAgIC8qIEVPIFRPRE8gKi8KCiAgICAuUlRMIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cuTXVsdGlDb2x1bW4gewogICAgICAgIG1hcmdpbi1yaWdodDogMTUlOwogICAgfQoKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdy5NdWx0aUNvbHVtbiA+IC5GaWVsZENlbGwgPiAuRmllbGQgewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwOwogICAgfQoKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkLAogICAgLlJUTCBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93ID4gLkZpZWxkLAogICAgLlJUTCBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93ID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAzMCU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAwOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlIHNlbGVjdCB7CiAgICAgICAgbWFyZ2luLXRvcDogM3B4OwogICAgfQoKICAgIC8qKgogICAgICogQG5vdGUgICAgIEFsc28gbWFrZSBsYWJlbHMgZ3JleSB3aGljaCBvY2N1ciBpbnNpZGUgb2YgYSBmaWVsZCwKICAgICAqICAgICAgICAgIGZvciBleGFtcGxlIGZvciBjb21wbGV4IGlucHV0IGVsZW1lbnRzLgogICAgICovCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgbGFiZWwsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93ID4gLkZpZWxkIGxhYmVsLAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5GaWVsZENlbGwgbGFiZWwgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuUm93ID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCA+IHNlbGVjdCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuUm93ID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCA+IGlucHV0LAogICAgZmllbGRzZXQuVGFibGVMaWtlIC5GaWVsZCA+IHNlbGVjdCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuUm93ID4gLkZpZWxkID4gc2VsZWN0LAogICAgZmllbGRzZXQuVGFibGVMaWtlIC5GaWVsZCA+IGlucHV0LAogICAgZmllbGRzZXQuVGFibGVMaWtlIC5Sb3cgPiAuRmllbGQgPiBpbnB1dCB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIH0KCiAgICAvKmZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IHNlbGVjdCNDb25maWdGaWxlLAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5GaWVsZCA+IHNlbGVjdCNDb25maWdGaWxlLAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gaW5wdXQjQ29uZmlnRmlsZSwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cgPiAuRmllbGQgPiBpbnB1dCNDb25maWdGaWxlLAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gc2VsZWN0I1dlYnNlcnZpY2VOYW1lLAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5GaWVsZCA+IHNlbGVjdCNXZWJzZXJ2aWNlTmFtZSwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IGlucHV0I1dlYnNlcnZpY2VOYW1lLAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5GaWVsZCA+IGlucHV0I1dlYnNlcnZpY2VOYW1lIHsKICAgICAgICBtYXgtd2lkdGg6IDI1MHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgIH0qLwoKICAgIC8qKgogICAgICogQG5vdGUgICAgVGhlIFJpY2hUZXh0IGZpZWxkIG5lZWRzIHRvIGZsb2F0LCBvdGhlcndpc2UgaXQgYnJlYWtzCiAgICAgKiAgICAgICAgICBpbiBzbWFsbCBzY3JlZW5zLgogICAgICogICAgICAgICAgQWRkaXRpb25hbGx5IHdlIGhhdmUgYSBnZW5lcmljIEZsb2F0aW5nRmllbGQgY2xhc3MsCiAgICAgKiAgICAgICAgICBSaWNoVGV4dEZpZWxkIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgICAqLwogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5SaWNoVGV4dEZpZWxkLAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZsb2F0aW5nRmllbGQsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93ID4gLkZsb2F0aW5nRmllbGQgewogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwOwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuUmljaFRleHRGaWVsZCB7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1pbi1oZWlnaHQ6IDE1MHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgbWF4LXdpZHRoOiA3MCU7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDJweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA2cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzMCU7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgaGVpZ2h0OiBtaW4tY29udGVudDsgICAgLyogb3ZlcndyaXR0ZW4gYnkgQ29yZS5VSS5SaWNoVGV4dEVkaXRvci5qcyEgKi8KICAgICAgICB3aWR0aDogNzAlOyAgICAgICAgICAgICAvKiBvdmVyd3JpdHRlbiBieSBDb3JlLlVJLlJpY2hUZXh0RWRpdG9yLmpzISAqLwogICAgfQoKICAgIGJvZHkuUG9wdXAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5SaWNoVGV4dEZpZWxkLAogICAgYm9keS5Qb3B1cCBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmxvYXRpbmdGaWVsZCwKICAgIGJvZHkuUG9wdXAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5GbG9hdGluZ0ZpZWxkIHsKICAgICAgICBtYXJnaW46IDdweCA3cHggMHB4IDdweDsKICAgIH0KCiAgICBib2R5LlBvcHVwIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5SaWNoVGV4dEZpZWxkIHsKICAgICAgICBwYWRkaW5nLXRvcDogN3B4OwogICAgICAgIHBhZGRpbmctbGVmdDogMTdweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE3MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgIH0KCiAgICAuUlRMIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cgPiAuUmljaFRleHRGaWVsZCwKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlID4gLkZsb2F0aW5nRmllbGQsCiAgICAuUlRMIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cgPiAuRmxvYXRpbmdGaWVsZCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAwOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgfQoKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlID4gLlJpY2hUZXh0RmllbGQgewogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMzAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgfQoKICAgIGJvZHkuUmVhbFBvcHVwLlJUTCBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93ID4gLlJpY2hUZXh0RmllbGQsCiAgICBib2R5LlJlYWxQb3B1cC5SVEwgZmllbGRzZXQuVGFibGVMaWtlID4gLkZsb2F0aW5nRmllbGQsCiAgICBib2R5LlJlYWxQb3B1cC5SVEwgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5GbG9hdGluZ0ZpZWxkIHsKICAgICAgICBtYXJnaW46IDdweCA3cHggMHB4IDdweDsKICAgIH0KCiAgICBib2R5LlJlYWxQb3B1cC5SVEwgZmllbGRzZXQuVGFibGVMaWtlID4gLlJpY2hUZXh0RmllbGQgewogICAgICAgIHBhZGRpbmctdG9wOiA3cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTdweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE3MHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5WYWx1ZSwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cgPiAuVmFsdWUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAzMCU7CiAgICAgICAgcGFkZGluZzogMC4zZW0gMCAxcHggOHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjllbTsKICAgIH0KCiAgICAuUlRMIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5WYWx1ZSwKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5WYWx1ZSB7CiAgICAgICAgbWFyZ2luOiAwIDMwJSAwIDA7CiAgICAgICAgcGFkZGluZzogNXB4IDhweCAzcHggMDsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuVmFsdWUgaW1nLAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5WYWx1ZSBpbWcgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90ZSAgICAgICAgRml4ZWRMYWJlbCAtIHRoaXMgYWRkaXRpb25hbCBjbGFzcyBmb3IgVGFibGVMaWtlCiAgICAgKiAgICAgICAgICAgICAgbWFrZXMgdGhlIGxhYmVscyBoYXZlIGEgZml4ZWQgc2l6ZQogICAgICovCiAgICBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbCA+IGxhYmVsLAogICAgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWwgPiAuUm93ID4gLkZpZWxkQ2VsbCBsYWJlbCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZS5GaXhlZExhYmVsID4gLlJvdyA+IGxhYmVsIHsKICAgICAgICB3aWR0aDogMTcwcHg7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWwgPiAuRmllbGQsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbCA+IC5Sb3cgPiAuRmllbGQsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbCA+IC5Sb3cgPiAuRmllbGRDZWxsID4gLkZpZWxkLAogICAgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWwgPiAuVmFsdWUsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbCA+IC5Sb3cgPiAuVmFsdWUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxNzBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxN3B4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWwgLlJvdy5NdWx0aUNvbHVtbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwMHB4OwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZS5GaXhlZExhYmVsIC5Sb3cuTXVsdGlDb2x1bW4gPiAuRmllbGQsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbCAuUm93Lk11bHRpQ29sdW1uID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZS5GaXhlZExhYmVsIC5Sb3cuTXVsdGlDb2x1bW4gPiAuVmFsdWUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAwcHg7CiAgICB9CgogICAgLlJUTCBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbCA+IC5GaWVsZCwKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWwgPiAuUm93ID4gLkZpZWxkLAogICAgLlJUTCBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbCA+IC5Sb3cgPiAuRmllbGRDZWxsID4gLkZpZWxkLAogICAgLlJUTCBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbCA+IC5WYWx1ZSwKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWwgPiAuUm93ID4gLlZhbHVlIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE3MHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxN3B4OwogICAgfQoKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWwgLlJvdy5NdWx0aUNvbHVtbiB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMDBweDsKICAgIH0KCiAgICAuUlRMIGZpZWxkc2V0LlRhYmxlTGlrZS5GaXhlZExhYmVsID4gLlJvdy5NdWx0aUNvbHVtbiA+IC5GaWVsZCwKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWwgPiAuUm93Lk11bHRpQ29sdW1uID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCwKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWwgPiAuUm93Lk11bHRpQ29sdW1uID4gLlZhbHVlIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDBweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwcHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90ZSAgICAgICAgRml4ZWRMYWJlbFNtYWxsIC0gdGhpcyBhZGRpdGlvbmFsIGNsYXNzIGZvciBUYWJsZUxpa2UKICAgICAqICAgICAgICAgICAgICBtYWtlcyB0aGUgbGFiZWxzIGhhdmUgYSBzbWFsbCBmaXhlZCBzaXplCiAgICAgKi8KICAgIGZpZWxkc2V0LlRhYmxlTGlrZS5GaXhlZExhYmVsU21hbGwgPiBsYWJlbCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZS5GaXhlZExhYmVsU21hbGwgPiAuUm93ID4gbGFiZWwgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbFNtYWxsID4gLkZpZWxkLAogICAgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWxTbWFsbCA+IC5Sb3cgPiAuRmllbGQsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbFNtYWxsID4gLlZhbHVlLAogICAgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWxTbWFsbCA+IC5Sb3cgPiAuVmFsdWUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDdweDsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB9CgogICAgLlJUTCBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbFNtYWxsID4gLkZpZWxkLAogICAgLlJUTCBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbFNtYWxsID4gLlJvdyA+IC5GaWVsZCwKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWxTbWFsbCA+IC5WYWx1ZSwKICAgIC5SVEwgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWxTbWFsbCA+IC5Sb3cgPiAuVmFsdWUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICAgIG1hcmdpbi1yaWdodDogMTAwcHg7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWxTbWFsbCA+IHAuRml4ZWRWYWx1ZVNtYWxsID4gZW0uRXJyb3IgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBtYXJnaW4tdG9wOiAzcHg7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlLk5hcnJvdyA+IGxhYmVsLAogICAgZmllbGRzZXQuVGFibGVMaWtlLk5hcnJvdyA+IC5Sb3cgPiBsYWJlbCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZS5OYXJyb3cgPiAuVmFsdWUsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UuTmFycm93ID4gLlJvdyA+IC5WYWx1ZSB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuM2VtOwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZS5OYXJyb3cgPiBsYWJlbCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZS5OYXJyb3cgPiAuUm93ID4gbGFiZWwsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UuTmFycm93ID4gLlZhbHVlLAogICAgZmllbGRzZXQuVGFibGVMaWtlLk5hcnJvdyA+IC5Sb3cgPiAuVmFsdWUsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiBsYWJlbCwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cgPiBsYWJlbCB7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB9CgogICAgLyogVE9ETzogVGVtcG9yYXJ5IGZvciBUaWNrZXRJbmZvIGluIEFnZW50VGlja2V0Wm9vbTsgaGFzIHRvIGJlIG1vcmUgZ2VuZXJhbDsgKi8KICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuU2V0RGlzcGxheVZhbHVlID4gbGFiZWwgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIGxpbmUtaGVpZ2h0OiAxLjNlbTsKICAgICAgd2lkdGg6IDEyNnB4OwogICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgIG1pbi1oZWlnaHQ6IDE3cHg7CiAgICAgIHBhZGRpbmctdG9wOiAwLjNlbTsKICAgICAgcGFkZGluZy1ib3R0b206IDFweDsKICAgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgdmFyKC0tY29sQkdMaWdodCk7CiAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB9CiAgICBmaWVsZHNldC5UYWJsZUxpa2UgLlNldERpc3BsYXlWYWx1ZSA+IC5WYWx1ZSB7CiAgICAgIG1hcmdpbi1sZWZ0OiAxMzJweDsKICAgICAgbWFyZ2luLXJpZ2h0OiA3cHg7CiAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIHBhZGRpbmc6IDAuM2VtIDAgM3B4IDhweDsKICAgICAgbGluZS1oZWlnaHQ6IDEuM2VtOwogICAgfQogICAgLyogRU8gVGVtcG9yYXJ5ICovCgogICAgaWZyYW1lLlNpZ25hdHVyZSB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uIGZyZWV0ZXh0IGZpZWxkcwogICAgICovCgogICAgaW5wdXRbdHlwZT10ZXh0XS5UaWNrZXRGcmVlVGV4dCwKICAgIGlucHV0W3R5cGU9dGV4dF0uQXJ0aWNsZUZyZWVUZXh0IHsKICAgICAgICB3aWR0aDogNzUlOwogICAgfQoKICAgIGlucHV0W3R5cGU9dGV4dF0uVGlja2V0RnJlZUtleSwKICAgIGlucHV0W3R5cGU9dGV4dF0uQXJ0aWNsZUZyZWVLZXkgewogICAgICAgIHdpZHRoOiA1MCU7CiAgICB9Cgp9IC8qIGVuZCBAbWVkaWEgKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIEhlYWRlcgogKi8KCkBtZWRpYSBzY3JlZW4sIHByaW50IHsKCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBIZWFkZXIKICAgICAqLwogICAgI0hlYWRlciB7CiAgICAgICAgaGVpZ2h0OiA3MnB4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbE1haW5EYXJrKTsKICAgICAgICBjb2xvcjogdmFyKC0tY29sRWxlbWVudCk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIExvZ28KICAgICAqLwogICAgI0xvZ28gewogICAgICAgIHRvcDogMjVweDsKICAgICAgICByaWdodDogMjRweDsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1NXB4OwogICAgICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWcvbG9nb19iZy5wbmcpIG5vLXJlcGVhdDsKICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgIC5SVEwgI0hlYWRlciAjTG9nbyB7CiAgICAgICAgcmlnaHQ6IGF1dG87CiAgICAgICAgbGVmdDogMzhweDsKICAgIH0KCgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgVG9vbGJhcgogICAgICovCiAgICAjVG9vbEJhciB7CiAgICAgICAgbGVmdDogMTBweDsKICAgICAgICB0b3A6IDE1cHg7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNUb29sQmFyOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICB9CgogICAgLlJUTCAjVG9vbEJhciB7CiAgICAgICAgbGVmdDogYXV0bzsKICAgICAgICByaWdodDogMTBweDsKICAgIH0KCiAgICAjVG9vbEJhciBsaSB7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAzNHB4OwogICAgICAgIG1hcmdpbjogMCA1cHg7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5SVEwgI1Rvb2xCYXIgbGkgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgIH0KCiAgICAjVG9vbEJhciBsaS5Ub29sQmFySXRlbVNlcGFyYXRvciB7CiAgICAgICAgd2lkdGg6IDBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAzcHggMjBweCAwIDIwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2ZmZjsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgICNUb29sQmFyIGxpLkV4dGVuZGVkIHsKICAgICAgICB3aWR0aDogYXV0bzsKICAgIH0KCiAgICAjVG9vbEJhciBsaS5FeHRlbmRlZCBmb3JtICogewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgfQoKICAgICNUb29sQmFyIGxpLkV4dGVuZGVkIGZvcm0gc2VsZWN0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICB9CgogICAgI1Rvb2xCYXIgbGkuVXNlckF2YXRhciB7CiAgICAgICAgbWFyZ2luOiAtNXB4IDI1cHggMHB4IDEwcHg7CiAgICB9CgogICAgI1Rvb2xCYXIgbGkuVXNlckF2YXRhciAuSW5pdGlhbHMgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAzNXB4OwogICAgICAgIHdpZHRoOiAzNXB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwcHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgdGV4dC1pbmRlbnQ6IDBweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDM3cHg7CiAgICAgICAgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4IHZhcigtLWNvbFRleHREYXJrKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICAjVG9vbEJhciBsaS5Vc2VyQXZhdGFyIGkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjVG9vbEJhciBsaS5Vc2VyQXZhdGFyID4gYSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDM3cHg7CiAgICAgICAgaGVpZ2h0OiAzN3B4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwcHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICAgIG1hcmdpbi10b3A6IC0zcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIGVhc2UgMC4zczsKICAgIH0KCiAgICBib2R5LlZpc2libGUtU2NyZWVuWEwgI1Rvb2xCYXIgbGkuVXNlckF2YXRhcjpob3ZlciA+IGEsCiAgICBib2R5LlZpc2libGUtU2NyZWVuWEwgI1Rvb2xCYXIgbGkuVXNlckF2YXRhciA+IGEuQWN0aXZlIHsKICAgICAgICBhbmltYXRpb24tbmFtZTogYm9yZGVyLWZpbGw7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjNzOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICB9CgogICAgQGtleWZyYW1lcyBib3JkZXItZmlsbCB7CiAgICAgICAgMCUgICB7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1jb2xIaWdobGlnaHQpOyB9CiAgICAgICAgMjUlICB7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1jb2xIaWdobGlnaHQpOyBib3JkZXItbGVmdDogMnB4IHNvbGlkIHZhcigtLWNvbEhpZ2hsaWdodCk7IH0KICAgICAgICA1MCUgIHsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWNvbEhpZ2hsaWdodCk7IGJvcmRlci1sZWZ0OiAycHggc29saWQgdmFyKC0tY29sSGlnaGxpZ2h0KTsgYm9yZGVyLXRvcDogMnB4IHNvbGlkIHZhcigtLWNvbEhpZ2hsaWdodCk7IH0KICAgICAgICAxMDAlIHsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWNvbEhpZ2hsaWdodCk7IGJvcmRlci1sZWZ0OiAycHggc29saWQgdmFyKC0tY29sSGlnaGxpZ2h0KTsgYm9yZGVyLXRvcDogMnB4IHNvbGlkIHZhcigtLWNvbEhpZ2hsaWdodCk7IGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLWNvbEhpZ2hsaWdodCk7IH0KICAgIH0KCiAgICAjVG9vbEJhciBmb3JtW25hbWU9IlNlYXJjaEZ1bGx0ZXh0Il0sCiAgICAjVG9vbEJhciBmb3JtW25hbWU9IlNlYXJjaFByb2ZpbGUiXSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICB9CgogICAgI1Rvb2xCYXIgbGkuVXNlckF2YXRhciBpbWcgewogICAgICAgIHdpZHRoOiAzNXB4OwogICAgICAgIGhlaWdodDogMzVweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAjVG9vbEJhciBsaS5Vc2VyQXZhdGFyIGRpdiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBtaW4td2lkdGg6IDE4MHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgICAgIHotaW5kZXg6IDk5OTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IC0xMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDIycHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sTWFpbkRhcmspOwogICAgfQoKICAgICNUb29sQmFyIGxpLlVzZXJBdmF0YXIgZGl2OmFmdGVyIHsKICAgICAgICBib3R0b206IDEwMCU7CiAgICAgICAgbGVmdDogMTVweDsKICAgICAgICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGNvbnRlbnQ6ICIgIjsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSg4NSwgODUsIDg1LCAwKTsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1jb2xNYWluRGFyayk7CiAgICAgICAgYm9yZGVyLXdpZHRoOiAxNXB4OwogICAgfQoKICAgICNUb29sQmFyIGxpLlVzZXJBdmF0YXIgZGl2IGEsCiAgICAjVG9vbEJhciBsaS5Vc2VyQXZhdGFyIGRpdiBzcGFuIHsKICAgICAgICB0ZXh0LWluZGVudDogMHB4OwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBsaW5lLWhlaWdodDogMThweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sQkdMaWdodCk7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xNYWluRGFyayk7CiAgICB9CgogICAgYm9keS5WaXNpYmxlLVNjcmVlblhMICNUb29sQmFyIGxpLlVzZXJBdmF0YXIgZGl2IGE6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbE1haW5EYXJrKTsKICAgICAgICBjb2xvcjogdmFyKC0tY29sSGlnaGxpZ2h0KTsKICAgIH0KCiAgICAjVG9vbEJhciBsaS5Vc2VyQXZhdGFyIGRpdiBhOmxhc3QtY2hpbGQgewogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgfQoKICAgICNUb29sQmFyIGxpLlVzZXJBdmF0YXIgZGl2IHNwYW4gewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbEhpZ2hsaWdodCk7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgICAgcGFkZGluZy10b3A6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sTWFpbkRhcmspOwogICAgfQoKICAgICNUb29sQmFyIGxpLlVzZXJBdmF0YXIgZGl2IHN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIH0KCiAgICAjVG9vbEJhciBhIHsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKICAgICNUb29sQmFyIGEgaSB7CiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWwgIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB0ZXh0LWluZGVudDogMDsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdG9wOiAtOXB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xIaWdobGlnaHQpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI1Rvb2xCYXIgYSBpLmljb24tc21hbGwgewogICAgICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogLTdweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgdG9wOiAtM3B4OwogICAgICAgIHdpZHRoOiAxNXB4OwogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjVG9vbEJhciAuTmV3IC5pY29uLXNtYWxsLmljb24tc2hvdy1uZXcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI1Rvb2xCYXIgLlJlYWNoZWQgLmljb24tc21hbGwuaWNvbi1zaG93LXJlYWNoZWQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI1Rvb2xCYXIgYSBzcGFuLkNvdW50ZXIgewogICAgICAgIGJvdHRvbTogLTE0cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMnB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgdGV4dC1pbmRlbnQ6IDAgIWltcG9ydGFudDsKICAgICAgICB3aWR0aDogMjRweDsKICAgIH0KCiAgICAjVG9vbEJhciAuRXh0ZW5kZWQuU2VhcmNoUHJvZmlsZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgICNUb29sQmFyIC5FeHRlbmRlZC5TZWFyY2hQcm9maWxlIGlucHV0W3R5cGU9dGV4dF0gewogICAgICAgIG1hcmdpbi1yaWdodDogMHB4OwogICAgfQoKICAgICNUb29sQmFyIC5FeHRlbmRlZCBpbnB1dFt0eXBlPXRleHRdIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTVweCA0cHggMjlweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xNYWluRGFyayk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sSGlnaGxpZ2h0KTsKICAgICAgICBib3gtc2hhZG93OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIC8qICAgIHRvcDogLTFweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IC01cHg7ICovCiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCBlYXNlIDAuM3M7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbE5vdGlmeU9LKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICB9CgogICAgI1Rvb2xCYXIgLkV4dGVuZGVkIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEhvdmVyTGlnaHQpOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyaykKICAgIH0KCiAgICAjVG9vbEJhciAuRXh0ZW5kZWQgaW5wdXRbdHlwZT10ZXh0XTpub3QoLklucHV0RmllbGRfU2VhcmNoKSB7CiAgICAgICAgd2lkdGg6IDkwcHggIWltcG9ydGFudDsKICAgIH0KCiAgICAjVG9vbEJhciAuRXh0ZW5kZWQuU2VhcmNoRnVsbHRleHQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAjVG9vbEJhciAuRXh0ZW5kZWQuU2VhcmNoRnVsbHRleHQ6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAiXGYwMDIiOwogICAgICAgIGZvbnQtZmFtaWx5OiBGb250QXdlc29tZTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAyMHB4OwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbEhpZ2hsaWdodCk7CiAgICAgICAgdG9wOiA2cHg7CiAgICB9CgogICAgI1Rvb2xCYXIgLkV4dGVuZGVkIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAzOwogICAgfQoKICAgICNUb29sQmFyIC5FeHRlbmRlZCBpbnB1dFt0eXBlPXRleHRdOm5vdCguSW5wdXRGaWVsZF9TZWFyY2gpOmZvY3VzIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDdweDsKICAgICAgICB3aWR0aDogMTIwcHggIWltcG9ydGFudDsKICAgIH0KCiAgICAjVG9vbEJhciAuRXh0ZW5kZWQgaW5wdXRbdHlwZT10ZXh0XTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7IC8qIFdlYktpdCwgQmxpbmssIEVkZ2UgKi8KICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgIH0KCiAgICAjVG9vbEJhciAuRXh0ZW5kZWQgaW5wdXRbdHlwZT10ZXh0XTotbW96LXBsYWNlaG9sZGVyIHsgLyogTW96aWxsYSBGaXJlZm94IDQgdG8gMTggKi8KICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgIH0KCiAgICAjVG9vbEJhciAuRXh0ZW5kZWQgaW5wdXRbdHlwZT10ZXh0XTo6LW1vei1wbGFjZWhvbGRlciB7IC8qIE1vemlsbGEgRmlyZWZveCAxOSsgKi8KICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgIH0KCiAgICAjVG9vbEJhciAuRXh0ZW5kZWQgaW5wdXRbdHlwZT10ZXh0XTotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyAvKiBJbnRlcm5ldCBFeHBsb3JlciAxMC0xMSAqLwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgfQoKICAgICNUb29sQmFyIC5FeHRlbmRlZCBpbnB1dFt0eXBlPXRleHRdOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyAvKiBNaWNyb3NvZnQgRWRnZSAqLwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgfQoKICAgICNUb29sQmFyIC5FeHRlbmRlZCBpbnB1dFt0eXBlPXRleHRdOmZvY3VzOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsgLyogV2ViS2l0LCBCbGluaywgRWRnZSAqLwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAjVG9vbEJhciAuRXh0ZW5kZWQgaW5wdXRbdHlwZT10ZXh0XTpmb2N1czotbW96LXBsYWNlaG9sZGVyIHsgLyogTW96aWxsYSBGaXJlZm94IDQgdG8gMTggKi8KICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICB9CgogICAgI1Rvb2xCYXIgLkV4dGVuZGVkIGlucHV0W3R5cGU9dGV4dF06Zm9jdXM6Oi1tb3otcGxhY2Vob2xkZXIgeyAvKiBNb3ppbGxhIEZpcmVmb3ggMTkrICovCiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgfQoKICAgICNUb29sQmFyIC5FeHRlbmRlZCBpbnB1dFt0eXBlPXRleHRdOmZvY3VzOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7IC8qIEludGVybmV0IEV4cGxvcmVyIDEwLTExICovCiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgfQoKICAgICNUb29sQmFyIC5FeHRlbmRlZCBpbnB1dFt0eXBlPXRleHRdOmZvY3VzOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyAvKiBNaWNyb3NvZnQgRWRnZSAqLwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICAgICAgTmF2aWdhdGlvbiBMZXZlbC0wCiAgICAgKi8KCiAgICAjTmF2aWdhdGlvbkNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTVweDsKICAgICAgICBsZWZ0OiAxMHB4OwogICAgICAgIHotaW5kZXg6IDIwOwogICAgICAgIHdpZHRoOiA5OCU7CiAgICAgICAgaGVpZ2h0OiAzNHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLk5hdkNvbnRhaW5lclpJbmRleHsKICAgICAgICB6LWluZGV4OiA1NTAwICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI05hdmlnYXRpb25Db250YWluZXIgI05hdmlnYXRpb24gewogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB9CgogICAgLlJUTCAjTmF2aWdhdGlvbkNvbnRhaW5lciB7CiAgICAgICAgbGVmdDogYXV0bzsKICAgICAgICByaWdodDogMTBweDsKICAgIH0KCiAgICAjTmF2aWdhdGlvbkNvbnRhaW5lciA+IGEgewogICAgICAgIGJhY2tncm91bmQ6ICNmMzk2MGQ7CiAgICAgICAgY29sb3I6ICNGRkZGRkY7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGhlaWdodDogMzRweDsKICAgICAgICBsaW5lLWhlaWdodDogMjhweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIHotaW5kZXg6IDEwMDsKICAgIH0KCiAgICAjTmF2aWdhdGlvbkNvbnRhaW5lciA+IGEuTmF2aWdhdGlvbkJhck5hdmlnYXRlUmlnaHQgewogICAgICAgIHJpZ2h0OiAwcHg7CiAgICB9CgogICAgI05hdmlnYXRpb25Db250YWluZXIgPiBhLk5hdmlnYXRpb25CYXJOYXZpZ2F0ZUxlZnQgewogICAgICAgIGxlZnQ6IDBweDsKICAgIH0KCiAgICAjTmF2aWdhdGlvbkNvbnRhaW5lciA+IGE6aG92ZXIgewogICAgICAgIHBhZGRpbmctdG9wOiAxcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxcHg7CiAgICAgICAgd2lkdGg6IDE5cHg7CiAgICAgICAgaGVpZ2h0OiAzM3B4OwogICAgfQoKICAgICNOYXZpZ2F0aW9uQ29udGFpbmVyID4gYSBpIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKICAgICNOYXZpZ2F0aW9uQ29udGFpbmVyID4gLmZhLWNoZWNrIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIHRvcDogOHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgICAgIE1haW4gaG92ZXIgZWZmZWN0CiAgICAgKi8KICAgICNOYXZpZ2F0aW9uID4gbGkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAjTmF2aWdhdGlvbiA+IGxpID4gYSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAyMXB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4IDRweCAxMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sQkdMaWdodCk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgICNOYXZpZ2F0aW9uID4gbGkgPiBhOmFmdGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDNweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEhpZ2hsaWdodCk7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAxKTsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAzMDBtcyBlYXNlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICB9CgogICAgI05hdmlnYXRpb24gPiBsaSA+IGEjR2xvYmFsU2VhcmNoTmF2IHsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyMXB4OwogICAgfQoKICAgICNOYXZpZ2F0aW9uID4gbGkgPiBhI0dsb2JhbFNlYXJjaE5hdiBpIHsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgfQoKICAgIC5SVEwgI05hdmlnYXRpb24gPiBsaSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgfQoKICAgIC5SVEwgI05hdmlnYXRpb24gPiBsaSA+IGEgewogICAgICAgIHBhZGRpbmc6IDRweCA0cHggM3B4IDE1cHg7CiAgICB9CgogICAgLlJUTCAjTmF2aWdhdGlvbiA+IGxpID4gYSNHbG9iYWxTZWFyY2hOYXYgewogICAgICAgIHBhZGRpbmctcmlnaHQ6IDRweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDI2cHg7CiAgICB9CgogICAgI05hdmlnYXRpb24gPiBsaTpob3ZlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgICNOYXZpZ2F0aW9uID4gbGk6aG92ZXIgPiBhLAogICAgI05hdmlnYXRpb24gPiBsaTphY3RpdmUgPiBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sSGlnaGxpZ2h0KTsKICAgIH0KCgogICAgI05hdmlnYXRpb24gPiBsaTpob3ZlciA+IGE6YWZ0ZXIsCiAgICAjTmF2aWdhdGlvbiA+IGxpOmFjdGl2ZSA+IGE6YWZ0ZXIsCiAgICAjTmF2aWdhdGlvbiA+IGxpID4gYTpob3ZlcjphZnRlciwKICAgICNOYXZpZ2F0aW9uID4gbGkgPiBhOmFjdGl2ZTphZnRlciwKICAgICNOYXZpZ2F0aW9uID4gbGkgPiBhOmZvY3VzOmFmdGVyLAogICAgI05hdmlnYXRpb24gPiBsaS5TZWxlY3RlZCA+IGE6YWZ0ZXIgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSk7CiAgICB9CgogICAgI05hdmlnYXRpb24gPiAuU2VsZWN0ZWQgewogICAgICAgIHotaW5kZXg6IDkwOwogICAgfQoKICAgICNOYXZpZ2F0aW9uID4gLlNlbGVjdGVkID4gYSB7CiAgICAgICAgY29sb3I6ICNGRkY7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgICAgIFNlYXJjaCBpY29uCiAgICAgKi8KICAgICNOYXZpZ2F0aW9uIC5TZWFyY2ggewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgfQoKICAgICNOYXZpZ2F0aW9uIGEgaSB7CiAgICAgICAgdG9wOiAycHg7CiAgICAgICAgbGVmdDogMTVweDsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xIaWdobGlnaHQpOwogICAgfQoKICAgICNOYXZpZ2F0aW9uIGEgaS5mYS5mYS1zZWFyY2ggewogICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gICAgICBOYXZpZ2F0aW9uIFNlY29uZCBsZXZlbAogICAgICovCgogICAgI05hdmlnYXRpb24gPiBsaSA+IHVsIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgICNOYXZpZ2F0aW9uID4gLkFjdGl2ZSA+IHVsIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAzNHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB6LWluZGV4OiA5OTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xNYWluRGFyayk7CiAgICAgICAgbWluLXdpZHRoOiAxMDAlOwogICAgfQoKICAgIC5SVEwgI05hdmlnYXRpb24gPiAuQWN0aXZlID4gdWwgewogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgICAgcmlnaHQ6IC05cHg7CiAgICB9CgogICAgI05hdmlnYXRpb24gPiAuQWN0aXZlID4gdWwgPiBsaSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4OwogICAgICAgIG1hcmdpbi10b3A6IC0xcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgI05hdmlnYXRpb24gPiAuQWN0aXZlID4gdWwgPiBsaTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sSGlnaGxpZ2h0KTsKICAgIH0KCiAgICAjTmF2aWdhdGlvbiA+IC5BY3RpdmUgPiB1bCA+IGxpOmhvdmVyID4gYSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAjTmF2aWdhdGlvbiA+IC5BY3RpdmUgPiB1bCA+IGxpID4gYSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sTWFpbkRhcmspOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbE1haW5EYXJrKTsKICAgIH0KCiAgICAjTmF2aWdhdGlvbiA+IC5BY3RpdmUgPiB1bCA+IGxpID4gYTpob3ZlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xIaWdobGlnaHQpOwogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xNYWluRGFyayk7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sTWFpbkRhcmspOwogICAgfQoKICAgICNOYXZpZ2F0aW9uID4gLkFjdGl2ZSA+IHVsID4gbGk6bGFzdC1jaGlsZCA+IGEgewogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICB9Cgp9IC8qIGVuZCBAbWVkaWEgKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIElucHV0IEZpZWxkcwogKi8KCkBtZWRpYSBzY3JlZW4sIHByaW50IHsKCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBHZW5lcmFsCiAgICAgKi8KCiAgICBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgfQoKICAgIGRpdi5JbnB1dEZpZWxkX0lucHV0Q29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4OwogICAgfQoKICAgIC5JbnB1dEZpZWxkX1NlYXJjaDo6LW1zLWNsZWFyIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHdpZHRoIDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICB9CgogICAgLklucHV0RmllbGRfU2VhcmNoLAogICAgLklucHV0RmllbGRfQXV0b2NvbXBsZXRlIHsKICAgICAgICBtaW4td2lkdGg6IDE5MHB4OwogICAgfQoKICAgIC5JbnB1dEZpZWxkX1NlYXJjaC5TbWFsbCB7CiAgICAgICAgbWluLXdpZHRoOiAxMzBweDsKICAgIH0KCiAgICAuSW5wdXRGaWVsZF9TZWFyY2hbcmVhZG9ubHldOmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLklucHV0RmllbGRfU2VhcmNoW3JlYWRvbmx5XS5FcnJvcjpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xUZXh0RXJyKTsKICAgIH0KCiAgICAuU2lkZWJhckNvbHVtbiAuV2lkZ2V0U2ltcGxlIC5JbnB1dEZpZWxkX1NlYXJjaCwKICAgIC5TaWRlYmFyQ29sdW1uIC5XaWRnZXRTaW1wbGUgLklucHV0RmllbGRfQXV0b2NvbXBsZXRlIHsKICAgICAgICBtaW4td2lkdGg6IDgwcHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIH0KCiAgICAuU2lkZWJhckNvbHVtbiAuV2lkZ2V0U2ltcGxlIC5JbnB1dEZpZWxkX0NvbnRhaW5lciwKICAgIC5TaWRlYmFyQ29sdW1uIC5XaWRnZXRTaW1wbGUgLklucHV0RmllbGRfQ29udGFpbmVyIC5JbnB1dEZpZWxkX0lucHV0Q29udGFpbmVyLAogICAgLlNpZGViYXJDb2x1bW4gLldpZGdldFNpbXBsZSBzZWxlY3QuTW9kZXJuaXplIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAuV2lkZ2V0U2V0dGluZ3NGb3JtIC5JbnB1dEZpZWxkX1NlYXJjaCwKICAgIC5XaWRnZXRTZXR0aW5nc0Zvcm0gLklucHV0RmllbGRfQXV0b2NvbXBsZXRlIHsKICAgICAgICBtaW4td2lkdGg6IDBweDsKICAgIH0KCiAgICAub29vQUNMSGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLk11bHRpVmFsdWVfVGVtcGxhdGUgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAuUm93X0R5bmFtaWNGaWVsZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgIH0KCiAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkgewogICAgICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IC5Nb2Rlcm5pemUjVHlwZUlELAogICAgICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IC5Nb2Rlcm5pemUjRGVzdCwKICAgICAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgPiAuTW9kZXJuaXplI05ld1F1ZXVlSUQsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gLk1vZGVybml6ZSNTZXJ2aWNlSUQsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gLk1vZGVybml6ZSNTTEFJRCwKICAgICAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgPiAuTW9kZXJuaXplI05ld1VzZXJJRCwKICAgICAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgPiAuTW9kZXJuaXplI05ld093bmVySUQsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gLk1vZGVybml6ZSNOZXdSZXNwb25zaWJsZUlELAogICAgICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IC5Nb2Rlcm5pemUjU3RhbmRhcmRUZW1wbGF0ZUlELAogICAgICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IC5Nb2Rlcm5pemUjTmV4dFN0YXRlSUQsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gLk1vZGVybml6ZSNOZXdTdGF0ZUlELAogICAgICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5GaWVsZCA+IC5Nb2Rlcm5pemUjUHJpb3JpdHlJRCwKICAgICAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgPiAuTW9kZXJuaXplI05ld1ByaW9yaXR5SUQsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5GaWVsZCA+IHNlbGVjdC5Nb2Rlcm5pemUgewogICAgICAgICAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgICAgIH0KCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gaW5wdXQuVzUwcGMsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdyA+IC5GaWVsZCA+IGlucHV0Llc1MHBjIHsKICAgICAgICAgICAgbWF4LXdpZHRoOiAzMTBweDsKICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICB9CgogICAgICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuUm93ID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCA+IHNlbGVjdC5Nb2Rlcm5pemUsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlIC5Sb3cgPiAuRmllbGRDZWxsID4gLkZpZWxkID4gaW5wdXQuVzc1cGMsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlIC5Sb3cgPiAuRmllbGRDZWxsID4gLkZpZWxkID4gaW5wdXQuVzUwcGMsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlIC5Sb3cgPiAuRmllbGRDZWxsID4gLkZpZWxkID4gaW5wdXRbdHlwZT0idGV4dCJdLAogICAgICAgIGZpZWxkc2V0LlRhYmxlTGlrZSAuRmllbGRDZWxsID4gLkZpZWxkID4gZGl2LklucHV0RmllbGRfQ29udGFpbmVyID4gZGl2LklucHV0RmllbGRfSW5wdXRDb250YWluZXIgPiAuSW5wdXRGaWVsZF9TZWFyY2gsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlIC5GaWVsZENlbGwgPiAuRmllbGQgPiBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIgPiBkaXYuSW5wdXRGaWVsZF9JbnB1dENvbnRhaW5lciA+IC5JbnB1dEZpZWxkX0F1dG9jb21wbGV0ZSB7CiAgICAgICAgICAgIG1pbi13aWR0aDogMzAwcHg7CiAgICAgICAgfQoKICAgICAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93Om5vdCguTXVsdGlDb2x1bW4pID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCA+IGlucHV0Llc1MHBjIHsKICAgICAgICAgICAgbWF4LXdpZHRoOiA1MCU7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQoKICAgICAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgPiBpbnB1dC5XNzVwYywKICAgICAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93ID4gLkZpZWxkID4gaW5wdXQuVzc1cGMgewogICAgICAgICAgICBtYXgtd2lkdGg6IDYyMHB4OwogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIH0KCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gaW5wdXQjU3ViamVjdCB7CiAgICAgICAgICAgIHdpZHRoOiA3NSU7CiAgICAgICAgICAgIG1heC13aWR0aDogNjIwcHg7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQoKICAgICAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuRmllbGQgPiBkaXYuQ3VzdG9tZXJDb250YWluZXIsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gZGl2LkNjQ3VzdG9tZXJDb250YWluZXIsCiAgICAgICAgZmllbGRzZXQuVGFibGVMaWtlID4gLkZpZWxkID4gZGl2LkJjY0N1c3RvbWVyQ29udGFpbmVyIHsKICAgICAgICAgICAgd2lkdGg6IGNhbGMoIDc1JSAtIDdweCApOwogICAgICAgICAgICBtYXgtd2lkdGg6IDYwN3B4OwogICAgICAgIH0KCiAgICB9CgogICAgI0hlYWRlciBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgI1Rvb2xCYXIgbGkuRXh0ZW5kZWQgZm9ybSBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIgKiB7CiAgICAgICAgZmxvYXQ6IG5vbmU7CiAgICB9CgogICAgI1Rvb2xCYXIgZGl2LklucHV0RmllbGRfQ29udGFpbmVyIGxpIHsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbWFyZ2luOiBpbmhlcml0OwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgfQoKICAgICNUb29sQmFyIGRpdi5JbnB1dEZpZWxkX0NvbnRhaW5lciBhIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHRleHQtaW5kZW50OiAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgfQoKICAgICNUb29sQmFyIC5JbnB1dEZpZWxkX1NlYXJjaCwKICAgICNUb29sQmFyIC5JbnB1dEZpZWxkX0F1dG9jb21wbGV0ZSB7CiAgICAgICAgbWluLXdpZHRoOiA2NXB4OwogICAgfQoKICAgIC5JbnB1dEZpZWxkX1NlYXJjaFtkaXNhYmxlZD0iZGlzYWJsZWQiXSB7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICB9CgogICAgZGl2LklucHV0RmllbGRfSW5wdXRDb250YWluZXIgLklucHV0RmllbGRfU2VhcmNoIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgICNDb250ZXh0U2V0dGluZ3NEaWFsb2cgZGl2LklucHV0RmllbGRfSW5wdXRDb250YWluZXIgLklucHV0RmllbGRfU2VhcmNoIHsKICAgICAgICBtaW4td2lkdGg6IDBweDsKICAgIH0KCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93Lk11bHRpQ29sdW1uID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCA+IHNlbGVjdC5Nb2Rlcm5pemUsCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuUm93Lk11bHRpQ29sdW1uID4gLkZpZWxkQ2VsbCA+IC5GaWVsZCA+IGlucHV0Llc3NXBjLAogICAgZmllbGRzZXQuVGFibGVMaWtlID4gLlJvdy5NdWx0aUNvbHVtbiA+IC5GaWVsZENlbGwgPiAuRmllbGQgPiBpbnB1dC5XNTBwYywKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cuTXVsdGlDb2x1bW4gPiAuRmllbGRDZWxsIC5JbnB1dEZpZWxkX0lucHV0Q29udGFpbmVyID4gaW5wdXQgewogICAgICAgIG1pbi13aWR0aDogMCAhaW1wb3J0YW50OwogICAgICAgIHdpZHRoOiBjYWxjKCAxMDAlIC0gN3B4ICk7CiAgICB9CgogICAgLkR5bmFtaWNGaWVsZERCIHsKICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gMTJweCkgIWltcG9ydGFudDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cuTXVsdGlDb2x1bW4gPiAuRmllbGRDZWxsIC5JbnB1dEZpZWxkX0NvbnRhaW5lciwKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IC5Sb3cuTXVsdGlDb2x1bW4gPiAuRmllbGRDZWxsIC5JbnB1dEZpZWxkX0lucHV0Q29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMDsKICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qLkZpZWxkQ2VsbCAuSW5wdXRGaWVsZF9TZWFyY2ggewogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICB9Ki8KCiAgICAvKi5NdWx0aUNvbHVtbiA+IC5GaWVsZENlbGwgPiAuRmllbGQgPiBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIgPiBkaXYuSW5wdXRGaWVsZF9JbnB1dENvbnRhaW5lciA+IC5JbnB1dEZpZWxkX1NlYXJjaCwKICAgIC5NdWx0aUNvbHVtbiA+IC5GaWVsZENlbGwgPiAuRmllbGQgPiBkaXYuSW5wdXRGaWVsZF9Db250YWluZXIgPiBkaXYuSW5wdXRGaWVsZF9JbnB1dENvbnRhaW5lciA+IC5JbnB1dEZpZWxkX0F1dG9jb21wbGV0ZSB7CiAgICAgICAgbWluLXdpZHRoOiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgICB9Ki8KCiAgICAuRmllbGRDZWxsIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgfQoKICAgIC8qZGl2LlJvdy5Sb3dfRHluYW1pY0ZpZWxkIGRpdi5TaW5nbGVDb2x1bW4gPiBsYWJlbCwKICAgIGRpdi5Sb3cuUm93X0R5bmFtaWNGaWVsZCBkaXYuU2luZ2xlQ29sdW1uID4gZGl2Lk11bHRpVmFsdWVJdGVtID4gbGFiZWwsCiAgICBkaXYuUm93LlJvd19EeW5hbWljRmllbGQgZGl2Lk11bHRpQ29sdW1uID4gbGFiZWwsCiAgICBkaXYuUm93LlJvd19EeW5hbWljRmllbGQgZGl2Lk11bHRpQ29sdW1uID4gZGl2Lk11bHRpVmFsdWVJdGVtID4gbGFiZWwgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICAgIGZsb2F0OiBub25lOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgZm9udC1zaXplOiAwLjllbTsKICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjllbTsKICAgICAgICBtaW4taGVpZ2h0OiAxN3B4OwogICAgICAgIHBhZGRpbmctdG9wOiAwLjNlbTsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMXB4OwogICAgICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNGQUZBRkE7CiAgICB9Ki8KCiAgICAuQWRkUmVtb3ZlVmFsdWVSb3cgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDhweDsKICAgIH0KCiAgICAuQWRkVmFsdWVSb3csCiAgICAuUmVtb3ZlVmFsdWVSb3cgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICBmaWVsZHNldC5EeW5hbWljRmllbGRTZXQgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgd2lkdGg6IDEwMCUKICAgIH0KCiAgICAvKiBuZWVkZWQgZm9yIG11bHRpdmFsdWUgc2V0cyBkdWUgdG8gY3VycmVudCBkaWZmZXJlbmNlIGluIG91dGVyIHN0cnVjdHVyZSBjb21wYXJlZCB0byBzaW5nbGUgdmFsdWUgc2V0cyAqLwogICAgLk11bHRpVmFsdWUgPiAuRmllbGRDZWxsID4gLkZpZWxkID4gLkR5bmFtaWNGaWVsZFNldCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLk11bHRpVmFsdWUgLkRGU2V0T3V0ZXJGaWVsZCB+IC5BZGRSZW1vdmVWYWx1ZVJvdyB7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgIH0KCiAgICBhLklucHV0RmllbGRfQWN0aW9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgICAgICB0b3A6IDVweDsKICAgIH0KCiAgICBhLklucHV0RmllbGRfQWN0aW9uOmhvdmVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sSGlnaGxpZ2h0KTsKICAgIH0KCiAgICBkaXYuSW5wdXRGaWVsZF9TZWxlY3Rpb24gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNHB4OwogICAgICAgIGhlaWdodDogMTdweDsKICAgICAgICBsaW5lLWhlaWdodDogMTFweDsKICAgICAgICB0ZXh0LXNoYWRvdzogbm9uZTsKICAgIH0KCiAgICBkaXYuSW5wdXRGaWVsZF9TZWxlY3Rpb24gZGl2IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgfQoKICAgIGRpdi5JbnB1dEZpZWxkX1NlbGVjdGlvbiBkaXYuVGV4dCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdNZWRpdW0pOwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICB9CgogICAgZGl2LklucHV0RmllbGRfU2VsZWN0aW9uIGRpdi5SZW1vdmUgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5BbHJlYWR5RGlzYWJsZWQgZGl2LklucHV0RmllbGRfU2VsZWN0aW9uIGRpdi5UZXh0IHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLkFscmVhZHlEaXNhYmxlZCBkaXYuSW5wdXRGaWVsZF9TZWxlY3Rpb24gZGl2LlJlbW92ZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgZGl2LklucHV0RmllbGRfU2VsZWN0aW9uIGRpdi5SZW1vdmUgYSB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcGFkZGluZzogMnB4IDRweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgfQoKICAgIGRpdi5JbnB1dEZpZWxkX01vcmUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRvcDogNnB4OwogICAgfQoKICAgIGRpdi5JbnB1dEZpZWxkX0xpc3RDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB6LWluZGV4OiA2MTAwOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgdGV4dC1zaGFkb3c6IG5vbmU7CiAgICB9CgogICAgZGl2LklucHV0RmllbGRfVHJlZUNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgICAgICBsaW5lLWhlaWdodDogMThweDsKICAgIH0KCiAgICAuRXhwYW5kVG9Ub3AgZGl2LklucHV0RmllbGRfVHJlZUNvbnRhaW5lciB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgIH0KCiAgICBkaXYuSW5wdXRGaWVsZF9Ub29sYmFyQ29udGFpbmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bSk7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBsaW5lLWhlaWdodDogMjFweDsKICAgICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICAgICAgICBtaW4taGVpZ2h0OiAyMXB4OwogICAgfQoKICAgIGRpdi5JbnB1dEZpZWxkX1Rvb2xiYXJDb250YWluZXIgdWwgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgfQoKICAgIGRpdi5JbnB1dEZpZWxkX1Rvb2xiYXJDb250YWluZXIgdWwgbGkgewogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgfQoKICAgIGRpdi5JbnB1dEZpZWxkX1Rvb2xiYXJDb250YWluZXIgdWwgbGk6YWZ0ZXIgewogICAgICAgIGNvbG9yOiAjYmJiOwogICAgICAgIGNvbnRlbnQ6ICJ8IjsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIGRpdi5JbnB1dEZpZWxkX1Rvb2xiYXJDb250YWluZXIgdWwgbGk6bGFzdC1jaGlsZDphZnRlciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuUlRMIGRpdi5JbnB1dEZpZWxkX1Rvb2xiYXJDb250YWluZXIgdWwgbGk6bGFzdC1jaGlsZDphZnRlciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgfQoKICAgIC5SVEwgZGl2LklucHV0RmllbGRfVG9vbGJhckNvbnRhaW5lciB1bCBsaTpmaXJzdC1jaGlsZDphZnRlciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICBkaXYuSW5wdXRGaWVsZF9Ub29sYmFyQ29udGFpbmVyIHVsIGxpIGEgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogMnB4IDVweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE1cHg7CiAgICB9CgogICAgZGl2LklucHV0RmllbGRfVG9vbGJhckNvbnRhaW5lciBpIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIGRpdi5JbnB1dEZpZWxkX1Rvb2xiYXJDb250YWluZXIgdWwgbGkgYTpob3ZlciB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWNvbEhpZ2hsaWdodCk7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIH0KCiAgICAuSW5wdXRGaWVsZF9Db25maXJtLAogICAgLklucHV0RmllbGRfRmlsdGVycy5BY3RpdmUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgfQoKICAgIC5JbnB1dEZpZWxkX0ZpbHRlcnNMaXN0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgei1pbmRleDogMTUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS41ZW07CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgfQoKICAgIC5JbnB1dEZpZWxkX0ZpbHRlcnNMaXN0IHNwYW4gewogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIH0KCiAgICAuSW5wdXRGaWVsZF9GaWx0ZXJzTGlzdCBpbnB1dFtkaXNhYmxlZD0iZGlzYWJsZWQiXSArIHNwYW4gewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBqc1RyZWUgdGhlbWUKICAgICAqLwogICAgLmpzdHJlZS1JbnB1dEZpZWxkIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLW5vZGUsCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1jaGlsZHJlbiwKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLWNvbnRhaW5lci11bCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogICAgICAgIGxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIH0KCiAgICAuUlRMIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLW5vZGUsCiAgICAuUlRMIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLWNoaWxkcmVuLAogICAgLlJUTCAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1jb250YWluZXItdWwgewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLW5vZGUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtbm9kZS5qc3RyZWUtaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLWFuY2hvciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBwYWRkaW5nOiAwIDRweCAwIDFweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1hbmNob3I6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IDA7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1hbmNob3IsCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1hbmNob3I6bGluaywKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLWFuY2hvcjp2aXNpdGVkLAogICAgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtYW5jaG9yOmhvdmVyLAogICAgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtYW5jaG9yOmFjdGl2ZSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLWljb24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtaWNvbjplbXB0eSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1vY2wgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1sZWFmID4gLmpzdHJlZS1vY2wgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZSAuanN0cmVlLW9wZW4gPiAuanN0cmVlLWNoaWxkcmVuIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZSAuanN0cmVlLWNsb3NlZCA+IC5qc3RyZWUtY2hpbGRyZW4sCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZSAuanN0cmVlLWxlYWYgPiAuanN0cmVlLWNoaWxkcmVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLWFuY2hvciA+IC5qc3RyZWUtdGhlbWVpY29uIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1uby1pY29ucyAuanN0cmVlLXRoZW1laWNvbiwKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLWFuY2hvciA+IC5qc3RyZWUtdGhlbWVpY29uLWhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1ydGwgLmpzdHJlZS1hbmNob3IgewogICAgICAgIHBhZGRpbmc6IDAgMXB4IDAgNHB4OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXJ0bCAuanN0cmVlLWFuY2hvciA+IC5qc3RyZWUtdGhlbWVpY29uIHsKICAgICAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1ydGwgLmpzdHJlZS1ub2RlIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1ydGwgLmpzdHJlZS1jb250YWluZXItdWwgPiAuanN0cmVlLW5vZGUgewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1ob3ZlcmVkIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuRGlzYWJsZWQgPiAuanN0cmVlLWFuY2hvciB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCkgIWltcG9ydGFudDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLW9wZW4sCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1jbG9zZWQgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS13aG9sZXJvdy11bCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtaW4td2lkdGg6IDEwMCU7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtd2hvbGVyb3ctdWwgLmpzdHJlZS1sZWFmID4gLmpzdHJlZS1vY2wgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS13aG9sZXJvdy11bCAuanN0cmVlLWFuY2hvciwKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXdob2xlcm93LXVsIC5qc3RyZWUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXdob2xlcm93LXVsIC5qc3RyZWUtd2hvbGVyb3cgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXdob2xlcm93LXVsIC5qc3RyZWUtd2hvbGVyb3ctY2xpY2tlZCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdNZWRpdW0pOwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXdob2xlcm93LXVsIC5qc3RyZWUtd2hvbGVyb3c6aG92ZXIsCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS13aG9sZXJvdy11bCAuanN0cmVlLXdob2xlcm93LWhvdmVyZWQsCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1mb2N1c2VkID4gLmpzdHJlZS13aG9sZXJvdyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sSG92ZXJMaWdodCk7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtd2hvbGVyb3ctdWwgLmpzdHJlZS13aG9sZXJvdy1jbGlja2VkOmhvdmVyLAogICAgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtd2hvbGVyb3ctdWwgLmpzdHJlZS13aG9sZXJvdy1jbGlja2VkLmpzdHJlZS13aG9sZXJvdy1ob3ZlcmVkLAogICAgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtZm9jdXNlZCA+IC5qc3RyZWUtd2hvbGVyb3ctY2xpY2tlZCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sSG92ZXJEYXJrKTsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLkRpc2FibGVkID4gLmpzdHJlZS13aG9sZXJvdzpob3ZlciwKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuRGlzYWJsZWQgPiAuanN0cmVlLXdob2xlcm93LWhvdmVyZWQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuRGlzYWJsZWQuanN0cmVlLW9wZW4gPiAuanN0cmVlLWFuY2hvciwKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuRGlzYWJsZWQuanN0cmVlLWNsb3NlZCA+IC5qc3RyZWUtYW5jaG9yIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQgLmpzdHJlZS1jbGlja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmc6IDAgNHB4IDAgMXB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkLmpzdHJlZS1ydGwgLmpzdHJlZS1ub2RlIHsKICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBQ0FRTUFBQUI0OUk1R0FBQUFCbEJNVkVVQUFBQWRIUnZFa0N3Y0FBQUFBWFJTVGxNQVFPYllaZ0FBQUF4SlJFRlVDTmRqQUFNT0JnQUFHQUFKTXdRSGRRQUFBQUJKUlU1RXJrSmdnZz09Iik7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAxcHg7CiAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC15OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC5qc3RyZWUtcnRsIC5qc3RyZWUtbGFzdCB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkLmpzdHJlZS1ydGwgLmpzdHJlZS1vcGVuID4gLmpzdHJlZS1vY2wgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMzVweCAtMzlweDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQuanN0cmVlLXJ0bCAuanN0cmVlLWNsb3NlZCA+IC5qc3RyZWUtb2NsIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTAzcHggLTM5cHg7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkLmpzdHJlZS1ydGwgLmpzdHJlZS1sZWFmID4gLmpzdHJlZS1vY2wgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC03MXB4IC0zOXB4OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC5qc3RyZWUtcnRsID4gLmpzdHJlZS1uby1kb3RzIC5qc3RyZWUtbm9kZSwKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC5qc3RyZWUtcnRsID4gLmpzdHJlZS1uby1kb3RzIC5qc3RyZWUtbGVhZiA+IC5qc3RyZWUtb2NsIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQuanN0cmVlLXJ0bCA+IC5qc3RyZWUtbm8tZG90cyAuanN0cmVlLW9wZW4gPiAuanN0cmVlLW9jbCB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM5cHggLTM5cHg7CiAgICB9CiAgICAuanN0cmVlLUlucHV0RmllbGQuanN0cmVlLXJ0bCA+IC5qc3RyZWUtbm8tZG90cyAuanN0cmVlLWNsb3NlZCA+IC5qc3RyZWUtb2NsIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtN3B4IC0zOXB4OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZCAuanN0cmVlLXRoZW1laWNvbi1jdXN0b20gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC5qc3RyZWUtcnRsIC5qc3RyZWUtbm9kZSB7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJJQUFBQUNBUU1BQUFCdjFoNlBBQUFBQmxCTVZFVUFBQUFkSFJ2RWtDd2NBQUFBQVhSU1RsTUFRT2JZWmdBQUFBeEpSRUZVQ05kakFBTUhCZ0FBaUFCQkk0Z3o5QUFBQUFCSlJVNUVya0pnZ2c9PScpOwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC5qc3RyZWUtcnRsIC5qc3RyZWUtbGFzdCB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtc2VhcmNoIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtbm8tbWF0Y2ggLmpzdHJlZS1vY2wgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkIC5qc3RyZWUtbm8tbWF0Y2ggewogICAgICAgIG1hcmdpbi1sZWZ0OiAycHggIWltcG9ydGFudDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQuanN0cmVlLXJ0bCAuanN0cmVlLW5vLW1hdGNoIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIGpzVHJlZSB0aGVtZSAtIFRyZWUgdmFyaWFudAogICAgICovCiAgICAuanN0cmVlLUlucHV0RmllbGQtVHJlZSAuanN0cmVlLW5vZGUgewogICAgICAgIG1pbi1oZWlnaHQ6IDE4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE4cHg7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgfQoKICAgIC5SVEwgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1ub2RlIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE4cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgPiAuanN0cmVlLWNvbnRhaW5lci11bCA+IC5qc3RyZWUtbm9kZSwKICAgIC5SVEwgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgPiAuanN0cmVlLWNvbnRhaW5lci11bCA+IC5qc3RyZWUtbm9kZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwOwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtYW5jaG9yIHsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1pY29uIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1pY29uOmVtcHR5IHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUuanN0cmVlLXJ0bCAuanN0cmVlLW5vZGUgewogICAgICAgIG1hcmdpbi1yaWdodDogMThweDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQtVHJlZSAuanN0cmVlLXdob2xlcm93IHsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1ub2RlLAogICAgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1pY29uIHsKICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2ltZy9pbnB1dGZpZWxkX3RyZWUucG5nJyk7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1ub2RlIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjk1cHggLTdweDsKICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXk7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1sYXN0IHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQtVHJlZSAuanN0cmVlLW9wZW4gPiAuanN0cmVlLW9jbCB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEzNXB4IC03cHg7CiAgICB9CgogICAgLlJUTCAuanN0cmVlLUlucHV0RmllbGQtVHJlZSAuanN0cmVlLW9wZW4gPiAuanN0cmVlLW9jbCB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEzNXB4IC0zOXB4OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtY2xvc2VkID4gLmpzdHJlZS1vY2wgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMDNweCAtN3B4OwogICAgfQoKICAgIC5SVEwgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1jbG9zZWQgPiAuanN0cmVlLW9jbCB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEwM3B4IC0zOXB4OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtbGVhZiA+IC5qc3RyZWUtb2NsIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNzFweCAtN3B4OwogICAgfQoKICAgIC5SVEwgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgLmpzdHJlZS1sZWFmID4gLmpzdHJlZS1vY2wgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC03MXB4IC0zOXB4OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtdGhlbWVpY29uIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjYzcHggLTdweDsKICAgIH0KCiAgICAuUlRMIC5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlIC5qc3RyZWUtdGhlbWVpY29uIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjYzcHggLTM5cHg7CiAgICB9CgogICAgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgPiAuanN0cmVlLW5vLWRvdHMgLmpzdHJlZS1ub2RlLAogICAgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgPiAuanN0cmVlLW5vLWRvdHMgLmpzdHJlZS1sZWFmID4gLmpzdHJlZS1vY2wgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlID4gLmpzdHJlZS1uby1kb3RzIC5qc3RyZWUtb3BlbiA+IC5qc3RyZWUtb2NsIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzlweCAtN3B4OwogICAgfQoKICAgIC5SVEwgLmpzdHJlZS1JbnB1dEZpZWxkLVRyZWUgPiAuanN0cmVlLW5vLWRvdHMgLmpzdHJlZS1vcGVuID4gLmpzdHJlZS1vY2wgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0zOXB4IC0zOXB4OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlID4gLmpzdHJlZS1uby1kb3RzIC5qc3RyZWUtY2xvc2VkID4gLmpzdHJlZS1vY2wgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC03cHggLTdweDsKICAgIH0KCiAgICAuUlRMIC5qc3RyZWUtSW5wdXRGaWVsZC1UcmVlID4gLmpzdHJlZS1uby1kb3RzIC5qc3RyZWUtY2xvc2VkID4gLmpzdHJlZS1vY2wgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC03cHggLTM5cHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAganNUcmVlIHRoZW1lIC0gTm8gVHJlZSB2YXJpYW50CiAgICAgKi8KICAgIC5qc3RyZWUtSW5wdXRGaWVsZC1Ob1RyZWUgLmpzdHJlZS1ub2RlIHsKICAgICAgICBtaW4taGVpZ2h0OiAxOHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgfQoKICAgIC5qc3RyZWUtSW5wdXRGaWVsZC1Ob1RyZWUgLmpzdHJlZS1hbmNob3IgewogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBsaW5lLWhlaWdodDogMThweDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQtTm9UcmVlIC5qc3RyZWUtaWNvbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQtTm9UcmVlLmpzdHJlZS1ydGwgLmpzdHJlZS1ub2RlIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweDsKICAgIH0KCiAgICAuanN0cmVlLUlucHV0RmllbGQtTm9UcmVlIC5qc3RyZWUtd2hvbGVyb3cgewogICAgICAgIGhlaWdodDogMThweDsKICAgIH0KCn0gLyogZW5kIEBtZWRpYSAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgTG9naW4gc2NyZWVuCiAqLwoKQG1lZGlhIHNjcmVlbiwgcHJpbnQgewoKICAgIC5Mb2dpblNjcmVlbiB7CiAgICAgICAgcGFkZGluZy10b3A6IDkwcHg7CiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gOTBweCk7CiAgICAgICAgbWluLWhlaWdodDogNDMwcHg7CiAgICB9CgogICAgLkxvZ2luU2NyZWVuIC5NYWluQm94IHsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICB9CgogICAgLkxvZ2luU2NyZWVuIC5FcnJvckJveCwKICAgIC5Mb2dpblNjcmVlbiAuU3VjY2Vzc0JveCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBwYWRkaW5nOiAxMHB4IDI1cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIH0KCiAgICAuTG9naW5TY3JlZW4gLlN1Y2Nlc3NCb3ggewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbE5vdGlmeU9LKTsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICB9CgogICAgI0xvc3RQYXNzd29yZCwKICAgICNCYWNrVG9Mb2dpbiB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICB9CgogICAgLkxvZ2luU2NyZWVuICNIZWFkZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLkxvZ2luU2NyZWVuICNGb290ZXIgewogICAgICAgIGJvcmRlcjogMHB4OwogICAgICAgIGJvdHRvbTogMHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZzogMTVweCAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggI2ZmZjsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIC5Mb2dpblNjcmVlbiAjRm9vdGVyIGEgewogICAgICAgIHBhZGRpbmctbGVmdDogMHB4OwogICAgfQoKICAgICNGb290ZXIgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxOHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgZWFzZSAwLjRzOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgfQoKICAgICNGb290ZXIgYSBzcGFuIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9vdG9iby1zaWduZXQuc3ZnKTsKICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOwogICAgICAgIG1hcmdpbjogMjBweCBhdXRvIDEwcHggYXV0bzsKICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICB9CgogICAgI0Zvb3RlciBhOmhvdmVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgfQoKICAgICNGb290ZXIgYTpob3ZlciBzcGFuIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgfQoKICAgIC5Mb2dpbkJveCwKICAgICNQYXNzd29yZEJveCB7CiAgICAgICAgd2lkdGg6IDM1MHB4OwogICAgICAgIG1hcmdpbjogMHB4IGF1dG87CiAgICB9CgogICAgLkxvZ2luQm94ID4gLldpZGdldFNpbXBsZSwKICAgICNQYXNzd29yZEJveCA+IC5XaWRnZXRTaW1wbGUgewogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICB9CgogICAgLkxvZ2luQm94ID4gLldpZGdldFNpbXBsZSBmb3JtID4gZmllbGRzZXQgPiBkaXYsCiAgICAjUGFzc3dvcmRCb3ggPiAuV2lkZ2V0U2ltcGxlIGZvcm0gPiBmaWVsZHNldCA+IGRpdiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5Mb2dpbkJveCBpbnB1dCwKICAgICNQYXNzd29yZEJveCBpbnB1dCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIH0KCiAgICAuTG9naW5Cb3ggLkVycm9yLkNlbnRlci5TcGFjaW5nOmVtcHR5LAogICAgI1Bhc3N3b3JkQm94IC5FcnJvci5DZW50ZXIuU3BhY2luZzplbXB0eSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuTG9naW5Cb3ggLkNhbGxGb3JBY3Rpb24uRnVsbHNpemUsCiAgICAjUGFzc3dvcmRCb3ggLkNhbGxGb3JBY3Rpb24uRnVsbHNpemUgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIC5Mb2dpbkJveCAuQ2FsbEZvckFjdGlvbi5GdWxsc2l6ZSBzcGFuLAogICAgI1Bhc3N3b3JkQm94IC5DYWxsRm9yQWN0aW9uLkZ1bGxzaXplIHNwYW4gewogICAgICAgIHBhZGRpbmc6IDdweCAxMHB4OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIEN1c3RvbWl6YWJsZSBsb2dvcwogICAgICovCiAgICAjTG9naW5Mb2dvIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoLi4vaW1nL090b2JvX1dvcnRtYXJrZV9EaWdpdGFsX0JsYXVfUkdCLnN2ZykgY2VudGVyIG5vLXJlcGVhdDsKICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47CiAgICAgICAgaGVpZ2h0OiAyMjBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAzMHB4OwogICAgfQoKfSAvKiBlbmQgQG1lZGlhICovCgoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgT3ZlcnZpZXdDb250cm9scwogKi8KCkBtZWRpYSBzY3JlZW4sIHByaW50IHsKCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBPdmVydmlldyBDb250cm9sIEdlbmVyYWwKICAgICAqLwogICAgLk92ZXJ2aWV3QWN0aW9ucyB7CiAgICAgICAgbWluLWhlaWdodDogMjhweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdDb250cm9sIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xFbGVtZW50KTsKICAgIH0KCiAgICAuT3ZlcnZpZXdDb250cm9sID4gZGl2IHsKICAgICAgICBwYWRkaW5nOiAwIDE2cHggMCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdMaWdodCk7CiAgICB9CgogICAgLlJUTCAuT3ZlcnZpZXdDb250cm9sID4gZGl2IHsKICAgICAgICBwYWRkaW5nOiAwIDhweCAwIDE2cHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgQ29udHJvbCBSb3cgVmlldyBab29tCiAgICAgKi8KICAgIC5PdmVydmlld1pvb20gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXJnaW46IDBweCAxMHB4OwogICAgfQoKICAgIC5SVEwgLk92ZXJ2aWV3Wm9vbSB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICB9CgogICAgLk92ZXJ2aWV3Wm9vbSBsaSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgfQoKICAgIC5PdmVydmlld1pvb20gYSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAuT3ZlcnZpZXdab29tIC5BY3RpdmUgYSwKICAgIC5PdmVydmlld1pvb20gLkFjdGl2ZSBhOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgIH0KCiAgICAuT3ZlcnZpZXdab29tIGE6aG92ZXIgewogICAgICAgIGJvcmRlci1ib3R0b206IDBweCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAwcHggIWltcG9ydGFudDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAuT3ZlcnZpZXdab29tICsgLlBhZ2luYXRpb24gewogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTJweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBDb250cm9sIFJvdyBPdmVydmlldyBIZWFkZXIgZm9yIE1lZGl1bSBhbmQgTGFyZ2UgVmlldwogICAgICovCiAgICAuT3ZlcnZpZXdIZWFkZXJNZWRpdW1MYXJnZSBkaXYuSWNvbkNvbnRhaW5lciB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgaGVpZ2h0OiAzMHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9pbWcvb3ZlcnZpZXdjb250cm9sX2xpbmUucG5nKSBuby1yZXBlYXQgYm90dG9tIHJpZ2h0OwogICAgfQoKICAgIC5SVEwgLk92ZXJ2aWV3SGVhZGVyTWVkaXVtTGFyZ2UgZGl2Lkljb25Db250YWluZXIgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogNHB4OwogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSBsZWZ0OwogICAgfQoKICAgIC5PdmVydmlld0hlYWRlck1lZGl1bUxhcmdlIGRpdi5JY29uQ29udGFpbmVyIHNwYW4uQ2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoLi4vaW1nL292ZXJ2aWV3Y29udHJvbF9jaGVja2JveC5wbmcpIG5vLXJlcGVhdCBjZW50ZXI7CiAgICB9CgogICAgLk92ZXJ2aWV3SGVhZGVyTWVkaXVtTGFyZ2UgZGl2Lkljb25Db250YWluZXIgc3Bhbi5GbGFnIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDlweDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiAzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICAuUlRMIC5PdmVydmlld0hlYWRlck1lZGl1bUxhcmdlIGRpdi5JY29uQ29udGFpbmVyIHNwYW4uRmxhZyB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxM3B4OwogICAgfQoKICAgIC5PdmVydmlld0hlYWRlck1lZGl1bUxhcmdlIGRpdi5GaWx0ZXIgewogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgfQoKICAgIC5SVEwgLk92ZXJ2aWV3SGVhZGVyTWVkaXVtTGFyZ2UgZGl2LkZpbHRlciB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1NXB4OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIENvbnRyb2wgUm93IE92ZXJ2aWV3IEhlYWRlciBmb3IgU21hbGwgVmlldwogICAgICovCiAgICAuT3ZlcnZpZXdIZWFkZXJTbWFsbCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBDb250cm9sIFJvdyBGaXggZm9yIFRpY2tldCBDcmVhdGUgTWFza3Mgd2l0aCBEYXRlcGlja2VyCiAgICAgKi8KCiAgICAjQ3VzdG9tZXJUaWNrZXRzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTsKICAgIH0KCn0gLyogZW5kIEBtZWRpYSAqLwoKCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIE92ZXJ2aWV3TGFyZ2UKICovCgpAbWVkaWEgc2NyZWVuLCBwcmludCB7CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgTGFyZ2UgVmlldyBPdmVydmlldwogICAgICovCgogICAgI1RpY2tldE92ZXJ2aWV3TGFyZ2UgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgewogICAgICAgIG1hcmdpbjogMHB4IDE2cHggOHB4IDhweDsKICAgIH0KCiAgICAuUlRMIC5PdmVydmlld0xhcmdlIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuQWN0aW9uUm93IHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgI0VtcHR5TWVzc2FnZUxhcmdlIHsKICAgICAgIHBhZGRpbmc6IDdweDsKICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHTWVkaXVtRGFyayk7CiAgICAgICBtaW4taGVpZ2h0OiAwcHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgPiBsaSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tY29sQkdNZWRpdW1EYXJrKTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlID4gbGk6Zmlyc3QtY2hpbGQgewogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlID4gbGkgdWwuSW5saW5lQWN0aW9ucyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogLTM1cHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGhlaWdodDogMzVweDsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIGVhc2UtaW4gMC4yczsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSA+IGxpIHVsLklubGluZUFjdGlvbnMgbGkgewogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSA+IGxpIHVsLklubGluZUFjdGlvbnMuQWN0aW9ucyBsaTphZnRlciB7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlID4gbGkgdWwuSW5saW5lQWN0aW9ucyBsaSBmb3JtIHsKICAgICAgICBwYWRkaW5nLXRvcDogN3B4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlID4gbGkgdWwuSW5saW5lQWN0aW9ucyBsaSBmb3JtIHNlbGVjdCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlID4gbGkgdWwuSW5saW5lQWN0aW9ucyBsaSBhIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSA+IGxpIHVsLklubGluZUFjdGlvbnMgbGk6bGFzdC1jaGlsZCBhIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDBweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSA+IGxpIHVsLklubGluZUFjdGlvbnMgbGk6bnRoLWNoaWxkKGV2ZW4pIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSA+IGxpIHVsLklubGluZUFjdGlvbnMgbGkuUmVzcG9uc2l2ZUFjdGlvbk1lbnUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgPiBsaSB1bC5JbmxpbmVBY3Rpb25zIGxpLlJlc3BvbnNpdmVBY3Rpb25NZW51OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgICAgZmxvYXQ6IG5vbmU7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICB9CgogICAgYm9keS5Ub3VjaERldmljZSAuT3ZlcnZpZXdMYXJnZSA+IGxpIHVsLklubGluZUFjdGlvbnMgbGkuUmVzcG9uc2l2ZUFjdGlvbk1lbnUuT3BlbmVkOmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIHwgIjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgbWFyZ2luOiA1cHggM3B4OwogICAgfQoKICAgIGJvZHkuVG91Y2hEZXZpY2UgLk92ZXJ2aWV3TGFyZ2UgPiBsaSB1bC5JbmxpbmVBY3Rpb25zIHsKICAgICAgICB0b3A6IDBweDsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgfQoKICAgIGJvZHkuVG91Y2hEZXZpY2UgLk92ZXJ2aWV3TGFyZ2UgPiBsaSB1bC5JbmxpbmVBY3Rpb25zIGxpLlJlc3BvbnNpdmVBY3Rpb25NZW51IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLkNvbnRlbnQgewogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjZmZmOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLkNvbnRlbnQuQXJ0aWNsZUJvZHkgewogICAgICAgIGN1cnNvcjogdGV4dDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuQ29udGVudC5TaG93SW5saW5lQWN0aW9ucyB7CiAgICAgICAgcGFkZGluZy10b3A6IDMycHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgPiBsaTpob3ZlciA+IC5Db250ZW50LAogICAgLk92ZXJ2aWV3TGFyZ2UgPiBsaTpob3ZlciB7CiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWNvbEhpZ2hsaWdodCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSA+IGxpOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlID4gbGk6bnRoLWNoaWxkKGV2ZW4pIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSA+IGxpOm50aC1jaGlsZChldmVuKSAuQ29udGVudCB7CiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIGRpdi5DaGVja2JveCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICB3aWR0aDogMzVweDsKICAgICAgICBoZWlnaHQ6IDM1cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgZGl2LkNoZWNrYm94IGlucHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICB9CgogICAgLlJUTCAuT3ZlcnZpZXdMYXJnZSBpbnB1dC5DaGVja2JveCB7CiAgICAgICAgbGVmdDogYXV0bzsKICAgICAgICByaWdodDogMHB4OwogICAgfQoKICAgIC5SVEwgLk92ZXJ2aWV3TGFyZ2UgZGl2LkNoZWNrYm94IGlucHV0IHsKICAgICAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogOHB4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIGRpdi5GbGFnIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogNXB4OwogICAgICAgIHRvcDogMzdweDsKICAgICAgICB3aWR0aDogMjVweDsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICAuUlRMIC5PdmVydmlld0xhcmdlIGRpdi5GbGFnIHsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIHJpZ2h0OiAtMTBweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSBkaXYuVW5yZWFkQXJ0aWNsZXMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiA0cHg7CiAgICAgICAgdG9wOiA2MHB4OwogICAgfQoKICAgIC5SVEwgLk92ZXJ2aWV3TGFyZ2UgZGl2LlVucmVhZEFydGljbGVzIHsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIHJpZ2h0OiA0cHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgbGk6aG92ZXIgc3Bhbi5VbnJlYWRBcnRpY2xlcyB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDBweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuSW5mb3MgewogICAgICAgIHdpZHRoOiA0MCU7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICB9CgogICAgLlJUTCAuT3ZlcnZpZXdMYXJnZSAuSW5mb3MgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSBkaXYuQ29udGVudC5TaG93SW5saW5lQWN0aW9ucyAuSW5mb3MgewogICAgICAgIG1hcmdpbi10b3A6IC0yMHB4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIGgyIHsKICAgICAgICB3aWR0aDogOTAlOwogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBtYXJnaW46IDAgMTBweCA1cHggNTBweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CgogICAgLlJUTCAuT3ZlcnZpZXdMYXJnZSBoMiB7CiAgICAgICAgbWFyZ2luOiAwIDUwcHggNXB4IDEwcHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgaDIgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLkluZm9zIHRhYmxlIHsKICAgICAgICBtYXJnaW46IDAgMTBweCAwIDUwcHg7CiAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDsKICAgICAgICB3aWR0aDogNzUlOwogICAgfQoKICAgIC5SVEwgLk92ZXJ2aWV3TGFyZ2UgLkluZm9zIHRhYmxlIHsKICAgICAgICBtYXJnaW46IDAgNTBweCAwIDEwcHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLkluZm9zIHRhYmxlIHRyOmxhc3QtY2hpbGQgdGQgewogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLkluZm9zIHRhYmxlIHRyLk1pZGRsZSB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRvdHRlZCB2YXIoLS1jb2xCR0RhcmspOwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5JbmZvcyB0YWJsZSB0ci5NaWRkbGUgdGQgewogICAgICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5JbmZvcyB0YWJsZSB0ZCB7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBwYWRkaW5nOiAwIDAgOHB4IDEwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3JkZXItbGVmdDogMXB4IGRvdHRlZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuSW5mb3MgdGFibGUgdGQgPiBkaXYgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuSW5mb3MgdGFibGUgdGQ6Zmlyc3QtY2hpbGQgewogICAgICAgIHBhZGRpbmc6IDAgMCA4cHggMDsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuSW5mb3MgdGFibGUgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuSW5mb3MgdGFibGUgdGQgbGFiZWwgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5JdGVtQWN0aW9ucyB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgewogICAgICAgIHdpZHRoOiA2MCU7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgfQoKICAgIC5SVEwgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3ID4gdWwgewogICAgICAgIG1hcmdpbjogMCA1cHggMnB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEVsZW1lbnQpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgbGkgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3IGgzIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHTWVkaXVtKTsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuUHJldmlldyBsaS5BY3RpdmUgaDMgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTWVkaXVtKTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbEJHTWVkaXVtRGFyayk7CiAgICB9CgogICAgLlJUTCAuT3ZlcnZpZXdMYXJnZSAuUHJldmlldyBsaS5BY3RpdmUgaDMgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICAgIG1hcmdpbi1yaWdodDogLTFweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuUHJldmlldyBoMyBhIHsKICAgICAgICBoZWlnaHQ6IDE3cHg7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSBsaTpob3ZlciAuUHJldmlldyBoMyBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgbGkuQWN0aXZlIGgzIGEgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgbGk6aG92ZXIgLlByZXZpZXcgbGkuQWN0aXZlIGgzIGEgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgaDMgLlN1YmplY3QgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgaDMgLkhlYWRsaW5lIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgIH0KCiAgICAuUlRMIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3IGgzIC5IZWFkbGluZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3IGgzIHNwYW4uRGF0ZVRpbWUgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgIH0KCiAgICAuUlRMIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3IGgzIHNwYW4uRGF0ZVRpbWUgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3IGxpIGRpdi5IaWRkZW5CbG9jayB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bSk7CiAgICAgICAgcGFkZGluZy10b3A6IDA7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgbGkuQWN0aXZlIGRpdi5IaWRkZW5CbG9jayB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgbGkgZGl2LkhpZGRlbkJsb2NrIGRpdi5Db250ZW50IHsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgLkFydGljbGVDb3VudDUgbGkgZGl2LkhpZGRlbkJsb2NrIGRpdi5Db250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEyNHB4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3IC5BcnRpY2xlQ291bnQ0IGxpIGRpdi5IaWRkZW5CbG9jayBkaXYuQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxNDRweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuUHJldmlldyAuQXJ0aWNsZUNvdW50MyBsaSBkaXYuSGlkZGVuQmxvY2sgZGl2LkNvbnRlbnQgewogICAgICAgIGhlaWdodDogMTY0cHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgLkFydGljbGVDb3VudDIgbGkgZGl2LkhpZGRlbkJsb2NrIGRpdi5Db250ZW50IHsKICAgICAgICBoZWlnaHQ6IDE4NHB4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3IC5BcnRpY2xlQ291bnQxIGxpIGRpdi5IaWRkZW5CbG9jayBkaXYuQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAyMDRweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuUHJldmlldyAuQXJ0aWNsZUNvdW50NSBsaSBkaXYuSGlkZGVuQmxvY2sgZGl2LkFjdGlvblJvdyArIGRpdi5Db250ZW50IHsKICAgICAgICBoZWlnaHQ6IDk3cHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgLkFydGljbGVDb3VudDQgbGkgZGl2LkhpZGRlbkJsb2NrIGRpdi5BY3Rpb25Sb3cgKyBkaXYuQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMTdweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdMYXJnZSAuUHJldmlldyAuQXJ0aWNsZUNvdW50MyBsaSBkaXYuSGlkZGVuQmxvY2sgZGl2LkFjdGlvblJvdyArIGRpdi5Db250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEzN3B4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3IC5BcnRpY2xlQ291bnQyIGxpIGRpdi5IaWRkZW5CbG9jayBkaXYuQWN0aW9uUm93ICsgZGl2LkNvbnRlbnQgewogICAgICAgIGhlaWdodDogMTU3cHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgLkFydGljbGVDb3VudDEgbGkgZGl2LkhpZGRlbkJsb2NrIGRpdi5BY3Rpb25Sb3cgKyBkaXYuQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxNzdweDsKICAgIH0KCn0gLyogZW5kIEBtZWRpYSAqLwoKCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIE92ZXJ2aWV3TWVkaXVtCiAqLwoKQG1lZGlhIHNjcmVlbiwgcHJpbnQgewoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIE1lZGl1bSBWaWV3IE92ZXJ2aWV3CiAgICAgKi8KICAgICNUaWNrZXRPdmVydmlld01lZGl1bSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gewogICAgICAgIG1hcmdpbjogMHB4IDE2cHggOHB4IDhweDsKICAgIH0KCiAgICAuUlRMIC5PdmVydmlld01lZGl1bSB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICB9CgogICAgI0VtcHR5TWVzc2FnZU1lZGl1bSB7CiAgICAgICBwYWRkaW5nOiA3cHg7CiAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgICAgbWluLWhlaWdodDogMHB4OwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSBsaSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIG1pbi1oZWlnaHQ6IDEwNXB4OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tY29sQkdNZWRpdW1EYXJrKTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSBsaTpmaXJzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbEJHTWVkaXVtRGFyayk7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtIGxpIHVsLklubGluZUFjdGlvbnMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0zNXB4OwogICAgICAgIHJpZ2h0OiAwcHg7CiAgICAgICAgaGVpZ2h0OiAzNXB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICAgICAgY3Vyc29yOiBhdXRvOwogICAgICAgIHRyYW5zaXRpb246IGFsbCBlYXNlLWluIDAuMnM7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtID4gbGkgdWwuSW5saW5lQWN0aW9ucy5BY3Rpb25zIGxpOmFmdGVyIHsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtIGxpIHVsLklubGluZUFjdGlvbnMgbGkgewogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gbGkgdWwuSW5saW5lQWN0aW9ucyBsaSBmb3JtIHsKICAgICAgICBwYWRkaW5nLXRvcDogN3B4OwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSBsaSB1bC5JbmxpbmVBY3Rpb25zIGxpIGZvcm0gc2VsZWN0ewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gbGkgdWwuSW5saW5lQWN0aW9ucyBsaSBhIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gbGkgdWwuSW5saW5lQWN0aW9ucyBsaTpudGgtY2hpbGQoZXZlbikgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSBsaSB1bC5JbmxpbmVBY3Rpb25zIGxpLlJlc3BvbnNpdmVBY3Rpb25NZW51IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSBsaSB1bC5JbmxpbmVBY3Rpb25zIGxpLlJlc3BvbnNpdmVBY3Rpb25NZW51OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgICAgZmxvYXQ6IG5vbmU7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICB9CgogICAgYm9keS5Ub3VjaERldmljZSAuT3ZlcnZpZXdNZWRpdW0gbGkgdWwuSW5saW5lQWN0aW9ucyBsaS5SZXNwb25zaXZlQWN0aW9uTWVudS5PcGVuZWQ6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICIgfCAiOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXJnaW46IDVweCAzcHg7CiAgICB9CgogICAgYm9keS5Ub3VjaERldmljZSAuT3ZlcnZpZXdNZWRpdW0gbGkgdWwuSW5saW5lQWN0aW9ucyB7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICBib2R5LlRvdWNoRGV2aWNlIC5PdmVydmlld01lZGl1bSBsaSB1bC5JbmxpbmVBY3Rpb25zIGxpLlJlc3BvbnNpdmVBY3Rpb25NZW51IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtIGxpIGRpdi5Db250ZW50IHsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2ZmZjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSBsaTpudGgtY2hpbGQoZXZlbikgZGl2LkNvbnRlbnQgewogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjRjVGNUY1OwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSBsaTpob3ZlciBkaXYuQ29udGVudCwKICAgIC5PdmVydmlld01lZGl1bSBsaTpob3ZlciB7CiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWNvbEhpZ2hsaWdodCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtIGxpOm50aC1jaGlsZChldmVuKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gZGl2LkNoZWNrYm94IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIHdpZHRoOiAzNXB4OwogICAgICAgIGhlaWdodDogMzVweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gZGl2LkNoZWNrYm94IGlucHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICB9CgogICAgLlJUTCAuT3ZlcnZpZXdNZWRpdW0gaW5wdXQuQ2hlY2tib3ggewogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgICAgcmlnaHQ6IDBweDsKICAgIH0KCiAgICAuUlRMIC5PdmVydmlld01lZGl1bSBkaXYuQ2hlY2tib3ggaW5wdXQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtIGRpdi5GbGFnIHsKICAgICAgICB0b3A6IDM3cHg7CiAgICAgICAgbGVmdDogOHB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMjJweDsKICAgICAgICBoZWlnaHQ6IDEycHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JiYjsKICAgIH0KCiAgICAuUlRMIC5PdmVydmlld01lZGl1bSBkaXYuRmxhZyB7CiAgICAgICAgbGVmdDogYXV0bzsKICAgICAgICByaWdodDogOHB4OwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSBkaXYuVW5yZWFkQXJ0aWNsZXMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiA0cHg7CiAgICAgICAgdG9wOiA2MHB4OwogICAgfQoKICAgIC5SVEwgLk92ZXJ2aWV3TWVkaXVtIGRpdi5VbnJlYWRBcnRpY2xlcyB7CiAgICAgICAgbGVmdDogYXV0bzsKICAgICAgICByaWdodDogNHB4OwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSBsaTpob3ZlciBzcGFuLlVucmVhZEFydGljbGVzIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00MHB4OwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSBoMiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQ1cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHdpZHRoOiA5NyU7CiAgICB9CgogICAgLlJUTCAuT3ZlcnZpZXdNZWRpdW0gaDIgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICAgIG1hcmdpbi1yaWdodDogNDVweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gaDIgYSB7CiAgICAgICAgY29sb3I6ICMwMDAyM2M7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtIHRhYmxlLkluZm9zIHsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQ1cHg7CiAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDsKICAgICAgICB3aWR0aDogOTclOwogICAgfQoKICAgIC5SVEwgLk92ZXJ2aWV3TWVkaXVtIHRhYmxlLkluZm9zIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDQ1cHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtIHRhYmxlLkluZm9zIHRyOmxhc3QtY2hpbGQgdGQgewogICAgICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7CiAgICB9CgogICAgLlJUTCAuT3ZlcnZpZXdNZWRpdW0gdGFibGUuSW5mb3MgdHI6bGFzdC1jaGlsZCB0ZCB7CiAgICAgICAgcGFkZGluZzogMCAxMHB4IDAgMDsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gdGFibGUuSW5mb3MgdGQgewogICAgICAgIHdpZHRoOiAxNi42NyU7CiAgICAgICAgcGFkZGluZzogMCAxMHB4IDVweCAxMHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggZG90dGVkICNDQ0M7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSB0YWJsZS5JbmZvcyB0ZCA+IGRpdiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSB0YWJsZS5JbmZvcyB0ZDpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtIHRhYmxlLkluZm9zIHRkOmZpcnN0LWNoaWxkIHsKICAgICAgICBwYWRkaW5nOiAwIDAgNXB4IDA7CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICB9CgogICAgLlJUTCAuT3ZlcnZpZXdNZWRpdW0gdGFibGUuSW5mb3MgdGQ6Zmlyc3QtY2hpbGQgewogICAgICAgIHBhZGRpbmc6IDAgMTBweCA1cHggMTBweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gdGFibGUuSW5mb3MgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICAuUlRMIC5PdmVydmlld01lZGl1bSB0YWJsZS5JbmZvcyB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHsKICAgICAgICBwYWRkaW5nOiAwIDEwcHggNXB4IDEwcHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtIHRhYmxlLkluZm9zIHRkIGxhYmVsIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtIGRpdi5EeW5hbWljRmllbGRTZXBhcmF0b3IgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgI0NDQ0NDQzsKICAgICAgICBtYXJnaW4tbGVmdDogMnBjOwogICAgICAgIG1hcmdpbi1yaWdodDogMnBjOwogICAgfQoKfSAvKiBlbmQgQG1lZGlhICovCgoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgT3ZlcnZpZXdTbWFsbAogKi8KCkBtZWRpYSBzY3JlZW4sIHByaW50IHsKCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBPdmVydmlldyBIb2xkZXIKICAgICAqLwoKICAgICNPdmVydmlld0JvZHkgewogICAgICAgIG1hcmdpbjogMTBweCAxNnB4IDhweCA4cHg7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWNvbEJHTWVkaXVtRGFyayk7CiAgICB9CgogICAgLlJUTCAjT3ZlcnZpZXdCb2R5IHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgIH0KCiAgICAjRW1wdHlNZXNzYWdlU21hbGwgewogICAgICAgIHBhZGRpbmc6IDdweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgICAgIGJvcmRlci1sZWZ0OiAwcHg7CiAgICB9CgogICAgLk92ZXJ2aWV3IHRoZWFkIHRyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR01lZGl1bSk7CiAgICAgICAgei1pbmRleDogMTU7CiAgICB9CgogICAgLk92ZXJ2aWV3IHRoZWFkIHRyIHRoIHsKICAgICAgICBoZWlnaHQ6IDE5cHg7CiAgICAgICAgcGFkZGluZy10b3A6IDA7CiAgICB9CgogICAgLk92ZXJ2aWV3IHRhYmxlIHRib2R5IHRyIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CgogICAgLk92ZXJ2aWV3IHRhYmxlIHRib2R5IHRyIHRkLkNoZWNrYm94ewogICAgICAgIGN1cnNvcjogZGVmYXVsdCAgIWltcG9ydGFudDsKICAgIH0KCgp9IC8qIGVuZCBAbWVkaWEgKi8KCgovKioKICogQHBhY2thZ2UgICAgIFNraW4gIkRlZmF1bHQiCiAqIEBzZWN0aW9uICAgICBHcmlkCiAqLwoKQG1lZGlhIHNjcmVlbiwgcHJpbnQgewoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIExheW91dEZpeGVkU2lkZWJhcgogICAgICovCgogICAgLkxheW91dEZpeGVkU2lkZWJhciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICB9CgogICAgLkxheW91dEZpeGVkU2lkZWJhciA+IC5Db250ZW50Q29sdW1uIHsKICAgICAgICAvKioKICAgICAgICAgKiBAbm90ZSAgICBmb3JjZSBvd24gQmxvY2sgRm9ybWF0dGluZyBDb250ZXh0IGZvciBuZXN0ZWQgZmxvYXRzCiAgICAgICAgICovCiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAuVGlja2V0Wm9vbSAuTGF5b3V0Rml4ZWRTaWRlYmFyID4gLkNvbnRlbnRDb2x1bW4gewogICAgICAgIG1pbi1oZWlnaHQ6IDUwMHB4OwogICAgfQoKICAgIC5MYXlvdXRGaXhlZFNpZGViYXIgPiAuU2lkZWJhckNvbHVtbiB7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgfQoKICAgIC5MYXlvdXRGaXhlZFNpZGViYXIuU2lkZWJhckxhc3QgPiAuU2lkZWJhckNvbHVtbiB7CiAgICAgICAgd2lkdGg6IDM0MHB4OwogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXJnaW4tbGVmdDogMTZweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICB9CgogICAgLlJUTCAuTGF5b3V0Rml4ZWRTaWRlYmFyLlNpZGViYXJMYXN0ID4gLlNpZGViYXJDb2x1bW4gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICAgIG1hcmdpbi1yaWdodDogMTZweDsKICAgIH0KCiAgICAuTGF5b3V0Rml4ZWRTaWRlYmFyLlNpZGViYXJGaXJzdCA+IC5TaWRlYmFyQ29sdW1uIHsKICAgICAgICB3aWR0aDogMzQwcHg7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgfQoKICAgIC5SVEwgLkxheW91dEZpeGVkU2lkZWJhci5TaWRlYmFyRmlyc3QgPiAuU2lkZWJhckNvbHVtbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICAgTGF5b3V0R3JpZAogICAgICovCiAgICAuTGF5b3V0R3JpZCB7CiAgICAgICAgLyoqCiAgICAgICAgICogQG5vdGUgICAgZm9yY2Ugb3duIEJsb2NrIEZvcm1hdHRpbmcgQ29udGV4dCBmb3IgbmVzdGVkIGZsb2F0cwogICAgICAgICAqLwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLkxheW91dEdyaWQgPiBkaXYsCiAgICAuTGF5b3V0R3JpZCA+IGxpIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgIH0KCiAgICAuUlRMIC5MYXlvdXRHcmlkID4gZGl2LAogICAgLlJUTCAuTGF5b3V0R3JpZCA+IGxpIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICB9CgogICAgLkxheW91dEdyaWQgPiAuU2l6ZTFvZjIgewogICAgICAgIHdpZHRoOiA1MCU7CiAgICB9CgogICAgLkxheW91dEdyaWQgPiAuU2l6ZTFvZjMgewogICAgICAgIHdpZHRoOiAzMy4zMzMlOwogICAgfQoKICAgIC5MYXlvdXRHcmlkID4gLlNpemUyb2YzIHsKICAgICAgICB3aWR0aDogNjYuNjY2JTsKICAgIH0KCiAgICAuTGF5b3V0R3JpZCA+IC5TaXplMW9mNCB7CiAgICAgICAgd2lkdGg6IDI1JTsKICAgIH0KCiAgICAuTGF5b3V0R3JpZCA+IC5TaXplMm9mNCB7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgIH0KCiAgICAuTGF5b3V0R3JpZCA+IC5TaXplM29mNCB7CiAgICAgICAgd2lkdGg6IDc1JTsKICAgIH0KCiAgICAuTGF5b3V0R3JpZCA+IGRpdiA+IGRpdiwKICAgIC5MYXlvdXRHcmlkID4gbGkgPiBkaXYgewogICAgICAgIC8qKgogICAgICAgICAqIEBub3RlICAgIGZvcmNlIG93biBCbG9jayBGb3JtYXR0aW5nIENvbnRleHQgZm9yIG5lc3RlZCBmbG9hdHMKICAgICAgICAgKi8KICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC8qKgogICAgICogQG5vdGUgICAgICAgIENvbHVtbnNXaXRoU3BhY2luZzogaW5zZXJ0cyBtYXJnaW5zIGJldHdlZW4gdGhlIGdyaWQgZWxlbWVudHMsCiAgICAgKiAgICAgICAgICAgICAgICAgIGJ1dCBub3Qgb24gdGhlIG91dHNpZGUuCiAgICAgKi8KCiAgICAuTGF5b3V0R3JpZC5Db2x1bW5zV2l0aFNwYWNpbmcgPiBkaXYgPiBkaXYgIHsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIH0KCiAgICAuUlRMIC5MYXlvdXRHcmlkLkNvbHVtbnNXaXRoU3BhY2luZyA+IGRpdiA+IGRpdiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgfQoKICAgIC5MYXlvdXRHcmlkLkNvbHVtbnNXaXRoU3BhY2luZyA+IGxpID4gKiB7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDsKICAgIH0KCiAgICAvKioKICAgICAqIGRvIG5vdCBhZGQgbGVmdCBtYXJnaW4gZm9yIGZpcnN0IGVsZW1lbnQgaW4gZWFjaCByb3cKICAgICAqLwogICAgLkxheW91dEdyaWQuQ29sdW1uc1dpdGhTcGFjaW5nID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2LAogICAgLkxheW91dEdyaWQuQ29sdW1uc1dpdGhTcGFjaW5nID4gZGl2LkNsZWFyICsgZGl2ID4gZGl2IHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgTGF5b3V0UG9wdXAKICAgICAqLwogICAgLkxheW91dFBvcHVwID4gLkhlYWRlciB7CiAgICAgICAgcGFkZGluZzogN3B4IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdMaWdodCk7CiAgICB9CgogICAgLlJUTCAuTGF5b3V0UG9wdXAgPiAuSGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiA3cHggMjBweCA3cHggNXB4OwogICAgfQoKICAgIC5MYXlvdXRQb3B1cCA+IC5IZWFkZXIgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBwYWRkaW5nOiAwcHggNXB4IDAgMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIC5SVEwgLkxheW91dFBvcHVwID4gLkhlYWRlciBoMSB7CiAgICAgICAgcGFkZGluZzogNXB4IDAgMCA1cHg7CiAgICB9CgogICAgLkxheW91dFBvcHVwID4gLkhlYWRlciBwIHsKICAgICAgICBwYWRkaW5nOiAxNXB4IDVweCAwIDA7CiAgICB9CgogICAgLlJUTCAuTGF5b3V0UG9wdXAgPiAuSGVhZGVyIHAgewogICAgICAgIHBhZGRpbmc6IDVweCAxMHB4IDAgNXB4OwogICAgfQoKICAgIC5MYXlvdXRQb3B1cCAuTm90aWNlIHsKICAgICAgICBjb2xvcjogcmVkOwogICAgfQoKICAgIC5MYXlvdXRQb3B1cCA+IC5Db250ZW50IHsKICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgfQoKICAgIC5SVEwgLkxheW91dFBvcHVwID4gLkNvbnRlbnQgewogICAgICAgIHBhZGRpbmc6IDVweCAyMHB4IDVweCA1cHg7CiAgICB9CgogICAgLkxheW91dFBvcHVwID4gLkZvb3RlciB7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgfQoKICAgIC5MYXlvdXRQb3B1cCA+IC5Gb290ZXIgLkNhbGxGb3JBY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW46IDEwcHggMHB4IDVweCAwcHg7CiAgICAgICAgbWluLXdpZHRoOiAxNTBweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBJdGVtTGlzdEdyaWQKICAgICAqLwoKICAgIC5JdGVtTGlzdEdyaWQgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcGFkZGluZy10b3A6IDEwcHg7CiAgICB9CgogICAgLkl0ZW1MaXN0R3JpZCA+IGxpIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBsaW5lLWhlaWdodDogMTQwJTsKICAgICAgICB3aWR0aDogMjQlOwogICAgICAgIG1pbi13aWR0aDogMjQwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzMjBweDsKICAgICAgICBoZWlnaHQ6IDgwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBsaW5lLWhlaWdodDogMTQwJTsKICAgIH0KCiAgICAuSXRlbUxpc3RHcmlkLldpdGhJY29ucyA+IGxpIHsKICAgICAgICBoZWlnaHQ6IDEwMnB4OwogICAgfQoKICAgIC5JdGVtTGlzdEdyaWQgPiBsaS5GaWx0ZXJNZXNzYWdlIHsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbGluZS1oZWlnaHQ6IDkwJTsKICAgICAgICBtYXJnaW46IC03cHggMHB4IDNweCA1cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICB9CgogICAgLkl0ZW1MaXN0R3JpZCA+IGxpLkZpbHRlck1lc3NhZ2UuSGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5JdGVtTGlzdEdyaWQgPiBsaSA+IGEgewogICAgICAgIHBhZGRpbmctdG9wOiAyMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdMaWdodE1lZGl1bSk7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sQkdMaWdodE1lZGl1bSk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5JdGVtTGlzdEdyaWQuV2l0aEljb25zID4gbGkgPiBhIHsKICAgICAgICBwYWRkaW5nLXRvcDogNTZweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgZWFzZSAwLjRzOwogICAgfQoKICAgIC5JdGVtTGlzdEdyaWQuV2l0aEljb25zID4gbGkgPiBhLkRpc2FibGVkIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgIH0KCiAgICAuSXRlbUxpc3RHcmlkID4gbGkgPiBhOm5vdCguRGlzYWJsZWQpOmhvdmVyLAogICAgLkl0ZW1MaXN0R3JpZCA+IGxpID4gYTpub3QoLkRpc2FibGVkKTphY3RpdmUsCiAgICAuSXRlbUxpc3RHcmlkID4gbGkgPiBhOm5vdCguRGlzYWJsZWQpOmZvY3VzLAogICAgLkl0ZW1MaXN0R3JpZCA+IGxpID4gYS5BY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTWVkaXVtKTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLkl0ZW1MaXN0R3JpZCA+IGxpIHNwYW4uSWNvbnMgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMzBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAtMjBweDsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDhweDsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgZWFzZSAwLjRzOwogICAgfQoKICAgIC5JdGVtTGlzdEdyaWQuV2l0aEljb25zID4gbGkgYTpub3QoLkRpc2FibGVkKTpob3ZlciBzcGFuLkljb25zLAogICAgLkl0ZW1MaXN0R3JpZC5XaXRoSWNvbnMgPiBsaSBhLkFjdGl2ZSBzcGFuLkljb25zLAogICAgLkl0ZW1MaXN0R3JpZC5XaXRoSWNvbnMgPiBsaSBhOm5vdCguRGlzYWJsZWQpOmhvdmVyIHNwYW4uSWNvbnMgaS5JY29uMiwKICAgIC5JdGVtTGlzdEdyaWQuV2l0aEljb25zID4gbGkgYS5BY3RpdmUgc3Bhbi5JY29ucyBpLkljb24yIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgfQoKICAgIC5JdGVtTGlzdEdyaWQuV2l0aEljb25zID4gbGkgc3Bhbi5JY29ucyBpIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICB9CgogICAgLkl0ZW1MaXN0R3JpZC5XaXRoSWNvbnMgPiBsaSBzcGFuLkljb25zIGkuSWNvbjIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxNXB4OwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IC0xNHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB0b3A6IC01cHg7CiAgICAgICAgd2lkdGg6IDE1cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIGVhc2UgMC40czsKICAgIH0KCiAgICAuSXRlbUxpc3RHcmlkID4gbGkgc3Bhbi5UaXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgbWFyZ2luOiAwcHggYXV0bzsKICAgICAgICBtYXJnaW4tYm90dG9tOiAzcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5JdGVtTGlzdEdyaWQgPiBsaSBzcGFuLkRlc2NyaXB0aW9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIG1hcmdpbjogMHB4IGF1dG87CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgoKfSAvKiBlbmQgQG1lZGlhICovCgovKioKICogQHBhY2thZ2UgICAgIFNraW4gIkRlZmF1bHQiCiAqIEBzZWN0aW9uICAgICBDU1MgZm9yIHByaW50aW5nCiAqLwoKQG1lZGlhIHByaW50IHsKCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBGb250cwogICAgICovCiAgICBib2R5IHsKICAgICAgICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBHZW5lcmljIGVsZW1lbnRzCiAgICAgKi8KICAgIHAgewogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjNlbTsKICAgIH0KCiAgICBoMSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgIH0KCiAgICBoMiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogN3B4OwogICAgfQoKICAgIGgzIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgfQoKICAgIHRkLCB0aCB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBkb3R0ZWQgI0U1RTVFNTsKICAgICAgICBwYWRkaW5nOiAwIDEwcHggMCAxMHB4OwogICAgfQoKICAgIHRoIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgIH0KICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIE5hdmlnYXRpb24KICAgICAqLwogICAgI0hlYWRlciwKICAgICNOYXZpZ2F0aW9uQ29udGFpbmVyLAogICAgI1Rvb2xCYXIsCiAgICBib2R5ID4gLk1lc3NhZ2VCb3gsCiAgICAuUmVzcG9uc2l2ZUhhbmRsZSwKICAgIC5BZGRpdGlvbmFsSW5mb3JtYXRpb24uQ29udHJvbFJvdywKICAgICNBcnRpY2xlSXRlbXMgdWwuQWN0aW9ucywKICAgICNBcnRpY2xlVHJlZSwKICAgIC5IZWFkbGluZSA+IC5GbGFnIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIEZvb3RlcgogICAgICovCiAgICAjRm9vdGVyIHsKICAgICAgICBib3JkZXItdG9wOjFweCBzb2xpZCAjOTk5OTk5OwogICAgICAgIGZvbnQtc2l6ZToxMHB4OwogICAgICAgIG1hcmdpbi10b3A6MTBweDsKICAgICAgICBwYWRkaW5nOjEycHggOXB4IDhweDsKICAgICAgICBwYWRkaW5nOjEwcHg7CiAgICB9CgogICAgI0Zvb3RlciB1bCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBHZW5lcmljIGVsZW1lbnRzCiAgICAgKi8KICAgICNOYXZpZ2F0aW9uewogICAgICAgIGRpc3BsYXk6bm9uZTsKICAgIH0KCiAgICBhIHsKICAgICAgICBjb2xvcjp2YXIoLS1jb2xUZXh0RGFyayk7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgICB9CgogICAgLkRvbnRQcmludCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuUHJpbnRPbmx5IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICAuQ29udGV4dEZ1bmN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuQWN0aW9uUm93IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgICNBcnRpY2xlVGFibGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLldpZGdldEFjdGlvbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuRmxhZyB7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIHRkOmxhc3QtY2hpbGR7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggZG90dGVkICNDQ0NDQ0M7CiAgICB9CgogICAgLlRhYi5BY3Rpb25zIGxpIGF7CiAgICAgICAgcGFkZGluZzogMTNweCA4cHggNXB4IDhweDsKICAgIH0KCiAgICAuVGFiLkFjdGlvbnMgbGkgYTpmb2N1c3sKICAgICAgICBmb250OmJvbGQ7CiAgICB9CgogICAgLmRpdi5QYWdpbmF0aW9uewogICAgICAgIG1hcmdpbi10b3A6NXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206NXB4OwogICAgfQoKICAgIC5IaWRkZW4sIC5DaGVja2JveHsKICAgICAgICBkaXNwbGF5Om5vbmU7CiAgICB9CgogICAgLyoKICAgICAgICBUaWNrZXQgT3ZlcnZpZXcgU21hbGwKICAgICovCgogICAgLlF1ZXVlT3ZlcnZpZXcgewogICAgICAgIGNvbG9yOmdyYXk7CiAgICAgICAgZm9udC1zaXplOjEycHg7CiAgICAgICAgbWFyZ2luOjAgMTZweCAxMHB4IDhweDsKICAgICAgICBwYWRkaW5nOjAgMCA0cHg7CiAgICB9CgogICAgLlF1ZXVlT3ZlcnZpZXdMaXN0IGEgewogICAgICAgIGNvbG9yOnZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAuT3ZlcnZpZXcuRml4ZWRIZWFkZXIgdGhlYWQgdHIgdGggewogICAgICAgIGhlaWdodDoxOXB4OwogICAgICAgIGJvcmRlci1yaWdodDoxcHggc29saWQgI0M5QzlDOTsKICAgICAgICBwYWRkaW5nLXRvcDowOwogICAgfQoKICAgIC5UYWJsZVNtYWxsewogICAgICAgIG1hcmdpbi10b3A6MTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOjEwcHg7CiAgICB9CgogICAgLlRhYmxlU21hbGwgdGhlYWQgewogICAgICAgIG1hcmdpbi10b3A6MTVweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjQzlDOUM5OwogICAgfQogICAgLlRhYmxlU21hbGwgdGhlYWQgYSwgLlRhYmxlU21hbGwgdGhlYWQgc3BhbiB7CiAgICAgICAgY29sb3I6IzRBNEE0QTsKICAgICAgICBkaXNwbGF5OmJsb2NrOwogICAgICAgIGZvbnQtc2l6ZToxMXB4OwogICAgICAgIGhlaWdodDoxNXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OjE1cHg7CiAgICAgICAgbWFyZ2luOjAgMnB4IDFweCAxcHg7CiAgICAgICAgcGFkZGluZzowIDEwcHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOwogICAgfQoKICAgIC8qCiAgICAgICAgVGlja2V0IE92ZXJ2aWV3IE1lZGl1bQogICAgKi8KCiAgICAuT3ZlcnZpZXdNZWRpdW0gaDIgYSB7CiAgICAgICAgY29sb3I6dmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIGRpc3BsYXk6YmxvY2s7CiAgICB9CgogICAgLk92ZXJ2aWV3TWVkaXVtIC5GbGFnIHsKICAgICAgICB3aWR0aDoxNTBweDsKICAgICAgICBoZWlnaHQ6IDEycHg7CiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICNDOUM5Qzk7CiAgICAgICAgcGFkZGluZzo4cHg7CiAgICAgICAgY29sb3I6I0ZGOTkyMjsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gbGkgZGl2LkNvbnRlbnQgewogICAgICAgIHBhZGRpbmc6MTBweDsKICAgICAgICBtYXJnaW4tdG9wOjE1cHg7CiAgICAgICAgYm9yZGVyOjFweCBzb2xpZCAjQzlDOUM5OwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSB0YWJsZS5JbmZvcyB0ZCBsYWJlbCB7CiAgICAgICAgY29sb3I6I0NDQ0NDQzsKICAgICAgICBtYXJnaW46IDhweCAwIDRweCAwOwogICAgICAgIGRpc3BsYXk6YmxvY2s7CiAgICAgICAgZm9udC13ZWlnaHQ6Ym9sZDsKICAgICAgICBtYXJnaW4tYm90dG9tOjJweDsKICAgIH0KCiAgICAuT3ZlcnZpZXdNZWRpdW0gdGFibGUuSW5mb3MgdGQgZGl2IHsKICAgICAgICBtYXJnaW4tbGVmdDoxNXB4OwogICAgfQoKICAgIC5PdmVydmlld01lZGl1bSAuVW5yZWFkQXJ0aWNsZXMgc3BhbnsKICAgICAgICB3aWR0aDoxNTBweDsKICAgICAgICBoZWlnaHQ6IDEycHg7CiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICNDOUM5Qzk7CiAgICAgICAgcGFkZGluZzo4cHg7CiAgICAgICAgYm9yZGVyLXRvcDpub25lOwogICAgICAgIGNvbG9yOiNGRjk5MjI7CiAgICB9CiAgICAvKgogICAgICAgIFRpY2tldCBPdmVydmlldyBMYXJnZQogICAgKi8KCiAgICAuT3ZlcnZpZXdMYXJnZSAuRmxhZyB7CiAgICAgICAgd2lkdGg6MTUwcHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAjQzlDOUM5OwogICAgICAgIHBhZGRpbmc6OHB4OwogICAgICAgIGNvbG9yOiNGRjk5MjI7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgPiBsaSA+IC5Db250ZW50IHsKICAgICAgICBtYXJnaW4tYm90dG9tOjE1cHg7CiAgICAgICAgcGFkZGluZzoxMnB4OwogICAgICAgIGJvcmRlcjoxcHggc29saWQgdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5JbmZvcyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbToxMHB4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5JbmZvcyB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbToxcHggZG90dGVkICNDOUM5Qzk7CiAgICAgICAgYm9yZGVyLXRvcDoxcHggZG90dGVkICNDOUM5Qzk7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLkluZm9zIHRhYmxlIHRkIGxhYmVsIHsKICAgICAgICBjb2xvcjojQ0NDQ0NDOwogICAgICAgIG1hcmdpbjogOHB4IDAgMnB4IDA7CiAgICAgICAgZGlzcGxheTpibG9jazsKICAgICAgICBmb250LXdlaWdodDpib2xkOwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3IHsKICAgICAgICBtYXJnaW4tdG9wOjEwcHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgdWwgbGkgewogICAgICAgIG1hcmdpbi10b3AgOiAxMHB4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3IGgzIGEgewogICAgICAgIGRpc3BsYXk6YmxvY2s7CiAgICAgICAgaGVpZ2h0OjE3cHg7CiAgICAgICAgbWFyZ2luLXRvcDoxNXB4OwogICAgfQoKICAgIC5PdmVydmlld0xhcmdlIC5QcmV2aWV3IGxpIGRpdi5IaWRkZW5CbG9jayBkaXYuQ29udGVudCB7CiAgICAgICAgYm9yZGVyOm1lZGl1bSBub25lOwogICAgICAgIHBhZGRpbmc6NXB4OwogICAgICAgIGRpc3BsYXk6YmxvY2s7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgLkFydGljbGVDb3VudDIgbGkgZGl2LkhpZGRlbkJsb2NrIGRpdi5Db250ZW50IHsKICAgICAgICBoZWlnaHQ6YXV0bzsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgIGJvcmRlcjoxcHggZG90dGVkICNDOUM5Qzk7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlByZXZpZXcgbGkgZGl2LkhpZGRlbkJsb2NrIGRpdi5Db250ZW50IHsKICAgICAgICBib3JkZXI6bWVkaXVtIG5vbmU7CiAgICAgICAgcGFkZGluZzo1cHg7CiAgICB9CgogICAgLk92ZXJ2aWV3TGFyZ2UgLlVucmVhZEFydGljbGVzIHNwYW57CiAgICAgICAgd2lkdGg6MTUwcHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCAjQzlDOUM5OwogICAgICAgIHBhZGRpbmc6OHB4OwogICAgICAgIGJvcmRlci10b3A6bm9uZTsKICAgICAgICBjb2xvcjojRkY5OTIyOwogICAgfQoKICAgIC8qCiAgICAgICAgVGlja2V0IFpvb20KICAgICovCgogICAgZGl2LkhlYWRsaW5lIC5GbGFnewogICAgICAgIGJvcmRlcjoxcHggc29saWQgI0NDQ0NDQzsKICAgICAgICB3aWR0aDogMTUwcHg7CiAgICAgICAgY29sb3I6I0ZGOTkyMjsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBmb250LXNpemU6MTZweDsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlID4gLkhlYWRlciBoMiB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgICAgcGFkZGluZzowIDAgNXB4IDA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjQ0NDQ0NDOwogICAgfQoKICAgIGRpdi5IZWFkbGluZSBoMSB7CiAgICAgICAgZm9udC1zaXplOjIwcHg7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMTBweCAwOwogICAgICAgIHBhZGRpbmc6MDsKICAgIH0KCiAgICAjRGVzdFF1ZXVlSUR7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBTaWRlYmFyQ29sdW1uCiAgICAgKi8KICAgIC5TaWRlYmFyQ29sdW1uIC5XaWRnZXRTaW1wbGUgewogICAgICAgIHdpZHRoOiA0NiU7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjQ0NDOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIENvbnRlbnRDb2x1bW4KICAgICAqLwogICAgLkNvbnRlbnRDb2x1bW4gewogICAgICAgIGNsZWFyOiBib3RoOwogICAgfQoKICAgIC5XaWRnZXRCb3ggewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjQ0NDOwogICAgfQoKICAgIC5XaWRnZXRCb3ggLkludmlzaWJsZVRleHR7CiAgICAgICAgZGlzcGxheTpub25lOwogICAgfQoKICAgIC5XaWRnZXRCb3ggLkFjdGlvbnN7CiAgICAgICAgZGlzcGxheTpub25lOwogICAgfQoKICAgIC5XaWRnZXRCb3ggLkFydGljbGVNYWlsSGVhZGVyIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICAuV2lkZ2V0Qm94ID4gLkhlYWRlciBoMiB7CiAgICAgICAgcGFkZGluZzowOwogICAgICAgIG1hcmdpbjowIDAgMTVweCAwOwogICAgfQoKICAgIC5BcnRpY2xlTWFpbENvbnRlbnQgYm9keXsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBUYWJsZWxpa2UgZWxlbWVudHMKICAgICAqLwogICAgLldpZGdldFNpbXBsZSBmaWVsZHNldCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbToxNXB4OwogICAgfQoKICAgIGZpZWxkc2V0LlRhYmxlTGlrZSA+IGxhYmVsIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmctdG9wOiA0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB9CgogICAgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWxTbWFsbCA+IGxhYmVsIHsKICAgICAgICB3aWR0aDoxMDBweDsKICAgICAgICBkaXNwbGF5OmJsb2NrOwogICAgfQoKCiAgICBmaWVsZHNldC5UYWJsZUxpa2UgPiAuVmFsdWUgewogICAgICAgIG1hcmdpbi1sZWZ0OjEzMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDowOwogICAgICAgIHBhZGRpbmctdG9wOiA0cHg7CiAgICB9CgogICAgLkl0ZW1Sb3d7CiAgICAgICAgbWFyZ2luLXRvcDoxMHB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBkb3R0ZWQgI0NDQzsKICAgICAgICBkaXNwbGF5OmJsb2NrOwogICAgICAgIHBhZGRpbmctdG9wOiAxMHB4OwogICAgfQoKICAgIC5JdGVtUm93IGxpewogICAgICAgIGRpc3BsYXk6YmxvY2s7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgICBmb250LXdlaWdodDpib2xkOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIFBvcHVwcwogICAgICovCgogICAgLkxheW91dFBvcHVwIC5IZWFkZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9Cgp9IC8qIGVuZCBAbWVkaWEgKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIFJlc2V0IENTUwogKiBAbm90ZSAgICAgICAgVGhlIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZSBhcmUgdXNlZCB0byByZXNldCBicm93c2VyLXNwZWNpZmljCiAqICAgICAgICAgICAgICBzZXR0aW5ncyB0byBkZWZpbmVkIGRlZmF1bHQgdmFsdWVzLgogKgogKi8KCi8qKgogKiBAc2VlICAgICAgICAgWVVJIFJlc2V0IENTUywgaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL3Jlc2V0LwogKi8KCkBtZWRpYSBhbGwgewoKICAgIGh0bWwsIGJvZHksIGRpdiwgc3BhbiwgYXBwbGV0LCBvYmplY3QsIGlmcmFtZSwKICAgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSwKICAgIGEsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGJpZywgY2l0ZSwgY29kZSwKICAgIGRlbCwgZGZuLCBlbSwgZm9udCwgaW1nLCBpbnMsIGtiZCwgcSwgcywgc2FtcCwKICAgIHNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsCiAgICBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLAogICAgZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsCiAgICB0YWJsZSwgY2FwdGlvbiwgdGJvZHksIHRmb290LCB0aGVhZCwgdHIsIHRoLCB0ZCwgaHIgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBvdXRsaW5lOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OwogICAgICAgIGZvbnQtc3R5bGU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1zaXplOiAxMDAlOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogICAgICAgIGRpcmVjdGlvbjogaW5oZXJpdDsKICAgIH0KCiAgICBib2R5IHsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgb2wsIHVsIHsKICAgICAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQoKICAgIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgfQoKICAgIGNhcHRpb24sIHRoLCB0ZCB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgfQoKICAgIC5SVEwgY2FwdGlvbiwKICAgIC5SVEwgdGgsCiAgICAuUlRMIHRkIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIH0KCiAgICBibG9ja3F1b3RlOmJlZm9yZSwgYmxvY2txdW90ZTphZnRlciwgcTpiZWZvcmUsIHE6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICIiOwogICAgfQoKICAgIGJsb2NrcXVvdGUsIHEgewogICAgICAgIHF1b3RlczogIiIgIiI7CiAgICB9CgogICAgYSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgfQoKICAgIHN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbm90ZSAgICBNb3ZlIHNlbGVjdHMgYSBiaXQgdG8gdGhlIHRvcC4gVGhpcyBpcyBpZ25vcmVkIGJ5IHNvbWUgYnJvd3NlcnMsCiAgICAgKiAgICAgICAgICBhbmQgc2VlbXMgdG8gYmUgbmVlZGVkIGZvciBzb21lIGxpbnV4IGVudmlyb25tZW50cyAoRmlyZWZveCwgQXJvcmEgLyBRdCkuCiAgICAgKi8KICAgIHNlbGVjdCB7CiAgICAgICAgbWFyZ2luLXRvcDogLTFweDsKICAgIH0KCiAgICAqOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiAjMDAxYmZmOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGluayk7CiAgICB9Cgp9IC8qIGVuZCBAbWVkaWEgKi8KCgovKioKICogQHBhY2thZ2UgICAgIFNraW4gIkRlZmF1bHQiCiAqIEBzZWN0aW9uICAgICBUYWJsZXMKICovCgpAbWVkaWEgc2NyZWVuLCBwcmludCB7CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgR2VuZXJhbCBzdHVmZgogICAgICovCgogICAgLyoKICAgICAqIEZGMy42IGhhcyBhIHByb2JsZW0gd2l0aCBzZXR0aW5nIHRoZSBwb3NpdGlvbjpyZWxhdGl2ZSBvbmx5IG9uIDpob3ZlciBzdGF0ZS4KICAgICAqIEFzIGEgd29ya2Fyb3VuZCBpdCBpcyBzZXQgYWx3YXlzIGFuZCBhIHNwZWNpYWwgei1pbmRleCBvbiBob3Zlci4KICAgICAqLwogICAgLkRhdGFUYWJsZSB0Ym9keSB0ciwKICAgIC5UYWJsZVNtYWxsIHRib2R5IHRyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0Ym9keSB0cjpob3ZlciwKICAgIC5UYWJsZVNtYWxsIHRib2R5IHRyOmhvdmVyIHsKICAgICAgICB6LWluZGV4OiAxMDsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRib2R5IHRkOmxhc3QtY2hpbGQsCiAgICAuVGFibGVTbWFsbCB0Ym9keSB0ZDpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0Ym9keSB0cjpob3ZlciB0ZCwKICAgIC5UYWJsZVNtYWxsIHRib2R5IHRyOmhvdmVyIHRkLAogICAgLkRhdGFUYWJsZSB0Ym9keSB0cjphY3RpdmUgdGQuQ2xpY2thYmxlLAogICAgLlRhYmxlU21hbGwgdGJvZHkgdHI6YWN0aXZlIHRkLkNsaWNrYWJsZSwKICAgIC5EYXRhVGFibGUgdHI6bnRoLWNoaWxkKGV2ZW4pOmhvdmVyIHRkLkhpZ2hsaWdodCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sSG92ZXJMaWdodCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgR2VuZXJpYyB0YWJsZSBlbGVtZW50cwogICAgICovCiAgICB0Ym9keSB0ci5VbnJlYWRBcnRpY2xlcyB0ZCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRkLAogICAgLlRhYmxlU21hbGwgdGQgewogICAgICAgIGxpbmUtaGVpZ2h0OiAxNXB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0cjpob3ZlciwKICAgIC5UYWJsZVNtYWxsIHRyOmhvdmVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIHRhYmxlIHRyLk1hc3RlckFjdGlvbiB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIFN0YW5kYXJkIERhdGFUYWJsZQogICAgICovCiAgICAuRGF0YVRhYmxlIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0VsZW1lbnQpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHTGlnaHQpOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CiAgICB9CgogICAgLkRhdGFUYWJsZS5GaXhlZExheW91dCB7CiAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDsKICAgIH0KCiAgICAuRGF0YVRhYmxlLlZhcmlhYmxlV2lkdGggewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgfQoKICAgIC5EYXRhVGFibGUgdGhlYWQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTWVkaXVtKTs7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCB0aCB7CiAgICAgICAgcGFkZGluZzogNHB4IDEwcHggM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdMaWdodCk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggZG90dGVkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgfQoKICAgIC5EYXRhVGFibGUgdGhlYWQgdGguVW5yZWFkQXJ0aWNsZXMgewogICAgICAgIHBhZGRpbmc6IDRweCAwcHggM3B4IDBweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLlJUTCAuRGF0YVRhYmxlIHRoZWFkIHRoIHsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgYm9yZGVyLXJpZ2h0Om5vbmU7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCB0aCBsYWJlbCB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCB0aDpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB9CgogICAgLlJUTCAuRGF0YVRhYmxlIHRoZWFkIHRoOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgfQoKICAgIC5EYXRhVGFibGUgdGhlYWQgdGggYSB7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMTJweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRoZWFkIC5Tb3J0QXNjZW5kaW5nIGEsCiAgICAuRGF0YVRhYmxlIHRoZWFkIC5Tb3J0RGVzY2VuZGluZyBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRoZWFkIC5Tb3J0RGVzY2VuZGluZyA+IGE6YWZ0ZXIsCiAgICAuVGFibGVTbWFsbCB0aGVhZCAuU29ydERlc2NlbmRpbmcgPiBhOmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiXDI1QkMiOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgICAgdG9wOiAzcHg7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCAuU29ydEFzY2VuZGluZyA+IGE6YWZ0ZXIsCiAgICAuVGFibGVTbWFsbCB0aGVhZCAuU29ydEFzY2VuZGluZyA+IGE6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICJcMjVCMiI7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgICB0b3A6IDNweDsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRib2R5IHRyLkludmFsaWQgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgfQoKICAgIC5EYXRhVGFibGUgdGJvZHkgdGQgewogICAgICAgIHBhZGRpbmc6IDAgMTBweDsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBkb3R0ZWQgdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICAuRGF0YVRhYmxlLkZpeGVkTGF5b3V0IHRib2R5IHRkIGEuQXNCbG9jayB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5EYXRhVGFibGUgdGJvZHkgdGQuVW5yZWFkQXJ0aWNsZXMgewogICAgICAgIHBhZGRpbmc6IDBweDsKICAgIH0KCiAgICAuUlRMIC5EYXRhVGFibGUgdGJvZHkgdGQgewogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggZG90dGVkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgfQoKICAgIC5EYXRhVGFibGUgdGJvZHkgdHI6aG92ZXIgdGQgewogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tY29sQkdFbGVtZW50KTsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRib2R5IHRkOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIH0KCiAgICAuUlRMIC5EYXRhVGFibGUgdGJvZHkgdGQ6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0ciB0ZCB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0cjpmaXJzdCB0ZCB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgfQoKICAgIC5EYXRhVGFibGUgdHIgdGQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHRWxlbWVudCk7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0ciB0ZC5IaWdobGlnaHQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgfQoKICAgIC5EYXRhVGFibGUgdHI6bnRoLWNoaWxkKGV2ZW4pIHRkIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRyOm50aC1jaGlsZChldmVuKSB0ZC5IaWdobGlnaHQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTWVkaXVtKTsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRyIHRkLkhpZ2hsaWdodCB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRyIHRkLkhpZ2hsaWdodDpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0cjpob3ZlciB0ZCBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIC5EYXRhVGFibGUgdGQ6Zmlyc3QtY2hpbGQgaW5wdXQgewogICAgICAgIG1hcmdpbjogMDsKICAgIH0KCgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgUXVldWVPdmVydmlld1RvdGFscyBEYXRhVGFibGUKICAgICAqLwoKICAgIC5EYXRhVGFibGUgdGhlYWQgdGguUXVldWVPdmVydmlld1RvdGFscywKICAgIC5Sb3cgdGQuUXVldWVPdmVydmlld1RvdGFscywKICAgIC5Sb3cgYS5RdWV1ZU92ZXJ2aWV3VG90YWxzIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgIH0KCiAgICAuRGF0YVRhYmxlIC5Sb3cgdGQuUXVldWVPdmVydmlld1RvdGFscyB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBib3JkZXItdG9wOiAxcHggZG90dGVkIHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgU29ydGFibGUgRGF0YVRhYmxlCiAgICAgKi8KCiAgICAuU29ydGFibGUuRGF0YVRhYmxlIHRoIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgfQoKICAgIC5Tb3J0YWJsZS5EYXRhVGFibGUgdGggYSwKICAgIC5Tb3J0YWJsZS5EYXRhVGFibGUgdGggc3BhbiB7CiAgICAgICAgcGFkZGluZzogNHB4IDEwcHggM3B4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAuU29ydGFibGUuRGF0YVRhYmxlIHRoLlNvcnRBc2NlbmRpbmcgYSwKICAgIC5Tb3J0YWJsZS5EYXRhVGFibGUgdGguU29ydERlc2NlbmRpbmcgYSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4OwogICAgfQoKICAgIC5Tb3J0YWJsZS5EYXRhVGFibGUgLlNvcnRBc2NlbmRpbmcsCiAgICAuU29ydGFibGUuRGF0YVRhYmxlIC5Tb3J0RGVzY2VuZGluZyB7CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBPdmVydmlldyBTbWFsbCBWaWV3IFRhYmxlCiAgICAgKi8KICAgIC5UYWJsZVNtYWxsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0VsZW1lbnQpOwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRoZWFkIHsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgfQoKICAgIC5UYWJsZVNtYWxsIC5DaGVja2JveCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDdweDsKICAgIH0KCiAgICB0aC5DaGVja2JveCwKICAgIHRkLkNoZWNrYm94IHsKICAgICAgICB3aWR0aDogMzBweDsKICAgIH0KCiAgICB0aC5GbGFncyB7CiAgICAgICAgd2lkdGg6IDM0cHg7CiAgICB9CgogICAgdGQuRmxhZ3MgewogICAgICAgIHdpZHRoOiAyOXB4OwogICAgfQoKICAgIHRoLlVucmVhZEFydGljbGVzLAogICAgdGQuVW5yZWFkQXJ0aWNsZXMgewogICAgICAgIHdpZHRoOiAzMHB4OwogICAgfQoKICAgIHRoLkRpcmVjdGlvbiwKICAgIHRkLkRpcmVjdGlvbiB7CiAgICAgICAgd2lkdGg6IDMwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgfQoKICAgIHRoLkF0dGFjaG1lbnQsCiAgICB0ZC5BdHRhY2htZW50IHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweCAhaW1wb3J0YW50OwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRoZWFkIHRoIHsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdMaWdodE1lZGl1bSk7CiAgICB9CgogICAgLlRhYmxlU21hbGwgdGhlYWQgdGg6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAwcHg7CiAgICB9CgogICAgLlRhYmxlU21hbGwgdGhlYWQgdGggYSB7CiAgICAgICAgcGFkZGluZy10b3A6IDJweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMnB4OwogICAgfQoKICAgIC5SVEwgLlRhYmxlU21hbGwgdGhlYWQgdGggewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgYm90dG9tOwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRoZWFkIGEsCiAgICAuVGFibGVTbWFsbCB0aGVhZCBzcGFuIHsKICAgICAgICBtYXJnaW46IDAgMnB4IDFweCAxcHg7CiAgICAgICAgcGFkZGluZzogMCAxMHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE1cHg7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIH0KCiAgICAuUlRMIC5UYWJsZVNtYWxsIHRoZWFkIGEsCiAgICAuUlRMIC5UYWJsZVNtYWxsIHRoZWFkIHNwYW4gewogICAgICAgIG1hcmdpbjogMCAxcHggMXB4IDJweDsKICAgIH0KCiAgICAuVGFibGVTbWFsbCB0aGVhZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRoZWFkIC5VbnJlYWRBcnRpY2xlcyBhIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCA1cHg7CiAgICB9CgogICAgLlJUTCAuVGFibGVTbWFsbCB0aGVhZCAuVW5yZWFkQXJ0aWNsZXMgYSB7CiAgICAgICAgcGFkZGluZzogMCA1cHggMCAwOwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRoZWFkIHNwYW4uVW5yZWFkQXJ0aWNsZXMgYSBpIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CgogICAgLlRhYmxlU21hbGwgdGhlYWQgc3Bhbi5VbnJlYWRBcnRpY2xlcyBpOmZpcnN0LWNoaWxkIHsKICAgICAgICBmb250LXNpemU6IDE2cHggIWltcG9ydGFudDsKICAgIH0KCiAgICB0aGVhZCAuU29ydEFzY2VuZGluZyBhLAogICAgdGhlYWQgLmhlYWRlclNvcnRVcCBhLAogICAgdGhlYWQgLlNvcnREZXNjZW5kaW5nIGEsCiAgICB0aGVhZCAuaGVhZGVyU29ydERvd24gYSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAuVGFibGVTbWFsbCB0aGVhZCBhIHNwYW4sCiAgICAuRGF0YVRhYmxlIHRoZWFkIGEgc3BhbiB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAuVGFibGVTbWFsbCB0aGVhZCBhIHNwYW4uRmxhZyB7CiAgICAgICAgaGVpZ2h0OiA5cHg7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICB9CgogICAgLlRhYmxlU21hbGwgdGQgewogICAgICAgIHBhZGRpbmc6IDAgMTBweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBkb3R0ZWQgdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICAuUlRMIC5UYWJsZVNtYWxsIHRkIHsKICAgICAgICBib3JkZXItcmlnaHQ6bm9uZTsKICAgICAgICBib3JkZXItbGVmdDogMXB4IGRvdHRlZCB2YXIoLS1jb2xCR0RhcmspOwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRkLk5vblRleHRDb250ZW50IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMDsKICAgIH0KCiAgICAuVGFibGVTbWFsbCB0Ym9keSB0ci5BY3RpdmUgdGQsCiAgICAuRGF0YVRhYmxlIHRib2R5IHRyLkFjdGl2ZSB0ZCB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRib2R5IHRyLkFjdGl2ZSB0ZCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdNZWRpdW0pOwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRib2R5IHRyIHRkOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgfQoKICAgIC5SVEwgLlRhYmxlU21hbGwgdGJvZHkgdHIgdGQ6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICB9CgogICAgLlRhYmxlU21hbGwgdGJvZHkgdHIuQWN0aXZlIHRkOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAuUlRMIC5UYWJsZVNtYWxsIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItbGVmdDogMXB4IGRvdHRlZCB2YXIoLS1jb2xCR0RhcmspOwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRib2R5IHRyLkFjdGl2ZSB0ZDpmaXJzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLlRhYmxlU21hbGwgdGQgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAuVGFibGVTbWFsbCB0cjpob3ZlciB0ZCBhLAogICAgLlRhYmxlU21hbGwgdHIuQWN0aXZlIHRkIGEgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLlRhYmxlU21hbGwgdGQgYS5EeW5hbWljRmllbGRMaW5rIHsKICAgICAgICBjb2xvcjogcmV2ZXJ0OwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRyOmhvdmVyIHRkIGEuRHluYW1pY0ZpZWxkTGluaywKICAgIC5UYWJsZVNtYWxsIHRyLkFjdGl2ZSB0ZCBhLkR5bmFtaWNGaWVsZExpbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLlRhYmxlU21hbGwgdHI6bnRoLWNoaWxkKGV2ZW4pIHRkIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0VsZW1lbnQpOwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRkOmZpcnN0LWNoaWxkIHsKICAgICAgICBwYWRkaW5nLXRvcDogMXB4OwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRib2R5IC5GbGFncyB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDExcHg7CiAgICAgICAgcGFkZGluZy10b3A6IDJweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweDsKICAgIH0KCiAgICAuVGFibGVTbWFsbCB0Ym9keSB0ZCBzcGFuLkRpcmVjdGlvbiwKICAgIC5EYXRhVGFibGUgdGJvZHkgdGQgc3Bhbi5EaXJlY3Rpb24gewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHdpZHRoOiAzMHB4OwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRib2R5IHRkIHNwYW4uRGlyZWN0aW9uIGksCiAgICAuRGF0YVRhYmxlIHRib2R5IHRkIHNwYW4uRGlyZWN0aW9uIGkgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAuVGFibGVTbWFsbCB0Ym9keSB0ZCBzcGFuLkRpcmVjdGlvbi5JbmNvbWluZyAuZmEtbG9uZy1hcnJvdy1sZWZ0LAogICAgLkRhdGFUYWJsZSB0Ym9keSB0ZCBzcGFuLkRpcmVjdGlvbi5JbmNvbWluZyAuZmEtbG9uZy1hcnJvdy1sZWZ0LAogICAgLlRhYmxlU21hbGwgdGJvZHkgdGQgc3Bhbi5EaXJlY3Rpb24uT3V0Z29pbmcgLmZhLWxvbmctYXJyb3ctcmlnaHQsCiAgICAuRGF0YVRhYmxlIHRib2R5IHRkIHNwYW4uRGlyZWN0aW9uLk91dGdvaW5nIC5mYS1sb25nLWFycm93LXJpZ2h0IHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIH0KCiAgICAuVGFibGVTbWFsbCB0Ym9keSB0ZC5BdHRhY2htZW50LAogICAgLkRhdGFUYWJsZSB0Ym9keSB0ZC5BdHRhY2htZW50IHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLlRhYmxlU21hbGwgdGJvZHkgdGQgYS5BdHRhY2htZW50LAogICAgLkRhdGFUYWJsZSB0Ym9keSB0ZCBhLkF0dGFjaG1lbnQgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLlRhYmxlU21hbGwgdGJvZHkgdGQgYS5BdHRhY2htZW50IGksCiAgICAuRGF0YVRhYmxlIHRib2R5IHRkIGEuQXR0YWNobWVudCBpIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIC5UYWJsZVNtYWxsIHRkIGgyIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBUYWJsZSBDb250ZXh0IFNldHRpbmdzCiAgICAgKi8KICAgIC5UYWJsZUNvbnRleHRTZXR0aW5ncyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMjhweDsKICAgIH0KCiAgICAuVGFibGVDb250ZXh0U2V0dGluZ3MgYSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOXB4OwogICAgICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWcvY29udGV4dHNldHRpbmdzLnBuZykgbm8tcmVwZWF0IDVweCA0cHg7CiAgICAgICAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgVGlja2V0IExpc3QgVGFibGVzCiAgICAgKi8KCiAgICAuVGlja2V0TGlzdCB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICB9CgogICAgLlRpY2tldExpc3QgdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLlRpY2tldExpc3QgdGQgewogICAgICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgfQoKICAgIC5UaWNrZXRMaXN0IHRkLkZyb20gZGl2LAogICAgLlRpY2tldExpc3QgdGQuU3ViamVjdCBkaXYsCiAgICAuVGlja2V0TGlzdCB0ZC5DcmVhdGVkIGEgewogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKICAgIC5UaWNrZXRMaXN0IC5ObyB7CiAgICAgICAgd2lkdGg6IDMwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgfQoKICAgIC5UaWNrZXRMaXN0IC5BdHRhY2htZW50cyB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICB9CgogICAgLyogU3Vic2VjdGlvbiBpbXByb3ZlbWVudHMgZm9yIEFydGljbGUgRmVhdHVyZXMgUGFja2FnZSAqLwogICAgLlRpY2tldExpc3QgLkFydGljbGVFZGl0IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgIH0KCiAgICAuVGlja2V0TGlzdCAuQXJ0aWNsZURlbGV0ZWQgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogICAgICAgIGNvbG9yOiByZWQgIWltcG9ydGFudDsKICAgIH0KCiAgICAuVGlja2V0TGlzdCAuRWRpdEljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CgogICAgLyogRW5kIEFydGljbGUgRmVhdHVyZXMgKi8KCiAgICAjQXJ0aWNsZVRhYmxlIHRoZWFkIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICB2YXIoLS1jb2xCR0xpZ2h0KSAwJSwgdmFyKC0tY29sQkdNZWRpdW0pIDEwMCUpOwogICAgICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUsdmFyKC0tY29sQkdMaWdodCkpLCBjb2xvci1zdG9wKDEwMCUsdmFyKC0tY29sQkdNZWRpdW0pKSk7CiAgICAgICAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAgdmFyKC0tY29sQkdMaWdodCkgMCUsdmFyKC0tY29sQkdNZWRpdW0pIDEwMCUpOwogICAgICAgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICB2YXIoLS1jb2xCR0xpZ2h0KSAwJSx2YXIoLS1jb2xCR01lZGl1bSkgMTAwJSk7CiAgICAgICAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICB2YXIoLS1jb2xCR0xpZ2h0KSAwJSx2YXIoLS1jb2xCR01lZGl1bSkgMTAwJSk7CiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIHZhcigtLWNvbEJHTGlnaHQpIDAlLHZhcigtLWNvbEJHTWVkaXVtKSAxMDAlKTsKICAgIH0KCiAgICAjT3ZlcnZpZXdCb2R5Lk92ZXJ2aWV3LlRpY2tldExpc3QgewogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICB9CgogICAgI092ZXJ2aWV3Qm9keS5PdmVydmlldy5UaWNrZXRMaXN0IHRhYmxlLlRhYmxlU21hbGwuTm9DZWxsc3BhY2luZyB7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgSGFuZGxlIGZvciByZXNpemluZyB0YWJsZXMKICAgICAqLwogICAgLkhhbmRsZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLkhhbmRsZSBhIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIHdpZHRoOiA3OXB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9pbWcvaGFuZGxlLnBuZykgbm8tcmVwZWF0OwogICAgICAgIHRleHQtaW5kZW50OiAtOTk5OXB4OwogICAgICAgIGN1cnNvcjogbnMtcmVzaXplOwogICAgfQoKICAgIC5IYW5kbGUudWktcmVzaXphYmxlLXMgewogICAgICAgIGN1cnNvcjphdXRvOwogICAgICAgIGhlaWdodDphdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgbGVmdDphdXRvOwogICAgfQoKICAgIC5IYW5kbGUudWktcmVzaXphYmxlLWhhbmRsZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiBpbmhlcml0OwogICAgICAgIHotaW5kZXg6IDE5OwogICAgfQoKCgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgVGFibGUgaGVhZGVycy1maWx0ZXJzCiAgICAgKi8KICAgICAuVGFibGVTbWFsbCB0aGVhZCBzcGFuLkdyYXkgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAuRGF0YVRhYmxlIC5Db2x1bW5GaWx0ZXIgewogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICB9CgogICAgLkNvbHVtbkZpbHRlciArIC5BSkFYTG9hZGVyIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgbWFyZ2luOiAzcHggMHB4IDBweCAycHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdMaWdodE1lZGl1bSk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDk5OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICBzZWxlY3QuQ29sdW1uRmlsdGVyIHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCAuU29ydEFzY2VuZGluZ0xhcmdlIGEsCiAgICAuRGF0YVRhYmxlIHRoZWFkIC5Tb3J0RGVzY2VuZGluZ0xhcmdlIGEsCiAgICAuVGFibGVTbWFsbCB0aGVhZCAuU29ydEFzY2VuZGluZ0xhcmdlIGEsCiAgICAuVGFibGVTbWFsbCB0aGVhZCAuU29ydERlc2NlbmRpbmdMYXJnZSBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCAuU29ydERlc2NlbmRpbmdMYXJnZSA+IGE6YWZ0ZXIsCiAgICAuVGFibGVTbWFsbCB0aGVhZCAuU29ydERlc2NlbmRpbmdMYXJnZSA+IGE6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICJcMjVCQyI7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IC02cHg7CiAgICAgICAgdGV4dC1zaGFkb3c6IDFweCAxcHggMHB4ICNmZmY7CiAgICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICB0aGVhZCAuaGVhZGVyU29ydFVwID4gYTpiZWZvcmUsCiAgICB0aGVhZCAudGFibGVzb3J0ZXItaGVhZGVyRGVzYyA+IGRpdi50YWJsZXNvcnRlci1oZWFkZXItaW5uZXIgPiBhOmJlZm9yZSB7CiAgICAgICAgY29udGVudDogIlwyNUJDIjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7CiAgICB9CgogICAgdGhlYWQgLmhlYWRlclNvcnREb3duID4gYTpiZWZvcmUsCiAgICB0aGVhZCAudGFibGVzb3J0ZXItaGVhZGVyQXNjID4gZGl2LnRhYmxlc29ydGVyLWhlYWRlci1pbm5lciA+IGE6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAiXDI1QjIiOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweDsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRoZWFkIC5Tb3J0QXNjZW5kaW5nTGFyZ2UgPiBhOmFmdGVyLAogICAgLlRhYmxlU21hbGwgdGhlYWQgLlNvcnRBc2NlbmRpbmdMYXJnZSA+IGE6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICJcMjVCMiI7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IC02cHg7CiAgICAgICAgdGV4dC1zaGFkb3c6IDFweCAxcHggMHB4ICNmZmY7CiAgICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRoZWFkIHRoLkRhc2hib2FyZEhlYWRlciBhLAogICAgLlRhYmxlU21hbGwgdGhlYWQgdGguT3ZlcnZpZXdIZWFkZXIgYSwKICAgIC5EYXRhVGFibGUgdGhlYWQgdGguRGFzaGJvYXJkSGVhZGVyIHNwYW4uR3JheSB7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4OwogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgfQoKICAgIC5EYXRhVGFibGUgdGhlYWQgdGguRGFzaGJvYXJkSGVhZGVyIC5Db2x1bW5TZXR0aW5nc1RyaWdnZXIsCiAgICAuVGFibGVTbWFsbCB0aGVhZCB0aC5PdmVydmlld0hlYWRlciAuQ29sdW1uU2V0dGluZ3NUcmlnZ2VyIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTdweDsKICAgICAgICBoZWlnaHQ6IDE3cHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWFyZ2luOiAwcHggLTE5cHggMHB4IDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMjsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRoZWFkIHRoLkRhc2hib2FyZEhlYWRlciAuQ29sdW1uU2V0dGluZ3NUcmlnZ2VyIGksCiAgICAuVGFibGVTbWFsbCB0aGVhZCB0aC5PdmVydmlld0hlYWRlciAuQ29sdW1uU2V0dGluZ3NUcmlnZ2VyIGkgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIH0KCiAgICAuVGFibGVTbWFsbCB0aGVhZCB0aC5PdmVydmlld0hlYWRlciAuQ29sdW1uU2V0dGluZ3NUcmlnZ2VyIHsKICAgICAgICBtYXJnaW46IDJweCAtMThweCAwcHggMHB4OwogICAgfQoKICAgIC5EYXRhVGFibGUgdGhlYWQgdGguRGFzaGJvYXJkSGVhZGVyLkZpbHRlckFjdGl2ZSAuQ29sdW1uU2V0dGluZ3NUcmlnZ2VyLAogICAgLkRhdGFUYWJsZSB0aGVhZCB0aC5EYXNoYm9hcmRIZWFkZXIgLkNvbHVtblNldHRpbmdzVHJpZ2dlcjpob3ZlciwKICAgIC5EYXRhVGFibGUgdGhlYWQgdGguRGFzaGJvYXJkSGVhZGVyIC5Db2x1bW5TZXR0aW5nc1RyaWdnZXIuQWN0aXZlLAogICAgLlRhYmxlU21hbGwgdGhlYWQgdGguT3ZlcnZpZXdIZWFkZXIuRmlsdGVyQWN0aXZlIC5Db2x1bW5TZXR0aW5nc1RyaWdnZXIsCiAgICAuVGFibGVTbWFsbCB0aGVhZCB0aC5PdmVydmlld0hlYWRlciAuQ29sdW1uU2V0dGluZ3NUcmlnZ2VyOmhvdmVyLAogICAgLlRhYmxlU21hbGwgdGhlYWQgdGguT3ZlcnZpZXdIZWFkZXIgLkNvbHVtblNldHRpbmdzVHJpZ2dlci5BY3RpdmUgewoKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgb3BhY2l0eTogMS4wOwogICAgICAgIGJveC1zaGFkb3c6IDFweCAxcHggMXB4IHZhcigtLWNvbFRleHRMaWdodCkgaW5zZXQsIC0xcHggLTFweCAxcHggdmFyKC0tY29sVGV4dExpZ2h0KSBpbnNldDsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRoZWFkIHRoLkRhc2hib2FyZEhlYWRlci5GaWx0ZXJBY3RpdmUgLkNvbHVtblNldHRpbmdzVHJpZ2dlciBpLAogICAgLkRhdGFUYWJsZSB0aGVhZCB0aC5EYXNoYm9hcmRIZWFkZXIgLkNvbHVtblNldHRpbmdzVHJpZ2dlci5BY3RpdmUgaSwKICAgIC5UYWJsZVNtYWxsIHRoZWFkIHRoLk92ZXJ2aWV3SGVhZGVyLkZpbHRlckFjdGl2ZSAuQ29sdW1uU2V0dGluZ3NUcmlnZ2VyIGksCiAgICAuVGFibGVTbWFsbCB0aGVhZCB0aC5PdmVydmlld0hlYWRlciAuQ29sdW1uU2V0dGluZ3NUcmlnZ2VyLkFjdGl2ZSBpIHsKCiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgfQoKICAgIC5EYXRhVGFibGUgdGhlYWQgdGguRGFzaGJvYXJkSGVhZGVyIC5Db2x1bW5TZXR0aW5nc1RyaWdnZXI6YWZ0ZXIsCiAgICAuVGFibGVTbWFsbCB0aGVhZCB0aC5PdmVydmlld0hlYWRlciAuQ29sdW1uU2V0dGluZ3NUcmlnZ2VyOmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRoZWFkIHRoLkRhc2hib2FyZEhlYWRlciAuQ29sdW1uU2V0dGluZ3NDb250YWluZXIsCiAgICAuVGFibGVTbWFsbCB0aGVhZCB0aC5PdmVydmlld0hlYWRlciAuQ29sdW1uU2V0dGluZ3NDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRoZWFkIHRoLkRhc2hib2FyZEhlYWRlciAuQ29sdW1uU2V0dGluZ3NCb3gsCiAgICAuVGFibGVTbWFsbCB0aGVhZCB0aC5PdmVydmlld0hlYWRlciAuQ29sdW1uU2V0dGluZ3NCb3ggewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJveC1zaGFkb3c6IDFweCAxcHggM3B4IHZhcigtLWNvbEJHTWVkaXVtRGFyayksIC0xcHggLTFweCAzcHggdmFyKC0tY29sQkdNZWRpdW1EYXJrKTsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICB0b3A6IDJweDsKICAgICAgICB3aWR0aDogMTgwcHg7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgfQoKICAgIC5NYWluQm94LkRhc2hib2FyZCAuRGF0YVRhYmxlIHRoZWFkIHRoLkRhc2hib2FyZEhlYWRlciAuQ29sdW1uU2V0dGluZ3NCb3gsCiAgICAuTWFpbkJveC5EYXNoYm9hcmQgLlRhYmxlU21hbGwgdGhlYWQgdGguT3ZlcnZpZXdIZWFkZXIgLkNvbHVtblNldHRpbmdzQm94IHsKICAgICAgICB0b3A6IC0xMHB4OwogICAgfQoKICAgIC5EYXRhVGFibGUgdGhlYWQgdGguRGFzaGJvYXJkSGVhZGVyIC5Db2x1bW5TZXR0aW5nc0JveCBzZWxlY3QsCiAgICAuVGFibGVTbWFsbCB0aGVhZCB0aC5PdmVydmlld0hlYWRlciAuQ29sdW1uU2V0dGluZ3NCb3ggc2VsZWN0IHsKICAgICAgICBtYXJnaW4tdG9wOiAwcHg7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCB0aC5EYXNoYm9hcmRIZWFkZXIgLkNvbHVtblNldHRpbmdzQm94IHNwYW4uU2VsZWN0ZWRWYWx1ZSwKICAgIC5UYWJsZVNtYWxsIHRoZWFkIHRoLk92ZXJ2aWV3SGVhZGVyIC5Db2x1bW5TZXR0aW5nc0JveCBzcGFuLlNlbGVjdGVkVmFsdWUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCB0aC5EYXNoYm9hcmRIZWFkZXIgLkNvbHVtblNldHRpbmdzQm94IHNwYW4uU2VsZWN0ZWRWYWx1ZSBzcGFuLAogICAgLlRhYmxlU21hbGwgdGhlYWQgdGguT3ZlcnZpZXdIZWFkZXIgLkNvbHVtblNldHRpbmdzQm94IHNwYW4uU2VsZWN0ZWRWYWx1ZSBzcGFuIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCB0aC5EYXNoYm9hcmRIZWFkZXIgLkNvbHVtblNldHRpbmdzQm94IHNwYW4uU2VsZWN0ZWRWYWx1ZSBhLAogICAgLlRhYmxlU21hbGwgdGhlYWQgdGguT3ZlcnZpZXdIZWFkZXIgLkNvbHVtblNldHRpbmdzQm94IHNwYW4uU2VsZWN0ZWRWYWx1ZSBhIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTNweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHRvcDogLTFweDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBwYWRkaW5nOiAwcHggMHB4IDBweCA1cHg7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCB0aC5EYXNoYm9hcmRIZWFkZXIgLkNvbHVtblNldHRpbmdzQm94IGEuRGVsZXRlRmlsdGVyLAogICAgLlRhYmxlU21hbGwgdGhlYWQgdGguT3ZlcnZpZXdIZWFkZXIgLkNvbHVtblNldHRpbmdzQm94IGEuRGVsZXRlRmlsdGVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxMnB4OwogICAgfQoKICAgIC5EYXRhVGFibGUgdGhlYWQgdGguRGFzaGJvYXJkSGVhZGVyIC5Db2x1bW5TZXR0aW5nc0JveCBhLkRlbGV0ZUZpbHRlci5IaWRkZW4sCiAgICAuVGFibGVTbWFsbCB0aGVhZCB0aC5PdmVydmlld0hlYWRlciAuQ29sdW1uU2V0dGluZ3NCb3ggYS5EZWxldGVGaWx0ZXIuSGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5EYXRhVGFibGUgdGhlYWQgdGguRGFzaGJvYXJkSGVhZGVyIC5Db2x1bW5TZXR0aW5nc0JveCBzcGFuLlNlbGVjdGVkVmFsdWUgYTpob3ZlciwKICAgIC5UYWJsZVNtYWxsIHRoZWFkIHRoLk92ZXJ2aWV3SGVhZGVyIC5Db2x1bW5TZXR0aW5nc0JveCBzcGFuLlNlbGVjdGVkVmFsdWUgYTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCB0aC5PdmVydmlld0hlYWRlciAuQ29sdW1uU2V0dGluZ3NCb3ggaW5wdXRbdHlwZT0idGV4dCJdICwKICAgIC5UYWJsZVNtYWxsIHRoZWFkIHRoLk92ZXJ2aWV3SGVhZGVyIC5Db2x1bW5TZXR0aW5nc0JveCBpbnB1dFt0eXBlPSJ0ZXh0Il0gewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgIH0KCgogICAgLkRhdGFUYWJsZSB0aGVhZCB0aC5EYXNoYm9hcmRIZWFkZXIsCiAgICAuVGFibGVTbWFsbCB0aGVhZCB0aC5PdmVydmlld0hlYWRlciB7CiAgICAgICAgcGFkZGluZzogMHB4IDIwcHggMHB4IDFweDsKICAgIH0KCiAgICAuRGF0YVRhYmxlIHRoZWFkIHRoLkRhc2hib2FyZEhlYWRlci5Tb3J0RGVzY2VuZGluZ0xhcmdlLAogICAgLkRhdGFUYWJsZSB0aGVhZCB0aC5EYXNoYm9hcmRIZWFkZXIuU29ydEFzY2VuZGluZ0xhcmdlLAogICAgLlRhYmxlU21hbGwgdGhlYWQgdGguT3ZlcnZpZXdIZWFkZXIuU29ydERlc2NlbmRpbmdMYXJnZSwKICAgIC5UYWJsZVNtYWxsIHRoZWFkIHRoLk92ZXJ2aWV3SGVhZGVyLlNvcnRBc2NlbmRpbmdMYXJnZSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7CiAgICB9CgogICAgLkRhdGFUYWJsZSB0aGVhZCBzcGFuLkdyYXkgewogICAgICAgIGhlaWdodDogMTZweCAhaW1wb3J0YW50OwogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxMnB4OwogICAgfQoKICAgIC5UYWJsZVNtYWxsIC5Db2x1bW5GaWx0ZXIgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgIH0KCiAgICAvKiBEZWxldGUgZmlsdGVycyAqLwogICAgLkNvbnRleHRTZXR0aW5ncy5SZW1vdmVGaWx0ZXJzIGEgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKICAgIC5Db250ZXh0U2V0dGluZ3MuUmVtb3ZlRmlsdGVycyBhIGkgewogICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgfQoKICAgIC5EYXRhVGFibGUgKyBwLlNwYWNpbmdUb3BTbWFsbCB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIFBhY2thZ2UgbWFuYWdlcgogICAgICovCgogICAgcC5JbnRyb0luc3RhbGwgewogICAgICAgIHdpZHRoOiA3MCU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDdweDsKICAgIH0KCiAgICAuT1RPQk9WZXJpZnlMb2dvQmlnIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogNDBweDsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgaGVpZ2h0OiA0NXB4OwogICAgfQoKICAgIC5PVE9CT1ZlcmlmeUxvZ28gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXJnaW46IDNweCAwcHggMHB4IDNweDsKICAgICAgICB3aWR0aDogNzZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgSWNvbnMgaW4gdGFibGVzCiAgICAgKi8KCiAgICB0ZCBpLAogICAgdGQgYSBpIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDsKICAgIH0KCiAgICB0cjpob3ZlciB0ZCBpLAogICAgdHI6aG92ZXIgdGQgYSBpLAogICAgdGQgYTpob3ZlciBpIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKfSAvKiBlbmQgQG1lZGlhICovCgoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgVGlja2V0RGV0YWlscwogKi8KCkBtZWRpYSBzY3JlZW4sIHByaW50IHsKCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBIZWFkbGluZQogICAgICovCiAgICBkaXYuSGVhZGxpbmUgewogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBtYXJnaW46IDVweCAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIGRpdi5IZWFkbGluZSBoMSB7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CgogICAgZGl2LkhlYWRsaW5lIGgxIHNwYW4gewogICAgICAgIHBhZGRpbmc6IDAgM3B4OwogICAgfQoKICAgIGRpdi5IZWFkbGluZSAuRmxhZyArIGgxIHsKICAgICAgICBtYXJnaW4tbGVmdDogMzBweDsKICAgIH0KCiAgICAuUlRMIGRpdi5IZWFkbGluZSAuRmxhZyArIGgxIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDMwcHg7CiAgICB9CgogICAgZGl2LkhlYWRsaW5lIC5GbGFnIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1cHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMTVweDsKICAgIH0KCiAgICAuUlRMIGRpdi5IZWFkbGluZSAuRmxhZyB7CiAgICAgICAgbGVmdDogYXV0bzsKICAgICAgICByaWdodDogMDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBBcnRpY2xlIHZpZXcgc2V0dGluZ3MKICAgICAqLwoKICAgIC5BcnRpY2xlVmlldyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAzcHg7CiAgICAgICAgdG9wOiA3cHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgQXJ0aWNsZSB0YWJsZSBoZWFkCiAgICAgKi8KCiAgICAuQWN0aW9uUm93IC5UYWJsZUNvbnRleHRTZXR0aW5ncyArIC5UYWJsZVNtYWxsIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE3cHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgQXJ0aWNsZSB0YWJsZSBib2R5CiAgICAgKi8KCiAgICAjQXJ0aWNsZUl0ZW1zIC5IZWFkZXIgaDIgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgfQoKICAgICNBcnRpY2xlSXRlbXMgLldpZGdldFNpbXBsZSAuSGVhZGVyIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgICNBcnRpY2xlSXRlbXMgLldpZGdldFNpbXBsZSAuSGVhZGVyIGgyIHsKICAgICAgICBtYXgtd2lkdGg6IDgwJTsKICAgIH0KCiAgICAjQXJ0aWNsZUl0ZW1zIC5XaWRnZXRTaW1wbGUgLkhlYWRlciAuQWRkaXRpb25hbEluZm9ybWF0aW9uIHsKICAgICAgICBwb3NpdGlvbjogc3RhdGljOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICB9CgogICAgI0FydGljbGVJdGVtcyAuV2lkZ2V0TWVudSAuTGlnaHRSb3cgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTWVkaXVtKTsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgfQoKICAgICNBcnRpY2xlVGFibGVCb2R5IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICAgIG1hcmdpbjogMHB4OwogICAgfQoKICAgICNBcnRpY2xlVGFibGVCb2R5IC5TY3JvbGxlciB7CiAgICAgICAgaGVpZ2h0OiA4MnB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKICAgIH0KCiAgICAjQXJ0aWNsZVRhYmxlQm9keSAuU2Nyb2xsZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgI0FydGljbGVUYWJsZUJvZHkgLlNjcm9sbGVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgIH0KCiAgICAjQXJ0aWNsZVRhYmxlQm9keSAuU2Nyb2xsZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0RhcmspOwogICAgfQoKICAgICNBcnRpY2xlVGFibGVCb2R5IC5TY3JvbGxlciAuRGF0YVRhYmxlIHsKICAgICAgICBib3JkZXI6IDBweDsKICAgIH0KCiAgICAuQXJ0aWNsZU1haWxIZWFkZXIgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBtYXJnaW46IDEwcHggMHB4IC01cHggMHB4OwogICAgfQoKICAgIC5PdXRnb2luZyAuQXJ0aWNsZU1haWxIZWFkZXIgZmllbGRzZXQuVGFibGVMaWtlLkZpeGVkTGFiZWxTbWFsbCA+IGxhYmVsLAogICAgLk91dGdvaW5nIC5BcnRpY2xlTWFpbEhlYWRlciBmaWVsZHNldC5UYWJsZUxpa2UuRml4ZWRMYWJlbFNtYWxsID4gLlJvdyA+IGxhYmVsIHsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICB9CgogICAgI0FydGljbGVJdGVtcyAuSXRlbUFjdGlvbnMgewogICAgICAgIHBhZGRpbmc6IDBweCAxMHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMDVweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDExNXB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRvcDogLTRweDsKICAgIH0KCiAgICAjQXJ0aWNsZUl0ZW1zIC5JdGVtQWN0aW9ucyBsaSAuSW5wdXRGaWVsZF9Db250YWluZXIgewogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICB9CgogICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAwcHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHsKCiAgICAgICAgI0FydGljbGVJdGVtcyAuSXRlbUFjdGlvbnMgbGkgLklucHV0RmllbGRfQ29udGFpbmVyIHsKICAgICAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgICAgfQoKICAgIH0KCiAgICAjQXJ0aWNsZUl0ZW1zIC5JdGVtQWN0aW9ucyBsaSAuSW5wdXRGaWVsZF9Db250YWluZXIgaW5wdXRbdHlwZT10ZXh0XSB7CiAgICAgICAgcGFkZGluZzogMnB4OwogICAgfQoKICAgICNBcnRpY2xlSXRlbXMgLk91dGdvaW5nIC5JdGVtQWN0aW9ucyB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDc1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7CiAgICB9CgogICAgI0FydGljbGVJdGVtcyAuQXJ0aWNsZU1haWxIZWFkZXIgbGFiZWwsCiAgICAjQXJ0aWNsZUl0ZW1zIC5BcnRpY2xlTWFpbEhlYWRlciBwLlZhbHVlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIuNGVtOwogICAgfQoKICAgICNBcnRpY2xlSXRlbXMgLkFydGljbGVNYWlsSGVhZGVyIHAuVmFsdWUgewogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAxMTJweCk7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgfQoKICAgICNBcnRpY2xlSXRlbXMgLkluY29taW5nIC5BcnRpY2xlTWFpbEhlYWRlciBwLlZhbHVlIHsKICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gMTAzcHgpOwogICAgfQoKICAgIC5BcnRpY2xlTWFpbENvbnRlbnQgewogICAgICAgIHBhZGRpbmc6IDNweCAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5BcnRpY2xlTWFpbENvbnRlbnQgLkFydGljbGVNZXRhIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xFbGVtZW50KTsKICAgICAgICBwYWRkaW5nOiAxMnB4IDEycHggNHB4IDEycHg7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW4tbGVmdDogNzVweDsKICAgICAgICBtYXJnaW4tdG9wOiAtOXB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspICFpbXBvcnRhbnQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHotaW5kZXg6IDI7CiAgICB9CgogICAgLkluY29taW5nIC5BcnRpY2xlTWFpbENvbnRlbnQgLkFydGljbGVNZXRhIHsKICAgICAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogNzVweDsKICAgIH0KCiAgICAuQXJ0aWNsZU1haWxDb250ZW50IC5BcnRpY2xlTWV0YSBoMiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICB9CgogICAgLkFydGljbGVNYWlsQ29udGVudCAuQXJ0aWNsZU1ldGEgdWwgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIH0KCiAgICAuQXJ0aWNsZU1haWxDb250ZW50IC5BcnRpY2xlTWV0YSB1bCBsaSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgfQoKICAgIC5BcnRpY2xlTWFpbENvbnRlbnQgLkFydGljbGVNZXRhIHVsIGxpIGEgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdMaWdodE1lZGl1bSk7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBwYWRkaW5nOiAzcHggN3B4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgIH0KCiAgICAuQXZhdGFyIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0xpZ2h0TWVkaXVtKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDMwcHg7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgd2lkdGg6IDUwcHg7CiAgICAgICAgaGVpZ2h0OiA1MHB4OwogICAgfQoKICAgIC5BdmF0YXIgaW1nIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICB9CgogICAgLk91dGdvaW5nIC5BdmF0YXIgewogICAgICAgIGxlZnQ6IDdweDsKICAgIH0KCiAgICAuSW5jb21pbmcgLkF2YXRhciB7CiAgICAgICAgcmlnaHQ6IDZweDsKICAgIH0KCiAgICAjQXJ0aWNsZUl0ZW1zIC5BcnRpY2xlTWFpbENvbnRlbnRIVE1MV3JhcHBlciwKICAgICNBcnRpY2xlSXRlbXMgLkFydGljbGVIVE1MLAogICAgI0FydGljbGVJdGVtcyAuQXJ0aWNsZUJvZHkgewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgIG1hcmdpbi1sZWZ0OiA3NXB4OwogICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgICNBcnRpY2xlSXRlbXMgLkluY29taW5nIC5BcnRpY2xlTWFpbENvbnRlbnRIVE1MV3JhcHBlciwKICAgICNBcnRpY2xlSXRlbXMgLkluY29taW5nIC5BcnRpY2xlSFRNTCwKICAgICNBcnRpY2xlSXRlbXMgLkluY29taW5nIC5BcnRpY2xlQm9keSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDc1cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIH0KCiAgICBib2R5LlRvdWNoRGV2aWNlICNBcnRpY2xlSXRlbXMgLkFydGljbGVNYWlsQ29udGVudEhUTUxXcmFwcGVyIHsKICAgICAgIG92ZXJmbG93LXg6IHNjcm9sbDsKICAgIH0KCiAgICAuT3V0Z29pbmcgLkFydGljbGVNYWlsQ29udGVudEhUTUxXcmFwcGVyOmJlZm9yZSwKICAgIC5JbmNvbWluZyAuQXJ0aWNsZU1haWxDb250ZW50SFRNTFdyYXBwZXI6YmVmb3JlLAogICAgLk91dGdvaW5nIC5BcnRpY2xlSFRNTDpiZWZvcmUsCiAgICAuSW5jb21pbmcgLkFydGljbGVIVE1MOmJlZm9yZSwKICAgIC5PdXRnb2luZyAuQXJ0aWNsZUJvZHk6YmVmb3JlLAogICAgLkluY29taW5nIC5BcnRpY2xlQm9keTpiZWZvcmUsCiAgICAuT3V0Z29pbmcgLkFydGljbGVNYWlsQ29udGVudEhUTUxXcmFwcGVyOmFmdGVyLAogICAgLkluY29taW5nIC5BcnRpY2xlTWFpbENvbnRlbnRIVE1MV3JhcHBlcjphZnRlciwKICAgIC5PdXRnb2luZyAuQXJ0aWNsZUhUTUw6YWZ0ZXIsCiAgICAuSW5jb21pbmcgLkFydGljbGVIVE1MOmFmdGVyLAogICAgLk91dGdvaW5nIC5BcnRpY2xlQm9keTphZnRlciwKICAgIC5JbmNvbWluZyAuQXJ0aWNsZUJvZHk6YWZ0ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKTsKICAgICAgICB0b3A6IDI0cHg7CiAgICAgICAgYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBjb250ZW50OiAiICI7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuT3V0Z29pbmcgLkFydGljbGVNYWlsQ29udGVudEhUTUxXcmFwcGVyOmJlZm9yZSwKICAgIC5JbmNvbWluZyAuQXJ0aWNsZU1haWxDb250ZW50SFRNTFdyYXBwZXI6YmVmb3JlLAogICAgLk91dGdvaW5nIC5BcnRpY2xlSFRNTDpiZWZvcmUsCiAgICAuSW5jb21pbmcgLkFydGljbGVIVE1MOmJlZm9yZSwKICAgIC5PdXRnb2luZyAuQXJ0aWNsZUJvZHk6YmVmb3JlLAogICAgLkluY29taW5nIC5BcnRpY2xlQm9keTpiZWZvcmUgewogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogI2ZmZjsKICAgICAgICBib3JkZXItd2lkdGg6IDEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogLTEwcHg7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgICBsZWZ0OiAtMThweDsKICAgIH0KCiAgICAuT3V0Z29pbmcgLkFydGljbGVNYWlsQ29udGVudEhUTUxXcmFwcGVyOmFmdGVyLAogICAgLkluY29taW5nIC5BcnRpY2xlTWFpbENvbnRlbnRIVE1MV3JhcHBlcjphZnRlciwKICAgIC5PdXRnb2luZyAuQXJ0aWNsZUhUTUw6YWZ0ZXIsCiAgICAuSW5jb21pbmcgLkFydGljbGVIVE1MOmFmdGVyLAogICAgLk91dGdvaW5nIC5BcnRpY2xlQm9keTphZnRlciwKICAgIC5JbmNvbWluZyAuQXJ0aWNsZUJvZHk6YWZ0ZXIgewogICAgICAgIGJvcmRlci13aWR0aDogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTNweDsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIGxlZnQ6IC0yNHB4OwogICAgfQoKICAgIC5PdXRnb2luZyAuQXJ0aWNsZU1haWxDb250ZW50SFRNTFdyYXBwZXI6YWZ0ZXIsCiAgICAuT3V0Z29pbmcgLkFydGljbGVIVE1MOmFmdGVyLAogICAgLk91dGdvaW5nIC5BcnRpY2xlQm9keTphZnRlciB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0TWVkaXVtKTsKICAgIH0KCiAgICAuSW5jb21pbmcgLkFydGljbGVNYWlsQ29udGVudEhUTUxXcmFwcGVyOmFmdGVyLAogICAgLkluY29taW5nIC5BcnRpY2xlSFRNTDphZnRlciwKICAgIC5JbmNvbWluZyAuQXJ0aWNsZUJvZHk6YWZ0ZXIgewogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgICAgcmlnaHQ6IC0yNHB4OwogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1jb2xCR0xpZ2h0TWVkaXVtKTsKICAgIH0KCiAgICAuSW5jb21pbmcgLkFydGljbGVCb2R5OmFmdGVyIHsKICAgICAgICByaWdodDogLTI2cHg7CiAgICB9CgogICAgLkluY29taW5nIC5BcnRpY2xlTWFpbENvbnRlbnRIVE1MV3JhcHBlcjpiZWZvcmUsCiAgICAuSW5jb21pbmcgLkFydGljbGVIVE1MOmJlZm9yZSwKICAgIC5JbmNvbWluZyAuQXJ0aWNsZUJvZHk6YmVmb3JlIHsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIHJpZ2h0OiAtMThweDsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogI2ZmZjsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgfQoKICAgIC5JbmNvbWluZyAuQXJ0aWNsZUJvZHk6YmVmb3JlLAogICAgLkluY29taW5nIC5BcnRpY2xlSFRNTDpiZWZvcmUgewogICAgICAgIHJpZ2h0OiAtMjBweDsKICAgIH0KCiAgICAuT3V0Z29pbmcgLkFydGljbGVCb2R5OmJlZm9yZSwKICAgIC5PdXRnb2luZyAuQXJ0aWNsZUhUTUw6YmVmb3JlIHsKICAgICAgICBsZWZ0OiAtMjBweDsKICAgIH0KCiAgICAuT3V0Z29pbmcgLkFydGljbGVCb2R5OmFmdGVyLAogICAgLk91dGdvaW5nIC5BcnRpY2xlSFRNTDphZnRlciB7CiAgICAgICAgbGVmdDogLTI2cHg7CiAgICB9CgogICAgLkluY29taW5nLk5vdFZpc2libGVGb3JDdXN0b21lciAuQXJ0aWNsZU1haWxDb250ZW50SFRNTFdyYXBwZXI6YWZ0ZXIsCiAgICAuSW5jb21pbmcuTm90VmlzaWJsZUZvckN1c3RvbWVyIC5BcnRpY2xlSFRNTDphZnRlciwKICAgIC5JbmNvbWluZy5Ob3RWaXNpYmxlRm9yQ3VzdG9tZXIgLkFydGljbGVCb2R5OmFmdGVyIHsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogI2ZmY2NjYzsKICAgIH0KCiAgICAuT3V0Z29pbmcuTm90VmlzaWJsZUZvckN1c3RvbWVyIC5BcnRpY2xlTWFpbENvbnRlbnRIVE1MV3JhcHBlcjphZnRlciwKICAgIC5PdXRnb2luZy5Ob3RWaXNpYmxlRm9yQ3VzdG9tZXIgLkFydGljbGVIVE1MOmFmdGVyLAogICAgLk91dGdvaW5nLk5vdFZpc2libGVGb3JDdXN0b21lciAuQXJ0aWNsZUJvZHk6YWZ0ZXIgewogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogI2ZmY2NjYzsKICAgIH0KCiAgICAuQXJ0aWNsZVNlbmRlckluaXRpYWxzIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLkFydGljbGVTZW5kZXJJbml0aWFscyBzcGFuIHsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDUwcHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLkFydGljbGVNYWlsQ29udGVudCBpZnJhbWUgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgaGVpZ2h0OiA2MHB4OwogICAgfQoKICAgIC5EYXRhVGFibGUgdGJvZHkgdGQgYS5BdHRhY2htZW50IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CgogICAgI0FydGljbGVJdGVtcyAuV2lkZ2V0U2ltcGxlIC5Db250ZW50IGxhYmVsLlN3aXRjaGFibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBDb250cm9sUm93IEljb25zCiAgICAgKi8KCiAgICAuQXJ0aWNsZUZpbHRlciwKICAgIC5BcnRpY2xlUGFnZXMgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgfQoKICAgIC5SVEwgLkFydGljbGVGaWx0ZXIsCiAgICAuUlRMIC5BcnRpY2xlUGFnZXMgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgIH0KCiAgICAuQ29udHJvbFJvdyAuSWNvbnMgYSB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICB9CgogICAgLkNvbnRyb2xSb3cgLkljb25zIGEuQWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAuQ29udHJvbFJvdyAuSWNvbnMgYTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICAuQ29udHJvbFJvdyAuSWNvbnMgYSB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgfQoKICAgIC5Db250cm9sUm93IC5JY29ucyBhIGkgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICB9CgogICAgLkNvbnRyb2xSb3cgLkljb25zIGEuQWN0aXZlIGkgewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgfQoKICAgIC5Db250cm9sUm93IC5JY29ucyBhIHNwYW4gewogICAgICAgIG1hcmdpbjogNHB4IGF1dG87CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIHRleHQtaW5kZW50OiAtOTk5OXB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKICAgIC5Db250cm9sUm93IC5BcnRpY2xlRmlsdGVyLkljb25zIC5BY3RpdmUgc3BhbiB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTZweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBBdHRhY2htZW50IERpYWxvZyBDb250ZW50CiAgICAgKi8KCiAgICAuRGlhbG9nID4gLkNvbnRlbnQgPiAuQXR0YWNobWVudC5Jbm5lckNvbnRlbnQgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLkF0dGFjaG1lbnRDb250ZW50IHsKICAgICAgICB3aWR0aDogMzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgIH0KCiAgICAuQXR0YWNobWVudEVsZW1lbnQgewogICAgICAgIG1hcmdpbjogNXB4IDlweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sQkdNZWRpdW0pOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAycHg7CiAgICB9CgogICAgLkF0dGFjaG1lbnRFbGVtZW50Omxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1ib3R0b206IDBweDsKICAgIH0KCiAgICAuQXR0YWNobWVudFByZXZpZXcgewogICAgICAgIGhlaWdodDogODBweDsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1hcmdpbi1yaWdodDogMTVweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR01lZGl1bSk7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICAgICAgY2xlYXI6IGxlZnQ7CiAgICB9CgogICAgLkF0dGFjaG1lbnRQcmV2aWV3IGEgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAuQXR0YWNobWVudEVsZW1lbnQgaDMgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBJdGVtUm93CiAgICAgKiBAbm90ZSAgICAgICAgY29udGFpbnMgcmFuZG9tIGl0ZW1zIGFuZCBpcyBwb3NpdGlvbmVkIGluIHRoZSBzaWRlYmFyCiAgICAgKi8KCiAgICAuSXRlbVJvdyB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE1cHg7CiAgICB9CgogICAgLlJUTCAuSXRlbVJvdyB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgfQoKICAgIC5JdGVtUm93IGxpIHsKICAgICAgICBwYWRkaW5nOiAzcHggMCA1cHggOHB4OwogICAgfQoKICAgIC5SVEwgLkl0ZW1Sb3cgbGkgewogICAgICAgIHBhZGRpbmc6IDNweCA4cHggNXB4IDA7CiAgICB9CgogICAgLkl0ZW1Sb3cgYSB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIH0KCiAgICAuSXRlbVJvdyBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sTWFpbkhvdmVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBBcnRpY2xlQm9keQogICAgICogQG5vdGUgICAgICAgIFN0eWxlcyBmb3IgYXJ0aWNsZSBib2R5CiAgICAgKi8KCiAgICAuU21hbGxCb3gsCiAgICAuTWVzc2FnZUJyb3dzZXIgewogICAgICAgIG1hcmdpbjogMTFweCAxMXB4IDZweCAxMXB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5XaWRnZXRNZXNzYWdlLlRvcCB7CiAgICAgICAgbWFyZ2luLXRvcDogLThweCAhaW1wb3J0YW50OwogICAgfQoKICAgIC5NZXNzYWdlQnJvd3NlciBwIHsKICAgICAgICAgcGFkZGluZzogNXB4IDI1cHggNXB4IDI1cHg7CiAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdNZWRpdW0pOwogICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAuU21hbGxCb3ggcCB7CiAgICAgICAgIHBhZGRpbmc6IDVweCAyNXB4IDVweCAyNXB4OwogICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAuTWVzc2FnZUJyb3dzZXIgYS5DbG9zZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogNnB4OwogICAgICAgIHRvcDogNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAuTWVzc2FnZUJyb3dzZXIgYS5DbG9zZTpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBBcnRpY2xlQ29sb3JzCiAgICAgKiBAbm90ZSAgICAgICAgYXJ0aWNsZSBjb2xvcnMKICAgICAqLwoKICAgICNBcnRpY2xlVGFibGUuRGF0YVRhYmxlIHRib2R5IHRkIHsKICAgICAgICBib3JkZXItcmlnaHQtc3R5bGU6IGRhc2hlZDsKICAgIH0KCiAgICAjQXJ0aWNsZVRhYmxlLkRhdGFUYWJsZSB0Ym9keSB0ZDpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItcmlnaHQ6IDBweDsKICAgIH0KCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIHRyOm50aC1jaGlsZChldmVuKSB0ZCB7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCBlYXNlIDAuM3M7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sRWxlbWVudCk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xCR0xpZ2h0TWVkaXVtKTsKICAgIH0KCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyB0ci5BY3RpdmUgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIHRyOmhvdmVyID4gdGQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTWVkaXVtKSAhaW1wb3J0YW50OwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sQkdNZWRpdW0pOwogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tY29sQkdEYXJrKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIHRyLk5vdFZpc2libGVGb3JDdXN0b21lciA+IHRkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmNlNGUwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2Y5YmNiMjsKICAgICAgICBib3JkZXItY29sb3I6ICNmOWJjYjI7CiAgICB9CgogICAgLlVzZUFydGljbGVDb2xvcnMgdHIuTm90VmlzaWJsZUZvckN1c3RvbWVyLkFjdGl2ZSA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgdHIuTm90VmlzaWJsZUZvckN1c3RvbWVyOmhvdmVyID4gdGQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOWJjYjIgIWltcG9ydGFudDsKICAgICAgICBib3JkZXItY29sb3I6ICNmOWJjYjI7CiAgICB9CgogICAgLlVzZUFydGljbGVDb2xvcnMgdHIuc3lzdGVtID4gdGQgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmZjY2MgIWltcG9ydGFudDsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZWZlZGJlOwogICAgICAgIGJvcmRlci1jb2xvcjogI2VmZWRiZTsKICAgIH0KCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyB0ci5zeXN0ZW0uQWN0aXZlID4gdGQsCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyB0ci5zeXN0ZW06aG92ZXIgPiB0ZCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWRiZSAhaW1wb3J0YW50OwogICAgICAgIGJvcmRlci1jb2xvcjogI2VmZWRiZTsKICAgIH0KCiAgICAuQXJ0aWNsZU1haWxDb250ZW50IGlmcmFtZSwKICAgIC5BcnRpY2xlTWFpbENvbnRlbnQgLkFydGljbGVCb2R5LAogICAgLkFydGljbGVNYWlsQ29udGVudCAuQXJ0aWNsZUhUTUwsCiAgICAuQXJ0aWNsZU1haWxDb250ZW50IC5BcnRpY2xlTWV0YSB7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY29sQkdMaWdodE1lZGl1bSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgfQoKICAgIC5Vc2VBcnRpY2xlQ29sb3JzICNBcnRpY2xlSXRlbXMgLk5vdFZpc2libGVGb3JDdXN0b21lciAuQXJ0aWNsZU1haWxDb250ZW50IGlmcmFtZSwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzICNBcnRpY2xlSXRlbXMgLk5vdFZpc2libGVGb3JDdXN0b21lciAuQXJ0aWNsZU1haWxDb250ZW50IC5BcnRpY2xlQm9keSwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzICNBcnRpY2xlSXRlbXMgLk5vdFZpc2libGVGb3JDdXN0b21lciAuQXJ0aWNsZU1haWxDb250ZW50IC5BcnRpY2xlSFRNTCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzICNBcnRpY2xlSXRlbXMgLk5vdFZpc2libGVGb3JDdXN0b21lciAuQXJ0aWNsZU1haWxDb250ZW50IC5BcnRpY2xlTWV0YSB7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgI0ZGQ0NDQzsKICAgIH0KCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuSW5jb21pbmcuTm90VmlzaWJsZUZvckN1c3RvbWVyIC5BcnRpY2xlTWFpbENvbnRlbnRIVE1MV3JhcHBlcjphZnRlciwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5JbmNvbWluZy5Ob3RWaXNpYmxlRm9yQ3VzdG9tZXIgLkFydGljbGVIVE1MOmFmdGVyLAogICAgLlVzZUFydGljbGVDb2xvcnMgLkluY29taW5nLk5vdFZpc2libGVGb3JDdXN0b21lciAuQXJ0aWNsZUJvZHk6YWZ0ZXIgewogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmZjY2NjOwogICAgfQoKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5PdXRnb2luZy5Ob3RWaXNpYmxlRm9yQ3VzdG9tZXIgLkFydGljbGVNYWlsQ29udGVudEhUTUxXcmFwcGVyOmFmdGVyLAogICAgLlVzZUFydGljbGVDb2xvcnMgLk91dGdvaW5nLk5vdFZpc2libGVGb3JDdXN0b21lciAuQXJ0aWNsZUhUTUw6YWZ0ZXIsCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuT3V0Z29pbmcuTm90VmlzaWJsZUZvckN1c3RvbWVyIC5BcnRpY2xlQm9keTphZnRlciB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZjY2NjOwogICAgfQoKICAgIC5Vc2VBcnRpY2xlQ29sb3JzICNBcnRpY2xlSXRlbXMgLnN5c3RlbSAuQXJ0aWNsZU1haWxDb250ZW50IGlmcmFtZSwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzICNBcnRpY2xlSXRlbXMgLnN5c3RlbSAuQXJ0aWNsZU1haWxDb250ZW50IC5BcnRpY2xlQm9keSwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzICNBcnRpY2xlSXRlbXMgLnN5c3RlbSAuQXJ0aWNsZU1haWxDb250ZW50IC5BcnRpY2xlSFRNTCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzICNBcnRpY2xlSXRlbXMgLnN5c3RlbSAuQXJ0aWNsZU1haWxDb250ZW50IC5BcnRpY2xlTWV0YSB7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgI2ZmZWY4MDsKICAgIH0KCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuSW5jb21pbmcuc3lzdGVtIC5BcnRpY2xlTWFpbENvbnRlbnRIVE1MV3JhcHBlcjphZnRlciwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5JbmNvbWluZy5zeXN0ZW0gLkFydGljbGVIVE1MOmFmdGVyLAogICAgLlVzZUFydGljbGVDb2xvcnMgLkluY29taW5nLnN5c3RlbSAuQXJ0aWNsZUJvZHk6YWZ0ZXIgewogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmZlZjgwOwogICAgfQoKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5PdXRnb2luZy5zeXN0ZW0gLkFydGljbGVNYWlsQ29udGVudEhUTUxXcmFwcGVyOmFmdGVyLAogICAgLlVzZUFydGljbGVDb2xvcnMgLk91dGdvaW5nLnN5c3RlbSAuQXJ0aWNsZUhUTUw6YWZ0ZXIsCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuT3V0Z29pbmcuc3lzdGVtIC5BcnRpY2xlQm9keTphZnRlciB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZlZjgwOwogICAgfQoKICAgIC5Vc2VBcnRpY2xlQ29sb3JzICNBcnRpY2xlVGFibGUgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAjQXJ0aWNsZVRhYmxlIGkuZmEtc3BpbiB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgfQoKICAgIC8qCiAgICAqIEFnZW50IGFydGljbGUgdHlwZXMKICAgICovCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuYWdlbnQtcGhvbmUgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5hZ2VudC1waG9uZSAuSGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZDFlOGQxICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuYWdlbnQtZW1haWwtZXh0ZXJuYWwgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5hZ2VudC1lbWFpbC1leHRlcm5hbCAuSGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjRDNFNUI1ICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuYWdlbnQtZW1haWwtaW50ZXJuYWwgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5hZ2VudC1lbWFpbC1pbnRlcm5hbCAuSGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZkMWQxICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuYWdlbnQtbm90ZS1leHRlcm5hbCA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLmFnZW50LW5vdGUtZXh0ZXJuYWwgLkhlYWRlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2QxZDFkMSAhaW1wb3J0YW50OwogICAgfQogICAgLlVzZUFydGljbGVDb2xvcnMgLmFnZW50LW5vdGUtaW50ZXJuYWwgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5hZ2VudC1ub3RlLWludGVybmFsIC5IZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNGRkNDQ0MgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKgogICAgKiBTeXN0ZW0gYXJ0aWNsZSB0eXBlcwogICAgKi8KICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5zeXN0ZW0tbm90ZS1pbnRlcm5hbCA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1ub3RlLWludGVybmFsIC5IZWFkZXIsCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuc3lzdGVtLW5vdGUtZXh0ZXJuYWwgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5zeXN0ZW0tbm90ZS1leHRlcm5hbCAuSGVhZGVyLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1ub3RlLXJlcG9ydCA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1ub3RlLXJlcG9ydCAuSGVhZGVyLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1lbWFpbC1leHRlcm5hbCA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1lbWFpbC1leHRlcm5hbCAuSGVhZGVyLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1lbWFpbC1pbnRlcm5hbCA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1lbWFpbC1pbnRlcm5hbCAuSGVhZGVyLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1lbWFpbC1ub3RpZmljYXRpb24taW50ID4gdGQsCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuc3lzdGVtLWVtYWlsLW5vdGlmaWNhdGlvbi1pbnQgLkhlYWRlciwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5zeXN0ZW0tZW1haWwtbm90aWZpY2F0aW9uLWV4dCA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1lbWFpbC1ub3RpZmljYXRpb24tZXh0IC5IZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZDEgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKgogICAgKiBDdXN0b21lciBhcnRjbGUgdHlwZXMKICAgICovCgogICAgLlVzZUFydGljbGVDb2xvcnMgLmN1c3RvbWVyLXdlYnJlcXVlc3QgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5jdXN0b21lci13ZWJyZXF1ZXN0IC5IZWFkZXIsCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuY3VzdG9tZXItZW1haWwtZXh0ZXJuYWwgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5jdXN0b21lci1lbWFpbC1leHRlcm5hbCAuSGVhZGVyLAogICAgLlVzZUFydGljbGVDb2xvcnMgLmN1c3RvbWVyLW5vdGUtZXh0ZXJuYWwgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5jdXN0b21lci1ub3RlLWV4dGVybmFsIC5IZWFkZXIsCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuY3VzdG9tZXItcGhvbmUgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5jdXN0b21lci1waG9uZSAuSGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjRDRERUZDICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLlVzZUFydGljbGVDb2xvcnMgLmFnZW50LXBob25lOmhvdmVyID4gdGQsCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuYWdlbnQtZW1haWwtZXh0ZXJuYWw6aG92ZXIgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5hZ2VudC1lbWFpbC1pbnRlcm5hbDpob3ZlciA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLmFnZW50LW5vdGUtZXh0ZXJuYWw6aG92ZXIgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5hZ2VudC1ub3RlLWludGVybmFsOmhvdmVyID4gdGQsCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuc3lzdGVtLW5vdGUtaW50ZXJuYWw6aG92ZXIgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5zeXN0ZW0tbm90ZS1leHRlcm5hbDpob3ZlciA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1ub3RlLXJlcG9ydDpob3ZlciA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1lbWFpbC1leHRlcm5hbDpob3ZlciA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLnN5c3RlbS1lbWFpbC1pbnRlcm5hbDpob3ZlciA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLmN1c3RvbWVyLXdlYnJlcXVlc3Q6aG92ZXIgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5jdXN0b21lci1lbWFpbC1leHRlcm5hbDpob3ZlciA+IHRkLAogICAgLlVzZUFydGljbGVDb2xvcnMgLmN1c3RvbWVyLW5vdGUtZXh0ZXJuYWw6aG92ZXIgPiB0ZCwKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5jdXN0b21lci1waG9uZTpob3ZlciA+IHRkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmY2NjICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgVGltZWxpbmUgVmlldwogICAgICovCgogICAgLlRpbWVsaW5lVmlldyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDVweCA1cHggMTVweCA1cHg7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldzphZnRlciB7CiAgICAgICAgY29udGVudDogJyAnOwogICAgICAgIHdpZHRoOiA0cHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0ycHg7CiAgICAgICAgdG9wOiAxNnB4OwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDQ5LjklOwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA2NXB4OwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBib3JkZXItbGVmdDogMHB4OwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgICAgIG1hcmdpbjogMHB4IDIwcHggMHB4IDI1cHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMHB4IDVweCAxMHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyA+IHVsOmZpcnN0LWNoaWxkID4gbGkgewogICAgICAgIG1hcmdpbi1yaWdodDogMjVweDsKICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWw6Zmlyc3QtY2hpbGQgPiBsaS5Ob0V2ZW50cyB7CiAgICAgICAgd2lkdGg6IDUwMHB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdG9wOiAxNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAtMjUzcHg7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgYm9yZGVyOiAwcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaTpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogLTdweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaSBoMyB7CiAgICAgICAgbWFyZ2luOiAtMTBweCAtMTBweCA1cHggLTEwcHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpLk5ld1RpY2tldCBoMyB7CiAgICAgICAgYmFja2dyb3VuZDogI2RkZDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaSBoMyAuZmEtaW5mby1jaXJjbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyA+IHVsID4gbGkuSW1wb3J0YW50IGgzIC5mYS1pbmZvLWNpcmNsZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGNvbG9yOiAjNzc3OwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpLkltcG9ydGFudDpob3ZlciBoMyAuZmEtaW5mby1jaXJjbGUgewogICAgICAgIGNvbG9yOiAjMDAwMjNjOwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpLkhhc0FydGljbGUgaDMgc3Ryb25nIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaSBoMyBzdHJvbmcsCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaS5TZWVuIGgzIHN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaSBoMyBhIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyA+IHVsID4gbGkgcCB7CiAgICAgICAgbWF4LWhlaWdodDogMTA2cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaS5UeXBlVGlja2V0QWN0aW9uIHAgewogICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyA+IHVsID4gbGkuTm9GaXhlZE1heEhlaWdodCBwIHsKICAgICAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpIHAgc3Bhbi5GYWRlT3V0IHsKICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUEvUGdvOGMzWm5JSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SWdkMmxrZEdnOUlqRXdNQ1VpSUdobGFXZG9kRDBpTVRBd0pTSWdkbWxsZDBKdmVEMGlNQ0F3SURFZ01TSWdjSEpsYzJWeWRtVkJjM0JsWTNSU1lYUnBiejBpYm05dVpTSStDaUFnUEd4cGJtVmhja2R5WVdScFpXNTBJR2xrUFNKbmNtRmtMWFZqWjJjdFoyVnVaWEpoZEdWa0lpQm5jbUZrYVdWdWRGVnVhWFJ6UFNKMWMyVnlVM0JoWTJWUGJsVnpaU0lnZURFOUlqQWxJaUI1TVQwaU1DVWlJSGd5UFNJd0pTSWdlVEk5SWpFd01DVWlQZ29nSUNBZ1BITjBiM0FnYjJabWMyVjBQU0l3SlNJZ2MzUnZjQzFqYjJ4dmNqMGlJMlptWm1abVppSWdjM1J2Y0MxdmNHRmphWFI1UFNJd0lpOCtDaUFnSUNBOGMzUnZjQ0J2Wm1aelpYUTlJakV3TUNVaUlITjBiM0F0WTI5c2IzSTlJaU5tWm1abVptWWlJSE4wYjNBdGIzQmhZMmwwZVQwaU1TSXZQZ29nSUR3dmJHbHVaV0Z5UjNKaFpHbGxiblErQ2lBZ1BISmxZM1FnZUQwaU1DSWdlVDBpTUNJZ2QybGtkR2c5SWpFaUlHaGxhV2RvZEQwaU1TSWdabWxzYkQwaWRYSnNLQ05uY21Ga0xYVmpaMmN0WjJWdVpYSmhkR1ZrS1NJZ0x6NEtQQzl6ZG1jKyk7CiAgICAgICAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAgcmdiYSgyNTUsMjU1LDI1NSwwKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwxKSAxMDAlKTsgLyogRkYzLjYrICovCiAgICAgICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSxyZ2JhKDI1NSwyNTUsMjU1LDApKSwgY29sb3Itc3RvcCgxMDAlLHJnYmEoMjU1LDI1NSwyNTUsMSkpKTsgLyogQ2hyb21lLFNhZmFyaTQrICovCiAgICAgICAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAgcmdiYSgyNTUsMjU1LDI1NSwwKSAwJSxyZ2JhKDI1NSwyNTUsMjU1LDEpIDEwMCUpOyAvKiBDaHJvbWUxMCssU2FmYXJpNS4xKyAqLwogICAgICAgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLHJnYmEoMjU1LDI1NSwyNTUsMSkgMTAwJSk7IC8qIE9wZXJhIDExLjEwKyAqLwogICAgICAgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAgcmdiYSgyNTUsMjU1LDI1NSwwKSAwJSxyZ2JhKDI1NSwyNTUsMjU1LDEpIDEwMCUpOyAvKiBJRTEwKyAqLwogICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLHJnYmEoMjU1LDI1NSwyNTUsMSkgMTAwJSk7IC8qIFczQyAqLwogICAgICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCBzdGFydENvbG9yc3RyPScjMDBmZmZmZmYnLCBlbmRDb2xvcnN0cj0nI2ZmZmZmZicsR3JhZGllbnRUeXBlPTAgKTsgLyogSUU2LTggKi8KICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvdHRvbTogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaS5Ob0ZhZGVPdXQgLkZhZGVPdXQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyA+IHVsID4gbGkuQ29ubmVjdGVkICogewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaS5Db25uZWN0ZWQgaDMgewogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpLkNvbm5lY3RlZCBwIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAtNHB4OwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpLkNvbm5lY3RlZCBoMyBzcGFuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpLkNvbm5lY3RlZCB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHggIWltcG9ydGFudDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaSBoMyBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogIzAwMDIzYzsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaSBoMzpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAtMTBweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaSBoMzphZnRlciB7CiAgICAgICAgcmlnaHQ6IDEwMCU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBjb250ZW50OiAiICI7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMjIxLCAyMjEsIDIyMSwgMCk7CiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjY2NjOwogICAgICAgIGJvcmRlci13aWR0aDogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTNweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3IHVsLkxpc3RMZWZ0IGxpIGgzOmFmdGVyIHsKICAgICAgICBsZWZ0OiAxMDAlOwogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjZGRkOwogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyA+IHVsID4gbGkuQ29ubmVjdGVkIGgzOmFmdGVyIHsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgcmlnaHQ6IGF1dG87CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjY2NjOwogICAgICAgIHRvcDogLTdweDsKICAgICAgICBoZWlnaHQ6IDNweDsKICAgICAgICBtYXJnaW4tdG9wOiAwcHg7CiAgICAgICAgYm9yZGVyLXdpZHRoOiAycHg7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyB1bC5MaXN0TGVmdCBsaSBoMyA+IHNwYW4gewogICAgICAgIHJpZ2h0OiAtMzFweDsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpIGgzID4gc3BhbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNnB4OwogICAgICAgIGxlZnQ6IC0zMXB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNhYWE7CiAgICAgICAgaGVpZ2h0OiA5cHg7CiAgICAgICAgd2lkdGg6IDlweDsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuMXMgZWFzZS1pbjsKICAgICAgICAtbW96LXRyYW5zaXRpb246IGFsbCAwLjFzIGVhc2UtaW47CiAgICAgICAgLW8tdHJhbnNpdGlvbjogYWxsIDAuMXMgZWFzZS1pbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlLWluOwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpIGgzID4gc3BhbiBzcGFuIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDE2MHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM3Nzc7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdG9wOiAtMzdweDsKICAgICAgICBtYXJnaW4tbGVmdDogLTgwcHg7CiAgICAgICAgcGFkZGluZzogN3B4IDBweDsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpIGgzID4gc3Bhbjpob3ZlciB7CiAgICAgICAgei1pbmRleDogOTk7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyA+IHVsID4gbGkgaDMgPiBzcGFuOmhvdmVyIHNwYW4gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHotaW5kZXg6IDk5OTsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaSBoMyA+IHNwYW4gc3BhbjphZnRlciB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGNvbnRlbnQ6ICIgIjsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMTksIDExOSwgMTE5LCAwKTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAjNzc3OwogICAgICAgIGJvcmRlci13aWR0aDogOHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAtOHB4OwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpOmhvdmVyIGgzID4gc3BhbiwKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpIGgzID4gc3Bhbjpob3ZlciB7CiAgICAgICAgd2lkdGg6IDE1cHg7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIGxlZnQ6IC0zNHB4OwogICAgICAgIHRvcDogNHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbE1haW5EYXJrKTsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3IHVsOmZpcnN0LWNoaWxkIGxpOmhvdmVyIGgzID4gc3BhbiwKICAgIC5UaW1lbGluZVZpZXcgdWw6Zmlyc3QtY2hpbGQgbGkgaDMgPiBzcGFuOmhvdmVyIHsKICAgICAgICByaWdodDogLTM0cHg7CiAgICAgICAgbGVmdDogYXV0bzsKICAgICAgICB0b3A6IDRweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3IGxpIHVsIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsKICAgICAgICBtYXJnaW46IC01cHggLTEwcHggNXB4IC0xMHB4OwogICAgICAgIHBhZGRpbmc6IDJweCAxMHB4IDVweCAxMHB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3IGxpIHVsIGxpIHsKICAgICAgICBtYXJnaW4tdG9wOiAzcHg7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyBsaSB1bCBsaS5zdWJqZWN0LAogICAgLlRpbWVsaW5lVmlldyBsaSB1bCBsaS5mcm9tLAogICAgLlRpbWVsaW5lVmlldyBsaSB1bCBsaS50bywKICAgIC5UaW1lbGluZVZpZXcgbGkgdWwgbGkuY2MgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3IGxpIHVsIGxpLkF0dGFjaG1lbnRzTGluayB7CiAgICAgICAgYmFja2dyb3VuZDogI2RkZDsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIHBhZGRpbmc6IDNweCA1cHg7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwcHg7CiAgICAgICAgdG9wOiA1cHg7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyBsaSB1bCBsaS5BdHRhY2htZW50c0xpbms6aG92ZXIgewogICAgICAgIGNvbG9yOiAjMDAwMjNjOwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiBzcGFuIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDcwcHggMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyA+IC5DYWxsRm9yQWN0aW9uIHsKICAgICAgICBtYXJnaW46IDBweCBhdXRvOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMjBweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaS5OZXdUaWNrZXQgewogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICBib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC04NnB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTUwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGJvcmRlcjogMHB4OwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgPiB1bCA+IGxpLk5ld1RpY2tldCBoMyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaS5OZXdUaWNrZXQgaDM6YWZ0ZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyA+IHVsID4gbGkuTmV3VGlja2V0OmFmdGVyIHsKICAgICAgICBib3R0b206IDEwMCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgY29udGVudDogIiAiOwogICAgICAgIGhlaWdodDogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEzNiwgMTgzLCAyMTMsIDApOwogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNEREREREQ7CiAgICAgICAgYm9yZGVyLXdpZHRoOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAtMTBweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaS5OZXdUaWNrZXQgaDMgPiBzcGFuIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogc3RhdGljOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaS5OZXdUaWNrZXQgaDMgPiBzcGFuIHNwYW4gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgICAgY29sb3I6ICMwMDAyM2M7CiAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaS5OZXdUaWNrZXQgaDMgPiBzcGFuIHNwYW46YWZ0ZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLlRpbWVsaW5lUGxhaW5UZXh0IHsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgICB3aWR0aDogODAwcHg7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3IC5QbGFpblRleHQgPiBkaXYuQ2hhdE1lc3NhZ2UgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyAuUGxhaW5UZXh0ID4gZGl2LkNoYXRNZXNzYWdlLlN5c3RlbUdlbmVyYXRlZCB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgLlBsYWluVGV4dCA+IGRpdi5DaGF0TWVzc2FnZSBzcGFuIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7CiAgICB9CgogICAgLlRpbWVsaW5lUGxhaW5UZXh0IC5BcnRpY2xlSFRNTCB7CiAgICAgICAgbWF4LWhlaWdodDogbm9uZTsKICAgICAgICBsaW5lLWhlaWdodDogMTIwJTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CgogICAgLlRpbWVsaW5lQXJ0aWNsZWlGcmFtZSB7CiAgICAgICAgd2lkdGg6IDgwMHB4OwogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICB9CgogICAgLkFjdGlvbnNUaW1lbGluZVZpZXcgLkFjdGlvbnMgbGkgc2VsZWN0IHsKICAgICAgICBtYXgtd2lkdGg6IDEyMHB4OwogICAgfQoKICAgIC5BY3Rpb25zVGltZWxpbmVWaWV3IC5JdGVtQWN0aW9ucyB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgfQoKICAgIC8qIERlZmluZSBjb2xvcnMgZm9yIGRpZmZlcmVudCBldmVudCB0eXBlcyAqLwoKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5UaW1lbGluZVZpZXcgLlR5cGVJbmNvbWluZyBoMyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIH0KCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuVGltZWxpbmVWaWV3IC5UeXBlSW5jb21pbmcgaDM6YWZ0ZXIgewogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogI2RkZDsKICAgIH0KCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuVGltZWxpbmVWaWV3IC5UeXBlVGlja2V0QWN0aW9uIGgzIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwogICAgICAgIGNvbG9yOiAjNTU1OwogICAgfQoKICAgIC5Vc2VBcnRpY2xlQ29sb3JzIC5UaW1lbGluZVZpZXcgLlR5cGVUaWNrZXRBY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICNmN2Y3Zjc7CiAgICB9CgogICAgLlVzZUFydGljbGVDb2xvcnMgLlRpbWVsaW5lVmlldyAuVHlwZUluY29taW5nLlNlbmRlclR5cGVfY3VzdG9tZXIuQXJ0aWNsZVR5cGVfZW1haWwtaW50ZXJuYWwgaDMgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICB9CgogICAgLlVzZUFydGljbGVDb2xvcnMgLlRpbWVsaW5lVmlldyAuVHlwZUluY29taW5nLlNlbmRlclR5cGVfY3VzdG9tZXIuQXJ0aWNsZVR5cGVfZW1haWwtaW50ZXJuYWwgaDM6YWZ0ZXIgewogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogI2RkZDsKICAgIH0KCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuVGltZWxpbmVWaWV3IC5UeXBlVGlja2V0QXV0b0FjdGlvbiBoMyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZkMTsKICAgICAgICBjb2xvcjogIzAwMDIzYzsKICAgIH0KCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuVGltZWxpbmVWaWV3IHVsLkxpc3RMZWZ0IC5UeXBlVGlja2V0QXV0b0FjdGlvbiBoMzphZnRlciB7CiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICNFQUVBQUY7CiAgICB9CgogICAgLlVzZUFydGljbGVDb2xvcnMgLlRpbWVsaW5lVmlldyAuVHlwZU5vdGVJbnRlcm5hbCBoMyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGQ0NDQzsKICAgICAgICBjb2xvcjogIzAwMDIzYzsKICAgIH0KCiAgICAuVXNlQXJ0aWNsZUNvbG9ycyAuVGltZWxpbmVWaWV3IHVsLkxpc3RMZWZ0IC5UeXBlTm90ZUludGVybmFsIGgzOmFmdGVyIHsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogI0VGQjFCMTsKICAgIH0KCiAgICAuVGltZWxpbmVWaWV3ID4gdWwgPiBsaS5TZWVuIGRpdi5VbnJlYWRBcnRpY2xlcywKICAgIC5UaW1lbGluZVZpZXcgbGkgZGl2LlVucmVhZEFydGljbGVzIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgbGkuSGFzQXJ0aWNsZSBkaXYuVW5yZWFkQXJ0aWNsZXMgewogICAgICAgIHBhZGRpbmc6IDBweCAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbi1sZWZ0OiAwcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CgogICAgLlRpbWVsaW5lVmlldyBkaXYuVW5yZWFkQXJ0aWNsZXMgaTpmaXJzdC1jaGlsZCB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgfQoKICAgIC5UaW1lbGluZVZpZXcgZGl2LlVucmVhZEFydGljbGVzIGkgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIH0KCiAgICAuSXRlbVJvdyBpLlVuc3VwcG9ydGVkLAogICAgLkl0ZW1Sb3cgYS5VbnN1cHBvcnRlZCB7CiAgICAgICAgb3BhY2l0eTogMC40OwogICAgfQoKICAgIC5BcnRpY2xlQXR0YWNobWVudHMgewogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIG1hcmdpbjogMTBweCAwcHggLTEwcHggNzVweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5JbmNvbWluZyAuQXJ0aWNsZUF0dGFjaG1lbnRzIHsKICAgICAgICBtYXJnaW46IDEwcHggMTA1cHggLTEwcHggMHB4OwogICAgfQoKICAgIC5BcnRpY2xlQXR0YWNobWVudHMgbGkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1hcmdpbjogMHB4IDEwcHggMTBweCAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdNZWRpdW0pOwogICAgICAgIHBhZGRpbmc6IDhweCA0NXB4IDhweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLkFydGljbGVBdHRhY2htZW50cyBsaSBoNSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMXB4OwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIH0KCiAgICAuQXJ0aWNsZUF0dGFjaG1lbnRzIGxpIGRpdiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIHJpZ2h0OiAwcHg7CiAgICAgICAgd2lkdGg6IDMwcHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAuQXJ0aWNsZUF0dGFjaG1lbnRzIGxpIGRpdiBhIHsKICAgICAgICBoZWlnaHQ6IDUwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0xpZ2h0TWVkaXVtKTsKICAgICAgICBsaW5lLWhlaWdodDogMjUwJTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIGVhc2UgMC4zczsKICAgIH0KCiAgICAuQXJ0aWNsZUF0dGFjaG1lbnRzIGxpIGRpdiBhOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBsaW5lLWhlaWdodDogNDUwJTsKICAgIH0KCiAgICAuQXJ0aWNsZUF0dGFjaG1lbnRzIGxpIGRpdiBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICB9CgogICAgLkFydGljbGVBdHRhY2htZW50cyBsaSBkaXYgYSArIGEgewogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIG1hcmdpbi10b3A6IC0xcHg7CiAgICB9CgogICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAwcHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHsKCiAgICAgICAgLkF2YXRhciwKICAgICAgICAuQXJ0aWNsZU1haWxDb250ZW50SFRNTFdyYXBwZXI6YWZ0ZXIsCiAgICAgICAgLkFydGljbGVIVE1MOmFmdGVyLAogICAgICAgIC5BcnRpY2xlQm9keTphZnRlciwKICAgICAgICAuQXJ0aWNsZU1haWxDb250ZW50SFRNTFdyYXBwZXI6YmVmb3JlLAogICAgICAgIC5BcnRpY2xlSFRNTDpiZWZvcmUsCiAgICAgICAgLkFydGljbGVCb2R5OmJlZm9yZSB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICAjQXJ0aWNsZUl0ZW1zIC5BcnRpY2xlTWFpbENvbnRlbnRIVE1MV3JhcHBlciwKICAgICAgICAjQXJ0aWNsZUl0ZW1zIC5BcnRpY2xlSFRNTCwKICAgICAgICAjQXJ0aWNsZUl0ZW1zIC5BcnRpY2xlQm9keSwKICAgICAgICAuQXJ0aWNsZU1haWxDb250ZW50IC5BcnRpY2xlTWV0YSwKICAgICAgICAuSXRlbUFjdGlvbnMsCiAgICAgICAgLkFydGljbGVBdHRhY2htZW50cyB7CiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwcHggIWltcG9ydGFudDsKICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwcHggIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgICNBcnRpY2xlSXRlbXMgLkl0ZW1BY3Rpb25zIC5BY3Rpb25zIGxpIHsKICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB9CgogICAgICAgICNBcnRpY2xlSXRlbXMgLkl0ZW1BY3Rpb25zIC5BY3Rpb25zIGxpIGZvcm0gewogICAgICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgICAgfQoKICAgICAgICAjQXJ0aWNsZUl0ZW1zIC5BcnRpY2xlTWFpbEhlYWRlciA+IGZpZWxkc2V0IHsKICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgICAgfQoKICAgICAgICAjQXJ0aWNsZUl0ZW1zIC5BcnRpY2xlTWFpbEhlYWRlciBsYWJlbCwKICAgICAgICAjQXJ0aWNsZUl0ZW1zIC5BcnRpY2xlTWFpbEhlYWRlciBwLlZhbHVlIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTsKICAgICAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgICAgICAgIGZsb2F0OiBub25lOwogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgICAgfQoKICAgICAgICAjQXJ0aWNsZUl0ZW1zIC5JdGVtQWN0aW9ucyBsaSAuSW5wdXRGaWVsZF9Db250YWluZXIgewogICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIH0KCiAgICB9Cgp9IC8qIGVuZCBAbWVkaWEgKi8KCgovKioKICogQHBhY2thZ2UgICAgIFNraW4gIkRlZmF1bHQiCiAqIEBzZWN0aW9uICAgICBUb29sdGlwcwogKi8KCkBtZWRpYSBzY3JlZW4sIHByaW50IHsKCiAgICBkaXYuVG9vbHRpcENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHotaW5kZXg6IDYwMDA7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICBkaXYuVG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDI0NHB4OwogICAgfQoKICAgIGRpdi5Ub29sdGlwLlRvbmd1ZVRvcCwKICAgIGRpdi5Ub29sdGlwLlRvbmd1ZUJvdHRvbSB7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgfQoKICAgIGRpdi5Ub29sdGlwLlRvbmd1ZUxlZnQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAtMzdweDsKICAgIH0KCiAgICAvKiBSVEwgaW50ZW50aW9uYWxseSB0aGUgc2FtZSAqLwogICAgLlJUTCBkaXYuVG9vbHRpcC5Ub25ndWVMZWZ0IHsKICAgIH0KCiAgICBkaXYuVG9vbHRpcC5Ub25ndWVSaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0yMDJweDsKICAgIH0KCiAgICBkaXYuVG9vbHRpcCA+IGRpdi5Db250ZW50IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xCR0VsZW1lbnQpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICBkaXYuVG9vbHRpcC5Ub25ndWVUb3AgPiBkaXYuQ29udGVudCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgIH0KCiAgICBkaXYuVG9vbHRpcC5Ub25ndWVCb3R0b20gPiBkaXYuQ29udGVudCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgIH0KCiAgICBkaXYuVG9vbHRpcCA+IGRpdi5Db250ZW50OmFmdGVyLAogICAgZGl2LlRvb2x0aXAgPiBkaXYuQ29udGVudDpiZWZvcmUgewogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGNvbnRlbnQ6ICIgIjsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIGRpdi5Ub29sdGlwLlRvbmd1ZVRvcCA+IGRpdi5Db250ZW50OmFmdGVyLAogICAgZGl2LlRvb2x0aXAuVG9uZ3VlVG9wID4gZGl2LkNvbnRlbnQ6YmVmb3JlIHsKICAgICAgICB0b3A6IDEwMCU7CiAgICB9CgogICAgZGl2LlRvb2x0aXAuVG9uZ3VlQm90dG9tID4gZGl2LkNvbnRlbnQ6YWZ0ZXIsCiAgICBkaXYuVG9vbHRpcC5Ub25ndWVCb3R0b20gPiBkaXYuQ29udGVudDpiZWZvcmUgewogICAgICAgIGJvdHRvbTogMTAwJTsKICAgIH0KCiAgICBkaXYuVG9vbHRpcC5Ub25ndWVMZWZ0ID4gZGl2LkNvbnRlbnQ6YWZ0ZXIsCiAgICBkaXYuVG9vbHRpcC5Ub25ndWVMZWZ0ID4gZGl2LkNvbnRlbnQ6YmVmb3JlIHsKICAgICAgICBsZWZ0OiAxMCU7CiAgICB9CgogICAgZGl2LlRvb2x0aXAuVG9uZ3VlUmlnaHQgPiBkaXYuQ29udGVudDphZnRlciwKICAgIGRpdi5Ub29sdGlwLlRvbmd1ZVJpZ2h0ID4gZGl2LkNvbnRlbnQ6YmVmb3JlIHsKICAgICAgICBsZWZ0OiA5MCU7CiAgICAgICAgcmlnaHQ6IDEwJTsKICAgIH0KCiAgICBkaXYuVG9vbHRpcCA+IGRpdi5Db250ZW50OmFmdGVyIHsKICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMCk7CiAgICAgICAgYm9yZGVyLXdpZHRoOiA2cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC02cHg7CiAgICB9CgogICAgZGl2LlRvb2x0aXAgPiBkaXYuQ29udGVudDpiZWZvcmUgewogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMDQsIDIwNCwgMjA0LCAwKTsKICAgICAgICBtYXJnaW4tbGVmdDogLTdweDsKICAgIH0KCiAgICBkaXYuVG9vbHRpcC5Ub25ndWVUb3AgPiBkaXYuQ29udGVudDphZnRlciB7CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjsKICAgICAgICBib3JkZXItd2lkdGg6IDZweDsKICAgIH0KCiAgICBkaXYuVG9vbHRpcC5Ub25ndWVUb3AgPiBkaXYuQ29udGVudDpiZWZvcmUgewogICAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgYm9yZGVyLXdpZHRoOiA3cHg7CiAgICB9CgogICAgZGl2LlRvb2x0aXAuVG9uZ3VlQm90dG9tID4gZGl2LkNvbnRlbnQ6YWZ0ZXIgewogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7CiAgICAgICAgYm9yZGVyLXdpZHRoOiA2cHg7CiAgICB9CgogICAgZGl2LlRvb2x0aXAuVG9uZ3VlQm90dG9tID4gZGl2LkNvbnRlbnQ6YmVmb3JlIHsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGJvcmRlci13aWR0aDogN3B4OwogICAgfQoKfSAvKiBlbmQgQG1lZGlhICovCgoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgV2lkZ2V0cwogKi8KCkBtZWRpYSBzY3JlZW4sIHByaW50IHsKCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBXaWRnZXQgVGFibGVsaWtlIGxpc3QKICAgICAqLwogICAgdWwuVGFibGVsaWtlIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgfQoKICAgIHVsLlRhYmxlbGlrZTpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICB9CgogICAgLlJUTCAuU2l6ZTFvZjM6Zmlyc3QtY2hpbGQgdWwuVGFibGVsaWtlIHsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgIH0KCiAgICAuU3RyaWtlVGhyb3VnaCBhIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICAgIH0KCiAgICB1bC5UYWJsZWxpa2UgbGkgewogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDAgNHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjsKICAgIH0KCiAgICB1bC5UYWJsZWxpa2UgbGkuT25lUm93LAogICAgdWwuVGFibGVsaWtlIGxpLk9uZVJvdyAuQXNCbG9jayB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIHVsLlRhYmxlbGlrZSBsaTpudGgtY2hpbGQoZXZlbikgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgfQoKICAgIHVsLlRhYmxlbGlrZSBsaTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sSG92ZXJMaWdodCk7CiAgICB9CgogICAgdWwuVGFibGVsaWtlIGxpOmhvdmVyIGEgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xNYWluRGFyayk7CiAgICB9CgogICAgdWwuVGFibGVsaWtlIGxpLkhlYWRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRkZGOwogICAgfQoKICAgIHVsLlRhYmxlbGlrZSArIHVsLlRhYmxlbGlrZS5BbGxvY2F0aW9uTGlzdCB7CiAgICAgICAgYm9yZGVyLXRvcDogMHB4OwogICAgfQoKICAgIHVsLlRhYmxlbGlrZSBsaS5IZWFkZXIgKyBsaSB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIFdpZGdldFNpbXBsZQogICAgICovCgogICAgLkxheW91dFBvcHVwIC5Db250ZW50ID4gLldpZGdldFNpbXBsZTpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7CiAgICB9CgogICAgLldpZGdldFNpbXBsZSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0VsZW1lbnQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNHB4IDAgdmFyKC0tY29sU2hhZG93RGFyayk7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDJweDsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlLldpZGdldExvYWRpbmcgaSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIG1hcmdpbjogMTBweCAwcHg7CiAgICB9CgogICAgLldpZGdldFNpbXBsZS5Nb2JpbGVOb3RBdmFpbGFibGVXaWRnZXQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLldpZGdldFNpbXBsZSAuV2lkZ2V0U2ltcGxlIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgICAgIG1hcmdpbjogMTVweCAxMHB4OwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLldpZGdldFNpbXBsZSAuV2lkZ2V0U2ltcGxlIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5XaWRnZXRTaW1wbGUgLldpZGdldFNpbXBsZSBoMiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgPiAuSGVhZGVyLAogICAgLldpZGdldFNpbXBsZS5Db2xsYXBzZWQuQW5pbWF0aW9uUnVubmluZyA+IC5IZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDJweCA1cHggMnB4IDVweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLldpZGdldFNpbXBsZS5Db2xsYXBzZWQgPiAuSGVhZGVyIHsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgPiAuSGVhZGVyIGgyLAogICAgLldpZGdldFNpbXBsZSA+IC5IZWFkZXIgaDMgewogICAgICAgIHBhZGRpbmc6IDRweCAzcHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdGV4dC1zaGFkb3c6IDFweCAxcHggI2ZmZjsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgPiAuQ29udGVudCB7CiAgICAgICAgcGFkZGluZzogOHB4IDhweCAxMHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIC8qKgogICAgICAgICAqICAgU1RBUlQgSUU5IEhvdmVyIEJ1ZyBXb3JrYXJvdW5kCiAgICAgICAgICogICBUaGUgcHJvYmxlbSBvY2N1cnMgd2hlbiB5b3UgaGF2ZSBhIGNvbnRhaW5lciB0aGF0IGhhcyBhIGZpeGVkIHdpZHRoIHNldCwgYW4gb3ZlcmZsb3cgc2V0IHRvCiAgICAgICAgICogICBhdXRvLCBjb250ZW50IGxvbmcgZW5vdWdoIHRvIHRyaWdnZXIgdGhlIGhvcml6b250YWwgc2Nyb2xsIGFuZCBhIGhvdmVyIHN0eWxlIHNldAogICAgICAgICAqICAgb24gZWxlbWVudHMgaW5zaWRlIHRoZSBjb250YWluZXIuCiAgICAgICAgICogICBUaGUgY29udGFpbmVyIG15c3RlcmlvdXNseSBpbmNyZWFzZXMgaW4gc2l6ZS4KICAgICAgICAgKiAgIChlLmcuIGlmIHlvdSBoYXZlIGluc3RhbGxlZCBPVE9CT0Rhc2hib2FyZE92ZXJ2aWV3RmlsdGVycyBhbmQgbWFueSBkeW5hbWljIGZpZWxkcyBhcmUKICAgICAgICAgKiAgIHNob3duIGluIHRoZSBkYXNoYm9hcmQuKQogICAgICAgICAqLwogICAgICAgIG1pbi1oZWlnaHQ6IDAlOwogICAgICAgIC8qIEVORCBJRTkgSG92ZXIgQnVnIFdvcmthcm91bmQgKi8KICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlID4gLkNvbnRlbnQuT3ZlcmZsb3dWaXNpYmxlIHsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlLlF1ZXVlT3ZlcnZpZXcgPiAuQ29udGVudCB7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDJweDsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlLkNvbGxhcHNlZCA+IC5Db250ZW50IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLldpZGdldFNldHRpbmdzRm9ybSBmaWVsZHNldCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMHB4OwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLkZpZWxkLkxheW91dEdyaWQgewogICAgICAgIHBhZGRpbmctdG9wOiA3cHg7CiAgICB9CgogICAgLldpZGdldFNpbXBsZSAuRmllbGQuTGF5b3V0R3JpZCAuVGFibGVsaWtlIHsKICAgICAgICB3aWR0aDogOTglOwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLkJ1dHRvbnMgewogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIG1hcmdpbjogMTVweCAtOHB4IC0xMHB4IC04cHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMHB4IDlweCAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICB9CgogICAgLldpZGdldFNpbXBsZSAuQnV0dG9ucy5Ob01hcmdpbiB7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLkZpZWxkLkxheW91dEdyaWQgLkFsbG9jYXRpb25MaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxOTJweDsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5GaWVsZC5MYXlvdXRHcmlkIC5BbGxvY2F0aW9uTGlzdC5PcmRlck51bWJlcnMgewogICAgICAgIGxpc3Qtc3R5bGU6IGRlY2ltYWwgaW5zaWRlOwogICAgfQoKICAgICNGb3JtRHJhZnRUYWJsZSAuRHJhZnROYW1lIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICB9CgogICAgI0Zvcm1EcmFmdFRhYmxlIHRkOm50aC1jaGlsZCgyKSB7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICB9CgogICAgLyogTGVnZW5kICYgU2hvcnRjdXRzICovCgogICAgLldpZGdldFNpbXBsZSAuTGVnZW5kLAogICAgLldpZGdldFNpbXBsZSAuU2hvcnRDdXRzIHsKICAgICAgICBtYXJnaW46IDVweDsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5MZWdlbmQgewogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICB9CgogICAgLldpZGdldFNpbXBsZSAuTGVnZW5kIGxpLAogICAgLldpZGdldFNpbXBsZSAuU2hvcnRDdXRzIGxpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiA3cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgfQoKICAgIC5SVEwgLldpZGdldFNpbXBsZSAuTGVnZW5kIGxpLAogICAgLlJUTCAuV2lkZ2V0U2ltcGxlIC5TaG9ydEN1dHMgbGkgewogICAgICAgIHBhZGRpbmctbGVmdDogMHB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgICB9CgogICAgLldpZGdldFNpbXBsZSAuTGVnZW5kIGxpOmxhc3QtY2hpbGQsCiAgICAuV2lkZ2V0U2ltcGxlIC5TaG9ydEN1dHMgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMHB4OwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLkxlZ2VuZCBsaSBzcGFuIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBtYXJnaW4tdG9wOiAtNnB4OwogICAgICAgIHdpZHRoOiA1cHg7CiAgICB9CgogICAgLlJUTCAuV2lkZ2V0U2ltcGxlIC5MZWdlbmQgbGkgc3BhbiB7CiAgICAgICAgbGVmdDogYXV0bzsKICAgICAgICByaWdodDogMHB4OwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLlNob3J0Q3V0cyB7CiAgICAgICAgbWFyZ2luLXRvcDogN3B4OwogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLlNob3J0Q3V0cyBsaSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAwcHg7CiAgICAgICAgZGlzcGxheTogdGFibGUtcm93OwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLlNob3J0Q3V0cyBsaSBlbSB7CiAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5TaG9ydEN1dHMgbGkgZW06Zmlyc3QtY2hpbGQgewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLlNob3J0Q3V0cyBsaSBzcGFuIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgfQoKICAgIC5SVEwgLldpZGdldFNpbXBsZSAuU2hvcnRDdXRzIGxpIHNwYW4gewogICAgICAgIG1hcmdpbi1yaWdodDogMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiBXaWRnZXRzIGFzIG5vdGljZXMKICAgICAqLwoKICAgIC5XaWRnZXROb3RpY2UgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbE5vdGlmeVdhcm4pOwogICAgfQoKICAgIC5XaWRnZXROb3RpY2UgLkNvbnRlbnQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbE5vdGlmeVdhcm4pOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE0MCU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiBBSkFYIExvYWRlcgogICAgICovCgogICAgLkxvYWRpbmcgPiAuSGVhZGVyIGgyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLkxvYWRpbmcgPiAuSGVhZGVyIGgyOmFmdGVyIHsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIHRvcDogYXV0bzsKICAgICAgICByaWdodDogM3B4OwogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMTRweDsKICAgIH0KCiAgICAuUlRMIC5Mb2FkaW5nID4gLkhlYWRlciBoMjphZnRlciB7CiAgICAgICAgbGVmdDogM3B4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgfQoKICAgIC5XaWRnZXRJc0xvYWRpbmcgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBib3JkZXI6IDFweCBkb3R0ZWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIFdpZGdldEJveAogICAgICovCiAgICAuV2lkZ2V0Qm94ID4gLkhlYWRlciBoMiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICB9CgogICAgLlJUTCAuV2lkZ2V0Qm94ID4gLkhlYWRlciBoMiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICB9CgogICAgLldpZGdldEJveCA+IC5IZWFkZXIgLldpZGdldEFjdGlvbiArIGgyIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzMHB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDIwMHB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIH0KCiAgICAuUlRMIC5XaWRnZXRCb3ggPiAuSGVhZGVyIC5XaWRnZXRBY3Rpb24gKyBoMiB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMDBweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogICAgfQoKICAgIC5XaWRnZXRCb3ggPiAuSGVhZGVyIGgyICsgaDMgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRkZGOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBwYWRkaW5nOiA1cHggNXB4IDVweCAxMHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAuUlRMIC5XaWRnZXRCb3ggPiAuSGVhZGVyIGgyICsgaDMgewogICAgICAgIHBhZGRpbmc6IDVweCAxMHB4IDVweCA1cHg7CiAgICB9CgogICAgLldpZGdldEJveCA+IC5Db250ZW50IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmOwogICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgfQoKICAgIC5Db2xsYXBzZWQgPiAuQ29udGVudCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuV2lkZ2V0Qm94ID4gLkNvbnRlbnQuQXV0b0hlaWdodCB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJhY3Rpb24gICBBY3Rpb25NZW51CiAgICAgKi8KCiAgICAuQWN0aW9uTWVudSB7CiAgICAgICAgdG9wOiA0cHg7CiAgICAgICAgcmlnaHQ6IDdweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuUlRMIC5BY3Rpb25NZW51IHsKICAgICAgICByaWdodDogYXV0bzsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHBhZGRpbmc6IDAgMnB4IDAgMDsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDsKICAgIH0KCiAgICAuSGVhZGVyOmhvdmVyIC5BY3Rpb25NZW51LAogICAgLkhlYWRlciAuQWN0aW9uTWVudS5WaXNpYmxlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBXaWRnZXRBY3Rpb25zCiAgICAgKi8KCiAgICAuV2lkZ2V0QWN0aW9uIHsKICAgICAgICBoZWlnaHQ6IDE5cHg7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogMXB4OwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAuUlRMIC5XaWRnZXRBY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDAgMCAwIDFweDsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICB9CgogICAgLldpZGdldEFjdGlvbiBhIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKICAgIC5XaWRnZXRBY3Rpb24uV2l0aFRleHQgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgfQoKICAgIC5XaWRnZXRBY3Rpb24uV2l0aFRleHQgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7CiAgICB9CgogICAgLldpZGdldEFjdGlvbi5XaXRoVGV4dCBhIGkgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdG9wOiAtMnB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICB9CgogICAgLldpZGdldEFjdGlvbi5Ub2dnbGUsCiAgICAuRXhwYW5kZWQuQW5pbWF0aW9uUnVubmluZyA+IC5IZWFkZXIgPiAuV2lkZ2V0QWN0aW9uLlRvZ2dsZSB7CiAgICAgICAgaGVpZ2h0OiAxM3B4OwogICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgIG1hcmdpbjogNXB4IDBweCA1cHggMnB4OwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgfQoKICAgIC5XaWRnZXRBY3Rpb24uVG9nZ2xlIGkgewogICAgICAgIGZvbnQtc2l6ZTogMTdweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogN3B4OwogICAgICAgIHRvcDogMnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyaykgIWltcG9ydGFudDsKICAgIH0KCiAgICAuUlRMIC5XaWRnZXRBY3Rpb24uVG9nZ2xlIGkgewogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgICAgcmlnaHQ6IDdweDsKICAgIH0KCiAgICAuRXhwYW5kZWQgPiAuSGVhZGVyID4gLldpZGdldEFjdGlvbi5Ub2dnbGUgaS5mYS1jYXJldC1yaWdodCB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5SVEwgLldpZGdldFNpbXBsZSAuSGVhZGVyID4gLldpZGdldEFjdGlvbi5Ub2dnbGUgaS5mYS1jYXJldC1yaWdodCB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVZKDE4MGRlZyk7CiAgICB9CgogICAgLkNvbGxhcHNlZCA+IC5IZWFkZXIgPiAuV2lkZ2V0QWN0aW9uLlRvZ2dsZSBpLmZhLWNhcmV0LWRvd24gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAuSGVhZGVyOmFjdGl2ZSA+IC5XaWRnZXRBY3Rpb24uVG9nZ2xlIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xM3B4OwogICAgfQoKICAgIC5FeHBhbmRlZCA+IC5IZWFkZXIgPiAuV2lkZ2V0QWN0aW9uLlRvZ2dsZSwKICAgIC5Db2xsYXBzZWQuQW5pbWF0aW9uUnVubmluZyA+IC5IZWFkZXIgPiAuV2lkZ2V0QWN0aW9uLlRvZ2dsZSB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjZweDsKICAgIH0KCiAgICAuUlRMIC5XaWRnZXRBY3Rpb24uVG9nZ2xlIHsKICAgICAgICBtYXJnaW46IDVweCAycHggNXB4IDZweDsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICB9CgogICAgLldpZGdldEFjdGlvbi5Ub2dnbGUgYSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAvKiBTZXR0aW5ncyAqLwogICAgLldpZGdldEFjdGlvbiBpIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICAgIG1hcmdpbjogMnB4IDBweCAwcHggMnB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICB9CgogICAgLldpZGdldEFjdGlvbjpob3ZlciBpLAogICAgLldpZGdldEFjdGlvbiBhOmZvY3VzIGkgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLldpZGdldFRvb2x0aXAgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEVsZW1lbnQpOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTI1cHg7CiAgICAgICAgdG9wOiAyMHB4OwogICAgICAgIHJpZ2h0OiAwcHg7CiAgICB9CgogICAgdWwuV2lkZ2V0VG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDE3MHB4OwogICAgICAgIHJpZ2h0OiAtM3B4OwogICAgICAgIHRvcDogMjFweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIxNiwgMjE2LCAyMTYsIDAuODUpOwogICAgfQoKICAgIHVsLldpZGdldFRvb2x0aXAgbGkgewogICAgICAgIHBhZGRpbmc6IDdweCAxM3B4IDJweCAyM3B4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspOwogICAgfQoKICAgIHVsLldpZGdldFRvb2x0aXAgbGkgaSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDZweDsKICAgICAgICB0b3A6IDdweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KSAhaW1wb3J0YW50OwogICAgfQoKICAgIHVsLldpZGdldFRvb2x0aXAgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMHB4OwogICAgfQoKICAgIHVsLldpZGdldFRvb2x0aXAgbGkgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgfQoKICAgIHVsLldpZGdldFRvb2x0aXAgbGkgYTpob3ZlciB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICB9CgogICAgdWwuV2lkZ2V0VG9vbHRpcCBsaSBhOmhvdmVyIGkgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5XaWRnZXRUb29sdGlwIGEgewogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICBsaW5lLWhlaWdodDogMTUwJTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICB9CgogICAgLm9vb0NyeXB0T0ssCiAgICAub29vQ3J5cHROT0sgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICB9CgogICAgLm9vb0NyeXB0T0sgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xOb3RpZnlPSyk7CiAgICB9CgogICAgLm9vb0NyeXB0Tk9LIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sTm90aWZ5RXJyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICAgICAgQ2FsbCBmb3IgYWN0aW9uIGJ1dHRvbnMgYW5kIHNlYXJjaCBmb3JtCiAgICAgKi8KCiAgICAuQWN0aW9uTGlzdCBsaSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogN3B4OwogICAgfQoKICAgIC5BY3Rpb25MaXN0IGxpLlNlcGFyYXRlZCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKICAgIH0KCiAgICAuQWN0aW9uTGlzdCBsaTpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7CiAgICB9CgogICAgLkFjdGlvbkxpc3QgcCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDJweCAycHggNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5BY3Rpb25MaXN0IHNlbGVjdCB7CiAgICAgICAgbWFyZ2luOiAwcHggYXV0bzsKICAgICAgICBwYWRkaW5nOiAycHggM3B4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAyNDBweDsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5BY3Rpb25MaXN0IHNlbGVjdCArIC5GaWVsZEV4cGxhbmF0aW9uIHsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICB9CgogICAgLldpZGdldFNpbXBsZSAuQWN0aW9uTGlzdCAuQ2FsbEZvckFjdGlvbiB+IHNlbGVjdCB7CiAgICAgICAgbWFyZ2luLXRvcDogLTVweDsKICAgIH0KCiAgICAuQ2FsbEZvckFjdGlvbiwKICAgIC5ja2VfZGlhbG9nX2Zvb3Rlcl9idXR0b25zIGEuY2tlX2RpYWxvZ191aV9idXR0b24gewogICAgICAgIG1pbi1oZWlnaHQ6IDEycHg7CiAgICAgICAgcGFkZGluZzogM3B4IDdweCA2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbE1haW5MaWdodCk7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sTWFpbkxpZ2h0KTsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC8qICAgIGRpc3BsYXk6IGJsb2NrOyAqLwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4CiAgICAvKiAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sTWFpbkxpZ2h0KTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtZmFtaWx5OiAnUXVpY2tzYW5kJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZTsKICAgICAgICAtbW96LXRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZTsKICAgICAgICAtby10cmFuc2l0aW9uOiB3aWR0aCAwLjNzIGVhc2U7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgICAgIGJvcmRlci13aWR0aDogMTBweCAxNXB4IDEwcHggMTVweDsKICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sTWFpbkxpZ2h0KTsKICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgICAgIHdpZHRoOiAxODBweDsKICAgICAgICBoZWlnaHQ6IDM1cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC40cHggKi8KICAgIH0KCiAgICAuQ2FsbEZvckFjdGlvbi5JbmxpbmUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0b3A6IC0xcHg7CiAgICB9CgogICAgLkNhbGxGb3JBY3Rpb246ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIH0KCiAgICAuY2tlX2RpYWxvZ19mb290ZXJfYnV0dG9ucyBhLmNrZV9kaWFsb2dfdWlfYnV0dG9uIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ja2VfZGlhbG9nX2Zvb3Rlcl9idXR0b25zIGEuY2tlX2RpYWxvZ191aV9idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbE1haW5MaWdodCk7CiAgICB9CgogICAgLkNhbGxGb3JBY3Rpb24uSGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5DYWxsRm9yQWN0aW9uLkxpdHRsZVNwYWNpbmdUb3AgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgIH0KCiAgICAuQWN0aW9uTGlzdCBsaSBhLkZ1bGxzaXplLAogICAgLkNhbGxGb3JBY3Rpb24uRnVsbHNpemUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKICAgIC5DYWxsRm9yQWN0aW9uLkZ1bGxzaXplIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAjU3lzdGVtTWFpbnRlbmFuY2VGb3JtIC5DYWxsRm9yQWN0aW9uLkxpdHRsZVNwYWNpbmdUb3AuRnVsbHNpemUuQ2VudGVyIHsKICAgICAgICB3aWR0aDogMjQ4cHg7CiAgICB9CgogICAgLkNhbGxGb3JBY3Rpb24uRnVsbHNpemUgKyAuRmllbGRFeHBsYW5hdGlvbiB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sQkdNZWRpdW1EYXJrKTsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgfQoKICAgIC8qKgogICAgICogQGNzcy1mb3IgICAgIEZpcmVmb3gKICAgICAqIEBub3RlICAgICAgICBidWc6IGJ1dHRvbiBjb250YWluaW5nIGFuIGVsZW1lbnQgaGFzIGFuIGhpZGRlbiBwYWRkaW5nCiAgICAgKi8KCiAgICAuQ2FsbEZvckFjdGlvbjo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLkNhbGxGb3JBY3Rpb246aG92ZXIsCiAgICAuQ2FsbEZvckFjdGlvbjpmb2N1cyB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICB9CgogICAgLkNhbGxGb3JBY3Rpb24gc3BhbiwKICAgIC5ja2VfZGlhbG9nX2Zvb3Rlcl9idXR0b25zIHRkIGEuY2tlX2RpYWxvZ191aV9idXR0b24gc3BhbiB7ICAgIG1pbi1oZWlnaHQ6IDEycHg7CiAgICAvKiAgICBwYWRkaW5nOiAzcHggN3B4IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMTRweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIGNvbG9yOiAjMzMzOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjRkZGOwogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI0ZGRjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyovCiAgICB9CgogICAgLkNhbGxGb3JBY3Rpb24uSW5saW5lIHNwYW4gewogICAgICAgIHBhZGRpbmc6IDJweCA3cHggNHB4IDdweDsKICAgIH0KCiAgICAuQ2FsbEZvckFjdGlvbi5TbWFsbCBzcGFuIHsKICAgICAgICBwYWRkaW5nOiAwcHggM3B4IDJweCAzcHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgfQoKICAgIC5DYWxsRm9yQWN0aW9uLkZ1bGxzaXplIHNwYW4gewogICAgICAgIHBhZGRpbmc6IDNweCAyMHB4IDVweCAyMHB4OwogICAgfQoKICAgIC5DYWxsRm9yQWN0aW9uOmRpc2FibGVkIHNwYW4gewogICAgICAgIGNvbG9yOiByZ2JhKDIwMCwyMDAsMjAwLDAuNSkgIWltcG9ydGFudDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLmNrZV9kaWFsb2dfZm9vdGVyX2J1dHRvbnMgdGQgYS5ja2VfZGlhbG9nX3VpX2J1dHRvbiBzcGFuIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IGF1dG87CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB9CgogICAgLkNhbGxGb3JBY3Rpb24gc3BhbiBpIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB3aWR0aDogMTVweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbEhpZ2hsaWdodCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuUlRMIC5DYWxsRm9yQWN0aW9uIHNwYW4gaSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDsKICAgIH0KCiAgICAuQ2FsbEZvckFjdGlvbi5GdWxsc2l6ZS5DZW50ZXIgc3BhbiBpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogNHB4OwogICAgICAgIHRvcDogNHB4OwogICAgfQoKICAgIC5IZWFkZXJQb3B1cCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDsKCiAgICB9CgogICAgLkhlYWRlclBvcHVwbGVmdCB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKCAxMDAlIC0gMjAwcHggKTsKICAgIH0KCiAgICAuSGVhZGVyUG9wdXByaWdodCB7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICAgIGZsb2F0OiByaWdodDsKICAgIH0KCiAgICAuQ2FsbEZvckFjdGlvbjphY3RpdmUsCiAgICAuQ2FsbEZvckFjdGlvbjpob3ZlciwKICAgIC5DYWxsRm9yQWN0aW9uOmZvY3VzIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xNYWluSG92ZXIpOwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sTWFpbkhvdmVyKTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgIH0KCiAgICAuQ2FsbEZvckFjdGlvbi5EaXNhYmxlZCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdMaWdodE1lZGl1bSkgIWltcG9ydGFudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR0RhcmspICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyaykgIWltcG9ydGFudDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sTm90aWZ5T0spICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLkNhbGxGb3JBY3Rpb24uRGlzYWJsZWQsIC5DYWxsRm9yQWN0aW9uLkRpc2FibGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgICAgIGN1cnNvcjogbm8tZHJvcDsKICAgIH0KCiAgICBpbnB1dC5GaWx0ZXJCb3ggewogICAgICAgIHBhZGRpbmc6IDRweCA1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIH0KCiAgICAuU2VhcmNoQm94IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogM3B4OwogICAgfQoKICAgIC5TZWFyY2hCb3ggaW5wdXRbdHlwZT0ndGV4dCddIHsKICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICBwYWRkaW5nOiA0cHggNXB4OwogICAgICAgIGZvbnQ6IG5vcm1hbCAxMnB4LzE1cHggIkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDI1cHgpOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICB9CgogICAgLlJUTCAuU2VhcmNoQm94IGlucHV0W3R5cGU9J3RleHQnXXsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgfQoKICAgIC5TZWFyY2hCb3ggaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgfQogICAgLlJUTCAuU2VhcmNoQm94IGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgfQoKICAgIC5TZWFyY2hCb3ggYnV0dG9uIHsKICAgICAgICBoZWlnaHQ6IDI1cHg7CiAgICAgICAgd2lkdGg6IDI1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtNHB4OwogICAgICAgIHBhZGRpbmc6IDNweCAzcHggNHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgICAgICBmb250OiBib2xkIDExcHgvMTRweCAiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI0ZGRjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CiAgICB9CgogICAgLlJUTCAuU2VhcmNoQm94IGJ1dHRvbiB7CiAgICAgICAgaGVpZ2h0OiAyNXB4OwogICAgICAgIG1hcmdpbjogMCAtNHB4IDAgMDsKICAgICAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjRkZGOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgfQoKICAgIC5TZWFyY2hCb3ggYnV0dG9uOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5TZWFyY2hCb3ggYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgcGFkZGluZzogNHB4IDNweCAzcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdNZWRpdW0pOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgICAgIERyYWcgYW5kIERyb3AKICAgICAqLwogICAgLkNhbkRyYWcgLkhlYWRlciBoMiB7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgfQoKICAgIC5Ecm9wUGxhY2Vob2xkZXIgewogICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pIHVybCguLi9pbWcvZG5kX3BsYWNlaG9sZGVyX2JnLnBuZyk7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICAgICAgUHJvZ3Jlc3NCYXIKICAgICAqLwogICAgI1Byb2dyZXNzQmFyIHsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHdpZHRoOiA5NTBweDsKICAgIH0KCiAgICAuUHJvZ3Jlc3NCYXJFbGVtZW50czEgbGkgewogICAgICAgIHdpZHRoOiA5NTBweDsKICAgIH0KCiAgICAuUHJvZ3Jlc3NCYXJFbGVtZW50czIgbGkgewogICAgICAgIHdpZHRoOiA0NzRweDsKICAgIH0KCiAgICAuUHJvZ3Jlc3NCYXJFbGVtZW50czMgbGkgewogICAgICAgIHdpZHRoOiAzMTZweDsKICAgIH0KCiAgICAuUHJvZ3Jlc3NCYXJFbGVtZW50czQgbGkgewogICAgICAgIHdpZHRoOiAyMzdweDsKICAgIH0KCiAgICAuUHJvZ3Jlc3NCYXJFbGVtZW50czUgbGkgewogICAgICAgIHdpZHRoOiAxODlweDsKICAgIH0KCiAgICAuUHJvZ3Jlc3NCYXJFbGVtZW50czYgbGkgewogICAgICAgIHdpZHRoOiAxNThweDsKICAgIH0KCiAgICAuUHJvZ3Jlc3NCYXJFbGVtZW50czcgbGkgewogICAgICAgIHdpZHRoOiAxMzVweDsKICAgIH0KCiAgICAvKiBCZWNhdXNlIG9mIHRoZSBtaW5pbXVtIHNjcmVlbiByZXNvbHV0aW9uIG9mIDEwMjRweCBtb3JlIHRoYW4gNyBlbGVtZW50cyBhcmUgbm90IHBvc3NpYmxlIGF0IHRoZSBtb21lbnQgKi8KCiAgICAjUHJvZ3Jlc3NCYXIgbGkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICAgICBib3JkZXItd2lkdGg6IDFweCAwcHg7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgfQoKICAgICNQcm9ncmVzc0JhciBsaSA+IHNwYW4gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWcvUHJvZ3Jlc3NCYXJBcnJvdy5wbmcpOwogICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0OwogICAgfQoKICAgICNQcm9ncmVzc0JhciBsaSBhIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDdweCAxM3B4IDEycHg7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICBmb250OiAxM3B4LzE4cHggSGVsdmV0aWNhIE5ldWUsIHNhbnMtc2VyaWY7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiA0MnB4OwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHggMHB4OwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sQkdMaWdodCk7CiAgICAgICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9Qcm9ncmVzc0Jhcklzb2xhdG9yLnBuZykgbm8tcmVwZWF0IGxlZnQgNnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgfQoKICAgICNQcm9ncmVzc0JhciBsaSBzcGFuIGEgc3BhbiB7CiAgICAgICAgY29sb3I6ICNBQkFCQUI7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxMnB4OwogICAgICAgIHRleHQtc2hhZG93OiBpbmhlcml0OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKICAgICNQcm9ncmVzc0JhciBsaTpmaXJzdC1jaGlsZCwgI1Byb2dyZXNzQmFyIGxpLkZpcnN0IHsKICAgICAgICBib3JkZXItbGVmdC13aWR0aDogMXB4OwogICAgfQoKICAgICNQcm9ncmVzc0JhciBsaTpmaXJzdC1jaGlsZCBhLCAjUHJvZ3Jlc3NCYXIgbGkuRmlyc3QgYSB7CiAgICAgICAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDE0cHg7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgIH0KCiAgICAjUHJvZ3Jlc3NCYXIgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7CiAgICB9CgogICAgI1Byb2dyZXNzQmFyIGxpOmxhc3QtY2hpbGQgYSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTRweDsKICAgIH0KCiAgICAjUHJvZ3Jlc3NCYXIgLkhpZ2hsaWdodGVkIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmJiNDJjOwogICAgICAgIGJvcmRlci10b3AtY29sb3I6ICM5YjY5Mzc7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzk5NjYzNDsKICAgIH0KCiAgICAjUHJvZ3Jlc3NCYXIgbGkuSGlnaGxpZ2h0ZWQ6Zmlyc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjOWI2OTM3OwogICAgfQoKICAgICNQcm9ncmVzc0JhciBsaS5IaWdobGlnaHRlZCA+IHNwYW4gewogICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWcvUHJvZ3Jlc3NCYXJBcnJvd0FjdGl2ZS5wbmcpOwogICAgfQoKICAgICNQcm9ncmVzc0JhciAuSGlnaGxpZ2h0ZWQgYSB7CiAgICAgICAgY29sb3I6ICM1NjI5MDA7CiAgICAgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI0ZDRDg5MTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAjZmZlZWM4OwogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNlYWEzNTA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgICNQcm9ncmVzc0JhciAuSGlnaGxpZ2h0ZWQuTm9MaW5rIGEgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIH0KCiAgICAjUHJvZ3Jlc3NCYXIgbGk6Zmlyc3QtY2hpbGQuSGlnaGxpZ2h0ZWQgYSB7CiAgICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICNmMmJmNWM7CiAgICB9CgogICAgI1Byb2dyZXNzQmFyIC5IaWdobGlnaHRlZCBzcGFuIGEgc3BhbiB7CiAgICAgICAgY29sb3I6ICNhMTRmMDA7CiAgICAgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2Y1YjA0ZTsKICAgIH0KCiAgICAjUHJvZ3Jlc3NCYXIgLkFjdGl2ZSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzliNjkzNzsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMjsKICAgIH0KCiAgICAjUHJvZ3Jlc3NCYXIgLkFjdGl2ZSBhIHsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZjJiZjVjOwogICAgfQoKICAgICNQcm9ncmVzc0JhciAuQWN0aXZlICsgbGkgewogICAgICAgIG1hcmdpbi1sZWZ0OiAtMnB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMXB4OwogICAgfQoKICAgICNQcm9ncmVzc0JhciAuQWN0aXZlICsgLkFjdGl2ZSB7CiAgICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICAjUHJvZ3Jlc3NCYXIgLkFjdGl2ZSArIGxpIGEgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICB9CgogICAgI1Byb2dyZXNzQmFyIC5WaXNpdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjREREOwogICAgfQoKICAgICNQcm9ncmVzc0JhciAuVmlzaXRlZC5BY3RpdmUgewogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogI0NDQzsKICAgIH0KCiAgICAjUHJvZ3Jlc3NCYXIgLlZpc2l0ZWQuQWN0aXZlIGEgewogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogI0VFRTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICAgICAgV2lkZ2V0IG1lc3NhZ2VzCiAgICAgKi8KCiAgICAuV2lkZ2V0U2ltcGxlIC5XaWRnZXRNZXNzYWdlIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0xpZ2h0TWVkaXVtKTsKICAgICAgICBtYXJnaW46IDEwcHggLThweCAhaW1wb3J0YW50OwogICAgICAgIHBhZGRpbmc6IDVweCAyMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sQkdNZWRpdW1EYXJrKTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sQkdNZWRpdW1EYXJrKTsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE1MCU7CiAgICB9CgogICAgLldpZGdldFNpbXBsZSAuV2lkZ2V0TWVzc2FnZSBwICsgcCB7CiAgICAgICAgbWFyZ2luLXRvcDogMnB4OwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLldpZGdldE1lc3NhZ2UgcCArIHA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQoKICAgIC5TaWRlYmFyQ29sdW1uIC5XaWRnZXRTaW1wbGUgLldpZGdldE1lc3NhZ2UgewogICAgICAgIG1hcmdpbjogNXB4IC04cHg7CiAgICAgICAgcGFkZGluZzogNXB4IDhweDsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5XaWRnZXRNZXNzYWdlLkJvdHRvbSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTEwcHggIWltcG9ydGFudDsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5XaWRnZXRNZXNzYWdlLlRvcCB7CiAgICAgICAgbWFyZ2luLXRvcDogMHB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLldpZGdldFNpbXBsZSAuV2lkZ2V0TWVzc2FnZS5FcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sVGV4dEVycik7CiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICAgICBib3JkZXI6IDBweDsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5XaWRnZXRNZXNzYWdlLldhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICNGN0FFNDA7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjRDE4RjJCOwogICAgICAgIGNvbG9yOiAjNzc0YTA2OwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLldpZGdldE1lc3NhZ2UuV2FybmluZyAqIHsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5XaWRnZXRNZXNzYWdlLlN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICM2RUIyMkE7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNTI4OTFCOwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLldpZGdldE1lc3NhZ2UuTm90aWNlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMkE2MUFGOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGJvcmRlci1jb2xvcjogIzE1NDY4QzsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5XaWRnZXRNZXNzYWdlIGJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sQkdMaWdodE1lZGl1bSk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIGVhc2UgMC4zczsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5XaWRnZXRNZXNzYWdlIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTWVkaXVtRGFyayk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgICAgIE92ZXJsYXlzCiAgICAgKi8KCiAgICAuV2lkZ2V0U2ltcGxlLkhhc092ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUgLk92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgei1pbmRleDogMjsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5PdmVybGF5IGkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBtYXJnaW4tdG9wOiAtOHB4OwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBtYXJnaW4tbGVmdDogLThweDsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5PdmVybGF5IGkuZmEtY2hlY2sgewogICAgICAgIGNvbG9yOiAjNUJBRDVCOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gICAgICBJY29uIGNvbG9ycwogICAgICovCgogICAgLkNhbGxGb3JBY3Rpb24gc3BhbiBpLmZhLXBsdXMtc3F1YXJlIHsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICB9CgogICAgLkNhbGxGb3JBY3Rpb24gc3BhbiBpLmZhLXJvY2tldCB7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgfQogICAgLkNhbGxGb3JBY3Rpb24gc3BhbiBpLmZhLWRvd25sb2FkLAogICAgLkNhbGxGb3JBY3Rpb24gc3BhbiBpLmZhLXVwbG9hZCB7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gICAgICBDaGF0IGljb25zCiAgICAgKi8KCiAgICAuVXNlckNoYXRJY29ucyB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgfQoKICAgIC5Vc2VyQ2hhdEljb25zLkJsb2NrIHsKICAgICAgICBmbG9hdDogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICB9CgogICAgLlVzZXJDaGF0SWNvbnMgaSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcHg7CiAgICB9CgogICAgLlVzZXJDaGF0SWNvbnMgLlVuYXZhaWxhYmxlIGksCiAgICAuVXNlckNoYXRJY29ucyAuVW5zdXBwb3J0ZWQgaSB7CiAgICAgICAgb3BhY2l0eTogMC40OwogICAgfQoKICAgIC5Vc2VyU3RhdHVzSWNvbiB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG1hcmdpbi1yaWdodDogM3B4OwogICAgfQoKICAgIC5Vc2VyU3RhdHVzSWNvbi5JbmxpbmUgewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgIH0KCiAgICAuVXNlclN0YXR1c0ljb24uQWN0aXZlIGkgewogICAgICAgIGNvbG9yOiAjMGEwOwogICAgfQoKICAgIC5Vc2VyU3RhdHVzSWNvbi5PZmZsaW5lIGkgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgLlVzZXJTdGF0dXNJY29uLlVuYXZhaWxhYmxlIGkgewogICAgICAgIGNvbG9yOiAjZDAwOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLlVzZXJTdGF0dXNJY29uLkF3YXkgaSB7CiAgICAgICAgY29sb3I6ICNmYjA7CiAgICB9CgogICAgYnV0dG9uLkhpZ2hsaWdodEhpbnQgewogICAgICAgIGFuaW1hdGlvbjogQnV0dG9uSGludCAwLjdzIGluZmluaXRlIGFsdGVybmF0ZTsKICAgIH0KCiAgICBidXR0b24uSGlnaGxpZ2h0RXJyb3IgewogICAgICAgIGFuaW1hdGlvbjogQnV0dG9uRXJyb3IgMC43cyBpbmZpbml0ZSBhbHRlcm5hdGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgICAgIFRhYnMKICAgICAqLwoKICAgIC5XaWRnZXRTaW1wbGUuVGFicyA+IC5IZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUuVGFicyA+IC5IZWFkZXIgYSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgcGFkZGluZzogN3B4IDlweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICB9CgogICAgLldpZGdldFNpbXBsZS5UYWJzID4gLkhlYWRlciBhLkRpc2FibGVkIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHRleHQtc2hhZG93OiAxcHggMXB4IDFweCAjZmZmOwogICAgfQoKICAgIC5XaWRnZXRTaW1wbGUuVGFicyA+IC5IZWFkZXIgYTpub3QoLkRpc2FibGVkKS5BY3RpdmUsCiAgICAuV2lkZ2V0U2ltcGxlLlRhYnMgPiAuSGVhZGVyIGE6bm90KC5EaXNhYmxlZCk6aG92ZXIsCiAgICAuV2lkZ2V0U2ltcGxlLlRhYnMgPiAuSGVhZGVyIGE6bm90KC5EaXNhYmxlZCk6YWN0aXZlICB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlLlRhYnMgPiAuQ29udGVudCA+IGRpdiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlLlRhYnMgPiAuQ29udGVudCA+IGRpdi5BY3RpdmUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQoKICAgIC5Mb2dpblNjcmVlbiAuTWVzc2FnZU9mVGhlRGF5Qm94IHsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IGp1c3RpZnk7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgIH0KCiAgICAuTG9naW5TY3JlZW4gLldpZGdldFNpbXBsZS5NZXNzYWdlT2ZUaGVEYXlCb3ggaDIsCiAgICAuTG9naW5TY3JlZW4gLldpZGdldFNpbXBsZS5NZXNzYWdlT2ZUaGVEYXlCb3ggcCB7CiAgICAgICAgcGFkZGluZzogMHB4IDE1cHg7CiAgICB9CgogICAgLkxvZ2luU2NyZWVuIC5XaWRnZXRTaW1wbGUuTWVzc2FnZU9mVGhlRGF5Qm94IGgyIHsKICAgICAgICBwYWRkaW5nOiA1cHggMHB4OwogICAgfQoKICAgIEBrZXlmcmFtZXMgQnV0dG9uSGludCB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAxMHB4IGdyZWVuOwogICAgICAgIH0KICAgIH0KCiAgICBAa2V5ZnJhbWVzIEJ1dHRvbkVycm9yIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDEwcHggcmVkOwogICAgICAgIH0KICAgIH0KCn0gLyogZW5kIEBtZWRpYSAqLwoKCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIFdpZGdldE1lbnUKICovCgpAbWVkaWEgc2NyZWVuLCBwcmludCB7CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgQ29udHJvbCBSb3cKICAgICAqLwogICAgLkNvbnRyb2xSb3cgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdNZWRpdW1EYXJrKTsKICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxMHB4OwogICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxMHB4OwogICAgfQoKICAgIC5Db250cm9sUm93IGEgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAuQ29udHJvbFJvdyBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIC5Db250cm9sUm93IGEuQWN0aXZlIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBDb250cm9sIFJvdyBUYWJzCiAgICAgKi8KICAgIC5SVEwgLkNvbnRyb2xSb3cgLlRhYnMgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgIH0KCiAgICAuQ29udHJvbFJvdyBsaSB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5SVEwgLkNvbnRyb2xSb3cgbGkgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICAgIG1hcmdpbi1yaWdodDogLTNweDsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICB9CgogICAgLkNvbnRyb2xSb3cgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLkNvbnRyb2xSb3cgbGkuQWN0aXZlLAogICAgLkNvbnRyb2xSb3cgbGkuQWN0aXZlOmhvdmVyLAogICAgLkNvbnRyb2xSb3cgbGkuQWN0aXZlOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sVGV4dE1lZGl1bSk7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICB9CgogICAgLkNvbnRyb2xSb3cgbGkgPiBhIHsKICAgICAgICBwYWRkaW5nOiA3cHggMTJweCA3cHggMTFweDsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICAuUlRMIC5Db250cm9sUm93IGxpID4gYSB7CiAgICAgICAgcGFkZGluZzogN3B4IDExcHggN3B4IDEycHg7CiAgICB9CgogICAgLkNvbnRyb2xSb3cgbGk6aG92ZXIgPiBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dERhcmspOwogICAgfQoKICAgIC5Db250cm9sUm93IGxpLkFjdGl2ZSA+IGEsCiAgICAuQ29udHJvbFJvdyBsaS5BY3RpdmU6aG92ZXIgPiBhLAogICAgLkNvbnRyb2xSb3cgbGkuQWN0aXZlOmFjdGl2ZSA+IGEgewogICAgICAgIGNvbG9yOiAjRkZGOwogICAgfQoKICAgIC5Db250cm9sUm93IGxpID4gYSA+IHNwYW4gewogICAgICAgIHBhZGRpbmctbGVmdDogNHB4OwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIENvbnRleHQgRnVuY3Rpb25zCiAgICAgKi8KICAgIHVsLkNvbnRleHRGdW5jdGlvbnMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICB9CgogICAgLlJUTCB1bC5Db250ZXh0RnVuY3Rpb25zIHsKICAgICAgICByaWdodDogYXV0bzsKICAgICAgICBsZWZ0OiAwOwogICAgfQoKICAgIGgxIHVsLkNvbnRleHRGdW5jdGlvbnMgewogICAgICAgIHRvcDogLTRweDsKICAgIH0KCiAgICB1bC5Db250ZXh0RnVuY3Rpb25zIGxpIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKICAgIH0KCiAgICB1bC5Db250ZXh0RnVuY3Rpb25zIGxpIHNwYW4gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtOTk5OXB4OwogICAgICAgIHRvcDogLTk5OTlweDsKICAgIH0KCiAgICAuUlRMIHVsLkNvbnRleHRGdW5jdGlvbnMgbGkgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgIH0KCiAgICB1bC5Db250ZXh0RnVuY3Rpb25zIGxpLkNvbnRleHRIZWxwIGEsCiAgICB1bC5Db250ZXh0RnVuY3Rpb25zIGxpLkNvbnRleHRTZXR0aW5ncyBhIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjJweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICB1bC5Db250ZXh0RnVuY3Rpb25zIGxpLkNvbnRleHRIZWxwIGEgc3BhbiwKICAgIHVsLkNvbnRleHRGdW5jdGlvbnMgbGkuQ29udGV4dFNldHRpbmdzIGEgc3BhbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDE5cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgfQoKICAgIHVsLkNvbnRleHRGdW5jdGlvbnMgbGkuQ29udGV4dFNldHRpbmdzIC5mYSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHBhZGRpbmc6IDVweCAwcHggNXB4IDNweDsKICAgIH0KCiAgICB1bC5Db250ZXh0RnVuY3Rpb25zIGxpOmxhc3QtY2hpbGQ6aG92ZXIgPiBhIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MHB4IDUwcHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgQ29udHJvbCBSb3cgSGVhZGxpbmUKICAgICAqLwogICAgLkNvbnRyb2xSb3cgaDIgewogICAgICAgIHBhZGRpbmctdG9wOiAxcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICAgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICB9CgogICAgLyoqCiAgICAgKiBAc3Vic2VjdGlvbiAgQ29udHJvbCBSb3cgQWRkaXRpb25hbCBJbmZvcm1hdGlvbgogICAgICovCgogICAgLkFkZGl0aW9uYWxJbmZvcm1hdGlvbiB7CiAgICAgICAgcmlnaHQ6IDdweDsKICAgICAgICB0b3A6IDdweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgIC5BZGRpdGlvbmFsSW5mb3JtYXRpb24uQ29udHJvbFJvdyB7CiAgICAgICAgdG9wOiAxcHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgfQoKICAgIC5BZGRpdGlvbmFsSW5mb3JtYXRpb24uU3BhY2luZ0xvYWRlciB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDIzcHg7CiAgICB9CgogICAgLlJUTCAuQWRkaXRpb25hbEluZm9ybWF0aW9uLlNwYWNpbmdMb2FkZXIgewogICAgICAgIG1hcmdpbi1sZWZ0OiAyM3B4OwogICAgICAgIG1hcmdpbi1yaWdodDogMHB4OwogICAgfQoKICAgIC5SVEwgLkFkZGl0aW9uYWxJbmZvcm1hdGlvbiB7CiAgICAgICAgcmlnaHQ6IGF1dG87CiAgICAgICAgbGVmdDogMDsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBDb250cm9sIFJvdyBBY3Rpb24gUm93CiAgICAgKi8KICAgIC5BY3Rpb25Sb3cgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTGlnaHRNZWRpdW0pOwogICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDEwcHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDEwcHg7CiAgICAvKiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNjY2M7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2NjYzsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA0cHggMCByZ2JhKDQsIDAsIDcxLCAwLjE2KTsgKi8KICAgIH0KCiAgICAuV2lkZ2V0U2ltcGxlIC5Db250ZW50IC5BY3Rpb25Sb3cgewogICAgICAgIG1hcmdpbjogLTVweDsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGJvcmRlci1ib3R0b206IDBweDsKICAgIH0KCiAgICAuQWN0aW9ucyB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgIH0KCiAgICAuUlRMIC5BY3Rpb25zIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICB9CgogICAgLkFjdGlvbnMgbGkgewogICAgICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgei1pbmRleDogMTk7CiAgICB9CgogICAgLkFjdGlvbnMgbGk6YWZ0ZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGNvbnRlbnQ6ICIgfCAiOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXJnaW46IDVweCAzcHg7CiAgICB9CgogICAgLkFjdGlvbnMgbGkuSGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5BY3Rpb25zIGxpLkhpZGRlbiB+IGxpI0J1bGtBY3Rpb24gewogICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICB9CgogICAgLkFjdGlvbnMgbGk6bGFzdC1jaGlsZDphZnRlciB7CiAgICAgICAgY29udGVudDogIiB8ICI7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC5SVEwgLkFjdGlvbnMgbGkgewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICBtYXJnaW4tbGVmdDogLTNweDsKICAgICAgICBwYWRkaW5nOiAwIDNweCAwIDFweDsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICB9CgogICAgLkFjdGlvbnMgbGk6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgfQoKICAgIC5SVEwgLkFjdGlvbnMgbGk6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwOwogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICB9CgogICAgLkFjdGlvbnMgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgIH0KCiAgICAuQWN0aW9ucyBsaSBhLAogICAgLkFjdGlvbnMgbGkgc3BhbiB7CiAgICAgICAgcGFkZGluZzogNXB4IDJweCAwOwogICAgICAgIGNvbG9yOiAgdmFyKC0tY29sVGV4dERhcmspOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgLkFjdGlvbnMgbGkgYS5OZXh0QWN0aXZpdHlEaWFsb2cgewogICAgICAgIG1hcmdpbjogNHB4IDRweCA0cHggMDsKICAgICAgICBwYWRkaW5nOiA1cHggN3B4IDRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGNvbG9yOiByZXZlcnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMDsKICAgIH0KCiAgICAuQWN0aW9ucyBsaSBhLk5leHRBY3Rpdml0eURpYWxvZzpob3ZlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jb2xNYWluTGlnaHQpOwogICAgfQoKICAgIC5BY3Rpb25zIGxpIGEuTmV4dEFjdGl2aXR5RGlhbG9nID4gc3BhbiB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBib3JkZXI6IDA7CiAgICB9CgogICAgLkFjdGlvbnMgbGkgYTpob3ZlciwKICAgIC5BY3Rpb25zIGxpIHNwYW46aG92ZXIsCiAgICAuT3ZlcnZpZXdab29tIGE6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogIHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLkFjdGlvbnMgbGkuTm9Ib3Zlcjpob3ZlciBhIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgfQoKICAgIC5BY3Rpb25zIGxpIGlucHV0I1NlbGVjdEFsbFRpY2tldHMgewogICAgICAgIG1hcmdpbjogMCAxcHggMCAzcHg7CiAgICB9CgogICAgLlJUTCAuQWN0aW9ucyBsaSBpbnB1dCNTZWxlY3RBbGxUaWNrZXRzIHsKICAgICAgICBtYXJnaW46IDAgM3B4IDAgMXB4OwogICAgfQoKICAgIC5SVEwgLkFjdGlvbnMgbGk6Zmlyc3QtY2hpbGQgYSB7CiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKICAgIH0KCiAgICAuQWN0aW9ucyBsaS5JbmFjdGl2ZSBhIHsKICAgICAgICBjb2xvcjogIHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgdGV4dC1zaGFkb3c6IDFweCAxcHggI0ZGRjsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLkFjdGlvbnMgbGkuSW5hY3RpdmU6aG92ZXIgYSB7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDA7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDA7CiAgICB9CgogICAgLkFjdGlvbk1lc3NhZ2UgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBwYWRkaW5nOiA5cHggOHB4IDhweCA0cHg7CiAgICB9CgogICAgLkFjdGlvbnMgZm9ybSB7CiAgICAgICAgcGFkZGluZzogNHB4IDRweCA0cHggMDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB9CgogICAgLkFjdGlvbnMgbGkuU29ydEJ5IHsKICAgICAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgfQoKICAgIC5BY3Rpb25zIGxpIHNlbGVjdCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgfQoKICAgIC5UYWIuQWN0aW9ucyBsaSB7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLlRhYi5BY3Rpb25zIGxpOmFmdGVyIHsKICAgICAgICBjb2xvcjogIHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLlRhYi5BY3Rpb25zIGxpOmZpcnN0LWNoaWxkIGEgewogICAgICAgIHBhZGRpbmctbGVmdDogM3B4OwogICAgfQoKICAgIC5SVEwgLlRhYi5BY3Rpb25zIGxpOmZpcnN0LWNoaWxkIGEgewogICAgICAgIHBhZGRpbmc6IDNweCAzcHggNHB4IDhweDsKICAgIH0KCiAgICAuVGFiLkFjdGlvbnMgbGkgYSB7CiAgICAgICAgcGFkZGluZzogNXB4IDVweCA4cHggMnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TGlnaHQpOwogICAgfQoKICAgIC5UYWIuQWN0aW9ucyBsaSBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tY29sVGV4dExpZ2h0KTsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGJvcmRlci1ib3R0b206IDBweDsKICAgIH0KCiAgICAuVGFiLkFjdGlvbnMgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgIH0KCiAgICAuVGFiLkFjdGlvbnMgbGkuU2VsZWN0ZWQgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRNZWRpdW0pOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIExpZ2h0Um93CiAgICAgKi8KCiAgICAuTGlnaHRSb3cgewogICAgfQoKICAgIC5MaWdodFJvdy5IZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbEJHTWVkaXVtRGFyayk7CiAgICAgICAgcGFkZGluZy1yaWdodDogNXB4OwogICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDJweDsKICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgLTFweCAwICNGRkY7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgI0ZGRjsKICAgIH0KCiAgICAuUlRMIC5MaWdodFJvdy5IZWFkZXIgewogICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICB9CgogICAgLkNvbGxhcHNlZCAuTGlnaHRSb3cuSGVhZGVyIHsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIH0KCiAgICAuTGlnaHRSb3cuQm90dG9tIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0xpZ2h0KTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sQkdEYXJrKTsKICAgIH0KCiAgICAuQ29sbGFwc2VkIC5MaWdodFJvdy5Cb3R0b20gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLkxpZ2h0Um93IGgyIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogNHB4IDAgNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKICAgIH0KCiAgICAuQ29sbGFwc2VkIC5MaWdodFJvdy5IZWFkZXIgewogICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAtMXB4IDAgdmFyKC0tY29sQkdNZWRpdW1EYXJrKSBpbnNldDsKICAgICAgICBib3gtc2hhZG93OiAwIC0xcHggMCB2YXIoLS1jb2xCR01lZGl1bURhcmspIGluc2V0OwogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLWNvbEJHRGFyayk7CiAgICB9CgogICAgLkxpZ2h0Um93IC5XaWRnZXRBY3Rpb24uVG9nZ2xlIHsKICAgICAgICBtYXJnaW4tbGVmdDogN3B4OwogICAgfQoKICAgIC5SVEwgLkxpZ2h0Um93IC5XaWRnZXRBY3Rpb24uVG9nZ2xlIHsKICAgICAgICBtYXJnaW4tbGVmdDogNnB4OwogICAgICAgIG1hcmdpbi1yaWdodDogN3B4OwogICAgfQoKICAgIC5MaWdodFJvdyAjQUpBWEltYWdlRGVzdFF1ZXVlSUQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLkxpZ2h0Um93IHNlbGVjdCB7CiAgICAgICAgbWFyZ2luLXRvcDogMXB4OwogICAgfQoKICAgIC5MaWdodFJvdy5Cb3R0b20gLkFjdGlvbnMgbGkgc3BhbiBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgfQoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIEZpbHRlciBzZXR0aW5ncwogICAgICovCiAgICAuRmlsdGVyIHsKICAgICAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA2cHg7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICB9CgogICAgLlJUTCAuRmlsdGVyIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDZweDsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICB9CgogICAgLkZpbHRlciBzZWxlY3QgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIH0KCiAgICAuRmlsdGVyIC5Db25jYXQgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDsKICAgICAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIH0KCiAgICAvKgogICAgICogQHN1YnNlY3Rpb24gIERhc2hib2FyZCBUaWNrZXQgRmlsdGVyCiAgICAgKi8KICAgIC5UaWNrZXRGaWx0ZXIgPiBhLlNlbGVjdGVkLAogICAgLlVzZXJGaWx0ZXIgPiBhLlNlbGVjdGVkIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBzdWJzZWN0aW9uICBDb250cm9sIFJvdyBQYWdpbmF0aW9uCiAgICAgKi8KICAgIC8qCiAgICAgKiBmb3JtLlBhZ2luYXRpb24gaXMgdGhlIG5ldyBzdHlsZSBwYWdpbmF0aW9uLCBkaXYuUGFnaW5hdGlvbiB0aGUgb2xkIHN0eWxlCiAgICAgKiBCb3RoIHNob3VsZCB3b3JrIHdpdGggdGhpcyBDU1MKICAgICAqLwogICAgLlBhZ2luYXRpb24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIHBhZGRpbmc6IDNweCAwcHggNXB4IDBweDsKICAgIH0KCiAgICAuUlRMIC5QYWdpbmF0aW9uIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgIH0KCiAgICBmb3JtLlBhZ2luYXRpb24gPiAqIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgIH0KCiAgICAuUlRMIC5QYWdpbmF0aW9uID4gKiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgfQoKICAgIC5QYWdpbmF0aW9uID4gc3BhbiB7CiAgICAgICAgbWFyZ2luLXRvcDogM3B4OwogICAgfQoKICAgIGZvcm0uUGFnaW5hdGlvbiBhIHsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICB9CgogICAgc3Bhbi5QYWdpbmF0aW9uIGEgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RGFyayk7CiAgICB9CgogICAgc3Bhbi5QYWdpbmF0aW9uIGE6aG92ZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xIb3ZlckRhcmspOwogICAgfQoKICAgIHNwYW4uUGFnaW5hdGlvbiBhLlNlbGVjdGVkIHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgIH0KCiAgICBzcGFuLlBhZ2luYXRpb24gc3Bhbi5QYWdpbmF0aW9uTGltaXQgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0RXJyKTsKICAgIH0KCiAgICAuUGFnaW5hdGlvbiBhIHNwYW4gewogICAgICAgIG1hcmdpbjogN3B4IDZweDsKICAgICAgICBoZWlnaHQ6IDlweDsKICAgICAgICB3aWR0aDogMTFweDsKICAgICAgICB0ZXh0LWluZGVudDogLTk5OTlweDsKICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2Fycm93cy5wbmcpIG5vLXJlcGVhdDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICAuUGFnaW5hdGlvbiAuQXJyb3dMZWZ0IHNwYW4gewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgdG9wOwogICAgfQoKICAgIC5SVEwgLlBhZ2luYXRpb24gLkFycm93TGVmdCBzcGFuIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCB0b3A7CiAgICB9CgogICAgLlBhZ2luYXRpb24gLkFycm93UmlnaHQgc3BhbiB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgdG9wOwogICAgfQoKICAgIC5SVEwgLlBhZ2luYXRpb24gLkFycm93UmlnaHQgc3BhbiB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCB0b3A7CiAgICB9CgogICAgLlBhZ2luYXRpb24gaW5wdXQgewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMnB4OwogICAgICAgIHBhZGRpbmc6IDFweCAzcHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgfQoKCn0gLyogZW5kIEBtZWRpYSAqLwoKCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIEZvcm1zCiAqLwoKQG1lZGlhIHNjcmVlbiwgcHJpbnQgewoKICAgIC8qKgogICAgICogQHN1YnNlY3Rpb24gIElucHV0IGZvY3VzCiAgICAgKiBAbm90ZSAgICAgICAgRG9lcyBub3Qgd29yayBpbiBJRTYsIG9ubHkgcGFydGlhbGx5IGluIElFNyAobm8gZm9jdXMpCiAgICAgKi8KCiAgICAuRHluYW1pY0ZpZWxkREJDb250YWluZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbEJHTGlnaHQpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbEJHRGFyayk7CiAgICAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDVweCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMXB4IDFweCA1cHggdmFyKC0tY29sQkdEYXJrKTsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDVweCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIHBhZGRpbmc6IDVweCA3cHggMTBweCA2cHg7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgIH0KCiAgICAuRHluYW1pY0ZpZWxkREJDb250YWluZXIgPiBkaXYgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgIH0KCiAgICAuRHluYW1pY0ZpZWxkREJDb250YWluZXIgLlJlc3VsdEVsZW1lbnRUZXh0IHsKICAgICAgICB3aWR0aDogODklOwogICAgICAgIG1hcmdpbi1sZWZ0OiA3cHg7CiAgICB9CgogICAgLkR5bmFtaWNGaWVsZERCQ29udGFpbmVyIC5SZXN1bHRFbGVtZW50VGV4dCB7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxcyBlYXNlLCBib3JkZXIgMXMgZWFzZTsKICAgIH0KCiAgICAuRHluYW1pY0ZpZWxkREJDb250YWluZXIgLlJlc3VsdEVsZW1lbnRUZXh0Lk1haW5DdXN0b21lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sQkdMaWdodE1lZGl1bSk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sQkdNZWRpdW0pOwogICAgfQoKICAgIC5EeW5hbWljRmllbGREQkNvbnRhaW5lciAuUmVzdWx0RWxlbWVudFRleHQuUmFkaW8gewogICAgICAgIHdpZHRoOiA4NCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDBweDsKICAgIH0KCiAgICAjRW50aXR5VXBkYXRlIC5WYWx1ZVJvdy5DYXJkIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xCR0xpZ2h0TWVkaXVtKTsKICAgICAgICBwYWRkaW5nOiAxNXB4OwogICAgICAgIHdpZHRoOiAyNjBweDsKICAgICAgICBib3gtc2hhZG93OiAxcHggMXB4IDBweCB2YXIoLS1jb2xCR0RhcmspOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xCR01lZGl1bURhcmspOwogICAgfQoKICAgICNFbnRpdHlVcGRhdGUgLlZhbHVlUm93LkNhcmQgLlJlbW92ZUJ1dHRvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIHJpZ2h0OiAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgICB3aWR0aDogMjVweDsKICAgICAgICBsaW5lLWhlaWdodDogMjVweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLWNvbFRleHRMaWdodCk7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIGVhc2UgMC4zczsKICAgIH0KCiAgICAjRW50aXR5VXBkYXRlIC5WYWx1ZVJvdy5DYXJkIC5SZW1vdmVCdXR0b246aG92ZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1jb2xUZXh0TWVkaXVtKTsKICAgIH0KCiAgICAjRW50aXR5VXBkYXRlIC5WYWx1ZVJvdy5DYXJkIGxhYmVsIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICB9CgogICAgI0VudGl0eVVwZGF0ZSAuVmFsdWVSb3cuQ2FyZCBsYWJlbDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMHB4OwogICAgfQoKICAgICNFbnRpdHlVcGRhdGUgLlZhbHVlUm93LkNhcmQgaW5wdXRbdHlwZT10ZXh0XSB7CiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQoKICAgICNFbnRpdHlVcGRhdGUgLlZhbHVlUm93LkNhcmQgbGFiZWwuQ2hlY2tib3hMYWJlbCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgIH0KCiAgICAjRW50aXR5VXBkYXRlIC5WYWx1ZVJvdy5DYXJkIGxhYmVsLkNoZWNrYm94TGFiZWwgKyBsYWJlbC5DaGVja2JveExhYmVsIHsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICB9CgogICAgI0VudGl0eVVwZGF0ZSAuVmFsdWVSb3cuQ2FyZCBkaXYuSW5wdXRGaWVsZF9JbnB1dENvbnRhaW5lciwKICAgICNFbnRpdHlVcGRhdGUgLlZhbHVlUm93LkNhcmQgZGl2LklucHV0RmllbGRfQ29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgIH0KCn0gLyogZW5kIEBtZWRpYSAqLwoKPC9zdHlsZT4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/CustomerTicketPrint.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpTY3JpcHRVc2FnZSkKPCFET0NUWVBFIGh0bWw+CjxodG1sPgoKICAgIFslIEluc2VydFRlbXBsYXRlKCJDb3B5cmlnaHQudHQiKSAlXQoKICAgIDxoZWFkPgogICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiIC8+CiAgICAgICAgPG1ldGEgaWQ9InZpZXdwb3J0IiBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iIj4KICAgICAgICA8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vaW5kZXgsbm9mb2xsb3ciIC8+CgogICAgICAgIFslIEluc2VydFRlbXBsYXRlKCJUaWNrZXRQcmludEhUTUwvUHJpbnRTdHlsZXMudHQiKSAlXQoKICAgICAgICA8dGl0bGU+WyUgRGF0YS5UaXRsZUFyZWEgfCBodG1sICVdWyUgQ29uZmlnKCJQcm9kdWN0TmFtZSIpICVdPC90aXRsZT4KICAgIDwvaGVhZD4KICAgIDxib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXIiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IkFSSUFSb2xlTWFpbiBUaWNrZXRQcmludCBDdXN0b21lclRpY2tldFByaW50IFVzZUFydGljbGVDb2xvcnMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSBOb01hcmdpbiI+CiAgICAgICAgICAgICAgICA8aDE+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Ib29rICVdWyUgQ29uZmlnKCdUaWNrZXQ6Okhvb2tEaXZpZGVyJykgJV1bJSBEYXRhLlRpY2tldE51bWJlciB8IGh0bWwgJV0gJm1kYXNoOyA8YnIgLz5bJSBEYXRhLlRpdGxlIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9oMT4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBERkxvZ28iPgogICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJbJSBEYXRhLlBERkxvZ28gfCBodG1sICVdIj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlciIpICVdCgogICAgICAgICAgICBbJSBEYXRhLlRpY2tldEluZm9IVE1MICVdCgogICAgICAgIDxkaXYgaWQ9IkFydGljbGVJdGVtcyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkhpbnROb0FydGljbGVzIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVGhpcyBpdGVtIGhhcyBubyBhcnRpY2xlcyB5ZXQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJIaW50Tm9BcnRpY2xlcyIpICVdCiAgICAgICAgICAgIFslIERhdGEuQXJ0aWNsZUl0ZW1zICVdCiAgICAgICAgPC9kaXY+CgogICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICAgICAgLy88IVtDREFUQVsKICAgICAgICAgICAgICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAgICAgICAgICAgICBDb3JlLkluaXQuRXhlY3V0ZUluaXQoJ0pTX0xPQURFRCcpOwoKICAgICAgICAgICAgICAgIENvcmUuQXBwLlJlYWR5KGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgICAgICAgICAgQ29yZS5Jbml0LkV4ZWN1dGVJbml0KCdET0NVTUVOVF9SRUFEWScpOwoKICAgICAgICAgICAgICAgICAgICBbJSBQUk9DRVNTIEpTRGF0YUluc2VydCAlXQoKICAgICAgICAgICAgICAgICAgICBDb3JlLkluaXQuRXhlY3V0ZUluaXQoJ0NPTkZJR19MT0FERUQnKTsKICAgICAgICAgICAgICAgICAgICBDb3JlLkluaXQuRXhlY3V0ZUluaXQoJ0FQUF9HTE9CQUxfRUFSTFknKTsKICAgICAgICAgICAgICAgICAgICBDb3JlLkluaXQuRXhlY3V0ZUluaXQoJ0FQUF9HTE9CQUwnKTsKICAgICAgICAgICAgICAgICAgICBDb3JlLkluaXQuRXhlY3V0ZUluaXQoJ0FQUF9HTE9CQUxfTEFURScpOwoKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvL11dPgogICAgICAgIDwvc2NyaXB0PgoKICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgICAgIC8vPCFbQ0RBVEFbCiAgICAgICAgICAgICAgICAidXNlIHN0cmljdCI7CiAgICAgICAgICAgICAgICBDb3JlLkFwcC5SZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgQ29yZS5Jbml0LkV4ZWN1dGVJbml0KCdBUFBfTU9EVUxFX0VBUkxZJyk7CgogICAgICAgICAgICAgICAgICAgIFslIFBST0NFU1MgSlNPbkRvY3VtZW50Q29tcGxldGVJbnNlcnQgJV0KCiAgICAgICAgICAgICAgICAgICAgQ29yZS5Jbml0LkV4ZWN1dGVJbml0KCdBUFBfTU9EVUxFJyk7CiAgICAgICAgICAgICAgICAgICAgQ29yZS5Jbml0LkV4ZWN1dGVJbml0KCdBUFBfTU9EVUxFX0xBVEUnKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvL11dPgogICAgICAgIDwvc2NyaXB0PgoKICAgIDwvYm9keT4KPC9odG1sPgo=</File>
        <File Location="scripts/docker-compose/seccomp_profile.json" Permission="660" Encode="Base64">ewoJImRlZmF1bHRBY3Rpb24iOiAiU0NNUF9BQ1RfRVJSTk8iLAoJImRlZmF1bHRFcnJub1JldCI6IDEsCgkiYXJjaE1hcCI6IFsKCQl7CgkJCSJhcmNoaXRlY3R1cmUiOiAiU0NNUF9BUkNIX1g4Nl82NCIsCgkJCSJzdWJBcmNoaXRlY3R1cmVzIjogWwoJCQkJIlNDTVBfQVJDSF9YODYiLAoJCQkJIlNDTVBfQVJDSF9YMzIiCgkJCV0KCQl9LAoJCXsKCQkJImFyY2hpdGVjdHVyZSI6ICJTQ01QX0FSQ0hfQUFSQ0g2NCIsCgkJCSJzdWJBcmNoaXRlY3R1cmVzIjogWwoJCQkJIlNDTVBfQVJDSF9BUk0iCgkJCV0KCQl9LAoJCXsKCQkJImFyY2hpdGVjdHVyZSI6ICJTQ01QX0FSQ0hfTUlQUzY0IiwKCQkJInN1YkFyY2hpdGVjdHVyZXMiOiBbCgkJCQkiU0NNUF9BUkNIX01JUFMiLAoJCQkJIlNDTVBfQVJDSF9NSVBTNjROMzIiCgkJCV0KCQl9LAoJCXsKCQkJImFyY2hpdGVjdHVyZSI6ICJTQ01QX0FSQ0hfTUlQUzY0TjMyIiwKCQkJInN1YkFyY2hpdGVjdHVyZXMiOiBbCgkJCQkiU0NNUF9BUkNIX01JUFMiLAoJCQkJIlNDTVBfQVJDSF9NSVBTNjQiCgkJCV0KCQl9LAoJCXsKCQkJImFyY2hpdGVjdHVyZSI6ICJTQ01QX0FSQ0hfTUlQU0VMNjQiLAoJCQkic3ViQXJjaGl0ZWN0dXJlcyI6IFsKCQkJCSJTQ01QX0FSQ0hfTUlQU0VMIiwKCQkJCSJTQ01QX0FSQ0hfTUlQU0VMNjROMzIiCgkJCV0KCQl9LAoJCXsKCQkJImFyY2hpdGVjdHVyZSI6ICJTQ01QX0FSQ0hfTUlQU0VMNjROMzIiLAoJCQkic3ViQXJjaGl0ZWN0dXJlcyI6IFsKCQkJCSJTQ01QX0FSQ0hfTUlQU0VMIiwKCQkJCSJTQ01QX0FSQ0hfTUlQU0VMNjQiCgkJCV0KCQl9LAoJCXsKCQkJImFyY2hpdGVjdHVyZSI6ICJTQ01QX0FSQ0hfUzM5MFgiLAoJCQkic3ViQXJjaGl0ZWN0dXJlcyI6IFsKCQkJCSJTQ01QX0FSQ0hfUzM5MCIKCQkJXQoJCX0sCgkJewoJCQkiYXJjaGl0ZWN0dXJlIjogIlNDTVBfQVJDSF9SSVNDVjY0IiwKCQkJInN1YkFyY2hpdGVjdHVyZXMiOiBudWxsCgkJfQoJXSwKCSJzeXNjYWxscyI6IFsKCQl7CgkJCSJuYW1lcyI6IFsKCQkJCSJhY2NlcHQiLAoJCQkJImFjY2VwdDQiLAoJCQkJImFjY2VzcyIsCgkJCQkiYWRqdGltZXgiLAoJCQkJImFsYXJtIiwKCQkJCSJiaW5kIiwKCQkJCSJicmsiLAoJCQkJImNhY2hlc3RhdCIsCgkJCQkiY2FwZ2V0IiwKCQkJCSJjYXBzZXQiLAoJCQkJImNoZGlyIiwKCQkJCSJjaG1vZCIsCgkJCQkiY2hvd24iLAoJCQkJImNob3duMzIiLAoJCQkJImNsb2NrX2FkanRpbWUiLAoJCQkJImNsb2NrX2FkanRpbWU2NCIsCgkJCQkiY2xvY2tfZ2V0cmVzIiwKCQkJCSJjbG9ja19nZXRyZXNfdGltZTY0IiwKCQkJCSJjbG9ja19nZXR0aW1lIiwKCQkJCSJjbG9ja19nZXR0aW1lNjQiLAoJCQkJImNsb2NrX25hbm9zbGVlcCIsCgkJCQkiY2xvY2tfbmFub3NsZWVwX3RpbWU2NCIsCgkJCQkiY2xvc2UiLAoJCQkJImNsb3NlX3JhbmdlIiwKCQkJCSJjb25uZWN0IiwKCQkJCSJjb3B5X2ZpbGVfcmFuZ2UiLAoJCQkJImNyZWF0IiwKCQkJCSJkdXAiLAoJCQkJImR1cDIiLAoJCQkJImR1cDMiLAoJCQkJImVwb2xsX2NyZWF0ZSIsCgkJCQkiZXBvbGxfY3JlYXRlMSIsCgkJCQkiZXBvbGxfY3RsIiwKCQkJCSJlcG9sbF9jdGxfb2xkIiwKCQkJCSJlcG9sbF9wd2FpdCIsCgkJCQkiZXBvbGxfcHdhaXQyIiwKCQkJCSJlcG9sbF93YWl0IiwKCQkJCSJlcG9sbF93YWl0X29sZCIsCgkJCQkiZXZlbnRmZCIsCgkJCQkiZXZlbnRmZDIiLAoJCQkJImV4ZWN2ZSIsCgkJCQkiZXhlY3ZlYXQiLAoJCQkJImV4aXQiLAoJCQkJImV4aXRfZ3JvdXAiLAoJCQkJImZhY2Nlc3NhdCIsCgkJCQkiZmFjY2Vzc2F0MiIsCgkJCQkiZmFkdmlzZTY0IiwKCQkJCSJmYWR2aXNlNjRfNjQiLAoJCQkJImZhbGxvY2F0ZSIsCgkJCQkiZmFub3RpZnlfbWFyayIsCgkJCQkiZmNoZGlyIiwKCQkJCSJmY2htb2QiLAoJCQkJImZjaG1vZGF0IiwKCQkJCSJmY2htb2RhdDIiLAoJCQkJImZjaG93biIsCgkJCQkiZmNob3duMzIiLAoJCQkJImZjaG93bmF0IiwKCQkJCSJmY250bCIsCgkJCQkiZmNudGw2NCIsCgkJCQkiZmRhdGFzeW5jIiwKCQkJCSJmZ2V0eGF0dHIiLAoJCQkJImZsaXN0eGF0dHIiLAoJCQkJImZsb2NrIiwKCQkJCSJmb3JrIiwKCQkJCSJmcmVtb3ZleGF0dHIiLAoJCQkJImZzZXR4YXR0ciIsCgkJCQkiZnN0YXQiLAoJCQkJImZzdGF0NjQiLAoJCQkJImZzdGF0YXQ2NCIsCgkJCQkiZnN0YXRmcyIsCgkJCQkiZnN0YXRmczY0IiwKCQkJCSJmc3luYyIsCgkJCQkiZnRydW5jYXRlIiwKCQkJCSJmdHJ1bmNhdGU2NCIsCgkJCQkiZnV0ZXgiLAoJCQkJImZ1dGV4X3JlcXVldWUiLAoJCQkJImZ1dGV4X3RpbWU2NCIsCgkJCQkiZnV0ZXhfd2FpdCIsCgkJCQkiZnV0ZXhfd2FpdHYiLAoJCQkJImZ1dGV4X3dha2UiLAoJCQkJImZ1dGltZXNhdCIsCgkJCQkiZ2V0Y3B1IiwKCQkJCSJnZXRjd2QiLAoJCQkJImdldGRlbnRzIiwKCQkJCSJnZXRkZW50czY0IiwKCQkJCSJnZXRlZ2lkIiwKCQkJCSJnZXRlZ2lkMzIiLAoJCQkJImdldGV1aWQiLAoJCQkJImdldGV1aWQzMiIsCgkJCQkiZ2V0Z2lkIiwKCQkJCSJnZXRnaWQzMiIsCgkJCQkiZ2V0Z3JvdXBzIiwKCQkJCSJnZXRncm91cHMzMiIsCgkJCQkiZ2V0aXRpbWVyIiwKCQkJCSJnZXRwZWVybmFtZSIsCgkJCQkiZ2V0cGdpZCIsCgkJCQkiZ2V0cGdycCIsCgkJCQkiZ2V0cGlkIiwKCQkJCSJnZXRwcGlkIiwKCQkJCSJnZXRwcmlvcml0eSIsCgkJCQkiZ2V0cmFuZG9tIiwKCQkJCSJnZXRyZXNnaWQiLAoJCQkJImdldHJlc2dpZDMyIiwKCQkJCSJnZXRyZXN1aWQiLAoJCQkJImdldHJlc3VpZDMyIiwKCQkJCSJnZXRybGltaXQiLAoJCQkJImdldF9yb2J1c3RfbGlzdCIsCgkJCQkiZ2V0cnVzYWdlIiwKCQkJCSJnZXRzaWQiLAoJCQkJImdldHNvY2tuYW1lIiwKCQkJCSJnZXRzb2Nrb3B0IiwKCQkJCSJnZXRfdGhyZWFkX2FyZWEiLAoJCQkJImdldHRpZCIsCgkJCQkiZ2V0dGltZW9mZGF5IiwKCQkJCSJnZXR1aWQiLAoJCQkJImdldHVpZDMyIiwKCQkJCSJnZXR4YXR0ciIsCgkJCQkiZ2V0eGF0dHJhdCIsCgkJCQkiaW5vdGlmeV9hZGRfd2F0Y2giLAoJCQkJImlub3RpZnlfaW5pdCIsCgkJCQkiaW5vdGlmeV9pbml0MSIsCgkJCQkiaW5vdGlmeV9ybV93YXRjaCIsCgkJCQkiaW9fY2FuY2VsIiwKCQkJCSJpb2N0bCIsCgkJCQkiaW9fZGVzdHJveSIsCgkJCQkiaW9fZ2V0ZXZlbnRzIiwKCQkJCSJpb19wZ2V0ZXZlbnRzIiwKCQkJCSJpb19wZ2V0ZXZlbnRzX3RpbWU2NCIsCgkJCQkiaW9wcmlvX2dldCIsCgkJCQkiaW9wcmlvX3NldCIsCgkJCQkiaW9fc2V0dXAiLAoJCQkJImlvX3N1Ym1pdCIsCgkJCQkiaXBjIiwKCQkJCSJraWxsIiwKCQkJCSJsYW5kbG9ja19hZGRfcnVsZSIsCgkJCQkibGFuZGxvY2tfY3JlYXRlX3J1bGVzZXQiLAoJCQkJImxhbmRsb2NrX3Jlc3RyaWN0X3NlbGYiLAoJCQkJImxjaG93biIsCgkJCQkibGNob3duMzIiLAoJCQkJImxnZXR4YXR0ciIsCgkJCQkibGluayIsCgkJCQkibGlua2F0IiwKCQkJCSJsaXN0ZW4iLAoJCQkJImxpc3Rtb3VudCIsCgkJCQkibGlzdHhhdHRyIiwKCQkJCSJsaXN0eGF0dHJhdCIsCgkJCQkibGxpc3R4YXR0ciIsCgkJCQkiX2xsc2VlayIsCgkJCQkibHJlbW92ZXhhdHRyIiwKCQkJCSJsc2VlayIsCgkJCQkibHNldHhhdHRyIiwKCQkJCSJsc3RhdCIsCgkJCQkibHN0YXQ2NCIsCgkJCQkibWFkdmlzZSIsCgkJCQkibWFwX3NoYWRvd19zdGFjayIsCgkJCQkibWVtYmFycmllciIsCgkJCQkibWVtZmRfY3JlYXRlIiwKCQkJCSJtZW1mZF9zZWNyZXQiLAoJCQkJIm1pbmNvcmUiLAoJCQkJIm1rZGlyIiwKCQkJCSJta2RpcmF0IiwKCQkJCSJta25vZCIsCgkJCQkibWtub2RhdCIsCgkJCQkibWxvY2siLAoJCQkJIm1sb2NrMiIsCgkJCQkibWxvY2thbGwiLAoJCQkJIm1tYXAiLAoJCQkJIm1tYXAyIiwKCQkJCSJtcHJvdGVjdCIsCgkJCQkibXFfZ2V0c2V0YXR0ciIsCgkJCQkibXFfbm90aWZ5IiwKCQkJCSJtcV9vcGVuIiwKCQkJCSJtcV90aW1lZHJlY2VpdmUiLAoJCQkJIm1xX3RpbWVkcmVjZWl2ZV90aW1lNjQiLAoJCQkJIm1xX3RpbWVkc2VuZCIsCgkJCQkibXFfdGltZWRzZW5kX3RpbWU2NCIsCgkJCQkibXFfdW5saW5rIiwKCQkJCSJtcmVtYXAiLAoJCQkJIm1zZWFsIiwKCQkJCSJtc2djdGwiLAoJCQkJIm1zZ2dldCIsCgkJCQkibXNncmN2IiwKCQkJCSJtc2dzbmQiLAoJCQkJIm1zeW5jIiwKCQkJCSJtdW5sb2NrIiwKCQkJCSJtdW5sb2NrYWxsIiwKCQkJCSJtdW5tYXAiLAoJCQkJIm5hbWVfdG9faGFuZGxlX2F0IiwKCQkJCSJuYW5vc2xlZXAiLAoJCQkJIm5ld2ZzdGF0YXQiLAoJCQkJIl9uZXdzZWxlY3QiLAoJCQkJIm9wZW4iLAoJCQkJIm9wZW5hdCIsCgkJCQkib3BlbmF0MiIsCgkJCQkicGF1c2UiLAoJCQkJInBpZGZkX29wZW4iLAoJCQkJInBpZGZkX3NlbmRfc2lnbmFsIiwKCQkJCSJwaXBlIiwKCQkJCSJwaXBlMiIsCgkJCQkicGtleV9hbGxvYyIsCgkJCQkicGtleV9mcmVlIiwKCQkJCSJwa2V5X21wcm90ZWN0IiwKCQkJCSJwb2xsIiwKCQkJCSJwcG9sbCIsCgkJCQkicHBvbGxfdGltZTY0IiwKCQkJCSJwcmN0bCIsCgkJCQkicHJlYWQ2NCIsCgkJCQkicHJlYWR2IiwKCQkJCSJwcmVhZHYyIiwKCQkJCSJwcmxpbWl0NjQiLAoJCQkJInByb2Nlc3NfbXJlbGVhc2UiLAoJCQkJInBzZWxlY3Q2IiwKCQkJCSJwc2VsZWN0Nl90aW1lNjQiLAoJCQkJInB3cml0ZTY0IiwKCQkJCSJwd3JpdGV2IiwKCQkJCSJwd3JpdGV2MiIsCgkJCQkicmVhZCIsCgkJCQkicmVhZGFoZWFkIiwKCQkJCSJyZWFkbGluayIsCgkJCQkicmVhZGxpbmthdCIsCgkJCQkicmVhZHYiLAoJCQkJInJlY3YiLAoJCQkJInJlY3Zmcm9tIiwKCQkJCSJyZWN2bW1zZyIsCgkJCQkicmVjdm1tc2dfdGltZTY0IiwKCQkJCSJyZWN2bXNnIiwKCQkJCSJyZW1hcF9maWxlX3BhZ2VzIiwKCQkJCSJyZW1vdmV4YXR0ciIsCgkJCQkicmVtb3ZleGF0dHJhdCIsCgkJCQkicmVuYW1lIiwKCQkJCSJyZW5hbWVhdCIsCgkJCQkicmVuYW1lYXQyIiwKCQkJCSJyZXN0YXJ0X3N5c2NhbGwiLAoJCQkJInJpc2N2X2h3cHJvYmUiLAoJCQkJInJtZGlyIiwKCQkJCSJyc2VxIiwKCQkJCSJydF9zaWdhY3Rpb24iLAoJCQkJInJ0X3NpZ3BlbmRpbmciLAoJCQkJInJ0X3NpZ3Byb2NtYXNrIiwKCQkJCSJydF9zaWdxdWV1ZWluZm8iLAoJCQkJInJ0X3NpZ3JldHVybiIsCgkJCQkicnRfc2lnc3VzcGVuZCIsCgkJCQkicnRfc2lndGltZWR3YWl0IiwKCQkJCSJydF9zaWd0aW1lZHdhaXRfdGltZTY0IiwKCQkJCSJydF90Z3NpZ3F1ZXVlaW5mbyIsCgkJCQkic2NoZWRfZ2V0YWZmaW5pdHkiLAoJCQkJInNjaGVkX2dldGF0dHIiLAoJCQkJInNjaGVkX2dldHBhcmFtIiwKCQkJCSJzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IiwKCQkJCSJzY2hlZF9nZXRfcHJpb3JpdHlfbWluIiwKCQkJCSJzY2hlZF9nZXRzY2hlZHVsZXIiLAoJCQkJInNjaGVkX3JyX2dldF9pbnRlcnZhbCIsCgkJCQkic2NoZWRfcnJfZ2V0X2ludGVydmFsX3RpbWU2NCIsCgkJCQkic2NoZWRfc2V0YWZmaW5pdHkiLAoJCQkJInNjaGVkX3NldGF0dHIiLAoJCQkJInNjaGVkX3NldHBhcmFtIiwKCQkJCSJzY2hlZF9zZXRzY2hlZHVsZXIiLAoJCQkJInNjaGVkX3lpZWxkIiwKCQkJCSJzZWNjb21wIiwKCQkJCSJzZWxlY3QiLAoJCQkJInNlbWN0bCIsCgkJCQkic2VtZ2V0IiwKCQkJCSJzZW1vcCIsCgkJCQkic2VtdGltZWRvcCIsCgkJCQkic2VtdGltZWRvcF90aW1lNjQiLAoJCQkJInNlbmQiLAoJCQkJInNlbmRmaWxlIiwKCQkJCSJzZW5kZmlsZTY0IiwKCQkJCSJzZW5kbW1zZyIsCgkJCQkic2VuZG1zZyIsCgkJCQkic2VuZHRvIiwKCQkJCSJzZXRmc2dpZCIsCgkJCQkic2V0ZnNnaWQzMiIsCgkJCQkic2V0ZnN1aWQiLAoJCQkJInNldGZzdWlkMzIiLAoJCQkJInNldGdpZCIsCgkJCQkic2V0Z2lkMzIiLAoJCQkJInNldGdyb3VwcyIsCgkJCQkic2V0Z3JvdXBzMzIiLAoJCQkJInNldGl0aW1lciIsCgkJCQkic2V0cGdpZCIsCgkJCQkic2V0cHJpb3JpdHkiLAoJCQkJInNldHJlZ2lkIiwKCQkJCSJzZXRyZWdpZDMyIiwKCQkJCSJzZXRyZXNnaWQiLAoJCQkJInNldHJlc2dpZDMyIiwKCQkJCSJzZXRyZXN1aWQiLAoJCQkJInNldHJlc3VpZDMyIiwKCQkJCSJzZXRyZXVpZCIsCgkJCQkic2V0cmV1aWQzMiIsCgkJCQkic2V0cmxpbWl0IiwKCQkJCSJzZXRfcm9idXN0X2xpc3QiLAoJCQkJInNldHNpZCIsCgkJCQkic2V0c29ja29wdCIsCgkJCQkic2V0X3RocmVhZF9hcmVhIiwKCQkJCSJzZXRfdGlkX2FkZHJlc3MiLAoJCQkJInNldHVpZCIsCgkJCQkic2V0dWlkMzIiLAoJCQkJInNldHhhdHRyIiwKCQkJCSJzZXR4YXR0cmF0IiwKCQkJCSJzaG1hdCIsCgkJCQkic2htY3RsIiwKCQkJCSJzaG1kdCIsCgkJCQkic2htZ2V0IiwKCQkJCSJzaHV0ZG93biIsCgkJCQkic2lnYWx0c3RhY2siLAoJCQkJInNpZ25hbGZkIiwKCQkJCSJzaWduYWxmZDQiLAoJCQkJInNpZ3Byb2NtYXNrIiwKCQkJCSJzaWdyZXR1cm4iLAoJCQkJInNvY2tldGNhbGwiLAoJCQkJInNvY2tldHBhaXIiLAoJCQkJInNwbGljZSIsCgkJCQkic3RhdCIsCgkJCQkic3RhdDY0IiwKCQkJCSJzdGF0ZnMiLAoJCQkJInN0YXRmczY0IiwKCQkJCSJzdGF0bW91bnQiLAoJCQkJInN0YXR4IiwKCQkJCSJzeW1saW5rIiwKCQkJCSJzeW1saW5rYXQiLAoJCQkJInN5bmMiLAoJCQkJInN5bmNfZmlsZV9yYW5nZSIsCgkJCQkic3luY2ZzIiwKCQkJCSJzeXNpbmZvIiwKCQkJCSJ0ZWUiLAoJCQkJInRna2lsbCIsCgkJCQkidGltZSIsCgkJCQkidGltZXJfY3JlYXRlIiwKCQkJCSJ0aW1lcl9kZWxldGUiLAoJCQkJInRpbWVyX2dldG92ZXJydW4iLAoJCQkJInRpbWVyX2dldHRpbWUiLAoJCQkJInRpbWVyX2dldHRpbWU2NCIsCgkJCQkidGltZXJfc2V0dGltZSIsCgkJCQkidGltZXJfc2V0dGltZTY0IiwKCQkJCSJ0aW1lcmZkX2NyZWF0ZSIsCgkJCQkidGltZXJmZF9nZXR0aW1lIiwKCQkJCSJ0aW1lcmZkX2dldHRpbWU2NCIsCgkJCQkidGltZXJmZF9zZXR0aW1lIiwKCQkJCSJ0aW1lcmZkX3NldHRpbWU2NCIsCgkJCQkidGltZXMiLAoJCQkJInRraWxsIiwKCQkJCSJ0cnVuY2F0ZSIsCgkJCQkidHJ1bmNhdGU2NCIsCgkJCQkidWdldHJsaW1pdCIsCgkJCQkidW1hc2siLAoJCQkJInVuYW1lIiwKCQkJCSJ1bmxpbmsiLAoJCQkJInVubGlua2F0IiwKCQkJCSJ1cmV0cHJvYmUiLAoJCQkJInV0aW1lIiwKCQkJCSJ1dGltZW5zYXQiLAoJCQkJInV0aW1lbnNhdF90aW1lNjQiLAoJCQkJInV0aW1lcyIsCgkJCQkidmZvcmsiLAoJCQkJInZtc3BsaWNlIiwKCQkJCSJ3YWl0NCIsCgkJCQkid2FpdGlkIiwKCQkJCSJ3YWl0cGlkIiwKCQkJCSJ3cml0ZSIsCgkJCQkid3JpdGV2IiwKCQkJCSJjaHJvb3QiLAoJCQkJImNsb25lIiwKCQkJCSJjbG9uZTMiLAoJCQkJImZhbm90aWZ5X2luaXQiLAoJCQkJIm9wZW5fYnlfaGFuZGxlX2F0IiwKCQkJCSJzZXRkb21haW5uYW1lIiwKCQkJCSJzZXRob3N0bmFtZSIsCgkJCQkic2V0bnMiLAoJCQkJInNvY2tldCIsCgkJCQkic3lzbG9nIiwKCQkJCSJ0aW1lcl9nZXRvdmVycnVuIiwKCQkJCSJ0aW1lcl9nZXR0aW1lIiwKCQkJCSJ0aW1lcl9zZXR0aW1lIiwKCQkJCSJ1bnNoYXJlIiwKCQkJCSJ2aGFuZ3VwIgoJCQldLAoJCQkiYWN0aW9uIjogIlNDTVBfQUNUX0FMTE9XIgoJCX0sCgkJewoJCQkibmFtZXMiOiBbCgkJCQkicHJvY2Vzc192bV9yZWFkdiIsCgkJCQkicHJvY2Vzc192bV93cml0ZXYiLAoJCQkJInB0cmFjZSIKCQkJXSwKCQkJImFjdGlvbiI6ICJTQ01QX0FDVF9BTExPVyIsCgkJCSJpbmNsdWRlcyI6IHsKCQkJCSJtaW5LZXJuZWwiOiAiNC44IgoJCQl9CgkJfSwKCQl7CgkJCSJuYW1lcyI6IFsKCQkJCSJzb2NrZXQiCgkJCV0sCgkJCSJhY3Rpb24iOiAiU0NNUF9BQ1RfQUxMT1ciLAoJCQkiYXJncyI6IFsKCQkJCXsKCQkJCQkiaW5kZXgiOiAwLAoJCQkJCSJ2YWx1ZSI6IDQwLAoJCQkJCSJvcCI6ICJTQ01QX0NNUF9ORSIKCQkJCX0KCQkJXQoJCX0sCgkJewoJCQkibmFtZXMiOiBbCgkJCQkicGVyc29uYWxpdHkiCgkJCV0sCgkJCSJhY3Rpb24iOiAiU0NNUF9BQ1RfQUxMT1ciLAoJCQkiYXJncyI6IFsKCQkJCXsKCQkJCQkiaW5kZXgiOiAwLAoJCQkJCSJ2YWx1ZSI6IDAsCgkJCQkJIm9wIjogIlNDTVBfQ01QX0VRIgoJCQkJfQoJCQldCgkJfSwKCQl7CgkJCSJuYW1lcyI6IFsKCQkJCSJwZXJzb25hbGl0eSIKCQkJXSwKCQkJImFjdGlvbiI6ICJTQ01QX0FDVF9BTExPVyIsCgkJCSJhcmdzIjogWwoJCQkJewoJCQkJCSJpbmRleCI6IDAsCgkJCQkJInZhbHVlIjogOCwKCQkJCQkib3AiOiAiU0NNUF9DTVBfRVEiCgkJCQl9CgkJCV0KCQl9LAoJCXsKCQkJIm5hbWVzIjogWwoJCQkJInBlcnNvbmFsaXR5IgoJCQldLAoJCQkiYWN0aW9uIjogIlNDTVBfQUNUX0FMTE9XIiwKCQkJImFyZ3MiOiBbCgkJCQl7CgkJCQkJImluZGV4IjogMCwKCQkJCQkidmFsdWUiOiAxMzEwNzIsCgkJCQkJIm9wIjogIlNDTVBfQ01QX0VRIgoJCQkJfQoJCQldCgkJfSwKCQl7CgkJCSJuYW1lcyI6IFsKCQkJCSJwZXJzb25hbGl0eSIKCQkJXSwKCQkJImFjdGlvbiI6ICJTQ01QX0FDVF9BTExPVyIsCgkJCSJhcmdzIjogWwoJCQkJewoJCQkJCSJpbmRleCI6IDAsCgkJCQkJInZhbHVlIjogMTMxMDgwLAoJCQkJCSJvcCI6ICJTQ01QX0NNUF9FUSIKCQkJCX0KCQkJXQoJCX0sCgkJewoJCQkibmFtZXMiOiBbCgkJCQkicGVyc29uYWxpdHkiCgkJCV0sCgkJCSJhY3Rpb24iOiAiU0NNUF9BQ1RfQUxMT1ciLAoJCQkiYXJncyI6IFsKCQkJCXsKCQkJCQkiaW5kZXgiOiAwLAoJCQkJCSJ2YWx1ZSI6IDQyOTQ5NjcyOTUsCgkJCQkJIm9wIjogIlNDTVBfQ01QX0VRIgoJCQkJfQoJCQldCgkJfSwKCQl7CgkJCSJuYW1lcyI6IFsKCQkJCSJzeW5jX2ZpbGVfcmFuZ2UyIiwKCQkJCSJzd2FwY29udGV4dCIKCQkJXSwKCQkJImFjdGlvbiI6ICJTQ01QX0FDVF9BTExPVyIsCgkJCSJpbmNsdWRlcyI6IHsKCQkJCSJhcmNoZXMiOiBbCgkJCQkJInBwYzY0bGUiCgkJCQldCgkJCX0KCQl9LAoJCXsKCQkJIm5hbWVzIjogWwoJCQkJImFybV9mYWR2aXNlNjRfNjQiLAoJCQkJImFybV9zeW5jX2ZpbGVfcmFuZ2UiLAoJCQkJInN5bmNfZmlsZV9yYW5nZTIiLAoJCQkJImJyZWFrcG9pbnQiLAoJCQkJImNhY2hlZmx1c2giLAoJCQkJInNldF90bHMiCgkJCV0sCgkJCSJhY3Rpb24iOiAiU0NNUF9BQ1RfQUxMT1ciLAoJCQkiaW5jbHVkZXMiOiB7CgkJCQkiYXJjaGVzIjogWwoJCQkJCSJhcm0iLAoJCQkJCSJhcm02NCIKCQkJCV0KCQkJfQoJCX0sCgkJewoJCQkibmFtZXMiOiBbCgkJCQkiYXJjaF9wcmN0bCIKCQkJXSwKCQkJImFjdGlvbiI6ICJTQ01QX0FDVF9BTExPVyIsCgkJCSJpbmNsdWRlcyI6IHsKCQkJCSJhcmNoZXMiOiBbCgkJCQkJImFtZDY0IiwKCQkJCQkieDMyIgoJCQkJXQoJCQl9CgkJfSwKCQl7CgkJCSJuYW1lcyI6IFsKCQkJCSJtb2RpZnlfbGR0IgoJCQldLAoJCQkiYWN0aW9uIjogIlNDTVBfQUNUX0FMTE9XIiwKCQkJImluY2x1ZGVzIjogewoJCQkJImFyY2hlcyI6IFsKCQkJCQkiYW1kNjQiLAoJCQkJCSJ4MzIiLAoJCQkJCSJ4ODYiCgkJCQldCgkJCX0KCQl9LAoJCXsKCQkJIm5hbWVzIjogWwoJCQkJInMzOTBfcGNpX21taW9fcmVhZCIsCgkJCQkiczM5MF9wY2lfbW1pb193cml0ZSIsCgkJCQkiczM5MF9ydW50aW1lX2luc3RyIgoJCQldLAoJCQkiYWN0aW9uIjogIlNDTVBfQUNUX0FMTE9XIiwKCQkJImluY2x1ZGVzIjogewoJCQkJImFyY2hlcyI6IFsKCQkJCQkiczM5MCIsCgkJCQkJInMzOTB4IgoJCQkJXQoJCQl9CgkJfSwKCQl7CgkJCSJuYW1lcyI6IFsKCQkJCSJyaXNjdl9mbHVzaF9pY2FjaGUiCgkJCV0sCgkJCSJhY3Rpb24iOiAiU0NNUF9BQ1RfQUxMT1ciLAoJCQkiaW5jbHVkZXMiOiB7CgkJCQkiYXJjaGVzIjogWwoJCQkJCSJyaXNjdjY0IgoJCQkJXQoJCQl9CgkJfQoJXQp9</File>
        <File Location="doc/en/TicketPrintHTML.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>