<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>AgentTicketArticlePin</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-10-28 09:58:29" Version="11.0.3">Updated package to OTOBO 11.0.18.</ChangeLog>
    <ChangeLog Date="2026-07-22 10:48:35" Version="11.0.2">Changed permissions to be configurable via SysConfig.</ChangeLog>
    <ChangeLog Date="2025-08-21 09:50:41" Version="11.0.1">Initial Release.</ChangeLog>
    <Description Lang="en">Pin Articles to show them at the top of the list.</Description>
    <Description Lang="de">Ermöglicht das anheften von Artikeln an den Anfang der Artikelliste.</Description>
    <Framework>11.0.x</Framework>
    <BuildCommitID>3f9ef68d3aef0fc6ef3f15849631e06c90bce763</BuildCommitID>
    <BuildDate>2026-10-28 09:58:33</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Modules/AgentTicketZoom.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA0MzBlMmM3ZDBlOTYxMjJhYTA2YTAxNzFiNWUwZDMwNDRmZTBhNzA2IC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRab29tLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldFpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKIyBjb3JlIG1vZHVsZXMKdXNlIExpc3Q6OlV0aWwgcXcoYW55KTsKdXNlIFBPU0lYICAgICAgcXcoY2VpbCk7CgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IGJsZXNzIHslUGFyYW19LCAkVHlwZTsKCiAgICAjIHNldCBkZWJ1ZwogICAgJFNlbGYtPntEZWJ1Z30gPSAwOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkVXNlck9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgJFNlbGYtPntBcnRpY2xlSUR9ICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQXJ0aWNsZUlEJyApOwogICAgJFNlbGYtPntBcnRpY2xlVmlld30gICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQXJ0aWNsZVZpZXcnICk7CiAgICAkU2VsZi0+e1pvb21FeHBhbmR9ICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdab29tRXhwYW5kJyApOwogICAgJFNlbGYtPntab29tRXhwYW5kU29ydH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnWm9vbUV4cGFuZFNvcnQnICk7CiAgICAkU2VsZi0+e1pvb21UaW1lbGluZX0gICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdab29tVGltZWxpbmUnICk7CgogICAgbXkgJVVzZXJQcmVmZXJlbmNlcyA9ICRVc2VyT2JqZWN0LT5HZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHNhdmUgbGFzdCB1c2VkIHZpZXcgdHlwZSBpbiBwcmVmZXJlbmNlcwogICAgaWYgKCAhJFNlbGYtPntTdWJhY3Rpb259ICkgewoKICAgICAgICBpZiAoCiAgICAgICAgICAgICFkZWZpbmVkICRTZWxmLT57QXJ0aWNsZVZpZXd9CiAgICAgICAgICAgICYmICFkZWZpbmVkICRTZWxmLT57Wm9vbUV4cGFuZH0KICAgICAgICAgICAgJiYgIWRlZmluZWQgJFNlbGYtPntab29tVGltZWxpbmV9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50Wm9vbUV4cGFuZCcpOwogICAgICAgICAgICBpZiAoICRVc2VyUHJlZmVyZW5jZXN7VXNlckxhc3RVc2VkWm9vbVZpZXdUeXBlfSApIHsKICAgICAgICAgICAgICAgIGlmICggJFVzZXJQcmVmZXJlbmNlc3tVc2VyTGFzdFVzZWRab29tVmlld1R5cGV9IGVxICdFeHBhbmQnICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkVXNlclByZWZlcmVuY2Vze1VzZXJMYXN0VXNlZFpvb21WaWV3VHlwZX0gZXEgJ0NvbGxhcHNlJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1pvb21FeHBhbmR9ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFVzZXJQcmVmZXJlbmNlc3tVc2VyTGFzdFVzZWRab29tVmlld1R5cGV9IGVxICdUaW1lbGluZScgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntab29tVGltZWxpbmV9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgIGRlZmluZWQgJFNlbGYtPntBcnRpY2xlVmlld30KICAgICAgICAgICAgfHwgZGVmaW5lZCAkU2VsZi0+e1pvb21FeHBhbmR9CiAgICAgICAgICAgIHx8IGRlZmluZWQgJFNlbGYtPntab29tVGltZWxpbmV9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRMYXN0VXNlZFpvb21WaWV3VHlwZSA9ICcnOwoKICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRTZWxmLT57QXJ0aWNsZVZpZXd9ICkgewogICAgICAgICAgICAgICAgJExhc3RVc2VkWm9vbVZpZXdUeXBlID0gJFNlbGYtPntBcnRpY2xlVmlld307CgogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0FydGljbGVWaWV3fSBlcSAnRXhwYW5kJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1pvb21FeHBhbmR9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFNlbGYtPntBcnRpY2xlVmlld30gZXEgJ0NvbGxhcHNlJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1pvb21FeHBhbmR9ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFNlbGYtPntBcnRpY2xlVmlld30gZXEgJ1RpbWVsaW5lJyApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1pvb21UaW1lbGluZX0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJExhc3RVc2VkWm9vbVZpZXdUeXBlID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFpvb21FeHBhbmQnKQogICAgICAgICAgICAgICAgICAgICAgICA/ICdFeHBhbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIDogJ0NvbGxhcHNlJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIGRlZmluZWQgJFNlbGYtPntab29tRXhwYW5kfSAmJiAkU2VsZi0+e1pvb21FeHBhbmR9ID09IDEgKSB7CiAgICAgICAgICAgICAgICAkTGFzdFVzZWRab29tVmlld1R5cGUgPSAnRXhwYW5kJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIGRlZmluZWQgJFNlbGYtPntab29tRXhwYW5kfSAmJiAkU2VsZi0+e1pvb21FeHBhbmR9ID09IDAgKSB7CiAgICAgICAgICAgICAgICAkTGFzdFVzZWRab29tVmlld1R5cGUgPSAnQ29sbGFwc2UnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggZGVmaW5lZCAkU2VsZi0+e1pvb21UaW1lbGluZX0gJiYgJFNlbGYtPntab29tVGltZWxpbmV9ID09IDEgKSB7CiAgICAgICAgICAgICAgICAkTGFzdFVzZWRab29tVmlld1R5cGUgPSAnVGltZWxpbmUnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRVc2VyT2JqZWN0LT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ1VzZXJMYXN0VXNlZFpvb21WaWV3VHlwZScsCiAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJExhc3RVc2VkWm9vbVZpZXdUeXBlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpbWVsaW5lVmlld0VuYWJsZWQnKSApIHsKICAgICAgICAkU2VsZi0+e1pvb21UaW1lbGluZX0gPSAwOwogICAgfQoKICAgICMgd2hldGhlciB0aGUgbWVzc2FnZSAiVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGFydGljbGUsIC4uLiIgaXMgc2hvd24KICAgICRTZWxmLT57RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSAvLz0gJFVzZXJQcmVmZXJlbmNlc3tVc2VyQWdlbnREb05vdFNob3dCcm93c2VyTGlua01lc3NhZ2V9OwoKICAgICRTZWxmLT57Wm9vbUV4cGFuZFNvcnR9IC8vPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Olpvb21FeHBhbmRTb3J0Jyk7CgogICAgJFNlbGYtPntBcnRpY2xlRmlsdGVyQWN0aXZlfSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6VGlja2V0QXJ0aWNsZUZpbHRlcicpOwoKICAgICMgZGVmaW5lIGlmIHJpY2ggdGV4dCBzaG91bGQgYmUgdXNlZAogICAgJFNlbGYtPntSaWNoVGV4dH0gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Olpvb21SaWNoVGV4dEZvcmNlJykKICAgICAgICB8fCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fQogICAgICAgIHx8IDA7CgogICAgIyBBbHdheXMgZXhjbHVkZSBwbGFpbiB0ZXh0IGF0dGFjaG1lbnQsIGJ1dCBleGNsdWRlIEhUTUwgYm9keSBvbmx5IGlmIHJpY2ggdGV4dCBpcyBlbmFibGVkLgogICAgJFNlbGYtPntFeGNsdWRlQXR0YWNobWVudHN9ID0gewogICAgICAgIEV4Y2x1ZGVQbGFpblRleHQgPT4gMSwKICAgICAgICBFeGNsdWRlSFRNTEJvZHkgID0+ICRTZWxmLT57UmljaFRleHR9LAogICAgICAgIEV4Y2x1ZGVJbmxpbmUgICAgPT4gJFNlbGYtPntSaWNoVGV4dH0sCiAgICB9OwoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyB0aWNrZXQgaWQgbG9va3VwCiAgICBpZiAoICEkU2VsZi0+e1RpY2tldElEfSAmJiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0TnVtYmVyJyApICkgewogICAgICAgICRTZWxmLT57VGlja2V0SUR9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0SURMb29rdXAoCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0TnVtYmVyJyApLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZGlzcGxheSBzZXR0aW5ncyBmb3IgQWdlbnRUaWNrZXRab29tLCBlLmcuIHdoaWNoIHdpZGdldHMgYXJlIHNob3duCiAgICAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSIpOwoKICAgICMgdGhpcyBpcyBhIG1hcHBpbmcgb2YgaGlzdG9yeSB0eXBlcyB3aGljaCBpcyBiZWluZyB1c2VkCiAgICAjIGZvciB0aGUgdGltZWxpbmUgdmlldyBhbmQgaXRzIGV2ZW50IHR5cGUgZmlsdGVyCiAgICAkU2VsZi0+e0hpc3RvcnlUeXBlTWFwcGluZ30gPSB7CiAgICAgICAgVGlja2V0TGlua0RlbGV0ZSAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0xpbmsgRGVsZXRlZCcpLAogICAgICAgIExvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUaWNrZXQgTG9ja2VkJyksCiAgICAgICAgU2V0UGVuZGluZ1RpbWUgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1BlbmRpbmcgVGltZSBTZXQnKSwKICAgICAgICBUaWNrZXREeW5hbWljRmllbGRVcGRhdGUgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRHluYW1pYyBGaWVsZCBVcGRhdGVkJyksCiAgICAgICAgRW1haWxBZ2VudEludGVybmFsICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ091dGdvaW5nIEVtYWlsIChpbnRlcm5hbCknKSwKICAgICAgICBOZXdUaWNrZXQgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnVGlja2V0IENyZWF0ZWQnKSwKICAgICAgICBUeXBlVXBkYXRlICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnVHlwZSBVcGRhdGVkJyksCiAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWVTdGFydCAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gVXBkYXRlIFRpbWUgSW4gRWZmZWN0JyksCiAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWVTdG9wICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gVXBkYXRlIFRpbWUgU3RvcHBlZCcpLAogICAgICAgIEVzY2FsYXRpb25GaXJzdFJlc3BvbnNlVGltZVN0b3AgPT4gVHJhbnNsYXRhYmxlKCdFc2NhbGF0aW9uIEZpcnN0IFJlc3BvbnNlIFRpbWUgU3RvcHBlZCcpLAogICAgICAgIEN1c3RvbWVyVXBkYXRlICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdDdXN0b21lciBVcGRhdGVkJyksCiAgICAgICAgQ2hhdEludGVybmFsICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0ludGVybmFsIENoYXQnKSwKICAgICAgICBTZW5kQXV0b0ZvbGxvd1VwICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnQXV0b21hdGljIEZvbGxvdy1VcCBTZW50JyksCiAgICAgICAgQWRkTm90ZSAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ05vdGUgQWRkZWQnKSwKICAgICAgICBBZGROb3RlQ3VzdG9tZXIgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTm90ZSBBZGRlZCAoQ3VzdG9tZXIpJyksCiAgICAgICAgQWRkU01TICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1NNUyBBZGRlZCcpLAogICAgICAgIEFkZFNNU0N1c3RvbWVyICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdTTVMgQWRkZWQgKEN1c3RvbWVyKScpLAogICAgICAgIFN0YXRlVXBkYXRlICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdTdGF0ZSBVcGRhdGVkJyksCiAgICAgICAgU2VuZEFuc3dlciAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ091dGdvaW5nIEFuc3dlcicpLAogICAgICAgIFNlcnZpY2VVcGRhdGUgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdTZXJ2aWNlIFVwZGF0ZWQnKSwKICAgICAgICBUaWNrZXRMaW5rQWRkICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnTGluayBBZGRlZCcpLAogICAgICAgIEVtYWlsQ3VzdG9tZXIgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdJbmNvbWluZyBDdXN0b21lciBFbWFpbCcpLAogICAgICAgIFdlYlJlcXVlc3RDdXN0b21lciAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdJbmNvbWluZyBXZWIgUmVxdWVzdCcpLAogICAgICAgIFByaW9yaXR5VXBkYXRlICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdQcmlvcml0eSBVcGRhdGVkJyksCiAgICAgICAgVW5sb2NrICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1RpY2tldCBVbmxvY2tlZCcpLAogICAgICAgIEVtYWlsQWdlbnQgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdPdXRnb2luZyBFbWFpbCcpLAogICAgICAgIFRpdGxlVXBkYXRlICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUaXRsZSBVcGRhdGVkJyksCiAgICAgICAgT3duZXJVcGRhdGUgICAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ05ldyBPd25lcicpLAogICAgICAgIE1lcmdlZCAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUaWNrZXQgTWVyZ2VkJyksCiAgICAgICAgUGhvbmVDYWxsQWdlbnQgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ091dGdvaW5nIFBob25lIENhbGwnKSwKICAgICAgICBGb3J3YXJkICAgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRm9yd2FyZGVkIE1lc3NhZ2UnKSwKICAgICAgICBVbnN1YnNjcmliZSAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnUmVtb3ZlZCBVc2VyIFN1YnNjcmlwdGlvbicpLAogICAgICAgIFRpbWVBY2NvdW50aW5nICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdUaW1lIEFjY291bnRlZCcpLAogICAgICAgIFBob25lQ2FsbEN1c3RvbWVyICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdJbmNvbWluZyBQaG9uZSBDYWxsJyksCiAgICAgICAgU3lzdGVtUmVxdWVzdCAgICAgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1N5c3RlbSBSZXF1ZXN0LicpLAogICAgICAgIEZvbGxvd1VwICAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdJbmNvbWluZyBGb2xsb3ctVXAnKSwKICAgICAgICBTZW5kQXV0b1JlcGx5ICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnQXV0b21hdGljIFJlcGx5IFNlbnQnKSwKICAgICAgICBTZW5kQXV0b1JlamVjdCAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnQXV0b21hdGljIFJlamVjdCBTZW50JyksCiAgICAgICAgUmVzcG9uc2libGVVcGRhdGUgICAgICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ05ldyBSZXNwb25zaWJsZScpLAogICAgICAgIEVzY2FsYXRpb25Tb2x1dGlvblRpbWVTdGFydCAgICAgPT4gVHJhbnNsYXRhYmxlKCdFc2NhbGF0aW9uIFNvbHV0aW9uIFRpbWUgSW4gRWZmZWN0JyksCiAgICAgICAgRXNjYWxhdGlvblNvbHV0aW9uVGltZVN0b3AgICAgICA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gU29sdXRpb24gVGltZSBTdG9wcGVkJyksCiAgICAgICAgRXNjYWxhdGlvblJlc3BvbnNlVGltZVN0YXJ0ICAgICA9PiBUcmFuc2xhdGFibGUoJ0VzY2FsYXRpb24gUmVzcG9uc2UgVGltZSBJbiBFZmZlY3QnKSwKICAgICAgICBFc2NhbGF0aW9uUmVzcG9uc2VUaW1lU3RvcCAgICAgID0+IFRyYW5zbGF0YWJsZSgnRXNjYWxhdGlvbiBSZXNwb25zZSBUaW1lIFN0b3BwZWQnKSwKICAgICAgICBTTEFVcGRhdGUgICAgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnU0xBIFVwZGF0ZWQnKSwKICAgICAgICBDaGF0RXh0ZXJuYWwgICAgICAgICAgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnRXh0ZXJuYWwgQ2hhdCcpLAogICAgICAgIE1vdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdRdWV1ZSBDaGFuZ2VkJyksCiAgICAgICAgU2VuZEFnZW50Tm90aWZpY2F0aW9uICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ05vdGlmaWNhdGlvbiBXYXMgU2VudCcpLAogICAgfTsKCiAgICAjIEFkZCBjdXN0b20gZmlsZXMgdG8gdGhlIHpvb20ncyBmcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIG9uIHRoZSBmbHkKICAgICMgICAgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgbW9kdWxlcy4KICAgIGlmICgKICAgICAgICBkZWZpbmVkICRDb25maWdPYmplY3QtPkdldCgnVGltZWxpbmVWaWV3RW5hYmxlZCcpCiAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdUaW1lbGluZVZpZXdFbmFibGVkJykgPT0gMQogICAgICAgICkKICAgIHsKICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgIEtleSAgID0+ICdMb2FkZXI6Ok1vZHVsZTo6QWdlbnRUaWNrZXRab29tIyMjMDAzLUR5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gWwogICAgICAgICAgICAgICAgICAgICdDb3JlLkFnZW50LlRpY2tldFpvb20uVGltZWxpbmVWaWV3LmpzJywKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkQXJ0aWNsZVNob3dTdGF0dXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlRmVhdHVyZXMnKS0+U2hvd0RlbGV0ZWRBcnRpY2xlcygKICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBHZXRTdGF0dXMgPT4gMQogICAgKTsKCiAgICAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9ID0gJEFydGljbGVTaG93U3RhdHVzID8gMSA6IDA7CiAgICAkU2VsZi0+e0FydGljbGVTdG9yYWdlfSAgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkFydGljbGU6OkJhY2tlbmQ6Ok1JTUVCYXNlOjpBcnRpY2xlU3RvcmFnZScpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRTZWxmLT57VGlja2V0SUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFRpY2tldElEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFRpY2tldE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAncm8nLAogICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfQogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbiwgZG9uJ3Qgc2hvdyB0aWNrZXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoCiAgICAgICAgICAgICJUaGlzIHRpY2tldCBkb2VzIG5vdCBleGlzdCwgb3IgeW91IGRvbid0IGhhdmUgcGVybWlzc2lvbnMgdG8gYWNjZXNzIGl0IGluIGl0cyBjdXJyZW50IHN0YXRlLiIKICAgICAgICApLAogICAgICAgIFdpdGhIZWFkZXIgPT4gJFNlbGYtPntTdWJhY3Rpb259ICYmICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQXJ0aWNsZVVwZGF0ZScgPyAnbm8nIDogJ3llcycsCiAgICApIGlmICEkQWNjZXNzOwoKICAgICMgZ2V0IHRpY2tldCBhdHRyaWJ1dGVzCiAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgKTsKCiAgICAjIGdldCBBQ0wgcmVzdHJpY3Rpb25zCiAgICBteSAlUG9zc2libGVBY3Rpb25zOwogICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGFsbCByZWdpc3RlcmVkIEFjdGlvbnMKICAgIGlmICggcmVmICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpIGVxICdIQVNIJyApIHsKCiAgICAgICAgbXkgJUFjdGlvbnMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKSB9OwoKICAgICAgICAjIG9ubHkgdXNlIHRob3NlIEFjdGlvbnMgdGhhdCBzdGF0cyB3aXRoIEFnZW50CiAgICAgICAgJVBvc3NpYmxlQWN0aW9ucyA9IG1hcCB7ICsrJENvdW50ZXIgPT4gJF8gfQogICAgICAgICAgICBncmVwIHsgc3Vic3RyKCAkXywgMCwgbGVuZ3RoICdBZ2VudCcgKSBlcSAnQWdlbnQnIH0KICAgICAgICAgICAgc29ydCBrZXlzICVBY3Rpb25zOwogICAgfQoKICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJVBvc3NpYmxlQWN0aW9ucywKICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGlvbicsCiAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnLScsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVBY2xBY3Rpb24gPSAlUG9zc2libGVBY3Rpb25zOwogICAgaWYgKCRBQ0wpIHsKICAgICAgICAlQWNsQWN0aW9uID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsQWN0aW9uRGF0YSgpOwogICAgfQoKICAgICMgY2hlY2sgaWYgQUNMIHJlc3RyaWN0aW9ucyBleGlzdAogICAgbXkgJUFjbEFjdGlvbkxvb2t1cCA9IHJldmVyc2UgJUFjbEFjdGlvbjsKCiAgICAjIHNob3cgZXJyb3Igc2NyZWVuIGlmIEFDTCBwcm9oaWJpdHMgdGhpcyBhY3Rpb24KICAgIGlmICggISRBY2xBY3Rpb25Mb29rdXB7ICRTZWxmLT57QWN0aW9ufSB9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKTsKICAgIH0KCiAgICAjIHNlbmQgcGFyYW1ldGVyIFRpY2tldElEIHRvIEpTCiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1RpY2tldElEJywKICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICk7CgogICAgIyBtYXJrIHNob3duIHRpY2tldCBhcyBzZWVuCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVGlja2V0TWFya0FzU2VlbicgKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAxOwoKICAgICAgICAjIGFsd2F5cyBzaG93IGFyY2hpdmVkIHRpY2tldHMgYXMgc2VlbgogICAgICAgIGlmICggJFRpY2tldHtBcmNoaXZlRmxhZ30gbmUgJ3knICkgewogICAgICAgICAgICAkU3VjY2VzcyA9ICRTZWxmLT5fVGlja2V0SXRlbVNlZW4oIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9ICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRTdWNjZXNzLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdNYXJrQXNJbXBvcnRhbnQnICkgewoKICAgICAgICAjIE93bmVyIGFuZCBSZXNwb25zaWJsZSBjYW4gbWFyayBhcnRpY2xlcyBhcyBpbXBvcnRhbnQgb3IgcmVtb3ZlIG1hcmsKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57VXNlcklEfSA9PSAkVGlja2V0e093bmVySUR9CiAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpCiAgICAgICAgICAgICAgICAmJiAkU2VsZi0+e1VzZXJJRH0gPT0gJFRpY2tldHtSZXNwb25zaWJsZUlEfQogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIEFsd2F5cyB1c2UgdXNlciBpZCAxIGJlY2F1c2Ugb3RoZXIgdXNlcnMgYWxzbyBoYXZlIHRvIHNlZSB0aGUgaW1wb3J0YW50IGZsYWcKICAgICAgICAgICAgbXkgJUFydGljbGVGbGFnID0gJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnR2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJEFydGljbGVJc0ltcG9ydGFudCA9ICRBcnRpY2xlRmxhZ3tJbXBvcnRhbnR9OwogICAgICAgICAgICBpZiAoJEFydGljbGVJc0ltcG9ydGFudCkgewoKICAgICAgICAgICAgICAgICMgQWx3YXlzIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBvdGhlciB1c2VycyBhbHNvIGhhdmUgdG8gc2VlIHRoZSBpbXBvcnRhbnQgZmxhZwogICAgICAgICAgICAgICAgJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnRGVsZXRlKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnSW1wb3J0YW50JywKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBBbHdheXMgdXNlIHVzZXIgaWQgMSBiZWNhdXNlIG90aGVyIHVzZXJzIGFsc28gaGF2ZSB0byBzZWUgdGhlIGltcG9ydGFudCBmbGFnCiAgICAgICAgICAgICAgICAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdTZXQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgID0+ICdJbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0kU2VsZi0+e1RpY2tldElEfTtBcnRpY2xlSUQ9JFNlbGYtPntBcnRpY2xlSUR9IiwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHJlcXVpcmVkIG9iamVjdHMKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRNYWluT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Zvcm1EcmFmdERlbGV0ZScgKSB7CiAgICAgICAgbXkgJVJlc3BvbnNlOwoKICAgICAgICBteSAkRm9ybURyYWZ0SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRm9ybURyYWZ0SUQnICkgfHwgJyc7CiAgICAgICAgaWYgKCRGb3JtRHJhZnRJRCkgewoKICAgICAgICAgICAgIyBmZXRjaCBmb3JtIGRyYWZ0IHRvIGNoZWNrIHBlcm1pc3Npb25zIGFuZCB0aWNrZXQgbG9jawogICAgICAgICAgICBteSAkRm9ybURyYWZ0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZvcm1EcmFmdCcpOwogICAgICAgICAgICBteSAkRm9ybURyYWZ0ICAgICAgID0gJEZvcm1EcmFmdE9iamVjdC0+Rm9ybURyYWZ0R2V0KAogICAgICAgICAgICAgICAgRm9ybURyYWZ0SUQgPT4gJEZvcm1EcmFmdElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyB2ZXJpZnkgdGhhdCBmb3JtIGRyYWZ0IGFjdHVhbGx5IGJlbG9uZ3MgdG8gY3VycmVudCB0aWNrZXQKICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkRm9ybURyYWZ0KSAmJiAkRm9ybURyYWZ0LT57T2JqZWN0SUR9ID09ICRTZWxmLT57VGlja2V0SUR9ICkgewoKICAgICAgICAgICAgICAgICMgdXNlIGNvbmZpZyBvZiBmb3JtIGRyYWZ0IGFjdGlvbiBmb3IgY2hlY2tzCiAgICAgICAgICAgICAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCAnVGlja2V0OjpGcm9udGVuZDo6JyAuICRGb3JtRHJhZnQtPntBY3Rpb259ICk7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBhY3Rpb24gaXMgYWxsb3dlZCBhcyBwZXIgQUNMcwogICAgICAgICAgICAgICAgaWYgKCAkQWNsQWN0aW9uTG9va3VweyAkRm9ybURyYWZ0LT57QWN0aW9ufSB9ICYmIElzSGFzaFJlZldpdGhEYXRhKCRDb25maWcpICkgewoKICAgICAgICAgICAgICAgICAgICAjIHRpY2tldCBsb2NrIGNoZWNrCiAgICAgICAgICAgICAgICAgICAgIyAgIE5PVEU6IG93bmVyIHN0YXR1cyBvdmVycnVsZXMgcGVybWlzc2lvbiBjaGVjayBpbiB0aGlzIGNhc2UKICAgICAgICAgICAgICAgICAgICBpZiAoICRDb25maWctPntSZXF1aXJlZExvY2t9ICYmICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tHZXQoIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRBY2Nlc3NPayA9ICRUaWNrZXRPYmplY3QtPk93bmVyQ2hlY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE93bmVySUQgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEFjY2Vzc09rICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFJlc3BvbnNle0Vycm9yfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgiU29ycnksIHlvdSBuZWVkIHRvIGJlIHRoZSB0aWNrZXQgb3duZXIgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENvbmZpZy0+e1Blcm1pc3Npb259ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEFjY2Vzc09rID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJEFjY2Vzc09rICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRSZXNwb25zZXtFcnJvcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIk5vIHBlcm1pc3Npb24uIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggISRSZXNwb25zZXtFcnJvcn0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRSZXNwb25zZXtTdWNjZXNzfSA9ICRGb3JtRHJhZnRPYmplY3QtPkZvcm1EcmFmdERlbGV0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRGb3JtRHJhZnRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2V7RXJyb3J9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJObyBwZXJtaXNzaW9uLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFJlc3BvbnNle0Vycm9yfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgiQ291bGQgbm90IGRlbGV0ZSBmb3JtIGRyYWZ0LiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUmVzcG9uc2V7RXJyb3J9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJNaXNzaW5nIEZvcm1EcmFmdElEISIpOwogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBKU09OIG91dHB1dAogICAgICAgIG15ICRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgRGF0YSA9PiBcJVJlc3BvbnNlLAogICAgICAgICk7CgogICAgICAgICMgc2VuZCBKU09OIHJlc3BvbnNlCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0xvYWRXaWRnZXQnICkgewogICAgICAgIG15ICRFbGVtZW50SUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRWxlbWVudElEJyApOwogICAgICAgIG15ICRDb25maWc7CiAgICAgICAgV0lER0VUOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfS0+e1dpZGdldHN9IC8vIHt9IH0gKSB7CiAgICAgICAgICAgIGlmICggJEVsZW1lbnRJRCBlcSAnQXN5bmNfJyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJEtleSkgKSB7CiAgICAgICAgICAgICAgICAkQ29uZmlnID0gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9LT57V2lkZ2V0c30tPnskS2V5fTsKICAgICAgICAgICAgICAgIGxhc3QgV0lER0VUOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkQ29uZmlnKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gZXZhbCB7ICRNYWluT2JqZWN0LT5SZXF1aXJlKCAkQ29uZmlnLT57TW9kdWxlfSApIH07CiAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2Fubm90IGxvYWQgJENvbmZpZy0+e01vZHVsZX06ICRAIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkTW9kdWxlID0gZXZhbCB7ICRDb25maWctPntNb2R1bGV9LT5uZXcoICV7JFNlbGZ9ICkgfTsKICAgICAgICAgICAgaWYgKCAhJE1vZHVsZSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIm5ldygpIG9mIFdpZGdldCBtb2R1bGUgJENvbmZpZy0+e01vZHVsZX0gbm90IHN1Y2Nlc3NmdWwhIiwKCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbXkgJFdpZGdldE91dHB1dCA9ICRNb2R1bGUtPlJ1bigKICAgICAgICAgICAgICAgIFRpY2tldCAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgICAgIEFjbEFjdGlvbiA9PiBcJUFjbEFjdGlvbiwKICAgICAgICAgICAgICAgIENvbmZpZyAgICA9PiAkQ29uZmlnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRXaWRnZXRPdXRwdXQtPntPdXRwdXR9IC8vICcgJywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYXJzZXQgICAgID0+ICd1dGYtOCcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2Fubm90IGxvY2F0ZSBtb2R1bGUgZm9yIEVsZW1lbnRJRCAkRWxlbWVudElEIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICcnLAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG1hcmsgc2hvd24gYXJ0aWNsZSBhcyBzZWVuCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnTWFya0FzU2VlbicgKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAxOwoKICAgICAgICBteSAkSXNBcnRpY2xlRGVsZXRlZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGVGZWF0dXJlcycpLT5Jc0FydGljbGVEZWxldGVkKAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgIGlmICgkSXNBcnRpY2xlRGVsZXRlZCkgewogICAgICAgICAgICAkU3VjY2VzcyA9IDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAjIGFsd2F5cyBzaG93IGFyY2hpdmVkIHRpY2tldHMgYXMgc2VlbgogICAgICAgICAgICBpZiAoICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICd5JyApIHsKICAgICAgICAgICAgICAgICRTdWNjZXNzID0gJFNlbGYtPl9BcnRpY2xlSXRlbVNlZW4oCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFN1Y2Nlc3MsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBhcnRpY2xlIHVwZGF0ZQogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FydGljbGVVcGRhdGUnICkgewogICAgICAgIG15ICRDb3VudCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb3VudCcgKTsKCiAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgKTsKCiAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICBSZWFsTmFtZXMgICAgID0+IDEsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICApOwogICAgICAgICRBcnRpY2xle0NvdW50fSA9ICRDb3VudDsKCiAgICAgICAgIyBHZXQgYXR0YWNobWVudCBpbmRleCAoZXhjbHVkaW5nIGJvZHkgYXR0YWNobWVudHMpLgogICAgICAgIG15ICVBdG1JbmRleCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgJXsgJFNlbGYtPntFeGNsdWRlQXR0YWNobWVudHN9IH0sCiAgICAgICAgKTsKICAgICAgICAkQXJ0aWNsZXtBdG1zfSA9IFwlQXRtSW5kZXg7CgogICAgICAgICMgZmV0Y2ggYWxsIHN0ZC4gdGVtcGxhdGVzCiAgICAgICAgbXkgJVN0YW5kYXJkVGVtcGxhdGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlU3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICAgICAgVGVtcGxhdGVUeXBlcyA9PiAxLAogICAgICAgICAgICBWYWxpZCAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJEFydGljbGVXaWRnZXRzSFRNTCA9ICRTZWxmLT5fQXJ0aWNsZUl0ZW0oCiAgICAgICAgICAgIFRpY2tldCAgICAgICAgICAgID0+IFwlVGlja2V0LAogICAgICAgICAgICBBcnRpY2xlICAgICAgICAgICA9PiBcJUFydGljbGUsCiAgICAgICAgICAgIEFjbEFjdGlvbiAgICAgICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICBTdGFuZGFyZFJlc3BvbnNlcyA9PiAkU3RhbmRhcmRUZW1wbGF0ZXN7QW5zd2VyfSwKICAgICAgICAgICAgU3RhbmRhcmRGb3J3YXJkcyAgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0ZvcndhcmR9LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnT25Mb2FkJywKICAgICAgICApOwoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiBbICRTZWxmLT57QXJ0aWNsZUlEfSBdLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnTWVudUl0ZW1zJywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntNZW51SXRlbXN9LAogICAgICAgICk7CgogICAgICAgIG15ICRDb250ZW50ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlVGlja2V0LAogICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgICAgICAlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgQXJ0aWNsZVdpZGdldHNIVE1MID0+ICRBcnRpY2xlV2lkZ2V0c0hUTUwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQUpBWCA9PiAxLAogICAgICAgICk7CiAgICAgICAgaWYgKCAhJENvbnRlbnQgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQ2FuXCd0IGdldCBmb3IgQXJ0aWNsZUlEICVzIScsICRTZWxmLT57QXJ0aWNsZUlEfSApLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENoYXJzZXQgICAgID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRDb250ZW50LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVXNlck9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CiAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICMgd3JpdGUgYXJ0aWNsZSBmaWx0ZXIgc2V0dGluZ3MgdG8gc2Vzc2lvbgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FydGljbGVGaWx0ZXJTZXQnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkVGlja2V0SUQgICAgICAgICAgICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0SUQnICk7CiAgICAgICAgbXkgJFNhdmVEZWZhdWx0cyAgICAgICAgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVEZWZhdWx0cycgKTsKICAgICAgICBteSBAQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXJJRHMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXInICk7CiAgICAgICAgbXkgJEN1c3RvbWVyVmlzaWJpbGl0eSAgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0N1c3RvbWVyVmlzaWJpbGl0eUZpbHRlcicgKTsKICAgICAgICBteSBAQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXJJRHMgICAgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXInICk7CgogICAgICAgICMgYnVpbGQgc2Vzc2lvbiBzdHJpbmcKICAgICAgICBteSAkU2Vzc2lvblN0cmluZyA9ICcnOwogICAgICAgIGlmIChAQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXJJRHMpIHsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJ0NvbW11bmljYXRpb25DaGFubmVsRmlsdGVyPCc7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nIC49IGpvaW4gJywnLCBAQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXJJRHM7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nIC49ICc+JzsKICAgICAgICB9CiAgICAgICAgaWYgKCBkZWZpbmVkICRDdXN0b21lclZpc2liaWxpdHkgJiYgJEN1c3RvbWVyVmlzaWJpbGl0eSAhPSAyICkgewogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSAiQ3VzdG9tZXJWaXNpYmlsaXR5RmlsdGVyPCRDdXN0b21lclZpc2liaWxpdHk+IjsKICAgICAgICB9CiAgICAgICAgaWYgKEBBcnRpY2xlU2VuZGVyVHlwZUZpbHRlcklEcykgewogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSAnQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXI8JzsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gam9pbiAnLCcsIEBBcnRpY2xlU2VuZGVyVHlwZUZpbHRlcklEczsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJz4nOwogICAgICAgIH0KCiAgICAgICAgIyB3cml0ZSB0aGUgc2Vzc2lvbgoKICAgICAgICAjIHNhdmUgZGVmYXVsdCBmaWx0ZXIgc2V0dGluZ3MgdG8gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICgkU2F2ZURlZmF1bHRzKSB7CiAgICAgICAgICAgICRVc2VyT2JqZWN0LT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ0FydGljbGVGaWx0ZXJEZWZhdWx0JywKICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgICAgPT4gJ0FydGljbGVGaWx0ZXJEZWZhdWx0JywKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgdHVybiBvZmYgZmlsdGVyIGV4cGxpY2l0bHkgZm9yIHRoaXMgdGlja2V0CiAgICAgICAgaWYgKCAkU2Vzc2lvblN0cmluZyBlcSAnJyApIHsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgPSAnb2ZmJzsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHRoZSBzZXNzaW9uCiAgICAgICAgbXkgJFVwZGF0ZSA9ICRTZXNzaW9uT2JqZWN0LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgICAgIEtleSAgICAgICA9PiAiQXJ0aWNsZUZpbHRlciRUaWNrZXRJRCIsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIEpTT04gb3V0cHV0CiAgICAgICAgbXkgJEpTT04gPSAnJzsKICAgICAgICBpZiAoJFVwZGF0ZSkgewogICAgICAgICAgICAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQXJ0aWNsZSBmaWx0ZXIgc2V0dGluZ3Mgd2VyZSBzYXZlZC4nKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgSlNPTiByZXNwb25zZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgd3JpdGUgYXJ0aWNsZSBmaWx0ZXIgc2V0dGluZ3MgdG8gc2Vzc2lvbgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0V2ZW5UeXBlRmlsdGVyU2V0JyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJFRpY2tldElEICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaWNrZXRJRCcgKTsKICAgICAgICBteSAkU2F2ZURlZmF1bHRzICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVEZWZhdWx0cycgKTsKICAgICAgICBteSBARXZlbnRUeXBlRmlsdGVySURzID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJ0V2ZW50VHlwZUZpbHRlcicgKTsKCiAgICAgICAgIyBidWlsZCBzZXNzaW9uIHN0cmluZwogICAgICAgIG15ICRTZXNzaW9uU3RyaW5nID0gJyc7CiAgICAgICAgaWYgKEBFdmVudFR5cGVGaWx0ZXJJRHMpIHsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJ0V2ZW50VHlwZUZpbHRlcjwnOwogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSBqb2luICcsJywgQEV2ZW50VHlwZUZpbHRlcklEczsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJz4nOwogICAgICAgIH0KCiAgICAgICAgIyB3cml0ZSB0aGUgc2Vzc2lvbgoKICAgICAgICAjIHNhdmUgZGVmYXVsdCBmaWx0ZXIgc2V0dGluZ3MgdG8gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICgkU2F2ZURlZmF1bHRzKSB7CiAgICAgICAgICAgICRVc2VyT2JqZWN0LT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ0V2ZW50VHlwZUZpbHRlckRlZmF1bHQnLAogICAgICAgICAgICAgICAgVmFsdWUgID0+ICRTZXNzaW9uU3RyaW5nLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnRXZlbnRUeXBlRmlsdGVyRGVmYXVsdCcsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFNlc3Npb25TdHJpbmcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHR1cm4gb2ZmIGZpbHRlciBleHBsaWNpdGx5IGZvciB0aGlzIHRpY2tldAogICAgICAgIGlmICggJFNlc3Npb25TdHJpbmcgZXEgJycgKSB7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nID0gJ29mZic7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSB0aGUgc2Vzc2lvbgogICAgICAgIG15ICRVcGRhdGUgPSAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gIkV2ZW50VHlwZUZpbHRlciRUaWNrZXRJRCIsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIEpTT04gb3V0cHV0CiAgICAgICAgbXkgJEpTT04gPSAnJzsKICAgICAgICBpZiAoJFVwZGF0ZSkgewogICAgICAgICAgICAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnRXZlbnQgdHlwZSBmaWx0ZXIgc2V0dGluZ3Mgd2VyZSBzYXZlZC4nKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgSlNPTiByZXNwb25zZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgYXJ0aWNsZSBmaWx0ZXIgaXMgYWN0aXZhdGVkIGluIHN5c2NvbmZpZwogICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJBY3RpdmV9ICkgewoKICAgICAgICAjIGdldCBhcnRpY2xlIGZpbHRlciBzZXR0aW5ncyBmcm9tIHNlc3Npb24gc3RyaW5nCiAgICAgICAgbXkgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nID0gJFNlbGYtPntTZXNzaW9ufXsgJ0FydGljbGVGaWx0ZXInIC4gJFNlbGYtPntUaWNrZXRJRH0gfTsKCiAgICAgICAgIyBzZXQgYXJ0aWNsZSBmaWx0ZXIgZm9yIHRoaXMgdGlja2V0IGZyb20gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICggISRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyApIHsKICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nID0gJFNlbGYtPntTZXNzaW9ufXtBcnRpY2xlRmlsdGVyRGVmYXVsdH07CiAgICAgICAgfQoKICAgICAgICAjIGRvIG5vdCB1c2UgZGVmYXVsdHMgZm9yIHRoaXMgdGlja2V0IGlmIGZpbHRlciB3YXMgZXhwbGljaXRseSB0dXJuZWQgb2ZmCiAgICAgICAgZWxzaWYgKCAkQXJ0aWNsZUZpbHRlclNlc3Npb25TdHJpbmcgZXEgJ29mZicgKSB7CiAgICAgICAgICAgICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyA9ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBleHRyYWN0IENvbW11bmljYXRpb25DaGFubmVscwogICAgICAgIGlmICgKICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nCiAgICAgICAgICAgICYmICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyA9fiBteyBDb21tdW5pY2F0aW9uQ2hhbm5lbEZpbHRlciA8ICggW148Pl0rICkgPiB9eG1zCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15IEBJRHMgPSBzcGxpdCAvLC8sICQxOwogICAgICAgICAgICAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gPSBcQElEczsKICAgICAgICB9CgogICAgICAgICMgZXh0cmFjdCBDdXN0b21lclZpc2liaWxpdHkKICAgICAgICBpZiAoCiAgICAgICAgICAgICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZwogICAgICAgICAgICAmJiAkQXJ0aWNsZUZpbHRlclNlc3Npb25TdHJpbmcgPX4gbXsgQ3VzdG9tZXJWaXNpYmlsaXR5RmlsdGVyIDwgKCBbXjw+XSsgKSA+IH14bXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0N1c3RvbWVyVmlzaWJpbGl0eX0gPSAkMTsKICAgICAgICB9CgogICAgICAgICMgZXh0cmFjdCBBcnRpY2xlU2VuZGVyVHlwZUlEcwogICAgICAgIGlmICgKICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nCiAgICAgICAgICAgICYmICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyA9fiBteyBBcnRpY2xlU2VuZGVyVHlwZUZpbHRlciA8ICggW148Pl0rICkgPiB9eG1zCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15IEBJRHMgPSBzcGxpdCAvLC8sICQxOwogICAgICAgICAgICAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57QXJ0aWNsZVNlbmRlclR5cGVJRH0gPSBcQElEczsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGV2ZW50IHR5cGUgZmlsdGVyIHNldHRpbmdzIGZyb20gc2Vzc2lvbiBzdHJpbmcKICAgICAgICBteSAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZyA9ICRTZWxmLT57ICdFdmVudFR5cGVGaWx0ZXInIC4gJFNlbGYtPntUaWNrZXRJRH0gfTsKCiAgICAgICAgIyBzZXQgYXJ0aWNsZSBmaWx0ZXIgZm9yIHRoaXMgdGlja2V0IGZyb20gdXNlciBwcmVmZXJlbmNlcwogICAgICAgIGlmICggISRFdmVudFR5cGVGaWx0ZXJTZXNzaW9uU3RyaW5nICkgewogICAgICAgICAgICAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZyA9ICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyRGVmYXVsdH07CiAgICAgICAgfQoKICAgICAgICAjIGRvIG5vdCB1c2UgZGVmYXVsdHMgZm9yIHRoaXMgdGlja2V0IGlmIGZpbHRlciB3YXMgZXhwbGljaXRseSB0dXJuZWQgb2ZmCiAgICAgICAgZWxzaWYgKCAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZyBlcSAnb2ZmJyApIHsKICAgICAgICAgICAgJEV2ZW50VHlwZUZpbHRlclNlc3Npb25TdHJpbmcgPSAnJzsKICAgICAgICB9CgogICAgICAgICMgU2V0IGFydGljbGUgZmlsdGVyIHdpdGggdmFsdWUgaWYgaXQgZXhpc3RzLgogICAgICAgIGlmICgKICAgICAgICAgICAgJEV2ZW50VHlwZUZpbHRlclNlc3Npb25TdHJpbmcKICAgICAgICAgICAgJiYgJEV2ZW50VHlwZUZpbHRlclNlc3Npb25TdHJpbmcgPX4gbXsgRXZlbnRUeXBlRmlsdGVyIDwgKCBbXjw+XSsgKSA+IH14bXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgQElEcyA9IHNwbGl0IC8sLywgJDE7CiAgICAgICAgICAgICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfSA9IFxASURzOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgcmV0dXJuIGpvaW4gJycsCiAgICAgICAgJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICBWYWx1ZSAgICA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICksCiAgICAgICAgJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhciwKICAgICAgICAkU2VsZi0+TWFza0FnZW50Wm9vbSgKICAgICAgICAgICAgVGlja2V0ICAgID0+IFwlVGlja2V0LAogICAgICAgICAgICBBY2xBY3Rpb24gPT4gXCVBY2xBY3Rpb24KICAgICAgICApLAogICAgICAgICRMYXlvdXRPYmplY3QtPkZvb3RlcjsKfQoKc3ViIE1hc2tBZ2VudFpvb20gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlVGlja2V0ICAgID0gJXsgJFBhcmFte1RpY2tldH0gfTsKICAgIG15ICVBY2xBY3Rpb24gPSAleyAkUGFyYW17QWNsQWN0aW9ufSB9OwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICMgQ3JlYXRlIGEgbGlzdCBvZiBhcnRpY2xlIHNlbmRlciB0eXBlcyBmb3IgbG9va3VwCiAgICBteSAlQXJ0aWNsZVNlbmRlclR5cGVMaXN0ID0gJEFydGljbGVPYmplY3QtPkFydGljbGVTZW5kZXJUeXBlTGlzdCgpOwoKICAgICMgZWxzZSBzaG93IG5vcm1hbCB0aWNrZXQgem9vbSB2aWV3CiAgICAjIGZldGNoIGFsbCBtb3ZlIHF1ZXVlcwogICAgbXkgJU1vdmVRdWV1ZXMgPSAkVGlja2V0T2JqZWN0LT5Nb3ZlTGlzdCgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQWN0aW9uICAgPT4gJ0FnZW50VGlja2V0TW92ZScsCiAgICAgICAgVHlwZSAgICAgPT4gJ21vdmVfaW50bycsCiAgICApOwoKICAgICMgZmV0Y2ggYWxsIHN0ZC4gdGVtcGxhdGVzCiAgICBteSAlU3RhbmRhcmRUZW1wbGF0ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCgKICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRUaWNrZXR7UXVldWVJRH0sCiAgICAgICAgVGVtcGxhdGVUeXBlcyA9PiAxLAogICAgKTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdlbmVyYXRlIHNob3duIGFydGljbGVzCiAgICBteSAkTGltaXQgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok1heEFydGljbGVzUGVyUGFnZScpOwoKICAgIG15ICRPcmRlciA9ICRTZWxmLT57Wm9vbUV4cGFuZFNvcnR9IGVxICdyZXZlcnNlJyA/ICdERVNDJyA6ICdBU0MnOwogICAgbXkgJFBhZ2U7CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgYXJ0aWNsZSBwYWdlCiAgICBteSAkQXJ0aWNsZVBhZ2UgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQXJ0aWNsZVBhZ2UnICk7CgogICAgbXkgJElzVmlzaWJsZUZvckN1c3RvbWVyOwogICAgaWYgKCBkZWZpbmVkICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDdXN0b21lclZpc2liaWxpdHl9ICkgewogICAgICAgICRJc1Zpc2libGVGb3JDdXN0b21lciA9ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDdXN0b21lclZpc2liaWxpdHl9OwogICAgfQoKICAgICMgR2V0IGFsbCBhcnRpY2xlcy4KICAgIG15IEBBcnRpY2xlQm94QWxsID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+ICRJc1Zpc2libGVGb3JDdXN0b21lciwKICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzICA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICApOwoKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gKSApIHsKICAgICAgICBteSAlRmlsdGVyID0gbWFwIHsgJF8gPT4gMSB9IEB7ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSB9OwoKICAgICAgICBAQXJ0aWNsZUJveEFsbCA9IGdyZXAgeyAkRmlsdGVyeyAkXy0+e0NvbW11bmljYXRpb25DaGFubmVsSUR9IH0gfSBAQXJ0aWNsZUJveEFsbDsKICAgIH0KCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0FydGljbGVTZW5kZXJUeXBlSUR9ICkgKSB7CiAgICAgICAgbXkgJUZpbHRlciA9IG1hcCB7ICRfID0+IDEgfSBAeyAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57QXJ0aWNsZVNlbmRlclR5cGVJRH0gfTsKCiAgICAgICAgQEFydGljbGVCb3hBbGwgPSBncmVwIHsgJEZpbHRlcnsgJF8tPntTZW5kZXJUeXBlSUR9IH0gfSBAQXJ0aWNsZUJveEFsbDsKICAgIH0KCiAgICBpZiAoICRPcmRlciBlcSAnREVTQycgKSB7CiAgICAgICAgQEFydGljbGVCb3hBbGwgPSByZXZlcnNlIEBBcnRpY2xlQm94QWxsOwogICAgfQoKICAgIG15ICVBcnRpY2xlRmxhZ3MgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdzT2ZUaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIG15ICRBcnRpY2xlSUQ7CgogICAgaWYgKCAkU2VsZi0+e0FydGljbGVJRH0gKSB7CgogICAgICAgIG15IEBBcnRpY2xlSURzID0gbWFwIHsgJF8tPntBcnRpY2xlSUR9IH0gQEFydGljbGVCb3hBbGw7CgogICAgICAgIG15ICVBcnRpY2xlSW5kZXg7CiAgICAgICAgQEFydGljbGVJbmRleHtAQXJ0aWNsZUlEc30gPSAoIDAgLi4gJCNBcnRpY2xlSURzICk7CgogICAgICAgIG15ICRJbmRleCA9ICRBcnRpY2xlSW5kZXh7ICRTZWxmLT57QXJ0aWNsZUlEfSB9OwogICAgICAgICRJbmRleCAvLz0gMDsKICAgICAgICAkUGFnZSA9IGludCggJEluZGV4IC8gJExpbWl0ICkgKyAxOwogICAgfQogICAgZWxzaWYgKCRBcnRpY2xlUGFnZSkgewogICAgICAgICRQYWdlID0gJEFydGljbGVQYWdlOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgRmluZCBsYXRlc3Qgbm90IHNlZW4gYXJ0aWNsZS4KICAgICAgICBBUlRJQ0xFOgogICAgICAgIGZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVCb3hBbGwpIHsKCiAgICAgICAgICAgICMgSWdub3JlIHN5c3RlbSBzZW5kZXIgdHlwZS4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Ok5ld0FydGljbGVJZ25vcmVTeXN0ZW1TZW5kZXInKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGUtPntTZW5kZXJUeXBlSUR9IH0gZXEgJ3N5c3RlbScKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmV4dCBBUlRJQ0xFOwogICAgICAgICAgICB9CgogICAgICAgICAgICBuZXh0IEFSVElDTEUgaWYgJEFydGljbGVGbGFnc3sgJEFydGljbGUtPntBcnRpY2xlSUR9IH0tPntTZWVufTsKICAgICAgICAgICAgJEFydGljbGVJRCA9ICRBcnRpY2xlLT57QXJ0aWNsZUlEfTsKCiAgICAgICAgICAgIG15IEBBcnRpY2xlSURzID0gbWFwIHsgJF8tPntBcnRpY2xlSUR9IH0gQEFydGljbGVCb3hBbGw7CgogICAgICAgICAgICBteSAlQXJ0aWNsZUluZGV4OwogICAgICAgICAgICBAQXJ0aWNsZUluZGV4e0BBcnRpY2xlSURzfSA9ICggMCAuLiAkI0FydGljbGVJRHMgKTsKCiAgICAgICAgICAgIG15ICRJbmRleCA9ICRBcnRpY2xlSW5kZXh7JEFydGljbGVJRH07CiAgICAgICAgICAgICRQYWdlID0gaW50KCAkSW5kZXggLyAkTGltaXQgKSArIDE7CgogICAgICAgICAgICBsYXN0IEFSVElDTEU7CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkQXJ0aWNsZUlEICkgewogICAgICAgICAgICAkUGFnZSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgV2UgbmVlZCB0byBmaW5kIG91dCB3aGV0aGVyIHBhZ2luYXRpb24gaXMgYWN0dWFsbHkgbmVjZXNzYXJ5LgogICAgIyBUaGUgZWFzaWVzdCB3YXkgd291bGQgYmUgY291bnQgdGhlIGFydGljbGVzLCBidXQgdGhhdCB3b3VsZCBzbG93CiAgICAjIGRvd24gdGhlIG1vc3QgY29tbW9uIGNhc2UgKGZld2VyIGFydGljbGVzIHRoYW4gJExpbWl0IGluIHRoZSB0aWNrZXQpLgogICAgIyBTbyBpbnN0ZWFkIHdlIHVzZSB0aGUgZm9sbG93aW5nIHRyaWNrOgogICAgIyAxKSBpZiB0aGUgJFBhZ2UgPiAxLCB3ZSBuZWVkIHBhZ2luYXRpb24KICAgICMgMikgaWYgbm90LCByZXF1ZXN0ICRMaW1pdCArIDEgYXJ0aWNsZXMuIElmICRMaW1pdCArIDEgYXJlIGFjdHVhbGx5CiAgICAjICAgIHJldHVybmVkLCBwYWdpbmF0aW9uIGlzIG5lY2Vzc2FyeQogICAgbXkgJE5lZWRQYWdpbmF0aW9uOwoKICAgIG15IEBBcnRpY2xlQm94ID0gJFNlbGYtPl9BcnRpY2xlQm94R2V0KAogICAgICAgIFBhZ2UgICAgICAgICAgPT4gJFBhZ2UsCiAgICAgICAgQXJ0aWNsZUJveEFsbCA9PiBcQEFydGljbGVCb3hBbGwsCiAgICAgICAgTGltaXQgICAgICAgICA9PiAkTGltaXQsCiAgICApOwoKICAgIGlmICggIUBBcnRpY2xlQm94ICYmICRQYWdlID4gMSApIHsKCiAgICAgICAgIyBJZiB0aGUgcGFnZSBhcmd1bWVudCBpcyBwYXN0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIHBhZ2VzLgogICAgICAgICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBuZXcgYXJ0aWNsZSBmaWx0ZXIgd2FzIGFkZGVkLgogICAgICAgICMgVHJ5IHRvIGdldCByZXN1bHRzIGZvciB0aGUgMXN0IHBhZ2UuCgogICAgICAgIEBBcnRpY2xlQm94ID0gJFNlbGYtPl9BcnRpY2xlQm94R2V0KAogICAgICAgICAgICBQYWdlICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEFydGljbGVCb3hBbGwgPT4gXEBBcnRpY2xlQm94QWxsLAogICAgICAgICAgICBMaW1pdCAgICAgICAgID0+ICRMaW1pdCwKICAgICAgICApOwogICAgfQoKICAgIGlmICggQEFydGljbGVCb3ggPiAkTGltaXQgKSB7CiAgICAgICAgcG9wIEBBcnRpY2xlQm94OwogICAgICAgICROZWVkUGFnaW5hdGlvbiA9IDE7CiAgICB9CiAgICBlbHNpZiAoICRQYWdlID09IDEgJiYgc2NhbGFyIEBBcnRpY2xlQm94QWxsIDw9ICRMaW1pdCApIHsKICAgICAgICAkTmVlZFBhZ2luYXRpb24gPSAwOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE5lZWRQYWdpbmF0aW9uID0gMTsKICAgIH0KCiAgICAkUGFnZSB8fD0gMTsKCiAgICBteSAkUGFnZXM7CiAgICBpZiAoJE5lZWRQYWdpbmF0aW9uKSB7CiAgICAgICAgJFBhZ2VzID0gY2VpbCggc2NhbGFyIEBBcnRpY2xlQm94QWxsIC8gJExpbWl0ICk7CiAgICB9CgogICAgbXkgJEFydGljbGVJREZvdW5kID0gMDsKICAgIEFSVElDTEU6CiAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlQm94KSB7CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICEkU2VsZi0+e0FydGljbGVJRH07CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICEkQXJ0aWNsZS0+e0FydGljbGVJRH07CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICRTZWxmLT57QXJ0aWNsZUlEfSBuZSAkQXJ0aWNsZS0+e0FydGljbGVJRH07CgogICAgICAgICRBcnRpY2xlSURGb3VuZCA9IDE7CiAgICB9CgogICAgIyBnZXQgc2VsZWN0ZWQgb3IgbGFzdCBjdXN0b21lciBhcnRpY2xlCiAgICBpZiAoJEFydGljbGVJREZvdW5kKSB7CiAgICAgICAgJEFydGljbGVJRCA9ICRTZWxmLT57QXJ0aWNsZUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICggISRBcnRpY2xlSUQgKSB7CiAgICAgICAgICAgIGlmIChAQXJ0aWNsZUJveCkgewoKICAgICAgICAgICAgICAgICMgc2V0IGZpcnN0IGxpc3RlZCBhcnRpY2xlIGFzIGZhbGxiYWNrCiAgICAgICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEFydGljbGVCb3hbMF0tPntBcnRpY2xlSUR9OwoKICAgICAgICAgICAgICAgICMgc2V0IGxhc3QgY3VzdG9tZXIgYXJ0aWNsZSBhcyBzZWxlY3RlZCBhcnRpY2xlIHJlcGxhY2luZyBsYXN0IHNldAogICAgICAgICAgICAgICAgQVJUSUNMRVRNUDoKICAgICAgICAgICAgICAgIGZvciBteSAkQXJ0aWNsZVRtcCAoQEFydGljbGVCb3gpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlVG1wLT57U2VuZGVyVHlwZUlEfSB9IGVxICdjdXN0b21lcicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRBcnRpY2xlSUQgPSAkQXJ0aWNsZVRtcC0+e0FydGljbGVJRH07CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgQVJUSUNMRVRNUCBpZiAkU2VsZi0+e1pvb21FeHBhbmRTb3J0fSBlcSAncmV2ZXJzZSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgZXhwYW5kIHZpZXcgaXMgdXNhYmxlIChvbmx5IGZvciBsZXNzIHRoZW4gNDAwIGFydGljbGUpCiAgICAjIGlmIHlvdSBoYXZlIG1vcmUgYXJ0aWNsZXMgaXMgZ29pbmcgdG8gYmUgc2xvdyBhbmQgbm90IHVzYWJsZQogICAgbXkgJEFydGljbGVNYXhMaW1pdCA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TWF4QXJ0aWNsZXNab29tRXhwYW5kJykKICAgICAgICAvLyA0MDA7CiAgICBpZiAoICRTZWxmLT57Wm9vbUV4cGFuZH0gJiYgJCNBcnRpY2xlQm94ID4gJEFydGljbGVNYXhMaW1pdCApIHsKICAgICAgICAkU2VsZi0+e1pvb21FeHBhbmR9ID0gMDsKICAgIH0KCiAgICAjIGdldCBzaG93biBhcnRpY2xlKHMpCiAgICBteSBAQXJ0aWNsZUJveFNob3duOwogICAgaWYgKCAhJFNlbGYtPntab29tRXhwYW5kfSApIHsKICAgICAgICBBUlRJQ0xFQk9YOgogICAgICAgIGZvciBteSAkQXJ0aWNsZVRtcCAoQEFydGljbGVCb3gpIHsKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZUlEIGVxICRBcnRpY2xlVG1wLT57QXJ0aWNsZUlEfSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQEFydGljbGVCb3hTaG93biwgJEFydGljbGVUbXA7CiAgICAgICAgICAgICAgICBsYXN0IEFSVElDTEVCT1g7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBAQXJ0aWNsZUJveFNob3duID0gQEFydGljbGVCb3g7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGFnZSBkZXNpZ24KICAgICRUaWNrZXR7QWdlfSA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyQWdlKAogICAgICAgIEFnZSAgID0+ICRUaWNrZXR7QWdlfSwKICAgICAgICBTcGFjZSA9PiAnICcKICAgICk7CgogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICVXaWRnZXRzOwogICAgbXkgJUFzeW5jV2lkZ2V0QWN0aW9uczsKICAgIFdJREdFVDoKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfS0+e1dpZGdldHN9IC8vIHt9IH0gKSB7CiAgICAgICAgbXkgJENvbmZpZyA9ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfS0+e1dpZGdldHN9LT57JEtleX07CgogICAgICAgIGlmICggJENvbmZpZy0+e0FzeW5jfSApIHsKICAgICAgICAgICAgaWYgKCAhJENvbmZpZy0+e0xvY2F0aW9ufSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4KICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBjb25maWd1cmF0aW9uIGZvciAkQ29uZmlnLT57TW9kdWxlfSBtdXN0IGNvbnRhaW4gYSBMb2NhdGlvbiwgYmVjYXVzZSBpdCBpcyBtYXJrZWQgYXMgQXN5bmMuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBuZXh0IFdJREdFVDsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkRWxlbWVudElEID0gJ0FzeW5jXycgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRLZXkpOwogICAgICAgICAgICBwdXNoIEB7ICRXaWRnZXRzeyAkQ29uZmlnLT57TG9jYXRpb259IH0gfSwgewogICAgICAgICAgICAgICAgQXN5bmMgPT4gMSwKICAgICAgICAgICAgICAgIFJhbmsgID0+ICRDb25maWctPntSYW5rfSB8fCAkS2V5LAogICAgICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgICAgIEVsZW1lbnRJRCA9PiAkRWxlbWVudElELAogICAgICAgICAgICB9OwogICAgICAgICAgICAkQXN5bmNXaWRnZXRBY3Rpb25zeyRFbGVtZW50SUR9ID0gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPUxvYWRXaWRnZXQ7IgogICAgICAgICAgICAgICAgLiAiVGlja2V0SUQ9JFNlbGYtPntUaWNrZXRJRH07RWxlbWVudElEPSRFbGVtZW50SUQiOwogICAgICAgICAgICBuZXh0IFdJREdFVDsKICAgICAgICB9CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSBldmFsIHsgJE1haW5PYmplY3QtPlJlcXVpcmUoICRDb25maWctPntNb2R1bGV9ICkgfTsKCiAgICAgICAgbmV4dCBXSURHRVQgdW5sZXNzICRTdWNjZXNzOwoKICAgICAgICBteSAkTW9kdWxlID0gZXZhbCB7ICRDb25maWctPntNb2R1bGV9LT5uZXcoJSRTZWxmKSB9OwogICAgICAgIGlmICggISRNb2R1bGUgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJuZXcoKSBvZiBXaWRnZXQgbW9kdWxlICRDb25maWctPntNb2R1bGV9IG5vdCBzdWNjZXNzZnVsISIsCgogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBXSURHRVQ7CiAgICAgICAgfQoKICAgICAgICBteSAkV2lkZ2V0T3V0cHV0ID0gJE1vZHVsZS0+UnVuKAogICAgICAgICAgICBUaWNrZXQgICAgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgIEFjbEFjdGlvbiA9PiBcJUFjbEFjdGlvbiwKICAgICAgICAgICAgQ29uZmlnICAgID0+ICRDb25maWcsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBXSURHRVQgdW5sZXNzICRXaWRnZXRPdXRwdXQ7CgogICAgICAgICRXaWRnZXRPdXRwdXQtPntSYW5rfSAvLz0gJEtleTsKICAgICAgICBteSAkTG9jYXRpb24gPSAkV2lkZ2V0T3V0cHV0LT57TG9jYXRpb259IHx8ICRDb25maWctPntMb2NhdGlvbn07CiAgICAgICAgcHVzaCBAeyAkV2lkZ2V0c3skTG9jYXRpb259IH0sICRXaWRnZXRPdXRwdXQ7CiAgICB9CiAgICBmb3IgbXkgJExvY2F0aW9uICggc29ydCBrZXlzICVXaWRnZXRzICkgewogICAgICAgICRQYXJhbXsgJExvY2F0aW9uIC4gJ1dpZGdldHMnIH0gPSBbCiAgICAgICAgICAgIHNvcnQgeyAkYS0+e1Jhbmt9IGNtcCAkYi0+e1Jhbmt9IH0gQHsgJFdpZGdldHN7JExvY2F0aW9ufSB9CiAgICAgICAgXTsKICAgIH0KICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnQXN5bmNXaWRnZXRBY3Rpb25zJywKICAgICAgICBWYWx1ZSA9PiBcJUFzeW5jV2lkZ2V0QWN0aW9ucywKICAgICk7CgogICAgIyBzZXQgZGlzcGxheSBvcHRpb25zCiAgICAkUGFyYW17SG9va30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6SG9vaycpIHx8ICdUaWNrZXQjJzsKCiAgICAjIG9ubHkgc2hvdyBhcnRpY2xlIHRyZWUgaWYgYXJ0aWNsZXMgYXJlIHByZXNlbnQsCiAgICAjIG9yIGlmIGEgZmlsdGVyIGlzIHNldCAoc28gdGhhdCB0aGUgdXNlciBoYXMgdGhlIG9wdGlvbiB0bwogICAgIyBkaXNhYmxlIHRoZSBmaWx0ZXIpCiAgICBpZiAoIEBBcnRpY2xlQm94IHx8ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0gKSB7CgogICAgICAgIG15ICRQYWdpbmF0aW9uOwoKICAgICAgICBpZiAoJE5lZWRQYWdpbmF0aW9uKSB7CiAgICAgICAgICAgICRQYWdpbmF0aW9uID0gewogICAgICAgICAgICAgICAgUGFnZXMgICAgICAgPT4gJFBhZ2VzLAogICAgICAgICAgICAgICAgQ3VycmVudFBhZ2UgPT4gJFBhZ2UsCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBhcnRpY2xlIHRyZWUKICAgICAgICAkUGFyYW17QXJ0aWNsZVRyZWV9ID0gJFNlbGYtPl9BcnRpY2xlVHJlZSgKICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgIEFydGljbGVGbGFncyAgICAgID0+IFwlQXJ0aWNsZUZsYWdzLAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICBBcnRpY2xlTWF4TGltaXQgICA9PiAkQXJ0aWNsZU1heExpbWl0LAogICAgICAgICAgICBBcnRpY2xlQm94ICAgICAgICA9PiBcQEFydGljbGVCb3gsCiAgICAgICAgICAgIFBhZ2luYXRpb24gICAgICAgID0+ICRQYWdpbmF0aW9uLAogICAgICAgICAgICBQYWdlICAgICAgICAgICAgICA9PiAkUGFnZSwKICAgICAgICAgICAgQXJ0aWNsZUNvdW50ICAgICAgPT4gc2NhbGFyIEBBcnRpY2xlQm94LAogICAgICAgICAgICBBY2xBY3Rpb24gICAgICAgICA9PiBcJUFjbEFjdGlvbiwKICAgICAgICAgICAgU3RhbmRhcmRSZXNwb25zZXMgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0Fuc3dlcn0sCiAgICAgICAgICAgIFN0YW5kYXJkRm9yd2FyZHMgID0+ICRTdGFuZGFyZFRlbXBsYXRlc3tGb3J3YXJkfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBhcnRpY2xlcyBpdGVtcwogICAgaWYgKCAhJFNlbGYtPntab29tVGltZWxpbmV9ICkgewoKICAgICAgICBteSBAQXJ0aWNsZUlEczsKICAgICAgICAkUGFyYW17QXJ0aWNsZUl0ZW1zfSA9ICcnOwoKICAgICAgICBteSAkQXJ0aWNsZVdpZGdldHNIVE1MID0gJyc7CgogICAgICAgIEFSVElDTEU6CiAgICAgICAgZm9yIG15ICRBcnRpY2xlVG1wIChAQXJ0aWNsZUJveFNob3duKSB7CiAgICAgICAgICAgIG15ICVBcnRpY2xlID0gJSRBcnRpY2xlVG1wOwoKICAgICAgICAgICAgJEFydGljbGVXaWRnZXRzSFRNTCAuPSAkU2VsZi0+X0FydGljbGVJdGVtKAogICAgICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgICAgICBBcnRpY2xlICAgICAgICAgICA9PiBcJUFydGljbGUsCiAgICAgICAgICAgICAgICBBY2xBY3Rpb24gICAgICAgICA9PiBcJUFjbEFjdGlvbiwKICAgICAgICAgICAgICAgIFN0YW5kYXJkUmVzcG9uc2VzID0+ICRTdGFuZGFyZFRlbXBsYXRlc3tBbnN3ZXJ9LAogICAgICAgICAgICAgICAgU3RhbmRhcmRGb3J3YXJkcyAgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0ZvcndhcmR9LAogICAgICAgICAgICAgICAgQWN0dWFsQXJ0aWNsZUlEICAgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgID0+ICdTdGF0aWMnLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBBcnRpY2xlSURzLCAkQXJ0aWNsZVRtcC0+e0FydGljbGVJRH07CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiBcQEFydGljbGVJRHMsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdNZW51SXRlbXMnLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e01lbnVJdGVtc30sCiAgICAgICAgKTsKCiAgICAgICAgJFBhcmFte0FydGljbGVJdGVtc30gLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlVGlja2V0LAogICAgICAgICAgICAgICAgJUFjbEFjdGlvbiwKICAgICAgICAgICAgICAgIEFydGljbGVXaWRnZXRzSFRNTCA9PiAkQXJ0aWNsZVdpZGdldHNIVE1MLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBhbHdheXMgc2hvdyBhcmNoaXZlZCB0aWNrZXRzIGFzIHNlZW4KICAgIGlmICggJFNlbGYtPntab29tRXhwYW5kfSAmJiAkVGlja2V0e0FyY2hpdmVGbGFnfSBuZSAneScgKSB7CgogICAgICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0SXRlbU1hcmtBc1NlZW4nLAogICAgICAgICAgICBWYWx1ZSA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBudW1iZXIgb2YgYXJ0aWNsZXMKICAgICRQYXJhbXtBcnRpY2xlQ291bnR9ID0gc2NhbGFyIEBBcnRpY2xlQm94OwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0hlYWRlcicsCiAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJVRpY2tldCwgJUFjbEFjdGlvbiB9LAogICAgKTsKCiAgICBteSAlQWN0aW9uTG9va3VwOwogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgICMgcnVuIHRpY2tldCBtZW51IG1vZHVsZXMKICAgIGlmICggcmVmICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TWVudU1vZHVsZScpIGVxICdIQVNIJyApIHsKICAgICAgICBteSAlTWVudXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSB9OwogICAgICAgIG15ICVNZW51Q2x1c3RlcnM7CiAgICAgICAgbXkgJVpvb21NZW51SXRlbXM7CgogICAgICAgIE1FTlU6CiAgICAgICAgZm9yIG15ICRNZW51ICggc29ydCBrZXlzICVNZW51cyApIHsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSggJE1lbnVzeyRNZW51fS0+e01vZHVsZX0gKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTWVudXN7JE1lbnV9LT57TW9kdWxlfS0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcnVuIG1vZHVsZQogICAgICAgICAgICBteSAkSXRlbSA9ICRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIFRpY2tldCA9PiBcJVRpY2tldCwKICAgICAgICAgICAgICAgIEFDTCAgICA9PiBcJUFjbEFjdGlvbiwKICAgICAgICAgICAgICAgIENvbmZpZyA9PiAkTWVudXN7JE1lbnV9LAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IE1FTlUgaWYgISRJdGVtOwogICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntQb3B1cFR5cGV9ICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAiQXNQb3B1cCBQb3B1cFR5cGVfJE1lbnVzeyRNZW51fS0+e1BvcHVwVHlwZX0iOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntBY3Rpb259ICkgewogICAgICAgICAgICAgICAgJEFjdGlvbkxvb2t1cHsgJE1lbnVzeyRNZW51fS0+e0FjdGlvbn0gfSA9IHsKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICA9PiAkSXRlbS0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgID0+ICRJdGVtLT57Q2xhc3N9LAogICAgICAgICAgICAgICAgICAgIExpbmtQYXJhbSAgICAgID0+ICRJdGVtLT57TGlua1BhcmFtfSwKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICA9PiAkSXRlbS0+e0Rlc2NyaXB0aW9ufSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAkSXRlbS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWROYW1lID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCAkSXRlbS0+e05hbWV9ICksCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICEkTWVudXN7JE1lbnV9LT57Q2x1c3Rlck5hbWV9ICkgewoKICAgICAgICAgICAgICAgICRab29tTWVudUl0ZW1zeyRNZW51fSA9ICRJdGVtOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgdGhlIGNvbmZpZ3VyZWQgcHJpb3JpdHkgZm9yIHRoaXMgaXRlbS4gVGhlIGxvd2VzdCBDbHVzdGVyUHJpb3JpdHkKICAgICAgICAgICAgICAgICMgd2l0aGluIHRoZSBzYW1lIGNsdXN0ZXIgd2lucy4KICAgICAgICAgICAgICAgIG15ICRQcmlvcml0eSA9ICRNZW51Q2x1c3RlcnN7ICRNZW51c3skTWVudX0tPntDbHVzdGVyTmFtZX0gfS0+e1ByaW9yaXR5fSB8fCAwOwogICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e0NsdXN0ZXJQcmlvcml0eX0gfHw9IDA7CiAgICAgICAgICAgICAgICBpZiAoICEkUHJpb3JpdHkgfHwgJFByaW9yaXR5ICF+IC9eXGR7M30kLyB8fCAkUHJpb3JpdHkgPiAkTWVudXN7JE1lbnV9LT57Q2x1c3RlclByaW9yaXR5fSApIHsKICAgICAgICAgICAgICAgICAgICAkUHJpb3JpdHkgPSAkTWVudXN7JE1lbnV9LT57Q2x1c3RlclByaW9yaXR5fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRNZW51Q2x1c3RlcnN7ICRNZW51c3skTWVudX0tPntDbHVzdGVyTmFtZX0gfS0+e1ByaW9yaXR5fSA9ICRQcmlvcml0eTsKICAgICAgICAgICAgICAgICRNZW51Q2x1c3RlcnN7ICRNZW51c3skTWVudX0tPntDbHVzdGVyTmFtZX0gfS0+e0l0ZW1zfS0+eyRNZW51fSA9ICRJdGVtOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJENsdXN0ZXIgKCBzb3J0IGtleXMgJU1lbnVDbHVzdGVycyApIHsKICAgICAgICAgICAgJFpvb21NZW51SXRlbXN7ICRNZW51Q2x1c3RlcnN7JENsdXN0ZXJ9LT57UHJpb3JpdHl9IC4gJENsdXN0ZXIgfSA9IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICRDbHVzdGVyLAogICAgICAgICAgICAgICAgVHlwZSAgPT4gJ0NsdXN0ZXInLAogICAgICAgICAgICAgICAgTGluayAgPT4gJyMnLAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0NsdXN0ZXJMaW5rJywKICAgICAgICAgICAgICAgIEl0ZW1zID0+ICRNZW51Q2x1c3RlcnN7JENsdXN0ZXJ9LT57SXRlbXN9LAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBkaXNwbGF5IGFsbCBpdGVtcwogICAgICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlWm9vbU1lbnVJdGVtcyApIHsKICAgICAgICAgICAgaWYgKCAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntFeHRlcm5hbExpbmt9ICYmICRab29tTWVudUl0ZW1zeyRJdGVtfS0+e0V4dGVybmFsTGlua30gPT0gMSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldE1lbnVFeHRlcm5hbExpbmsnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFpvb21NZW51SXRlbXN7JEl0ZW19LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldE1lbnUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFpvb21NZW51SXRlbXN7JEl0ZW19LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntUeXBlfSBlcSAnQ2x1c3RlcicgKSB7CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0TWVudVN1YkNvbnRhaW5lcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFpvb21NZW51SXRlbXN7JEl0ZW19LT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgYSBtYXAgb2YgcHJpb3JpdGllcyB2ZXJzdXMgc3ViaXRlbXMgYmFzZWQgb24gdGhlIENsdXN0ZXJQcmlvcml0eSBvZiBlYWNoIHN1Yml0ZW0KICAgICAgICAgICAgICAgICMgdGhlIHNldHRpbmdzIGtleSBvcmRlciBwcmV2YWlscyBiZXR3ZWVuIHN1Yml0ZW1zIHdpdGggZXF1YWwgQ2x1c3RlclByaW9yaXR5CiAgICAgICAgICAgICAgICAjIHByaW9yaXRpZXMgYXJlIGFsd2F5cyBhcHBlbmRlZCBhIHNlcXVlbnRpYWwgc3VmZml4IG9mIHR3byBkaWdpdHMgKDgwMC0wMSwgODAwLTAyLCA4MDAtMDMsIGV0Yy4pCiAgICAgICAgICAgICAgICAjIHRoaXMgZW5mb3JjZXMgZGlzdGluY3QgbWFwIGtleXMgZXZlbiBhbW9uZyBzdWJpdGVtcyB3aXRoIHRoZSBzYW1lIENsdXN0ZXJQcmlvcml0eQogICAgICAgICAgICAgICAgbXkgJVByaW9yaXR5U3VmZml4ZXM7CiAgICAgICAgICAgICAgICBteSAlTWFwUHJpb3JpdHlUb1N1Ykl0ZW07CiAgICAgICAgICAgICAgICBmb3IgbXkgJFN1Ykl0ZW0gKCBzb3J0IGtleXMgJXsgJFpvb21NZW51SXRlbXN7JEl0ZW19LT57SXRlbXN9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEl0ZW1Qcmlvcml0eSA9ICRab29tTWVudUl0ZW1zeyRJdGVtfS0+e0l0ZW1zfS0+eyRTdWJJdGVtfS0+e0NsdXN0ZXJQcmlvcml0eX07CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQcmlvcml0eVN1ZmZpeGVzeyRJdGVtUHJpb3JpdHl9ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQcmlvcml0eVN1ZmZpeGVzeyRJdGVtUHJpb3JpdHl9Kys7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGVuZm9yY2UgdGhlIHR3byBkaWdpdHMgc3VmZml4LCBzaW5jZSAxMCBvciBtb3JlIHN1Yml0ZW1zIGFyZSBwb3NzaWJsZQogICAgICAgICAgICAgICAgICAgIGlmICggJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX0gPX4gL15cZCQvICkgewogICAgICAgICAgICAgICAgICAgICAgICAkUHJpb3JpdHlTdWZmaXhlc3skSXRlbVByaW9yaXR5fSA9ICIwIiAuICRQcmlvcml0eVN1ZmZpeGVzeyRJdGVtUHJpb3JpdHl9OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5S2V5ID0gJEl0ZW1Qcmlvcml0eSAuICItIiAuICRQcmlvcml0eVN1ZmZpeGVzeyRJdGVtUHJpb3JpdHl9OwogICAgICAgICAgICAgICAgICAgICRNYXBQcmlvcml0eVRvU3ViSXRlbXskUHJpb3JpdHlLZXl9ID0gJFN1Ykl0ZW07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyByZW5kZXIgc3ViaXRlbXMgYWNjb3JkaW5nIHRvIHRoZSBwcmlvcml0aWVzIG1hcAogICAgICAgICAgICAgICAgZm9yIG15ICRQcmlvcml0eUtleSAoIHNvcnQga2V5cyAlTWFwUHJpb3JpdHlUb1N1Ykl0ZW0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJFN1Ykl0ZW0gPSAkTWFwUHJpb3JpdHlUb1N1Ykl0ZW17JFByaW9yaXR5S2V5fTsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0TWVudVN1YkNvbnRhaW5lckl0ZW0nLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRab29tTWVudUl0ZW1zeyRJdGVtfS0+e0l0ZW1zfS0+eyRTdWJJdGVtfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IE1vdmVRdWV1ZXNTdHJnCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TW92ZVR5cGUnKSA9fiAvXmZvcm0kL2kgKSB7CiAgICAgICAgJE1vdmVRdWV1ZXN7MH0gICAgICAgICA9ICctICcgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ01vdmUnKSAuICcgLSc7CiAgICAgICAgJFBhcmFte01vdmVRdWV1ZXNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkFnZW50UXVldWVMaXN0T3B0aW9uKAogICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnRGVzdFF1ZXVlSUQnLAogICAgICAgICAgICBUcmVlVmlldyAgICAgICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okxpc3RUeXBlJykgZXEgJ3RyZWUnID8gMSA6IDAsCiAgICAgICAgICAgIERhdGEgICAgICAgICAgID0+IFwlTW92ZVF1ZXVlcywKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ01vZGVybml6ZSBTbWFsbCcsCiAgICAgICAgICAgIEN1cnJlbnRRdWV1ZUlEID0+ICRUaWNrZXR7UXVldWVJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIG15ICVBY2xBY3Rpb25Mb29rdXAgPSByZXZlcnNlICVBY2xBY3Rpb247CiAgICBpZiAoCiAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPntBZ2VudFRpY2tldE1vdmV9CiAgICAgICAgJiYgKCAkQWNsQWN0aW9uTG9va3Vwe0FnZW50VGlja2V0TW92ZX0gKQogICAgICAgICkKICAgIHsKICAgICAgICBteSAkQWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ21vdmUnLAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBMb2dObyAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFBhcmFte1RpY2tldElEfSA9ICRUaWNrZXR7VGlja2V0SUR9OwogICAgICAgIGlmICgkQWNjZXNzKSB7CiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpNb3ZlVHlwZScpID1+IC9eZm9ybSQvaSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ01vdmVMaW5rJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCAlQWNsQWN0aW9uIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTW92ZUZvcm0nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sICVBY2xBY3Rpb24gfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRBY3Rpb25Mb29rdXB7QWdlbnRUaWNrZXRNb3ZlfSA9IHsKICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgID0+ICdBY3Rpb249QWdlbnRUaWNrZXRNb3ZlO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCB1cmkgJV0nLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ0FzUG9wdXAgUG9wdXBUeXBlX1RpY2tldEFjdGlvbicsCiAgICAgICAgICAgICAgICBMaW5rUGFyYW0gICAgICA9PiAnJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgID0+IFRyYW5zbGF0YWJsZSgnQ2hhbmdlIFF1ZXVlJyksCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1F1ZXVlJyksCiAgICAgICAgICAgICAgICBUcmFuc2xhdGVkTmFtZSA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Okxhbmd1YWdlJyktPlRyYW5zbGF0ZSgnUXVldWUnKSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBDaGVjayBpZiBBZ2VudFRpY2tldENvbXBvc2UgYW5kIEFnZW50VGlja2V0Rm9yd2FyZCBhcmUgYWxsb3dlZCBhcyBhY3Rpb24gKGZvciBkaXNwbGF5IG9mIEZvcm1EcmFmdHMpLgogICAgbXkgJUFjdGlvbkNvbmZpZyA9ICgKICAgICAgICBBZ2VudFRpY2tldENvbXBvc2UgPT4gewogICAgICAgICAgICBMaW5rICAgICAgICAgICA9PiAnQWN0aW9uPUFnZW50VGlja2V0Q29tcG9zZTtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEIHwgdXJpICVdJywKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ0FzUG9wdXAgUG9wdXBUeXBlX1RpY2tldEFjdGlvbicsCiAgICAgICAgICAgIExpbmtQYXJhbSAgICAgID0+ICcnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICA9PiBUcmFuc2xhdGFibGUoJ1JlcGx5JyksCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnUmVwbHknKSwKICAgICAgICAgICAgVHJhbnNsYXRlZE5hbWUgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpLT5UcmFuc2xhdGUoJ1JlcGx5JyksCiAgICAgICAgfSwKICAgICAgICBBZ2VudFRpY2tldEZvcndhcmQgPT4gewogICAgICAgICAgICBMaW5rICAgICAgICAgICA9PiAnQWN0aW9uPUFnZW50VGlja2V0Rm9yd2FyZDtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEIHwgdXJpICVdJywKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ0FzUG9wdXAgUG9wdXBUeXBlX1RpY2tldEFjdGlvbicsCiAgICAgICAgICAgIExpbmtQYXJhbSAgICAgID0+ICcnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICA9PiBUcmFuc2xhdGFibGUoJ0ZvcndhcmQgYXJ0aWNsZSB2aWEgbWFpbCcpLAogICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ0ZvcndhcmQnKSwKICAgICAgICAgICAgVHJhbnNsYXRlZE5hbWUgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpLT5UcmFuc2xhdGUoJ0ZvcndhcmQnKSwKICAgICAgICB9LAogICAgKTsKICAgIEFDVElPTjoKICAgIGZvciBteSAkQWN0aW9uIChxdyhBZ2VudFRpY2tldENvbXBvc2UgQWdlbnRUaWNrZXRGb3J3YXJkKSkgewogICAgICAgIG5leHQgQUNUSU9OIGlmICEkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyRBY3Rpb259OwogICAgICAgIG5leHQgQUNUSU9OIGlmICEkQWNsQWN0aW9uTG9va3VweyRBY3Rpb259OwoKICAgICAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCAnVGlja2V0OjpGcm9udGVuZDo6JyAuICRBY3Rpb24gKTsKICAgICAgICBpZiAoICRDb25maWctPntQZXJtaXNzaW9ufSApIHsKICAgICAgICAgICAgbmV4dCBBQ1RJT04gaWYgISRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRBY3Rpb25Mb29rdXB7JEFjdGlvbn0gPSAkQWN0aW9uQ29uZmlneyRBY3Rpb259OwogICAgfQoKICAgICMgR2V0IGFuZCBzaG93IGF2YWlsYWJsZSBGb3JtRHJhZnRzLgogICAgbXkgJVNob3duRm9ybURyYWZ0RW50cmllczsKICAgIG15ICRGb3JtRHJhZnRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZvcm1EcmFmdCcpLT5Gb3JtRHJhZnRMaXN0R2V0KAogICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgT2JqZWN0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkRm9ybURyYWZ0TGlzdCkgKSB7CiAgICAgICAgRm9ybURyYWZ0OgogICAgICAgIGZvciBteSAkRm9ybURyYWZ0ICggQHskRm9ybURyYWZ0TGlzdH0gKSB7CiAgICAgICAgICAgIG5leHQgRm9ybURyYWZ0IGlmICEkQWN0aW9uTG9va3VweyAkRm9ybURyYWZ0LT57QWN0aW9ufSB9OwoKICAgICAgICAgICAgcHVzaCBAeyAkU2hvd25Gb3JtRHJhZnRFbnRyaWVzeyAkRm9ybURyYWZ0LT57QWN0aW9ufSB9IH0sICRGb3JtRHJhZnQ7CiAgICAgICAgfQogICAgfQogICAgaWYgKCVTaG93bkZvcm1EcmFmdEVudHJpZXMpIHsKCiAgICAgICAgbXkgJExhc3RBcnRpY2xlOwogICAgICAgIGlmICggJE9yZGVyIGVxICdERVNDJyApIHsKICAgICAgICAgICAgJExhc3RBcnRpY2xlID0gJEFydGljbGVCb3hBbGxbMF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGFzdEFydGljbGUgPSAkQXJ0aWNsZUJveEFsbFstMV07CiAgICAgICAgfQoKICAgICAgICBteSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lOwogICAgICAgIGlmICggJExhc3RBcnRpY2xlLT57Q3JlYXRlVGltZX0gKSB7CiAgICAgICAgICAgIG15ICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkTGFzdEFydGljbGUtPntDcmVhdGVUaW1lfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWUgPSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lT2JqZWN0LT5Ub0Vwb2NoKCk7CiAgICAgICAgfQoKICAgICAgICBteSBARm9ybURyYWZ0czsKCiAgICAgICAgZm9yIG15ICRBY3Rpb24gKAogICAgICAgICAgICBzb3J0IHsKICAgICAgICAgICAgICAgICRBY3Rpb25Mb29rdXB7JGF9LT57VHJhbnNsYXRlZE5hbWV9CiAgICAgICAgICAgICAgICAgICAgY21wCiAgICAgICAgICAgICAgICAgICAgJEFjdGlvbkxvb2t1cHskYn0tPntUcmFuc2xhdGVkTmFtZX0KICAgICAgICAgICAgfSBrZXlzICVTaG93bkZvcm1EcmFmdEVudHJpZXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEFjdGlvbkRhdGEgPSAkQWN0aW9uTG9va3VweyRBY3Rpb259OwoKICAgICAgICAgICAgZm9yIG15ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5ICgKICAgICAgICAgICAgICAgIHNvcnQgewogICAgICAgICAgICAgICAgICAgICRhLT57VGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgIGNtcAogICAgICAgICAgICAgICAgICAgICAgICAkYi0+e1RpdGxlfQogICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgICAgICAgICAkYS0+e0Zvcm1EcmFmdElEfQogICAgICAgICAgICAgICAgICAgICAgICA8PT4KICAgICAgICAgICAgICAgICAgICAgICAgJGItPntGb3JtRHJhZnRJRH0KICAgICAgICAgICAgICAgIH0gQHsgJFNob3duRm9ybURyYWZ0RW50cmllc3skQWN0aW9ufSB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q3JlYXRlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q3JlYXRlQnl9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q2hhbmdlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5LT57Q2hhbmdlQnl9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2hvd25Gb3JtRHJhZnRBY3Rpb25FbnRyeSA9IHsKICAgICAgICAgICAgICAgICAgICAleyRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5fSwKICAgICAgICAgICAgICAgICAgICAleyRBY3Rpb25EYXRhfSwKCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHB1c2ggQEZvcm1EcmFmdHMsICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRm9ybURyYWZ0VGFibGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEZvcm1EcmFmdHMgPT4gXEBGb3JtRHJhZnRzLAogICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBjcmVhdGVkIGJ5IGlmIGRpZmZlcmVudCB0aGVuIFVzZXIgSUQgMQogICAgaWYgKCAkVGlja2V0e0NyZWF0ZUJ5fSA+IDEgKSB7CgogICAgICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICAgICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgICAgICRUaWNrZXR7Q3JlYXRlZEJ5VXNlcn0gPSAkVXNlck9iamVjdC0+VXNlck5hbWUoIFVzZXJJRCA9PiAkVGlja2V0e0NyZWF0ZUJ5fSApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDcmVhdGVkQnknLAogICAgICAgICAgICBEYXRhID0+IHslVGlja2V0fSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBubyBhcnRpY2xlcyBibG9jayBpZiB0aWNrZXQgZG9lcyBub3QgY29udGFpbiBhcnRpY2xlcwogICAgaWYgKCAhQEFydGljbGVCb3ggJiYgISRTZWxmLT57Wm9vbVRpbWVsaW5lfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSGludE5vQXJ0aWNsZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBpZiB0aWNrZXQgaXMgbm9ybWFsIG9yIHByb2Nlc3MgdGlja2V0CiAgICBteSAkSXNQcm9jZXNzVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q2hlY2tGb3JQcm9jZXNzVHlwZSgKICAgICAgICAnVGlja2V0SUQnID0+ICRTZWxmLT57VGlja2V0SUR9CiAgICApOwoKICAgICMgY29sbGVjdCBkYXRhIGZvciBvdmVydmlldyB3aWRnZXQKICAgIG15ICVXaWRnZXREYXRhOwogICAgaWYgKCAkSXNQcm9jZXNzVGlja2V0IHx8ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfXtEeW5hbWljRmllbGRXaWRnZXREaXNwbGF5fSApIHsKICAgICAgICAlV2lkZ2V0RGF0YSA9ICRJc1Byb2Nlc3NUaWNrZXQKICAgICAgICAgICAgPyAoCiAgICAgICAgICAgICAgICBXaWRnZXREaXNwbGF5ICAgICAgICAgICAgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e1Byb2Nlc3NEaXNwbGF5fSwKICAgICAgICAgICAgICAgIFdpZGdldFRpdGxlICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc317UHJvY2Vzc0Rpc3BsYXl9e1dpZGdldFRpdGxlfSwKICAgICAgICAgICAgICAgIFdpZGdldER5bmFtaWNGaWVsZEdyb3VwcyA9PiAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc317UHJvY2Vzc1dpZGdldER5bmFtaWNGaWVsZEdyb3Vwc30sCiAgICAgICAgICAgICkKICAgICAgICAgICAgOiAoCiAgICAgICAgICAgICAgICBXaWRnZXREaXNwbGF5ICAgICAgICAgICAgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e0R5bmFtaWNGaWVsZFdpZGdldERpc3BsYXl9LAogICAgICAgICAgICAgICAgV2lkZ2V0VGl0bGUgICAgICAgICAgICAgID0+ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfXtEeW5hbWljRmllbGRXaWRnZXREaXNwbGF5fXtXaWRnZXRUaXRsZX0sCiAgICAgICAgICAgICAgICBXaWRnZXREeW5hbWljRmllbGRHcm91cHMgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e0R5bmFtaWNGaWVsZFdpZGdldER5bmFtaWNGaWVsZEdyb3Vwc30sCgogICAgICAgICAgICApOwoKICAgICAgICAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9ID0gJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20iKQogICAgICAgICAgICAtPnsgKCAkSXNQcm9jZXNzVGlja2V0ID8gJ1Byb2Nlc3NXaWRnZXREeW5hbWljRmllbGQnIDogJ0R5bmFtaWNGaWVsZFdpZGdldER5bmFtaWNGaWVsZCcgKSB9IC8vIHt9OwogICAgfQoKICAgICMgZGVjaWRlIGlmIHdpZGdldCBzaG91bGQgYmUgc2hvd24KICAgIG15ICRTaG93V2lkZ2V0ID0gMDsKCiAgICAjIGFsd2F5cyBzaG93IGlmIHdlIGhhdmUgYSBwcm9jZXNzIHRpY2tldCBmb3IgYWN0aXZpdHkgZGlhbG9ncwogICAgaWYgKCRJc1Byb2Nlc3NUaWNrZXQpIHsKICAgICAgICAkU2hvd1dpZGdldCA9IDE7CiAgICB9CgogICAgIyBlbHNlIHNob3cgb25seSBpZiBkeW5hbWljIGZpZWxkcyBhcmUgZGVmaW5lZCBhbmQgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaGFzIGEgdmFsdWUKICAgIGVsc2lmICggSXNIYXNoUmVmV2l0aERhdGEoICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZH0gKSApIHsKICAgICAgICBERlZBTFVFOgogICAgICAgIGZvciBteSAkRmllbGROYW1lICgga2V5cyAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9LT4lKiApIHsKICAgICAgICAgICAgbmV4dCBERlZBTFVFIHVubGVzcyAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9eyRGaWVsZE5hbWV9OwogICAgICAgICAgICBuZXh0IERGVkFMVUUgdW5sZXNzICRUaWNrZXR7IkR5bmFtaWNGaWVsZF8kRmllbGROYW1lIn07CgogICAgICAgICAgICAkU2hvd1dpZGdldCA9IDE7CgogICAgICAgICAgICBsYXN0IERGVkFMVUU7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBvdmVydmlldyB3aWRnZXQgd2l0aCBlaXRoZXIgZHluYW1pYyBmaWVsZCBkYXRhIG9yIHdpdGggcHJvY2VzcyBhbmQgYWN0aXZpdHkgZGlhbG9nIGRhdGEKICAgIGlmICgkU2hvd1dpZGdldCkgewoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ092ZXJ2aWV3V2lkZ2V0JywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCB0aGUgb3ZlcnZpZXcgd2lkZ2V0IGluIHRoZSBtYWluIHNjcmVlbgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgV2lkZ2V0VGl0bGUgPT4gJFdpZGdldERhdGF7V2lkZ2V0VGl0bGV9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgY29sbGVjdCBhbmQgcmVuZGVyIHByb2Nlc3MgZGF0YSBpZiBuZWNlc3NhcnkKICAgICAgICBteSAkQWN0aXZpdHlOYW1lOwogICAgICAgIG15ICROZXh0QWN0aXZpdHlEaWFsb2dzOwogICAgICAgIG15ICRQcm9jZXNzRW50aXR5SURGaWVsZDsKICAgICAgICBpZiAoJElzUHJvY2Vzc1RpY2tldCkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIERGIHdoZXJlIHRoZSBQcm9jZXNzRW50aXR5SUQgaXMgc3RvcmVkCiAgICAgICAgICAgICRQcm9jZXNzRW50aXR5SURGaWVsZCA9ICdEeW5hbWljRmllbGRfJwogICAgICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkR5bmFtaWNGaWVsZFByb2Nlc3NNYW5hZ2VtZW50UHJvY2Vzc0lEIik7CgogICAgICAgICAgICAjIGdldCB0aGUgREYgd2hlcmUgdGhlIEF0aXZpdHlFbnRpdHlJRCBpcyBzdG9yZWQKICAgICAgICAgICAgbXkgJEFjdGl2aXR5RW50aXR5SURGaWVsZCA9ICdEeW5hbWljRmllbGRfJwogICAgICAgICAgICAgICAgLiAkQ29uZmlnT2JqZWN0LT5HZXQoIlByb2Nlc3M6OkR5bmFtaWNGaWVsZFByb2Nlc3NNYW5hZ2VtZW50QWN0aXZpdHlJRCIpOwoKICAgICAgICAgICAgbXkgJEFjdGl2aXR5RGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHknKS0+QWN0aXZpdHlHZXQoCiAgICAgICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgID0+ICdBZ2VudEludGVyZmFjZScsCiAgICAgICAgICAgICAgICBBY3Rpdml0eUVudGl0eUlEID0+ICRUaWNrZXR7JEFjdGl2aXR5RW50aXR5SURGaWVsZH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBuZXh0IGFjdGl2aXR5IGRpYWxvZ3MKICAgICAgICAgICAgaWYgKCAkVGlja2V0eyRBY3Rpdml0eUVudGl0eUlERmllbGR9ICkgewogICAgICAgICAgICAgICAgJE5leHRBY3Rpdml0eURpYWxvZ3MgPSAke0FjdGl2aXR5RGF0YX0tPntBY3Rpdml0eURpYWxvZ30gfHwge307CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEFjdGl2aXR5TmFtZSA9ICRBY3Rpdml0eURhdGEtPntOYW1lfTsKICAgICAgICB9CgogICAgICAgIGlmICgkTmV4dEFjdGl2aXR5RGlhbG9ncykgewoKICAgICAgICAgICAgIyBnZXQgQWN0aXZpdHlEaWFsb2cgb2JqZWN0CiAgICAgICAgICAgIG15ICRBY3Rpdml0eURpYWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHlEaWFsb2cnKTsKCiAgICAgICAgICAgICMgd2UgaGF2ZSB0byBjaGVjayBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyB0aGUgbmVlZGVkIHBlcm1pc3Npb25zIHRvIHZpZXcgdGhlCiAgICAgICAgICAgICMgZGlmZmVyZW50IGFjdGl2aXR5IGRpYWxvZ3MsIHNvIHdlIGxvb3Agb3ZlciBldmVyeSBhY3Rpdml0eSBkaWFsb2cgYW5kIGNoZWNrIGlmIHRoZXJlCiAgICAgICAgICAgICMgaXMgYSBwZXJtaXNzaW9uIGNvbmZpZ3VyZWQuIElmIHRoZXJlIGlzIGEgcGVybWlzc2lvbiBjb25maWd1cmVkIHdlIGNoZWNrIHRoaXMKICAgICAgICAgICAgIyBhbmQgZGlzcGxheS9oaWRlIHRoZSBhY3Rpdml0eSBkaWFsb2cgbGluawogICAgICAgICAgICBteSAlUGVybWlzc2lvblJpZ2h0czsKICAgICAgICAgICAgbXkgJVBlcm1pc3Npb25BY3Rpdml0eURpYWxvZ0xpc3Q7CiAgICAgICAgICAgIEFDVElWSVRZRElBTE9HUEVSTUlTU0lPTjoKICAgICAgICAgICAgZm9yIG15ICRJbmRleCAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7JE5leHRBY3Rpdml0eURpYWxvZ3N9ICkgewogICAgICAgICAgICAgICAgbXkgJEN1cnJlbnRBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0gJE5leHRBY3Rpdml0eURpYWxvZ3MtPnskSW5kZXh9OwogICAgICAgICAgICAgICAgbXkgJEN1cnJlbnRBY3Rpdml0eURpYWxvZyAgICAgICAgID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgICAgICAgID0+ICdBZ2VudEludGVyZmFjZScsCiAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlEaWFsb2dFbnRpdHlJRCA9PiAkQ3VycmVudEFjdGl2aXR5RGlhbG9nRW50aXR5SUQKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgYW4gaW50ZXJmYWNlIGxvb2t1cC1saXN0CiAgICAgICAgICAgICAgICBteSAlSW50ZXJmYWNlTG9va3VwID0gbWFwIHsgJF8gPT4gMSB9IEB7ICRDdXJyZW50QWN0aXZpdHlEaWFsb2ctPntJbnRlcmZhY2V9IH07CgogICAgICAgICAgICAgICAgbmV4dCBBQ1RJVklUWURJQUxPR1BFUk1JU1NJT04gaWYgISRJbnRlcmZhY2VMb29rdXB7QWdlbnRJbnRlcmZhY2V9OwoKICAgICAgICAgICAgICAgIGlmICggJEN1cnJlbnRBY3Rpdml0eURpYWxvZy0+e1Blcm1pc3Npb259ICkgewoKICAgICAgICAgICAgICAgICAgICAjIHBlcmZvcm1hbmNlLWJvb3N0L2NhY2hlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGVybWlzc2lvblJpZ2h0c3sgJEN1cnJlbnRBY3Rpdml0eURpYWxvZy0+e1Blcm1pc3Npb259IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uUmlnaHRzeyAkQ3VycmVudEFjdGl2aXR5RGlhbG9nLT57UGVybWlzc2lvbn0gfSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkQ3VycmVudEFjdGl2aXR5RGlhbG9nLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggISRQZXJtaXNzaW9uUmlnaHRzeyAkQ3VycmVudEFjdGl2aXR5RGlhbG9nLT57UGVybWlzc2lvbn0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBBQ1RJVklUWURJQUxPR1BFUk1JU1NJT047CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uQWN0aXZpdHlEaWFsb2dMaXN0eyRJbmRleH0gPSAkQ3VycmVudEFjdGl2aXR5RGlhbG9nRW50aXR5SUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVkdWNlIG5leHQgYWN0aXZpdHkgZGlhbG9ncyB0byB0aGUgb25lcyB0aGF0IGhhdmUgcGVybWlzc2lvbnMKICAgICAgICAgICAgJE5leHRBY3Rpdml0eURpYWxvZ3MgPSBcJVBlcm1pc3Npb25BY3Rpdml0eURpYWxvZ0xpc3Q7CgogICAgICAgICAgICAjIGdldCBBQ0wgcmVzdHJpY3Rpb25zCiAgICAgICAgICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgID0+IFwlUGVybWlzc2lvbkFjdGl2aXR5RGlhbG9nTGlzdCwKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgIFJldHVyblR5cGUgICAgPT4gJ0FjdGl2aXR5RGlhbG9nJywKICAgICAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJEFDTCkgewogICAgICAgICAgICAgICAgJXskTmV4dEFjdGl2aXR5RGlhbG9nc30gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTmV4dEFjdGl2aXR5RGlhbG9ncycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAnQWN0aXZpdHlOYW1lJyA9PiAkQWN0aXZpdHlOYW1lLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJE5leHRBY3Rpdml0eURpYWxvZ3MpICkgewogICAgICAgICAgICAgICAgZm9yIG15ICROZXh0QWN0aXZpdHlEaWFsb2dLZXkgKCBzb3J0IHsgJGEgPD0+ICRiIH0ga2V5cyAleyROZXh0QWN0aXZpdHlEaWFsb2dzfSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkQWN0aXZpdHlEaWFsb2dEYXRhID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlICAgICAgICAgICAgICA9PiAnQWdlbnRJbnRlcmZhY2UnLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0+ICROZXh0QWN0aXZpdHlEaWFsb2dzLT57JE5leHRBY3Rpdml0eURpYWxvZ0tleX0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBpZiBkaXJlY3Qgc3VibWl0IGlzIGFjdGl2ZSBmb3IgdGhpcyBhY3Rpdml0eSBkaWFsb2cKICAgICAgICAgICAgICAgICAgICBteSAkRGlyZWN0U3VibWl0ID0gJEFjdGl2aXR5RGlhbG9nRGF0YS0+e0RpcmVjdFN1Ym1pdH07CiAgICAgICAgICAgICAgICAgICAgaWYgKCBhbnkgeyAkQWN0aXZpdHlEaWFsb2dEYXRhLT57RmllbGRzfXskX317RGlzcGxheX0gfSBrZXlzICRBY3Rpdml0eURpYWxvZ0RhdGEtPntGaWVsZHN9LT4lKiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJERpcmVjdFN1Ym1pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJERpcmVjdFN1Ym1pdCkgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGl2aXR5RGlhbG9nRGlyZWN0U3VibWl0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJE5leHRBY3Rpdml0eURpYWxvZ3MtPnskTmV4dEFjdGl2aXR5RGlhbG9nS2V5fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgPT4gJEFjdGl2aXR5RGlhbG9nRGF0YS0+e1N1Ym1pdEJ1dHRvblRleHR9IHx8ICRBY3Rpdml0eURpYWxvZ0RhdGEtPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzRW50aXR5SUQgPT4gJFRpY2tldHskUHJvY2Vzc0VudGl0eUlERmllbGR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGl2aXR5RGlhbG9nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5RGlhbG9nRW50aXR5SUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJE5leHRBY3Rpdml0eURpYWxvZ3MtPnskTmV4dEFjdGl2aXR5RGlhbG9nS2V5fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgPT4gJEFjdGl2aXR5RGlhbG9nRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NFbnRpdHlJRCA9PiAkVGlja2V0eyRQcm9jZXNzRW50aXR5SURGaWVsZH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdOb0FjdGl2aXR5RGlhbG9ncycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgY29uZmlnIGZvciBmcm9udGVuZCBtb2R1bGUKICAgICAgICBteSAkRHluYW1pY0ZpZWxkRmlsdGVyID0gewogICAgICAgICAgICAleyAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSIpLT57RHluYW1pY0ZpZWxkfSB8fCB7fSB9LAogICAgICAgICAgICAlewogICAgICAgICAgICAgICAgJFdpZGdldERhdGF7V2lkZ2V0RHluYW1pY0ZpZWxkfSB8fCB7fQogICAgICAgICAgICB9LAogICAgICAgIH07CgogICAgICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgICAgIE9iamVjdFR5cGUgID0+IFsnVGlja2V0J10sCiAgICAgICAgICAgIEZpZWxkRmlsdGVyID0+ICREeW5hbWljRmllbGRGaWx0ZXIgfHwge30sCiAgICAgICAgKTsKICAgICAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAgICAgIyB0byBzdG9yZSBkeW5hbWljIGZpZWxkcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG92ZXJ2aWV3IHdpZGdldAogICAgICAgIG15IChARmllbGRzV2lkZ2V0KTsKCiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIWRlZmluZWQgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH07CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9IGVxICcnOwoKICAgICAgICAgICAgIyB1c2UgdHJhbnNsYXRpb24gaGVyZSB0byBiZSBhYmxlIHRvIHJlZHVjZSB0aGUgY2hhcmFjdGVyIGxlbmd0aCBpbiB0aGUgdGVtcGxhdGUKICAgICAgICAgICAgbXkgJExhYmVsID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9ICk7CgogICAgICAgICAgICBpZiAoICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZH17ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewogICAgICAgICAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAoKICAgICAgICAgICAgICAgICAgICAjIG5vIFZhbHVlTWF4Q2hhcnMgaGVyZSwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEBGaWVsZHNXaWRnZXQsIHsKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5ICAgICAgICAgICAgICAgICAgICA9PiAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICBMYWJlbCAgICAgICAgICAgICAgICAgICAgICAgPT4gJExhYmVsLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyREeW5hbWljRmllbGRDb25maWctPntOYW1lfSIgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYnVpbGQgZHluYW1pYyBmaWVsZCBsb29rdXAgaGFzaCBmb3Igd2lkZ2V0IGdyb3VwcwogICAgICAgIG15ICVEeW5hbWljRmllbGRMb29rdXAgPSBtYXAgeyAoICRfLT57TmFtZX0gPT4gJF8gKSB9ICREeW5hbWljRmllbGQtPkAqOwoKICAgICAgICAjIG91dHB1dCBkeW5hbWljIGZpZWxkcyByZWdpc3RlcmVkIGZvciBhIGdyb3VwIGluIHRoZSBvdmVydmlldyB3aWRnZXQKICAgICAgICBteSBARmllbGRzSW5BR3JvdXA7CiAgICAgICAgZm9yIG15ICRHcm91cE5hbWUgKAogICAgICAgICAgICBzb3J0IGtleXMgJXsgJFdpZGdldERhdGF7V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBzfSB9CiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBzJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRHcm91cEZpZWxkc1N0cmluZyA9ICRXaWRnZXREYXRhe1dpZGdldER5bmFtaWNGaWVsZEdyb3Vwc317JEdyb3VwTmFtZX07CgogICAgICAgICAgICAkR3JvdXBGaWVsZHNTdHJpbmcgPX4gc3tcc317fXhtc2c7CiAgICAgICAgICAgIG15IEBHcm91cEZpZWxkcyA9IHNwbGl0IC8sLywgJEdyb3VwRmllbGRzU3RyaW5nOwoKICAgICAgICAgICAgaWYgKCAkI0dyb3VwRmllbGRzICsgMSApIHsKCiAgICAgICAgICAgICAgICBteSAkU2hvd0dyb3VwVGl0bGUgPSAwOwogICAgICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAoQEZpZWxkc1dpZGdldCkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoIGdyZXAgeyAkXyBlcSAkRmllbGQtPntOYW1lfSB9IEBHcm91cEZpZWxkcyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICRTaG93R3JvdXBUaXRsZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICRGaWVsZC0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRERkNvbmZpZyA9ICREeW5hbWljRmllbGRMb29rdXB7ICRGaWVsZC0+e05hbWV9IH07CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNldCBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRERkNvbmZpZy0+e0ZpZWxkVHlwZX0gZXEgJ1NldCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXRGaWVsZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZFNldFNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRGaWVsZC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSBASW5jbHVkZWRGaWVsZHMgPSAkU2VsZi0+X0dldEluY2x1ZGVkRmllbGRPcmRlcmVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgPT4gJERGQ29uZmlnLT57Q29uZmlnfXtJbmNsdWRlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRWYWx1ZUluZGV4ICggMCAuLiAkI3sgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkLT57TmFtZX0gfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZUl0ZW0gPSAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntOYW1lfSB9WyRWYWx1ZUluZGV4XTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRJbmNsdWRlRmllbGQgKEBJbmNsdWRlZEZpZWxkcykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEluY2x1ZGVERkNvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkSW5jbHVkZUZpZWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkRpc3BsYXlWYWx1ZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkSW5jbHVkZURGQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRWYWx1ZUl0ZW0tPnsgJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIFZhbHVlTWF4Q2hhcnMgaGVyZSwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1c2UgdHJhbnNsYXRpb24gaGVyZSB0byBiZSBhYmxlIHRvIHJlZHVjZSB0aGUgY2hhcmFjdGVyIGxlbmd0aCBpbiB0aGUgdGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJExhYmVsID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkSW5jbHVkZURGQ29uZmlnLT57TGFiZWx9ICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAlSW5jbHVkZUZpZWxkID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9ID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgPT4gJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5ICAgICAgICAgICAgICAgICA9PiAkVmFsdWVJdGVtLT57ICRJbmNsdWRlREZDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgICAgICAgICAgICAgICAgICAgID0+ICRMYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e0xpbmtQcmV2aWV3fSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGRfJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9IiA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldER5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkSW5jbHVkZUZpZWxke05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRJbmNsdWRlRmllbGR7TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldER5bmFtaWNGaWVsZFZhbHVlT3ZlcmxheVRyaWdnZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSW5jbHVkZURGQ29uZmlnLT57TGlua30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGRMaW5rJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEluY2x1ZGVGaWVsZHtOYW1lfSA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVRpY2tldCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxpYXMgZm9yIHRpY2tldCB0aXRsZSwgVGl0bGUgd2lsbCBiZSBvdmVyd3JpdHRlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRUaXRsZSA9PiAkVGlja2V0e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgPT4gJEluY2x1ZGVGaWVsZHtWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICA9PiAkSW5jbHVkZUZpZWxke0xpbmt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyA9PiAkSW5jbHVkZUZpZWxke0xpbmtQcmV2aWV3fSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGRfJEluY2x1ZGVGaWVsZHtOYW1lfSIgPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRJbmNsdWRlRmllbGR7VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBGaWVsZHNJbkFHcm91cCwgJEZpZWxkLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFZhbHVlSW5kZXggIT0gJCN7ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICRGaWVsZC0+e05hbWV9IH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGRTZXRWYWx1ZVNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIHN0YW5kYXJkIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU3RhbmRhcmRGaWVsZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICRGaWVsZC0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRWYWx1ZU92ZXJsYXlUcmlnZ2VyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkRmllbGQtPntMaW5rfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRMaW5rJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRmllbGQtPntOYW1lfSA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlVGlja2V0LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxpYXMgZm9yIHRpY2tldCB0aXRsZSwgVGl0bGUgd2lsbCBiZSBvdmVyd3JpdHRlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0VGl0bGUgPT4gJFRpY2tldHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICA9PiAkRmllbGQtPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICA9PiAkRmllbGQtPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ID0+ICRGaWVsZC0+e0xpbmtQcmV2aWV3fSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGRfJEZpZWxkLT57TmFtZX0iID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkUGxhaW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRGaWVsZC0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARmllbGRzSW5BR3JvdXAsICRGaWVsZC0+e05hbWV9OwoKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRTaG93R3JvdXBUaXRsZSkgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwU2VwYXJhdG9yJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICRHcm91cE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgZHluYW1pYyBmaWVsZHMgbm90IHJlZ2lzdGVyZWQgaW4gYSBncm91cCBpbiB0aGUgb3ZlcnZpZXcgd2lkZ2V0CiAgICAgICAgbXkgQFJlbWFpbmluZ0ZpZWxkc1dpZGdldDsKICAgICAgICBmb3IgbXkgJEZpZWxkIChARmllbGRzV2lkZ2V0KSB7CgogICAgICAgICAgICBpZiAoICFncmVwIHsgJF8gZXEgJEZpZWxkLT57TmFtZX0gfSBARmllbGRzSW5BR3JvdXAgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBSZW1haW5pbmdGaWVsZHNXaWRnZXQsICRGaWVsZDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBzJywKICAgICAgICApOwoKICAgICAgICBpZiAoICQjUmVtYWluaW5nRmllbGRzV2lkZ2V0ICsgMSApIHsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRHcm91cFNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRmllbGRzIHdpdGggbm8gZ3JvdXAnKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGZvciBteSAkRmllbGQgKEBSZW1haW5pbmdGaWVsZHNXaWRnZXQpIHsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGQnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgKCRERkNvbmZpZykgPSBncmVwIHsgJF8tPntOYW1lfSBlcSAkRmllbGQtPntOYW1lfSB9ICREeW5hbWljRmllbGQtPkAqOwoKICAgICAgICAgICAgIyBzZXQgZmllbGQKICAgICAgICAgICAgaWYgKCAkREZDb25maWctPntGaWVsZFR5cGV9IGVxICdTZXQnICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RmllbGQnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGRTZXRTZXBhcmF0b3InLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgQEluY2x1ZGVkRmllbGRzID0gJFNlbGYtPl9HZXRJbmNsdWRlZEZpZWxkT3JkZXJlZCgKICAgICAgICAgICAgICAgICAgICBJbmNsdWRlID0+ICRERkNvbmZpZy0+e0NvbmZpZ317SW5jbHVkZX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGZvciBteSAkVmFsdWVJbmRleCAoIDAgLi4gJCN7ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICRGaWVsZC0+e05hbWV9IH0gfSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWVJdGVtID0gJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkLT57TmFtZX0gfVskVmFsdWVJbmRleF07CgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkSW5jbHVkZUZpZWxkIChASW5jbHVkZWRGaWVsZHMpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRJbmNsdWRlREZDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJEluY2x1ZGVGaWVsZCwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJEluY2x1ZGVERkNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWVJdGVtLT57ICRJbmNsdWRlREZDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBWYWx1ZU1heENoYXJzIGhlcmUsIGVub3VnaCBzcGFjZSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgdXNlIHRyYW5zbGF0aW9uIGhlcmUgdG8gYmUgYWJsZSB0byByZWR1Y2UgdGhlIGNoYXJhY3RlciBsZW5ndGggaW4gdGhlIHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRMYWJlbCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJEluY2x1ZGVERkNvbmZpZy0+e0xhYmVsfSApOwoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUluY2x1ZGVGaWVsZCA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJbmNsdWRlREZDb25maWctPntOYW1lfSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgICAgID0+ICRJbmNsdWRlREZDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSAgICAgICAgICAgICAgICAgPT4gJFZhbHVlSXRlbS0+eyAkSW5jbHVkZURGQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsICAgICAgICAgICAgICAgICAgICA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRJbmNsdWRlREZDb25maWctPntOYW1lfSIgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJEluY2x1ZGVGaWVsZHtOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkSW5jbHVkZUZpZWxke0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGRWYWx1ZU92ZXJsYXlUcmlnZ2VyJywKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEluY2x1ZGVERkNvbmZpZy0+e0xpbmt9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJbmNsdWRlRmllbGR7TmFtZX0gPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVUaWNrZXQsCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsaWFzIGZvciB0aWNrZXQgdGl0bGUsIFRpdGxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0VGl0bGUgPT4gJFRpY2tldHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgID0+ICRJbmNsdWRlRmllbGR7VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgPT4gJEluY2x1ZGVGaWVsZHtMaW5rfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgPT4gJEluY2x1ZGVGaWVsZHtMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBsZWFzZSBzZWUgYnVnIzEzMzYyIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRJbmNsdWRlRmllbGR7TmFtZX0iID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkUGxhaW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkSW5jbHVkZUZpZWxke1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARmllbGRzSW5BR3JvdXAsICRGaWVsZC0+e05hbWV9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoICRWYWx1ZUluZGV4ICE9ICQjeyAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntOYW1lfSB9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkU2V0VmFsdWVTZXBhcmF0b3InLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzdGFuZGFyZCBmaWVsZAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YW5kYXJkRmllbGQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkRmllbGQtPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlcicsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICggJEZpZWxkLT57TGlua30gKSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZpZWxkLT57TmFtZX0gPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJVRpY2tldCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsaWFzIGZvciB0aWNrZXQgdGl0bGUsIFRpdGxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldFRpdGxlID0+ICRUaWNrZXR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgPT4gJEZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgPT4gJEZpZWxkLT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyA9PiAkRmllbGQtPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRGaWVsZC0+e05hbWV9IiA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFBsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRmllbGQtPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHB1c2ggQEZpZWxkc0luQUdyb3VwLCAkRmllbGQtPntOYW1lfTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgfQoKICAgICMgYXJ0aWNsZSBmaWx0ZXIgaXMgYWN0aXZhdGVkIGluIHN5c2NvbmZpZwogICAgaWYgKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJBY3RpdmV9ICkgewoKICAgICAgICBpZiAoICRTZWxmLT57Wm9vbVRpbWVsaW5lfSApIHsKCiAgICAgICAgICAgICMgYnVpbGQgZXZlbnQgdHlwZSBsaXN0IGZvciBmaWx0ZXIgZGlhbG9nCiAgICAgICAgICAgICRQYXJhbXtFdmVudFR5cGVGaWx0ZXJTdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkU2VsZi0+e0hpc3RvcnlUeXBlTWFwcGluZ30sCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkU2VsZi0+e0V2ZW50VHlwZUZpbHRlcn0tPntFdmVudFR5cGVJRH0sCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNvcnQgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnRXZlbnRUeXBlRmlsdGVyJywKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZW5kIGRhdGEgdG8gSlMKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVGaWx0ZXJEaWFsb2cnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gMCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRXZlbnRUeXBlRmlsdGVyRGlhbG9nJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgbXkgQENvbW11bmljYXRpb25DaGFubmVscyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDb21tdW5pY2F0aW9uQ2hhbm5lbCcpLT5DaGFubmVsTGlzdCgKICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICVDaGFubmVscyA9IG1hcCB7ICRfLT57Q2hhbm5lbElEfSA9PiAkXy0+e0Rpc3BsYXlOYW1lfSB9IEBDb21tdW5pY2F0aW9uQ2hhbm5lbHM7CgogICAgICAgICAgICAjIGJ1aWxkIGFydGljbGUgdHlwZSBsaXN0IGZvciBmaWx0ZXIgZGlhbG9nCiAgICAgICAgICAgICRQYXJhbXtDaGFubmVsc30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlQ2hhbm5lbHMsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0sCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNvcnQgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXInLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkUGFyYW17Q3VzdG9tZXJWaXNpYmlsaXR5fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgMCA9PiBUcmFuc2xhdGFibGUoJ0ludmlzaWJsZSBvbmx5JyksCiAgICAgICAgICAgICAgICAgICAgMSA9PiBUcmFuc2xhdGFibGUoJ1Zpc2libGUgb25seScpLAogICAgICAgICAgICAgICAgICAgIDIgPT4gVHJhbnNsYXRhYmxlKCdWaXNpYmxlIGFuZCBpbnZpc2libGUnKSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q3VzdG9tZXJWaXNpYmlsaXR5fSAvLyAyLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIFNvcnQgICAgICAgID0+ICdOdW1lcmljS2V5JywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdDdXN0b21lclZpc2liaWxpdHlGaWx0ZXInLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBzZW5kZXIgdHlwZXMKICAgICAgICAgICAgbXkgJUFydGljbGVTZW5kZXJUeXBlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlU2VuZGVyVHlwZUxpc3QoKTsKCiAgICAgICAgICAgICMgYnVpbGQgYXJ0aWNsZSBzZW5kZXIgdHlwZSBsaXN0IGZvciBmaWx0ZXIgZGlhbG9nCiAgICAgICAgICAgICRQYXJhbXtBcnRpY2xlU2VuZGVyVHlwZUZpbHRlclN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlQXJ0aWNsZVNlbmRlclR5cGVzLAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0FydGljbGVTZW5kZXJUeXBlSUR9LAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgICAgICAgICBTb3J0ICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0FydGljbGVTZW5kZXJUeXBlRmlsdGVyJywKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBUaWNrZXQgSUQKICAgICAgICAgICAgJFBhcmFte1RpY2tldElEfSA9ICRTZWxmLT57VGlja2V0SUR9OwoKICAgICAgICAgICAgIyBzZW5kIGRhdGEgdG8gSlMKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVGaWx0ZXJEaWFsb2cnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQXJ0aWNsZUZpbHRlckRpYWxvZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHRpY2tldCBuZWVkIHRvIGJlIG1hcmtlZCBhcyBzZWVuCiAgICBteSAkQXJ0aWNsZUFsbFNlZW4gPSAxOwogICAgQVJUSUNMRToKICAgIGZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVCb3gpIHsKCiAgICAgICAgIyBpZ25vcmUgc3lzdGVtIHNlbmRlciB0eXBlCiAgICAgICAgbmV4dCBBUlRJQ0xFCiAgICAgICAgICAgIGlmICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpOZXdBcnRpY2xlSWdub3JlU3lzdGVtU2VuZGVyJykKICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGUtPntTZW5kZXJUeXBlSUR9IH0gZXEgJ3N5c3RlbSc7CgogICAgICAgICMgbGFzdCBBUlRJQ0xFIGlmIGFydGljbGUgd2FzIG5vdCBzaG93bgogICAgICAgIGlmICggISRBcnRpY2xlRmxhZ3N7ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSB9LT57U2Vlbn0gKSB7CiAgICAgICAgICAgICRBcnRpY2xlQWxsU2VlbiA9IDA7CiAgICAgICAgICAgIGxhc3QgQVJUSUNMRTsKICAgICAgICB9CiAgICB9CgogICAgIyBtYXJrIHRpY2tldCBhcyBzZWVuIGlmIGFsbCBhcnRpY2xlIGFyZSBzaG93bgogICAgaWYgKCRBcnRpY2xlQWxsU2VlbikgewogICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldEZsYWdTZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBLZXkgICAgICA9PiAnU2VlbicsCiAgICAgICAgICAgIFZhbHVlICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVUYWJsZUhlaWdodCcsCiAgICAgICAgVmFsdWUgPT4gJExheW91dE9iamVjdC0+e1VzZXJUaWNrZXRab29tQXJ0aWNsZVRhYmxlSGVpZ2h0fSwKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkhUTUxBcnRpY2xlSGVpZ2h0RGVmYXVsdCcsCiAgICAgICAgVmFsdWUgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpIVE1MQXJ0aWNsZUhlaWdodERlZmF1bHQnKSwKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkhUTUxBcnRpY2xlSGVpZ2h0TWF4JywKICAgICAgICBWYWx1ZSA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkhUTUxBcnRpY2xlSGVpZ2h0TWF4JyksCiAgICApOwogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdMYW5ndWFnZScsCiAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICBBdHRhY2htZW50Vmlld01lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKAogICAgICAgICAgICAgICAgJ0FydGljbGUgY291bGQgbm90IGJlIG9wZW5lZCEgUGVyaGFwcyBpdCBpcyBvbiBhbm90aGVyIGFydGljbGUgcGFnZT8nCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICk7CgogICAgIyBpbml0IGpzCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdUaWNrZXRab29tSW5pdCcsCiAgICApOwoKICAgICMgcmV0dXJuIG91dHB1dAogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsgJVBhcmFtLCAlVGlja2V0LCAlQWNsQWN0aW9uIH0sCiAgICApOwp9CgpzdWIgX0FydGljbGVUcmVlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVRpY2tldCAgICAgICA9ICV7ICRQYXJhbXtUaWNrZXR9IH07CiAgICBteSAlQXJ0aWNsZUZsYWdzID0gJXsgJFBhcmFte0FydGljbGVGbGFnc30gfTsKICAgIG15IEBBcnRpY2xlQm94ICAgPSBAeyAkUGFyYW17QXJ0aWNsZUJveH0gfTsKICAgIG15ICRBcnRpY2xlSUQgICAgPSAkUGFyYW17QXJ0aWNsZUlEfTsKICAgIG15ICRUYWJsZUNsYXNzZXM7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGJ1aWxkIHRocmVhZCBzdHJpbmcKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1RyZWUnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFRhYmxlQ2xhc3NlcyA9PiAkVGFibGVDbGFzc2VzLAogICAgICAgICAgICBab29tVGltZWxpbmUgPT4gJFNlbGYtPntab29tVGltZWxpbmV9LAogICAgICAgIH0sCiAgICApOwoKICAgIGlmICggJFBhcmFte1BhZ2luYXRpb259ICYmICEkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FydGljbGVQYWdlcycsCiAgICAgICAgICAgIERhdGEgPT4gJFBhcmFte1BhZ2luYXRpb259LAogICAgICAgICk7CiAgICB9CgogICAgbXkgQEFydGljbGVWaWV3cyA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDb2xsYXBzZScsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnU2hvdyBvbmUgYXJ0aWNsZScpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnRXhwYW5kJywKICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdTaG93IGFsbCBhcnRpY2xlcycpLAogICAgICAgIH0sCiAgICApOwoKICAgICMgQWRkIHRpbWVsaW5lIHZpZXcgb3B0aW9uIG9ubHkgaWYgZW5hYmxlZC4KICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaW1lbGluZVZpZXdFbmFibGVkJykgKSB7CiAgICAgICAgcHVzaCBAQXJ0aWNsZVZpZXdzLCB7CiAgICAgICAgICAgIEtleSAgID0+ICdUaW1lbGluZScsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnU2hvdyBUaWNrZXQgVGltZWxpbmUgVmlldycpLAogICAgICAgIH07CiAgICB9CgogICAgbXkgJEFydGljbGVWaWV3U2VsZWN0ZWQgPSAnQ29sbGFwc2UnOwogICAgaWYgKCAkU2VsZi0+e1pvb21FeHBhbmR9ICkgewogICAgICAgICRBcnRpY2xlVmlld1NlbGVjdGVkID0gJ0V4cGFuZCc7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57Wm9vbVRpbWVsaW5lfSApIHsKICAgICAgICAkQXJ0aWNsZVZpZXdTZWxlY3RlZCA9ICdUaW1lbGluZSc7CiAgICB9CgogICAgbXkgJEFydGljbGVWaWV3U3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+IFxAQXJ0aWNsZVZpZXdzLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRBcnRpY2xlVmlld1NlbGVjdGVkLAogICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgU29ydCAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICBOYW1lICAgICAgICA9PiAnQXJ0aWNsZVZpZXcnLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIFNlbmQgZGF0YSB0byBKUy4KICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZVZpZXdTdHJnJywKICAgICAgICBWYWx1ZSA9PiAkQXJ0aWNsZVZpZXdTdHJnLAogICAgKTsKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnWm9vbUV4cGFuZCcsCiAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntab29tRXhwYW5kfSwKICAgICk7CgogICAgIyBhcnRpY2xlIGZpbHRlciBpcyBhY3RpdmF0ZWQgaW4gc3lzY29uZmlnCiAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUZpbHRlckFjdGl2ZX0gKSB7CgogICAgICAgICMgZGVmaW5lIGhpZ2hsaWdodCBzdHlsZSBmb3IgbGlua3MgaWYgZmlsdGVyIGlzIGFjdGl2ZQogICAgICAgIG15ICRIaWdobGlnaHRTdHlsZSA9ICdtZW51JzsKICAgICAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0gKSB7CiAgICAgICAgICAgICRIaWdobGlnaHRTdHlsZSA9ICdQcmlvcml0eUlELTUnOwogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBhcnRpY2xlIGZpbHRlciBsaW5rcwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBcnRpY2xlRmlsdGVyRGlhbG9nTGluaycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgSGlnaGxpZ2h0U3R5bGUgPT4gJEhpZ2hsaWdodFN0eWxlLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgYXJ0aWNsZSBmaWx0ZXIgcmVzZXQgbGluayBvbmx5IGlmIGZpbHRlciBpcyBzZXQKICAgICAgICBpZiAoCiAgICAgICAgICAgICggISRTZWxmLT57Wm9vbVRpbWVsaW5lfSAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJFNlbGYtPntBcnRpY2xlRmlsdGVyfSApICkKICAgICAgICAgICAgfHwgKCAkU2VsZi0+e1pvb21UaW1lbGluZX0gJiYgJFNlbGYtPntFdmVudFR5cGVGaWx0ZXJ9ICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBcnRpY2xlRmlsdGVyUmVzZXRMaW5rJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVGlja2V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwogICAgbXkgJENvbmZpZ09iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgQ3JlYXRlIGEgbGlzdCBvZiBhcnRpY2xlIHNlbmRlciB0eXBlcyBmb3IgbG9va3VwCiAgICBteSAlQXJ0aWNsZVNlbmRlclR5cGVMaXN0ID0gJEFydGljbGVPYmplY3QtPkFydGljbGVTZW5kZXJUeXBlTGlzdCgpOwoKICAgICMgc2hvdyBhcnRpY2xlIHRyZWUKICAgIGlmICggISRTZWxmLT57Wm9vbVRpbWVsaW5lfSApIHsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FydGljbGVMaXN0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBab29tRXhwYW5kU29ydE9yZGVyID0+ICRTZWxmLT57Wm9vbUV4cGFuZFNvcnR9IGVxICdyZXZlcnNlJyA/ICdEZXNjZW5kaW5nJyA6ICdBc2NlbmRpbmcnLAogICAgICAgICAgICAgICAgVGFibGVDbGFzc2VzICAgICAgICA9PiAkVGFibGVDbGFzc2VzLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIEFSVElDTEU6CiAgICAgICAgZm9yIG15ICRBcnRpY2xlVG1wIChAQXJ0aWNsZUJveCkgewogICAgICAgICAgICBteSAlQXJ0aWNsZSA9ICUkQXJ0aWNsZVRtcDsKCiAgICAgICAgICAgICMgYXJ0aWNsZSBmaWx0ZXIgaXMgYWN0aXZhdGVkIGluIHN5c2NvbmZpZyBhbmQgdGhlcmUgYXJlIGFydGljbGVzCiAgICAgICAgICAgICMgdGhhdCBwYXNzZWQgdGhlIGZpbHRlcgogICAgICAgICAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUZpbHRlckFjdGl2ZX0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0gJiYgJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e1Nob3duQXJ0aWNsZUlEc30gKSB7CgogICAgICAgICAgICAgICAgICAgICMgZG8gbm90IHNob3cgYXJ0aWNsZSBpbiB0cmVlIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBmaWx0ZXIKICAgICAgICAgICAgICAgICAgICBpZiAoICEkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57U2hvd25BcnRpY2xlSURzfS0+eyAkQXJ0aWNsZXtBcnRpY2xlSUR9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQVJUSUNMRTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2hvdyBhcnRpY2xlIGZsYWdzCiAgICAgICAgICAgIG15ICRDbGFzcyAgICAgID0gJyc7CiAgICAgICAgICAgIG15ICRDbGFzc1JvdyAgID0gJyc7CiAgICAgICAgICAgIG15ICROZXdBcnRpY2xlID0gMDsKCiAgICAgICAgICAgICMgaWdub3JlIHN5c3RlbSBzZW5kZXIgdHlwZXMKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgISRBcnRpY2xlRmxhZ3N7ICRBcnRpY2xle0FydGljbGVJRH0gfS0+e1NlZW59CiAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgISRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpOZXdBcnRpY2xlSWdub3JlU3lzdGVtU2VuZGVyJykKICAgICAgICAgICAgICAgICAgICB8fCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6TmV3QXJ0aWNsZUlnbm9yZVN5c3RlbVNlbmRlcicpCiAgICAgICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGV7U2VuZGVyVHlwZUlEfSB9IG5lICdzeXN0ZW0nCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICROZXdBcnRpY2xlID0gMTsKCiAgICAgICAgICAgICAgICAjIHNob3cgdGlja2V0IGZsYWdzCgogICAgICAgICAgICAgICAgIyBhbHdheXMgc2hvdyBhcmNoaXZlZCB0aWNrZXRzIGFzIHNlZW4KICAgICAgICAgICAgICAgIGlmICggJFRpY2tldHtBcmNoaXZlRmxhZ30gbmUgJ3knICkgewogICAgICAgICAgICAgICAgICAgICRDbGFzcyAgICAuPSAnIFVucmVhZEFydGljbGVzJzsKICAgICAgICAgICAgICAgICAgICAkQ2xhc3NSb3cgLj0gJyBVbnJlYWRBcnRpY2xlcyc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBqdXN0IHNob3cgdGlja2V0IGZsYWdzIGlmIGFnZW50IGJlbG9uZ3MgdG8gdGhlIHRpY2tldAogICAgICAgICAgICAgICAgbXkgJFNob3dNZXRhOwogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRTZWxmLT57VXNlcklEfSA9PSAkVGlja2V0e093bmVySUR9CiAgICAgICAgICAgICAgICAgICAgfHwgJFNlbGYtPntVc2VySUR9ID09ICRUaWNrZXR7UmVzcG9uc2libGVJRH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJFNob3dNZXRhID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggISRTaG93TWV0YSAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6V2F0Y2hlcicpICkgewogICAgICAgICAgICAgICAgICAgIG15ICVXYXRjaCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFdhdGNoR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRXYXRjaHsgJFNlbGYtPntVc2VySUR9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTaG93TWV0YSA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2hvdyB0aWNrZXQgZmxhZ3MKICAgICAgICAgICAgICAgIGlmICgkU2hvd01ldGEpIHsKICAgICAgICAgICAgICAgICAgICAkQ2xhc3MgLj0gJyBSZW1hcmthYmxlJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRDbGFzcyAuPSAnIE9yZGluYXJ5JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiB0aGlzIGlzIHRoZSBzaG93biBhcnRpY2xlIC09PiBzZXQgY2xhc3MgdG8gYWN0aXZlCiAgICAgICAgICAgIGlmICggJEFydGljbGVJRCBlcSAkQXJ0aWNsZXtBcnRpY2xlSUR9ICYmICEkU2VsZi0+e1pvb21FeHBhbmR9ICkgewogICAgICAgICAgICAgICAgJENsYXNzUm93IC49ICcgQWN0aXZlJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFRtcFN1YmplY3QgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdWJqZWN0Q2xlYW4oCgogICAgICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICA9PiAkQXJ0aWNsZXtTdWJqZWN0fSB8fCAnJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICVBcnRpY2xlRmllbGRzID0gJExheW91dE9iamVjdC0+QXJ0aWNsZUZpZWxkcygKICAgICAgICAgICAgICAgICVBcnRpY2xlLAogICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEdldCB0cmFuc21pc3Npb24gc3RhdHVzIGluZm9ybWF0aW9uIGZvciBlbWFpbCBhcnRpY2xlcy4KICAgICAgICAgICAgbXkgJFRyYW5zbWlzc2lvblN0YXR1czsKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZXtDaGFubmVsTmFtZX0gJiYgJEFydGljbGV7Q2hhbm5lbE5hbWV9IGVxICdFbWFpbCcgKSB7CiAgICAgICAgICAgICAgICAkVHJhbnNtaXNzaW9uU3RhdHVzID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKCVBcnRpY2xlKS0+QXJ0aWNsZVRyYW5zbWlzc2lvblN0YXR1cygKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGlmIHdlIG5lZWQgdG8gc2hvdyBhbHNvIGV4cGFuZC9jb2xsYXBzZSBpY29uCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVHJlZUl0ZW0nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUZpZWxkcyAgICAgID0+IFwlQXJ0aWNsZUZpZWxkcywKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgICAgPT4gJENsYXNzLAogICAgICAgICAgICAgICAgICAgIENsYXNzUm93ICAgICAgICAgICA9PiAkQ2xhc3NSb3csCiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgID0+ICRUbXBTdWJqZWN0LAogICAgICAgICAgICAgICAgICAgIFRyYW5zbWlzc2lvblN0YXR1cyA9PiAkVHJhbnNtaXNzaW9uU3RhdHVzLAogICAgICAgICAgICAgICAgICAgIFpvb21FeHBhbmQgICAgICAgICA9PiAkU2VsZi0+e1pvb21FeHBhbmR9LAogICAgICAgICAgICAgICAgICAgIFpvb21FeHBhbmRTb3J0ICAgICA9PiAkU2VsZi0+e1pvb21FeHBhbmRTb3J0fSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBhcnRpY2xlIGZsYWdzCiAgICAgICAgICAgICMgQWx3YXlzIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBvdGhlciB1c2VycyBhbHNvIGhhdmUgdG8gc2VlIHRoZSBpbXBvcnRhbnQgZmxhZwogICAgICAgICAgICBteSAlQXJ0aWNsZUltcG9ydGFudEZsYWdzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnR2V0KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBpbXBvcnRhbnQgZmxhZwogICAgICAgICAgICBpZiAoICRBcnRpY2xlSW1wb3J0YW50RmxhZ3N7SW1wb3J0YW50fSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtSW1wb3J0YW50QXJ0aWNsZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiMgUm90aGVyT1NTIC8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCgojVE9ETzogd2hlbiBtZXJnaW5nIHRvIENvcmUsIGlzIHRoZXJlIGEgd2F5IHRvIG1ha2UgYWRkaW5nIG5ldyBmbGFncyBlYXNpZXI/CgogICAgICAgICAgICAjIHNob3cgcGlubmVkIGZsYWcKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZUltcG9ydGFudEZsYWdze1Bpbm5lZH0gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbVBpbm5lZEFydGljbGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgojIEVPIEFnZW50VGlja2V0QXJ0aWNsZVBpbgoKICAgICAgICAgICAgIyBhbHdheXMgc2hvdyBhcmNoaXZlZCB0aWNrZXRzIGFzIHNlZW4KICAgICAgICAgICAgaWYgKCAkTmV3QXJ0aWNsZSAmJiAkVGlja2V0e0FyY2hpdmVGbGFnfSBuZSAneScgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbU5ld0FydGljbGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlQXJ0aWNsZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgojIFJvdGhlck9TUyAvIEFnZW50VGlja2V0QXJ0aWNsZVBpbgojCiMgICAgICAgICAgICAjIEJ1Z2ZpeCBmb3IgSUU3OiBhIHRhYmxlIGNlbGwgc2hvdWxkIG5vdCBiZSBlbXB0eQojICAgICAgICAgICAgIyAoYmVjYXVzZSBvdGhlcndpc2UgdGhlIGNlbGwgYm9yZGVycyBhcmUgbm90IHNob3duKToKIyAgICAgICAgICAgICMgd2UgYWRkIGFuIGVtcHR5IGVsZW1lbnQgaGVyZQojICAgICAgICAgICAgZWxzZSB7CiMgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiMgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtTm9OZXdBcnRpY2xlJywKIyAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKIyAgICAgICAgICAgICAgICApOwojICAgICAgICAgICAgfQojCiMgRU8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCgogICAgICAgICAgICAjIERldGVybWluZSBjb21tdW5pY2F0aW9uIGRpcmVjdGlvbi4KICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZXtDaGFubmVsTmFtZX0gZXEgJ0ludGVybmFsJyApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdUcmVlSXRlbURpcmVjdGlvbkludGVybmFsJyApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGV7U2VuZGVyVHlwZUlEfSB9IGVxICdjdXN0b21lcicgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnVHJlZUl0ZW1EaXJlY3Rpb25JbmNvbWluZycgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdUcmVlSXRlbURpcmVjdGlvbk91dGdvaW5nJyApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEdldCBhdHRhY2htZW50IGluZGV4IChleGNsdWRpbmcgYm9keSBhdHRhY2htZW50cykuCiAgICAgICAgICAgIG15ICVBdG1JbmRleDsKCiAgICAgICAgICAgIGlmICggISRBcnRpY2xle0FydGljbGVEZWxldGVkfSB8fCAkU2VsZi0+e0FydGljbGVTdG9yYWdlfSA9fiBtL0FydGljbGVTdG9yYWdlRlMvICkgewogICAgICAgICAgICAgICAgJUF0bUluZGV4ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKCVBcnRpY2xlKS0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9LAogICAgICAgICAgICAgICAgICAgICV7ICRTZWxmLT57RXhjbHVkZUF0dGFjaG1lbnRzfSB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICVBdG1JbmRleCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSglQXJ0aWNsZSktPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkQXJ0aWNsZXtEZWxldGVkVmVyc2lvbklEfSwKICAgICAgICAgICAgICAgICAgICBTb3VyY2VBcnRpY2xlSUQgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9LAogICAgICAgICAgICAgICAgICAgIFZlcnNpb25WaWV3ICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICAleyAkU2VsZi0+e0V4Y2x1ZGVBdHRhY2htZW50c30gfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQXJ0aWNsZXtBdG1zfSA9IFwlQXRtSW5kZXg7CgogICAgICAgICAgICAjIHNob3cgYXR0YWNobWVudCBpbmZvCiAgICAgICAgICAgICMgQnVnZml4IGZvciBJRTc6IGEgdGFibGUgY2VsbCBzaG91bGQgbm90IGJlIGVtcHR5CiAgICAgICAgICAgICMgKGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBjZWxsIGJvcmRlcnMgYXJlIG5vdCBzaG93bik6CiAgICAgICAgICAgICMgd2UgYWRkIGFuIGVtcHR5IGVsZW1lbnQgaGVyZQogICAgICAgICAgICBpZiAoICEkQXJ0aWNsZXtBdG1zfSB8fCAhJXsgJEFydGljbGV7QXRtc30gfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtTm9BdHRhY2htZW50JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IEFSVElDTEU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgbXkgJEF0dGFjaG1lbnRzID0gJFNlbGYtPl9Db2xsZWN0QXJ0aWNsZUF0dGFjaG1lbnRzKAogICAgICAgICAgICAgICAgICAgIEFydGljbGUgPT4gXCVBcnRpY2xlLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbUF0dGFjaG1lbnQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICA9PiAkQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnRzID0+ICRBdHRhY2htZW50cywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgdGltZWxpbmUgdmlldwogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IHRpY2tldCBoaXN0b3J5CiAgICAgICAgbXkgQEhpc3RvcnlMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgYXJ0aWNsZXMgZm9yIGxhdGVyIHVzZQogICAgICAgIG15IEBUaW1lbGluZUFydGljbGVCb3ggPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICk7CgogICAgICAgIGZvciBteSAkQXJ0aWNsZUl0ZW0gKEBUaW1lbGluZUFydGljbGVCb3gpIHsKICAgICAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgJXskQXJ0aWNsZUl0ZW19LAogICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgID0+ICRBcnRpY2xlSXRlbS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICBSZWFsTmFtZXMgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEFwcGVuZCBhcnRpY2xlIG1ldGEgZGF0YS4KICAgICAgICAgICAgJEFydGljbGVJdGVtID0gewogICAgICAgICAgICAgICAgJXskQXJ0aWNsZUl0ZW19LAogICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBteSAkQXJ0aWNsZXNCeUFydGljbGVJRCA9IHt9OwogICAgICAgIGZvciBteSAkQXJ0aWNsZSAoIHNvcnQgQFRpbWVsaW5lQXJ0aWNsZUJveCApIHsKICAgICAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgJXskQXJ0aWNsZX0sCiAgICAgICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgR2V0IGF0dGFjaG1lbnQgaW5kZXggKGV4Y2x1ZGluZyBib2R5IGF0dGFjaG1lbnRzKS4KICAgICAgICAgICAgbXkgJUF0bUluZGV4ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICV7ICRTZWxmLT57RXhjbHVkZUF0dGFjaG1lbnRzfSB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkQXJ0aWNsZS0+e0F0bXN9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwlQXRtSW5kZXg7CiAgICAgICAgICAgICRBcnRpY2xlLT57QmFja2VuZH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5DaGFubmVsTmFtZUdldCgpOwogICAgICAgICAgICAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkQXJ0aWNsZS0+e0FydGljbGVJRH0gfSA9ICRBcnRpY2xlOwoKICAgICAgICAgICAgIyBDaGVjayBpZiB0aGVyZSBpcyBIVE1MIGJvZHkgYXR0YWNobWVudC4KICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnRJbmRleEhUTUxCb2R5ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIE9ubHlIVE1MQm9keSA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAoICRBcnRpY2xlLT57SFRNTEJvZHlBdHRhY2htZW50SUR9ICkgPSBzb3J0IGtleXMgJUF0dGFjaG1lbnRJbmRleEhUTUxCb2R5OwogICAgICAgIH0KCiAgICAgICAgIyBkbyBub3QgZGlzcGxheSB0aGVzZSB0eXBlcwogICAgICAgIG15IEBUeXBlc0RvZGdlID0gcXcoCiAgICAgICAgICAgIE1pc2MKICAgICAgICAgICAgQXJjaGl2ZUZsYWdVcGRhdGUKICAgICAgICAgICAgTG9vcFByb3RlY3Rpb24KICAgICAgICAgICAgUmVtb3ZlCiAgICAgICAgICAgIFN1YnNjcmliZQogICAgICAgICAgICBVbnN1YnNjcmliZQogICAgICAgICAgICBTeXN0ZW1SZXF1ZXN0CiAgICAgICAgICAgIFNlbmRBZ2VudE5vdGlmaWNhdGlvbgogICAgICAgICAgICBTZW5kQ3VzdG9tZXJOb3RpZmljYXRpb24KICAgICAgICAgICAgU2VuZEF1dG9SZWplY3QKICAgICAgICApOwoKICAgICAgICAjIHNvcnQgb3V0IG5vbi1maWx0ZXJlZCBldmVudCB0eXBlcyAoaWYgYXBwbGljYWJsZSkKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfQogICAgICAgICAgICAmJiBJc0FycmF5UmVmV2l0aERhdGEoICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfSApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIGZvciBteSAkRXZlbnRUeXBlICggc29ydCBrZXlzICV7ICRTZWxmLT57SGlzdG9yeVR5cGVNYXBwaW5nfSB9ICkgewogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRFdmVudFR5cGUgbmUgJ05ld1RpY2tldCcgJiYgIWdyZXAgeyAkXyBlcSAkRXZlbnRUeXBlIH0KICAgICAgICAgICAgICAgICAgICBAeyAkU2VsZi0+e0V2ZW50VHlwZUZpbHRlcn0tPntFdmVudFR5cGVJRH0gfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBUeXBlc0RvZGdlLCAkRXZlbnRUeXBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHR5cGVzIHdoaWNoIGNhbiBiZSBkZXNjcmliZWQgYXMgJ2FjdGlvbiBvbiBhIHRpY2tldCcKICAgICAgICBteSBAVHlwZXNUaWNrZXRBY3Rpb24gPSBxdygKICAgICAgICAgICAgU2VydmljZVVwZGF0ZQogICAgICAgICAgICBTTEFVcGRhdGUKICAgICAgICAgICAgU3RhdGVVcGRhdGUKICAgICAgICAgICAgU2V0UGVuZGluZ1RpbWUKICAgICAgICAgICAgVW5sb2NrCiAgICAgICAgICAgIExvY2sKICAgICAgICAgICAgUmVzcG9uc2libGVVcGRhdGUKICAgICAgICAgICAgT3duZXJVcGRhdGUKICAgICAgICAgICAgQ3VzdG9tZXJVcGRhdGUKICAgICAgICAgICAgTmV3VGlja2V0CiAgICAgICAgICAgIFRpY2tldExpbmtBZGQKICAgICAgICAgICAgVGlja2V0TGlua0RlbGV0ZQogICAgICAgICAgICBUaWNrZXREeW5hbWljRmllbGRVcGRhdGUKICAgICAgICAgICAgTW92ZQogICAgICAgICAgICBNZXJnZWQKICAgICAgICAgICAgUHJpb3JpdHlVcGRhdGUKICAgICAgICAgICAgVGl0bGVVcGRhdGUKICAgICAgICAgICAgVHlwZVVwZGF0ZQogICAgICAgICAgICBFc2NhbGF0aW9uUmVzcG9uc2VUaW1lTm90aWZ5QmVmb3JlCiAgICAgICAgICAgIEVzY2FsYXRpb25SZXNwb25zZVRpbWVTdGFydAogICAgICAgICAgICBFc2NhbGF0aW9uUmVzcG9uc2VUaW1lU3RvcAogICAgICAgICAgICBFc2NhbGF0aW9uU29sdXRpb25UaW1lTm90aWZ5QmVmb3JlCiAgICAgICAgICAgIEVzY2FsYXRpb25Tb2x1dGlvblRpbWVTdGFydAogICAgICAgICAgICBFc2NhbGF0aW9uU29sdXRpb25UaW1lU3RvcAogICAgICAgICAgICBFc2NhbGF0aW9uVXBkYXRlVGltZU5vdGlmeUJlZm9yZQogICAgICAgICAgICBFc2NhbGF0aW9uVXBkYXRlVGltZVN0YXJ0CiAgICAgICAgICAgIEVzY2FsYXRpb25VcGRhdGVUaW1lU3RvcAogICAgICAgICAgICBUaW1lQWNjb3VudGluZwogICAgICAgICk7CgogICAgICAgICMgdHlwZXMgd2hpY2ggYXJlIHVzdWFsbHkgYmVpbmcgY29ubmVjdGVkIHRvIHNvbWUga2luZCBvZgogICAgICAgICMgYXV0b21hdGljIHByb2Nlc3MgKGUuZy4gdHJpZ2dlcmVkIGJ5IGFub3RoZXIgYWN0aW9uKQogICAgICAgIG15IEBUeXBlc1RpY2tldEF1dG9BY3Rpb24gPSBxdygKICAgICAgICAgICAgU2VuZEF1dG9Gb2xsb3dVcAogICAgICAgICAgICBTZW5kQXV0b1JlamVjdAogICAgICAgICAgICBTZW5kQXV0b1JlcGx5CiAgICAgICAgKTsKCiAgICAgICAgIyB0eXBlcyB3aGljaCBjYW4gYmUgY29uc2lkZXJlZCBhcyBpbnRlcm5hbAogICAgICAgIG15IEBUeXBlc0ludGVybmFsID0gcXcoCiAgICAgICAgICAgIEFkZE5vdGUKICAgICAgICAgICAgQ2hhdEludGVybmFsCiAgICAgICAgICAgIEVtYWlsQWdlbnRJbnRlcm5hbAogICAgICAgICk7CgogICAgICAgICMgb3V0Z29pbmcgdHlwZXMKICAgICAgICBteSBAVHlwZXNPdXRnb2luZyA9IHF3KAogICAgICAgICAgICBBZGRTTVMKICAgICAgICAgICAgRm9yd2FyZAogICAgICAgICAgICBFbWFpbEFnZW50CiAgICAgICAgICAgIFBob25lQ2FsbEFnZW50CiAgICAgICAgICAgIEJvdW5jZQogICAgICAgICAgICBTZW5kQW5zd2VyCiAgICAgICAgKTsKCiAgICAgICAgIyBpbmNvbWluZyB0eXBlcwogICAgICAgIG15IEBUeXBlc0luY29taW5nID0gcXcoCiAgICAgICAgICAgIEVtYWlsQ3VzdG9tZXIKICAgICAgICAgICAgQWRkTm90ZUN1c3RvbWVyCiAgICAgICAgICAgIEFkZFNNU0N1c3RvbWVyCiAgICAgICAgICAgIFBob25lQ2FsbEN1c3RvbWVyCiAgICAgICAgICAgIEZvbGxvd1VwCiAgICAgICAgICAgIFdlYlJlcXVlc3RDdXN0b21lcgogICAgICAgICAgICBDaGF0RXh0ZXJuYWwKICAgICAgICApOwoKICAgICAgICBteSBAVHlwZXNSaWdodCA9ICgKICAgICAgICAgICAgQFR5cGVzSW5jb21pbmcsCiAgICAgICAgICAgIEBUeXBlc1RpY2tldEFjdGlvbiwKICAgICAgICApOwoKICAgICAgICBteSBAVHlwZXNXaXRoQXJ0aWNsZXMgPSAoCiAgICAgICAgICAgIEBUeXBlc091dGdvaW5nLAogICAgICAgICAgICBAVHlwZXNJbnRlcm5hbCwKICAgICAgICAgICAgQFR5cGVzSW5jb21pbmcsCiAgICAgICAgICAgICdQaG9uZUNhbGxDdXN0b21lcicsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJUhpc3RvcnlJdGVtczsKICAgICAgICBteSAkSXRlbUNvdW50ZXIgPSAwOwogICAgICAgIG15ICRMYXN0Q3JlYXRlVGltZTsKICAgICAgICBteSAkTGFzdENyZWF0ZVN5c3RlbVRpbWU7CgogICAgICAgICMgR2V0IG1hcHBpbmcgb2YgaGlzdG9yeSB0eXBlcyB0byByZWFkYWJsZSBzdHJpbmdzCiAgICAgICAgbXkgJUhpc3RvcnlUeXBlczsKICAgICAgICBteSAlSGlzdG9yeVR5cGVDb25maWcgPSAleyAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okhpc3RvcnlUeXBlcycpIC8vIHt9IH07CiAgICAgICAgZm9yIG15ICRFbnRyeSAoIHNvcnQga2V5cyAlSGlzdG9yeVR5cGVDb25maWcgKSB7CiAgICAgICAgICAgICVIaXN0b3J5VHlwZXMgPSAoCiAgICAgICAgICAgICAgICAlSGlzdG9yeVR5cGVzLAogICAgICAgICAgICAgICAgJXsgJEhpc3RvcnlUeXBlQ29uZmlneyRFbnRyeX0gfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIEhJU1RPUllJVEVNOgogICAgICAgIGZvciBteSAkSXRlbSAoIHJldmVyc2UgQEhpc3RvcnlMaW5lcyApIHsKCiAgICAgICAgICAgICMgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGNlcnRhaW4gdHlwZXMsIGUuZy4gZXh0ZXJuYWwgbm90ZXMgZnJvbSBjdXN0b21lcnMKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlSUR9CiAgICAgICAgICAgICAgICAmJiAkSXRlbS0+e0hpc3RvcnlUeXBlfSBlcSAnQWRkTm90ZScKICAgICAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfSApCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZVNlbmRlclR5cGVMaXN0eyAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e1NlbmRlclR5cGVJRH0gfSBlcSAnY3VzdG9tZXInCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVJbmNvbWluZyc7CgogICAgICAgICAgICAgICAgIyBXZSBmYWtlIGEgY3VzdG9tIGhpc3RvcnkgdHlwZSBiZWNhdXNlIGV4dGVybmFsIG5vdGVzIGZyb20gY3VzdG9tZXJzIHN0aWxsCiAgICAgICAgICAgICAgICAjIGhhdmUgdGhlIGhpc3RvcnkgdHlwZSAnQWRkTm90ZScgd2hpY2ggZG9lcyBub3QgYWxsb3cgZm9yIGRpc3Rpbmd1aXNoaW5nLgogICAgICAgICAgICAgICAgJEl0ZW0tPntIaXN0b3J5VHlwZX0gPSAnQWRkTm90ZUN1c3RvbWVyJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgY2VydGFpbiB0eXBlcywgZS5nLiBleHRlcm5hbCBTTVMgZnJvbSBjdXN0b21lcnMKICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlSUR9CiAgICAgICAgICAgICAgICAmJiAkSXRlbS0+e0hpc3RvcnlUeXBlfSBlcSAnQWRkU01TJwogICAgICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9ICkKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57U2VuZGVyVHlwZUlEfSB9IGVxICdjdXN0b21lcicKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZUluY29taW5nJzsKCiAgICAgICAgICAgICAgICAjIFdlIGZha2UgYSBjdXN0b20gaGlzdG9yeSB0eXBlIGJlY2F1c2UgZXh0ZXJuYWwgbm90ZXMgZnJvbSBjdXN0b21lcnMgc3RpbGwKICAgICAgICAgICAgICAgICMgaGF2ZSB0aGUgaGlzdG9yeSB0eXBlICdBZGRTTVMnIHdoaWNoIGRvZXMgbm90IGFsbG93IGZvciBkaXN0aW5ndWlzaGluZy4KICAgICAgICAgICAgICAgICRJdGVtLT57SGlzdG9yeVR5cGV9ID0gJ0FkZFNNU0N1c3RvbWVyJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgaW50ZXJuYWwgZW1haWxzCiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgJiYgJEl0ZW0tPntIaXN0b3J5VHlwZX0gZXEgJ0VtYWlsQWdlbnQnCiAgICAgICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0gKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntCYWNrZW5kfSBlcSAnRW1haWwnCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZVNlbmRlclR5cGVMaXN0eyAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e1NlbmRlclR5cGVJRH0gfSBlcSAnYWdlbnQnCiAgICAgICAgICAgICAgICAmJiAhJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntJc1Zpc2libGVGb3JDdXN0b21lcn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gICAgICAgPSAnVHlwZU5vdGVJbnRlcm5hbCc7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlfSA9ICdFbWFpbEFnZW50SW50ZXJuYWwnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNwZWNpYWwgdHJlYXRtZW50IGZvciBjZXJ0YWluIHR5cGVzLCBlLmcuIGV4dGVybmFsIG5vdGVzIGZyb20gY3VzdG9tZXJzCiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9ICkKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57QmFja2VuZH0gZXEgJ0NoYXQnCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0lzVmlzaWJsZUZvckN1c3RvbWVyfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlfSA9ICdDaGF0RXh0ZXJuYWwnOwogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gICAgICAgPSAnVHlwZUluY29taW5nJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfSApCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0JhY2tlbmR9IGVxICdDaGF0JwogICAgICAgICAgICAgICAgJiYgISRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRJdGVtLT57SGlzdG9yeVR5cGV9ID0gJ0NoYXRJbnRlcm5hbCc7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSAgICAgICA9ICdUeXBlSW50ZXJuYWwnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdGb3J3YXJkJwogICAgICAgICAgICAgICAgJiYgJEl0ZW0tPntBcnRpY2xlSUR9CiAgICAgICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0gKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntCYWNrZW5kfSBlcSAnRW1haWwnCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZVNlbmRlclR5cGVMaXN0eyAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e1NlbmRlclR5cGVJRH0gfSBlcSAnYWdlbnQnCiAgICAgICAgICAgICAgICAmJiAhJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntJc1Zpc2libGVGb3JDdXN0b21lcn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVOb3RlSW50ZXJuYWwnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggZ3JlcCB7ICRfIGVxICRJdGVtLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzVGlja2V0QWN0aW9uICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZVRpY2tldEFjdGlvbic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBncmVwIHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNUaWNrZXRBdXRvQWN0aW9uICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZVRpY2tldEF1dG9BY3Rpb24nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggZ3JlcCB7ICRfIGVxICRJdGVtLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzSW50ZXJuYWwgKSB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSA9ICdUeXBlTm90ZUludGVybmFsJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIGdyZXAgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc0luY29taW5nICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZUluY29taW5nJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIGdyZXAgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc091dGdvaW5nICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZU91dGdvaW5nJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCBncmVwIHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNEb2RnZSApIHsKICAgICAgICAgICAgICAgIG5leHQgSElTVE9SWUlURU07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRJdGVtLT57Q291bnRlcn0gPSAkSXRlbUNvdW50ZXIrKzsKCiAgICAgICAgICAgIGlmICggJEl0ZW0tPntIaXN0b3J5VHlwZX0gZXEgJ05ld1RpY2tldCcgKSB7CgogICAgICAgICAgICAgICAgIyBpZiB0aGUgJ05ld1RpY2tldCcgaXRlbSBoYXMgYW4gYXJ0aWNsZSwgZGlzcGxheSB0aGlzICJjcmVhdGlvbiBhcnRpY2xlIiBldmVudCBzZXBhcmF0ZWx5CiAgICAgICAgICAgICAgICBpZiAoICRJdGVtLT57QXJ0aWNsZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtJdGVtc30gfSwgewogICAgICAgICAgICAgICAgICAgICAgICAleyRJdGVtfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlciAgICAgICAgICAgICA9PiAkSXRlbS0+e0NvdW50ZXJ9KyssCiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICAgPT4gJ05ld1RpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlUmVhZGFibGUgPT4gVHJhbnNsYXRhYmxlKCdUaWNrZXQgQ3JlYXRlZCcpLAogICAgICAgICAgICAgICAgICAgICAgICBPcmllbnRhdGlvbiAgICAgICAgID0+ICdSaWdodCcsCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ05ld1RpY2tldCc7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57QXJ0aWNsZUlEfTsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJEl0ZW0tPntOYW1lfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZW1vdmUgYXJ0aWNsZSBpbmZvcm1hdGlvbiBmcm9tIHR5cGVzIHdoaWNoIHNob3VsZCBub3QgZGlzcGxheSBhcnRpY2xlcwogICAgICAgICAgICBpZiAoICFncmVwIHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNXaXRoQXJ0aWNsZXMgKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgJEl0ZW0tPntBcnRpY2xlSUR9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBhcnRpY2xlIChpZiBwcmVzZW50KQogICAgICAgICAgICBpZiAoICRJdGVtLT57QXJ0aWNsZUlEfSApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9ID0gJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH07CgogICAgICAgICAgICAgICAgbXkgJUFydGljbGVGaWVsZHMgPSAkTGF5b3V0T2JqZWN0LT5BcnRpY2xlRmllbGRzKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlRmllbGRzfSA9IFwlQXJ0aWNsZUZpZWxkczsKCiAgICAgICAgICAgICAgICAjIEdldCBkeW5hbWljIGZpZWxkcyBhbmQgYWNjb3VudGVkIHRpbWUKICAgICAgICAgICAgICAgIG15ICRCYWNrZW5kID0gJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntCYWNrZW5kfTsKCiAgICAgICAgICAgICAgICAjIEdldCBkeW5hbWljIGZpZWxkcyBhbmQgYWNjb3VudGVkIHRpbWUKICAgICAgICAgICAgICAgIG15ICVBcnRpY2xlTWV0YUZpZWxkcyA9ICRLZXJuZWw6Ok9NLT5HZXQoIktlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBZ2VudDo6JEJhY2tlbmQiKS0+QXJ0aWNsZU1ldGFGaWVsZHMoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRJdGVtLT57QXJ0aWNsZURhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVNZXRhRmllbGRzfSA9IFwlQXJ0aWNsZU1ldGFGaWVsZHM7CgogICAgICAgICAgICAgICAgbXkgQEFydGljbGVBY3Rpb25zID0gJExheW91dE9iamVjdC0+QXJ0aWNsZUFjdGlvbnMoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgID0+ICdPbkxvYWQnLAogICAgICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVQbGFpbn0gPSAkTGF5b3V0T2JqZWN0LT5BcnRpY2xlUHJldmlldygKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgID0+ICRJdGVtLT57QXJ0aWNsZURhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgPT4gJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFJlc3VsdFR5cGUgPT4gJ3BsYWluJywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlSFRNTH0gPSAkS2VybmVsOjpPTS0+R2V0KCJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGltZWxpbmVWaWV3OjokQmFja2VuZCIpLT5BcnRpY2xlUmVuZGVyKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgID0+ICRJdGVtLT57QXJ0aWNsZURhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgID0+ICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlQWN0aW9ucyA9PiBcQEFydGljbGVBY3Rpb25zLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyByZW1vdmUgZW1wdHkgbGluZXMKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZVBsYWlufSA9fiBze15bXG5ccl0rfXt9eG1zZzsKCiAgICAgICAgICAgICAgICAjIE1vZGlmeSBwbGFpbiB0ZXh0IGFuZCBib2R5IHRvIGF2b2lkICc8L3NjcmlwdD4nIHRhZyBpc3N1ZSAoc2VlIGJ1ZyMxNDAyMykuCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVQbGFpbn0gPX4gc3s8L3NjcmlwdD59ezwjIyMvc2NyaXB0Pn14bXNnOwogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntCb2R5fSAgICAgICAgID1+IHN7PC9zY3JpcHQ+fXs8IyMjL3NjcmlwdD59eG1zZzsKCiAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZUZsYWdzQWxsID0gJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnR2V0KAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkSXRlbS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICVBcnRpY2xlRmxhZ3NNZSA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlRmxhZ0dldCgKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEl0ZW0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUlzSW1wb3J0YW50fSA9ICRBcnRpY2xlRmxhZ3NBbGx7SW1wb3J0YW50fTsKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUlzU2Vlbn0gICAgICA9ICRBcnRpY2xlRmxhZ3NNZXtTZWVufTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICBpZiAoICRJdGVtLT57TmFtZX0gJiYgJEl0ZW0tPntOYW1lfSA9fiBtL14lJS94ICkgewoKICAgICAgICAgICAgICAgICAgICAkSXRlbS0+e05hbWV9ID1+IHMvXiUlLy94ZzsKICAgICAgICAgICAgICAgICAgICBteSBAVmFsdWVzID0gc3BsaXQoIC8lJS94LCAkSXRlbS0+e05hbWV9ICk7CgogICAgICAgICAgICAgICAgICAgICMgU2VlIGRvY3VtZW50YXRpb24gaW4gQWdlbnRUaWNrZXRIaXN0b3J5LnBtLCBsaW5lIDE0MSsKICAgICAgICAgICAgICAgICAgICBpZiAoICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdUaWNrZXREeW5hbWljRmllbGRVcGRhdGUnICkgewogICAgICAgICAgICAgICAgICAgICAgICBAVmFsdWVzID0gKCAkVmFsdWVzWzFdLCAkVmFsdWVzWzVdIC8vICcnLCAkVmFsdWVzWzNdIC8vICcnICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEl0ZW0tPntIaXN0b3J5VHlwZX0gZXEgJ1R5cGVVcGRhdGUnICkgewogICAgICAgICAgICAgICAgICAgICAgICBAVmFsdWVzID0gKCAkVmFsdWVzWzJdLCAkVmFsdWVzWzNdLCAkVmFsdWVzWzBdLCAkVmFsdWVzWzFdICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkSXRlbS0+e05hbWV9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAkSGlzdG9yeVR5cGVzeyAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9LAogICAgICAgICAgICAgICAgICAgICAgICBAVmFsdWVzLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIG5vdCBuZWVkZWQgcGxhY2UgaG9sZGVyCiAgICAgICAgICAgICAgICAgICAgJEl0ZW0tPntOYW1lfSA9fiBzL1wlcy8veGc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbWFrZSB0aGUgaGlzdG9yeSB0eXBlIG1vcmUgcmVhZGFibGUgKGlmIGFwcGxpY2FibGUpCiAgICAgICAgICAgICRJdGVtLT57SGlzdG9yeVR5cGVSZWFkYWJsZX0gPSAkU2VsZi0+e0hpc3RvcnlUeXBlTWFwcGluZ30tPnsgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfQogICAgICAgICAgICAgICAgfHwgJEl0ZW0tPntIaXN0b3J5VHlwZX07CgogICAgICAgICAgICAjIGdyb3VwIGl0ZW1zIHdoaWNoIGhhcHBlbmVkIChuZWFybHkpIGNvaW5jaWRlbnRhbGx5IHRvZ2V0aGVyCiAgICAgICAgICAgIG15ICRDcmVhdGVTeXN0ZW1UaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEl0ZW0tPntDcmVhdGVUaW1lfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRJdGVtLT57Q3JlYXRlU3lzdGVtVGltZX0gPSAkQ3JlYXRlU3lzdGVtVGltZU9iamVjdAogICAgICAgICAgICAgICAgPyAkQ3JlYXRlU3lzdGVtVGltZU9iamVjdC0+VG9FcG9jaCgpCiAgICAgICAgICAgICAgICA6IHVuZGVmOwoKICAgICAgICAgICAgIyBpZiB3ZSBoYXZlIHR3byBldmVudHMgdGhhdCBoYXBwZW5lZCAnbmVhcmx5JyB0aGUgc2FtZSB0aW1lLCB0cmVhdAogICAgICAgICAgICAjIHRoZW0gYXMgaWYgdGhleSBoYXBwZW5lZCBleGFjdGx5IG9uIHRoZSBzYW1lIHRpbWUgKHRocmVzaG9sZCA1IHNlY29uZHMpCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRMYXN0Q3JlYXRlU3lzdGVtVGltZQogICAgICAgICAgICAgICAgJiYgJEl0ZW0tPntDcmVhdGVTeXN0ZW1UaW1lfSA8PSAkTGFzdENyZWF0ZVN5c3RlbVRpbWUKICAgICAgICAgICAgICAgICYmICRJdGVtLT57Q3JlYXRlU3lzdGVtVGltZX0gPj0gKCAkTGFzdENyZWF0ZVN5c3RlbVRpbWUgLSA1ICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcHVzaCBAeyAkSGlzdG9yeUl0ZW1zeyRMYXN0Q3JlYXRlVGltZX0gfSwgJEl0ZW07CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NyZWF0ZVRpbWV9ID0gJExhc3RDcmVhdGVUaW1lOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHVzaCBAeyAkSGlzdG9yeUl0ZW1zeyAkSXRlbS0+e0NyZWF0ZVRpbWV9IH0gfSwgJEl0ZW07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRMYXN0Q3JlYXRlVGltZSAgICAgICA9ICRJdGVtLT57Q3JlYXRlVGltZX07CiAgICAgICAgICAgICRMYXN0Q3JlYXRlU3lzdGVtVGltZSA9ICRJdGVtLT57Q3JlYXRlU3lzdGVtVGltZX07CiAgICAgICAgfQoKICAgICAgICBteSAkU29ydEJ5QXJ0aWNsZSA9IHN1YiB7CgogICAgICAgICAgICBteSAkSXNBID0gZ3JlcCB7ICRfIGVxICRhLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzV2l0aEFydGljbGVzOwogICAgICAgICAgICBteSAkSXNCID0gZ3JlcCB7ICRfIGVxICRiLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzV2l0aEFydGljbGVzOwogICAgICAgICAgICAkSXNCIGNtcCAkSXNBOwogICAgICAgIH07CgogICAgICAgICMgc29ydCBoaXN0b3J5IGl0ZW1zIGJhc2VkIG9uIGl0ZW1zIHdpdGggYXJ0aWNsZXMKICAgICAgICAjIHRoZXNlIGl0ZW1zIHNob3VsZCBhbHdheXMgYmUgb24gdG9wIG9mIGEgbGlzdCBvZiBjb25uZWN0ZWQgaXRlbXMKICAgICAgICAkSXRlbUNvdW50ZXIgPSAwOwogICAgICAgIGZvciBteSAkSXRlbSAoIHJldmVyc2Ugc29ydCBrZXlzICVIaXN0b3J5SXRlbXMgKSB7CgogICAgICAgICAgICBmb3IgbXkgJFN1Ykl0ZW0gKCBzb3J0ICRTb3J0QnlBcnRpY2xlIEB7ICRIaXN0b3J5SXRlbXN7JEl0ZW19IH0gKSB7CiAgICAgICAgICAgICAgICAkU3ViSXRlbS0+e0NvdW50ZXJ9ID0gJEl0ZW1Db3VudGVyKys7CgogICAgICAgICAgICAgICAgaWYgKCBncmVwIHsgJF8gZXEgJFN1Ykl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNSaWdodCApIHsKICAgICAgICAgICAgICAgICAgICAkU3ViSXRlbS0+e09yaWVudGF0aW9ufSA9ICdSaWdodCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU3ViSXRlbS0+e09yaWVudGF0aW9ufSA9ICdMZWZ0JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte0l0ZW1zfSB9LCAkU3ViSXRlbTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzZXQgVGlja2V0SUQgZm9yIHVzYWdlIGluIEpTCiAgICAgICAgJFBhcmFte1RpY2tldElEfSA9ICRTZWxmLT57VGlja2V0SUR9OwoKICAgICAgICAjIHNldCBrZXkgJ1RpbWVMb25nJyBmb3IgSlMKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBAeyAkUGFyYW17SXRlbXN9IH0gKSB7CiAgICAgICAgICAgICRJdGVtLT57VGltZUxvbmd9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+Rm9ybWF0VGltZVN0cmluZyggJEl0ZW0tPntDcmVhdGVUaW1lfSwgJ0RhdGVGb3JtYXRMb25nJyApOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRBcnRpY2xlSUQgKCBzb3J0IGtleXMgJXskQXJ0aWNsZXNCeUFydGljbGVJRH0gKSB7CgogICAgICAgICAgICAjIENoZWNrIGlmIGFydGljbGUgaGFzIGF0dGFjaG1lbnQocykuCiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57JEFydGljbGVJRH0tPntBdG1zfSApICkgewoKICAgICAgICAgICAgICAgIG15ICgkSW5kZXgpID0gZ3JlcCB7ICRQYXJhbXtJdGVtc30tPlskX10tPntBcnRpY2xlSUR9ICYmICRQYXJhbXtJdGVtc30tPlskX10tPntBcnRpY2xlSUR9ID09ICRBcnRpY2xlSUQgfQogICAgICAgICAgICAgICAgICAgIDAgLi4gQHsgJFBhcmFte0l0ZW1zfSB9OwogICAgICAgICAgICAgICAgJFBhcmFte0l0ZW1zfS0+WyRJbmRleF0tPntIYXNBdHRhY2htZW50fSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgR2V0IE5vVGltZWxpbmVWaWV3QXV0b0FydGljbGUgY29uZmlnIHZhbHVlIGZvciB1c2FnZSBpbiBKUy4KICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdOb1RpbWVsaW5lVmlld0F1dG9BcnRpY2xlJywKICAgICAgICAgICAgVmFsdWUgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdOb1RpbWVsaW5lVmlld0F1dG9BcnRpY2xlJykgfHwgJzAnLAogICAgICAgICk7CgogICAgICAgICMgSW5jbHVkZSBjdXJyZW50IGFydGljbGUgSUQgb25seSBpZiBpdCdzIHNlbGVjdGVkLgogICAgICAgICRQYXJhbXtDdXJyZW50QXJ0aWNsZUlEfSAvLz0gJFNlbGYtPntBcnRpY2xlSUR9OwoKICAgICAgICAjIE1vZGlmeSBib2R5IHRleHQgdG8gYXZvaWQgJzwvc2NyaXB0PicgdGFnIGlzc3VlIChzZWUgYnVnIzE0MDIzKS4KICAgICAgICBmb3IgbXkgJEFydGljbGVCb3hJdGVtIChAQXJ0aWNsZUJveCkgewogICAgICAgICAgICAkQXJ0aWNsZUJveEl0ZW0tPntCb2R5fSA9fiBzezwvc2NyaXB0Pn17PCMjIy9zY3JpcHQ+fXhtc2c7CiAgICAgICAgfQoKICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpbWVsaW5lVmlldycsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgIEVuYWJsZWQgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaW1lbGluZVZpZXdFbmFibGVkJyksCiAgICAgICAgICAgICAgICBEYXRhICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVsaW5lVmlldycsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIGp1bXAgdG8gc2VsZWN0ZWQgYXJ0aWNsZQogICAgICAgIGlmICggJFNlbGYtPntBcnRpY2xlSUR9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3dTZWxlY3RlZEFydGljbGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlbmRlciBhY3Rpb24gbWVudSBmb3IgYWxsIGFydGljbGVzCiAgICAgICAgZm9yIG15ICRBcnRpY2xlSUQgKCBzb3J0IGtleXMgJXskQXJ0aWNsZXNCeUFydGljbGVJRH0gKSB7CgogICAgICAgICAgICAjIHNob3cgYXR0YWNobWVudHMgYm94CiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57JEFydGljbGVJRH0tPntBdG1zfSApICkgewoKICAgICAgICAgICAgICAgIG15ICRBcnRpY2xlQXR0YWNobWVudHMgPSAkU2VsZi0+X0NvbGxlY3RBcnRpY2xlQXR0YWNobWVudHMoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZSA9PiAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyRBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaW1lbGluZVZpZXdBcnRpY2xlQXR0YWNobWVudHMnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudHMgPT4gJEFydGljbGVBdHRhY2htZW50cywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHJldHVybiBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpY2tldFpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7ICVQYXJhbSwgJVRpY2tldCB9LAogICAgKTsKfQoKc3ViIF9UaWNrZXRJdGVtU2VlbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBBcnRpY2xlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QXJ0aWNsZUxpc3QoCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgKTsKCiAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlcykgewogICAgICAgICRTZWxmLT5fQXJ0aWNsZUl0ZW1TZWVuKAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX0FydGljbGVJdGVtU2VlbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRJc0FydGljbGVEZWxldGVkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZUZlYXR1cmVzJyktPklzQXJ0aWNsZURlbGV0ZWQoCiAgICAgICAgQXJ0aWNsZUlEID0+ICRQYXJhbXtBcnRpY2xlSUR9CiAgICApOwoKICAgICMgbWFyayBzaG93biBhcnRpY2xlIGFzIHNlZW4KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QXJ0aWNsZUZsYWdTZXQoCiAgICAgICAgVGlja2V0SUQgICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICBBcnRpY2xlSUQgICAgICA9PiAkUGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICBLZXkgICAgICAgICAgICA9PiAnU2VlbicsCiAgICAgICAgVmFsdWUgICAgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQXJ0aWNsZURlbGV0ZWQgPT4gJElzQXJ0aWNsZURlbGV0ZWQKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfQXJ0aWNsZUl0ZW0gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlVGlja2V0ICA9ICV7ICRQYXJhbXtUaWNrZXR9IH07CiAgICBteSAlQXJ0aWNsZSA9ICV7ICRQYXJhbXtBcnRpY2xlfSB9OwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzaG93IGFydGljbGUgYWN0aW9ucwogICAgbXkgQE1lbnVJdGVtcyA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVBY3Rpb25zKAogICAgICAgICVQYXJhbSwKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRQYXJhbXtUaWNrZXR9LT57VGlja2V0SUR9LAogICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSwKICAgICAgICBUeXBlICAgICAgICAgICAgICAgID0+ICRQYXJhbXtUeXBlfSwKICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICk7CgogICAgcHVzaCBAeyAkU2VsZi0+e01lbnVJdGVtc30gfSwgXEBNZW51SXRlbXM7CgogICAgIyBUT0RPOiBSZXZpZXcKICAgIHJldHVybiAkU2VsZi0+X0FydGljbGVSZW5kZXIoCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgU2hvd0Jyb3dzZXJMaW5rTWVzc2FnZSA9PiAkU2VsZi0+e0RvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZX0gPyAwIDogMSwKICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgID0+ICRQYXJhbXtUeXBlfSwKICAgICAgICBNZW51SXRlbXMgICAgICAgICAgICAgID0+IFxATWVudUl0ZW1zLAogICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgICAgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgKTsKfQoKc3ViIF9Db2xsZWN0QXJ0aWNsZUF0dGFjaG1lbnRzIHsKCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVBcnRpY2xlID0gJXsgJFBhcmFte0FydGljbGV9IH07CgogICAgbXkgJUF0dGFjaG1lbnRzOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZG93bmxvYWQgdHlwZQogICAgbXkgJFR5cGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0F0dGFjaG1lbnREb3dubG9hZFR5cGUnKSB8fCAnYXR0YWNobWVudCc7CgogICAgJEFydGljbGV7QXRtQ291bnR9ID0gc2NhbGFyIGtleXMgJXsgJEFydGljbGV7QXRtc30gLy8ge30gfTsKCiAgICAjIGlmIGF0dGFjaG1lbnQgd2lsbCBiZSBmb3JjZWQgdG8gZG93bmxvYWQsIGRvbid0IG9wZW4gYSBuZXcgZG93bmxvYWQgd2luZG93IQogICAgbXkgJFRhcmdldCA9ICd0YXJnZXQ9IkF0dGFjaG1lbnRXaW5kb3ciICc7CiAgICBpZiAoICRUeXBlID1+IC9pbmxpbmUvaSApIHsKICAgICAgICAkVGFyZ2V0ID0gJ3RhcmdldD0iYXR0YWNobWVudCIgJzsKICAgIH0KCiAgICAkQXR0YWNobWVudHN7Wm9vbUF0dGFjaG1lbnREaXNwbGF5Q291bnR9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Olpvb21BdHRhY2htZW50RGlzcGxheUNvdW50Jyk7CgogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkRmlsZUlEICggc29ydCBrZXlzICV7ICRBcnRpY2xle0F0bXN9IH0gKSB7CiAgICAgICAgcHVzaCBAeyAkQXR0YWNobWVudHN7RmlsZXN9IH0sIHsKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICV7ICRBcnRpY2xle0F0bXN9LT57JEZpbGVJRH0gfSwKICAgICAgICAgICAgRmlsZUlEID0+ICRGaWxlSUQsCiAgICAgICAgICAgIFRhcmdldCA9PiAkVGFyZ2V0LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIFwlQXR0YWNobWVudHM7Cn0KCnN1YiBfQXJ0aWNsZUJveEdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2UgQXJ0aWNsZUJveEFsbCBMaW1pdCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKCiAgICBteSAkU3RhcnQgPSAoICRQYXJhbXtQYWdlfSAtIDEgKSAqICRQYXJhbXtMaW1pdH07CgogICAgbXkgJEVuZCA9ICRQYXJhbXtQYWdlfSAqICRQYXJhbXtMaW1pdH0gLSAxOwogICAgaWYgKCAkRW5kID49IHNjYWxhciBAeyAkUGFyYW17QXJ0aWNsZUJveEFsbH0gfSApIHsKCiAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBlbmQgaW5kZXggZG9lc24ndCBleGNlZWQgYXJyYXkgc2l6ZS4KICAgICAgICAkRW5kID0gc2NhbGFyIEB7ICRQYXJhbXtBcnRpY2xlQm94QWxsfSB9IC0gMTsKICAgIH0KCiAgICBteSBAQXJ0aWNsZUluZGV4ZXMgPSAoICRTdGFydCAuLiAkRW5kICk7CgogICAgbXkgJENvbW11bmljYXRpb25DaGFubmVsT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNvbW11bmljYXRpb25DaGFubmVsJyk7CgogICAgIyBTYXZlIGNvbW11bmljYXRpb24gY2hhbm5lbCBkYXRhIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCiAgICBteSAlQ29tbXVuaWNhdGlvbkNoYW5uZWxEYXRhOwoKICAgIG15IEBBcnRpY2xlQm94OwogICAgZm9yIG15ICRJbmRleCAoQEFydGljbGVJbmRleGVzKSB7CiAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRQYXJhbXtBcnRpY2xlQm94QWxsfS0+WyRJbmRleF0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICApOwoKICAgICAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkUGFyYW17QXJ0aWNsZUJveEFsbH0tPlskSW5kZXhdLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICBSZWFsTmFtZXMgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBJbmNsdWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgY29tbXVuaWNhdGlvbiBjaGFubmVsLgogICAgICAgIGlmICggISRDb21tdW5pY2F0aW9uQ2hhbm5lbERhdGF7ICRBcnRpY2xle0NvbW11bmljYXRpb25DaGFubmVsSUR9IH0gKSB7CgogICAgICAgICAgICAjIENvbW11bmljYXRpb24gY2hhbm5lbCBkaXNwbGF5IG5hbWUgaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbi4KICAgICAgICAgICAgbXkgJUNvbW11bmljYXRpb25DaGFubmVsID0gJENvbW11bmljYXRpb25DaGFubmVsT2JqZWN0LT5DaGFubmVsR2V0KAogICAgICAgICAgICAgICAgQ2hhbm5lbElEID0+ICRBcnRpY2xle0NvbW11bmljYXRpb25DaGFubmVsSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBQcmVzZW5jZSBvZiBjb21tdW5pY2F0aW9uIGNoYW5uZWwgb2JqZWN0IGluZGljYXRlcyBpdHMgdmFsaWRpdHkuCiAgICAgICAgICAgIG15ICRDaGFubmVsT2JqZWN0ID0gJENvbW11bmljYXRpb25DaGFubmVsT2JqZWN0LT5DaGFubmVsT2JqZWN0R2V0KAogICAgICAgICAgICAgICAgQ2hhbm5lbElEID0+ICRBcnRpY2xle0NvbW11bmljYXRpb25DaGFubmVsSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJENvbW11bmljYXRpb25DaGFubmVsRGF0YXsgJEFydGljbGV7Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gfSA9IHsKICAgICAgICAgICAgICAgIENoYW5uZWxOYW1lICAgICAgICA9PiAkQ29tbXVuaWNhdGlvbkNoYW5uZWx7Q2hhbm5lbE5hbWV9LAogICAgICAgICAgICAgICAgQ2hhbm5lbERpc3BsYXlOYW1lID0+ICRDb21tdW5pY2F0aW9uQ2hhbm5lbHtEaXNwbGF5TmFtZX0sCiAgICAgICAgICAgICAgICBDaGFubmVsSW52YWxpZCAgICAgPT4gISRDaGFubmVsT2JqZWN0LAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJUFydGljbGUgPSAoICVBcnRpY2xlLCAleyAkQ29tbXVuaWNhdGlvbkNoYW5uZWxEYXRheyAkQXJ0aWNsZXtDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSB9IH0gKTsKCiAgICAgICAgcHVzaCBAQXJ0aWNsZUJveCwgXCVBcnRpY2xlOwogICAgfQoKICAgIHJldHVybiBAQXJ0aWNsZUJveDsKfQoKPWhlYWQyIF9BcnRpY2xlUmVuZGVyKCkKClJldHVybnMgYXJ0aWNsZSBodG1sLgoKICAgIG15ICRIVE1MID0gJFNlbGYtPl9BcnRpY2xlUmVuZGVyKAogICAgICAgIFRpY2tldElEICAgICAgICAgICAgICAgPT4gMTIzLCAgICAgICMgKHJlcXVpcmVkKQogICAgICAgIEFydGljbGVJRCAgICAgICAgICAgICAgPT4gMTIzLCAgICAgICMgKHJlcXVpcmVkKQogICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgPT4gJ1N0YXRpYycsICMgKHJlcXVpcmVkKSBTdGF0aWMgb3IgT25Mb2FkCiAgICAgICAgU2hvd0Jyb3dzZXJMaW5rTWVzc2FnZSA9PiAxLCAgICAgICAgIyAob3B0aW9uYWwpCiAgICApOwoKUmVzdWx0OgogICAgJEhUTUwgPSAiPGRpdj4uLi48L2Rpdj4iOwoKPWN1dAoKc3ViIF9BcnRpY2xlUmVuZGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXJ0aWNsZUlEIFR5cGUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBHZXQgYXJ0aWNsZSBkYXRhLgogICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5CYWNrZW5kRm9yQXJ0aWNsZSglUGFyYW0pOwoKICAgICMgRGV0ZXJtaW5lIGNoYW5uZWwgbmFtZSBmb3IgdGhpcyBBcnRpY2xlLgogICAgbXkgJENoYW5uZWxOYW1lID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5DaGFubmVsTmFtZUdldCgpOwoKICAgIG15ICRMb2FkZWQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKAogICAgICAgICJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6QWdlbnQ6OiRDaGFubmVsTmFtZSIsCiAgICApOwogICAgcmV0dXJuIGlmICEkTG9hZGVkOwoKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6QWdlbnQ6OiRDaGFubmVsTmFtZSIpLT5BcnRpY2xlUmVuZGVyKAogICAgICAgICVQYXJhbSwKICAgICAgICBBcnRpY2xlQWN0aW9ucyA9PiAkUGFyYW17TWVudUl0ZW1zfSwKICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwp9CgpzdWIgX0dldEluY2x1ZGVkRmllbGRPcmRlcmVkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQFJldHVybjsKCiAgICBJVEVNOgogICAgZm9yIG15ICRJbmNsdWRlSXRlbSAoIEB7ICRQYXJhbXtJbmNsdWRlfSB9ICkgewoKICAgICAgICBpZiAoICRJbmNsdWRlSXRlbS0+e0dyaWR9ICkgewogICAgICAgICAgICBmb3IgbXkgJFJvdyAoIEB7ICRJbmNsdWRlSXRlbS0+e0dyaWR9e1Jvd3N9IH0gKSB7CgogICAgICAgICAgICAgICAgQ09MVU1OOgogICAgICAgICAgICAgICAgZm9yIG15ICRERkVudHJ5ICggJFJvdy0+QCogKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBDT0xVTU4gaWYgISRERkVudHJ5LT57REZ9OwoKICAgICAgICAgICAgICAgICAgICBwdXNoIEBSZXR1cm4sICRERkVudHJ5LT57REZ9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJEluY2x1ZGVJdGVtLT57REZ9ICkgewogICAgICAgICAgICBwdXNoIEBSZXR1cm4sICRJbmNsdWRlSXRlbS0+e0RGfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIEBSZXR1cm47Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AgentTicketZoom.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZ2VudFRpY2tldFpvb20udHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6U2NyaXB0VXNhZ2UpCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBcnRpY2xlRmlsdGVyRGlhbG9nIikgJV0KPGRpdiBpZD0iQXJ0aWNsZUZpbHRlckRpYWxvZyIgY2xhc3M9IkhpZGRlbiI+CiAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgaWQ9IkFydGljbGVGaWx0ZXJEaWFsb2dGb3JtIiBuYW1lPSJBcnRpY2xlRmlsdGVyRGlhbG9nRm9ybSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkFnZW50VGlja2V0Wm9vbSIgbmFtZT0iQWN0aW9uIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkFydGljbGVGaWx0ZXJTZXQiIG5hbWU9IlN1YmFjdGlvbiIvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIHZhbHVlPSJbJSBEYXRhLlRpY2tldElEIHwgaHRtbCAlXSIgbmFtZT0iVGlja2V0SUQiLz4KICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW11bmljYXRpb25DaGFubmVsRmlsdGVyIj5bJSBUcmFuc2xhdGUoIkNvbW11bmljYXRpb24gY2hhbm5lbCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5uZWxzICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9IkN1c3RvbWVyVmlzaWJpbGl0eUZpbHRlciI+WyUgVHJhbnNsYXRlKCJDdXN0b21lciB2aXNpYmlsaXR5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIFslIERhdGEuQ3VzdG9tZXJWaXNpYmlsaXR5ICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9IkFydGljbGVTZW5kZXJUeXBlRmlsdGVyIj5bJSBUcmFuc2xhdGUoIlNlbmRlciBUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIFslIERhdGEuQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXJTdHJpbmcgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2F2ZURlZmF1bHRzIj5bJSBUcmFuc2xhdGUoIlNhdmUgZmlsdGVyIHNldHRpbmdzIGFzIGRlZmF1bHQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iU2F2ZURlZmF1bHRzIiBuYW1lPSJTYXZlRGVmYXVsdHMiIHZhbHVlPSIxIiAvPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2ZpZWxkc2V0PgogICAgPC9mb3JtPgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFydGljbGVGaWx0ZXJEaWFsb2ciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRXZlbnRUeXBlRmlsdGVyRGlhbG9nIikgJV0KPGRpdiBpZD0iRXZlbnRUeXBlRmlsdGVyRGlhbG9nIiBjbGFzcz0iSGlkZGVuIj4KICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBpZD0iRXZlbnRUeXBlRmlsdGVyRGlhbG9nRm9ybSIgbmFtZT0iRXZlbnRUeXBlRmlsdGVyRGlhbG9nRm9ybSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkFnZW50VGlja2V0Wm9vbSIgbmFtZT0iQWN0aW9uIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IkV2ZW5UeXBlRmlsdGVyU2V0IiBuYW1lPSJTdWJhY3Rpb24iLz4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iIG5hbWU9IlRpY2tldElEIi8+CiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICA8bGFiZWwgZm9yPSJFdmVudFR5cGVGaWx0ZXIiPlslIFRyYW5zbGF0ZSgiRXZlbnQgVHlwZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkV2ZW50VHlwZUZpbHRlclN0cmluZyAlXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8bGFiZWwgZm9yPSJTYXZlRGVmYXVsdHMiPlslIFRyYW5zbGF0ZSgiU2F2ZSBhcyBkZWZhdWx0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IlNhdmVEZWZhdWx0cyIgbmFtZT0iU2F2ZURlZmF1bHRzIiB2YWx1ZT0iMSIgLz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9maWVsZHNldD4KICAgIDwvZm9ybT4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJFdmVudFR5cGVGaWx0ZXJEaWFsb2ciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyIikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gVGlja2V0Wm9vbSBVc2VBcnRpY2xlQ29sb3JzIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSBOb01hcmdpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLlByaW9yaXR5KSB8IGh0bWwgJV0iPjxzcGFuIGNsYXNzPSJQcmlvcml0eUlELVslIERhdGEuUHJpb3JpdHlJRCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLlByaW9yaXR5KSB8IGh0bWwgJV08L3NwYW4+PC9kaXY+CiAgICAgICAgPGgxPgogICAgICAgICAgICBbJSBEYXRhLkhvb2sgJV1bJSBDb25maWcoJ1RpY2tldDo6SG9va0RpdmlkZXInKSAlXVslIERhdGEuVGlja2V0TnVtYmVyIHwgaHRtbCAlXSAmbWRhc2g7IFslIERhdGEuVGl0bGUgfCBodG1sICVdCiAgICAgICAgPC9oMT4KICAgIDwvZGl2PgoKIyBJZnJhbWUgdXNlZCBmb3IgZml4aW5nIGJ1ZyM4NTQ1OiBBdHRhY2htZW50IGRvd25sb2FkIG5vdCBwb3NzaWJsZSBpZiBwb3AgdXAgb2YgYW5vdGhlciBhY3Rpb24gaXMgb3BlbgojIEFsbCBkb3dubG9hZHMgKGUuZy4gYXR0YWNobWVudHMpIGhhdmUgdGhpcyBpZnJhbWUgYXMgdGFyZ2V0LiBUaGlzIHByZXZlbnRzIHRoZSBicm93c2VyIGZyb20gc2VuZGluZwojIGFuIGh0dHAgcmVxdWVzdCB0byB0aGUgVGlja2V0Wm9vbSB3aW5kb3cuIEl0IHNlbmRzIHRoZSBkb3dubG9hZCByZXF1ZXN0IHRvIHRoaXMgaWZyYW1lIGluc3RlYWQuCiMgU2VuZGluZyB0aGUgZG93bmxvYWQgcmVxdWVzdCB0byB0aGUgbWFpbiB3aW5kb3cgd291bGQgbGVhZCB0byBhbiBhbGVydCBtZXNzYWdlIGFib3V0IGxlYXZpbmcgdGhlIHBhZ2UKIyBpZiBhdCB0aGUgc2FtZSB0aW1lIGEgcG9wdXAgd2luZG93IChlLmcuIGZvciBhIHRpY2tldCBhbnN3ZXIpIGlzIG9wZW5lZC4KICAgIDxpZnJhbWUgc3JjPSJhYm91dDpibGFuayIgd2lkdGg9IjAiIGhlaWdodD0iMCIgbmFtZT0iQXR0YWNobWVudFdpbmRvdyIgaWQ9IkF0dGFjaG1lbnRXaW5kb3ciPjwvaWZyYW1lPgoKICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGb3JtRHJhZnRUYWJsZSIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoICJEcmFmdHMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiIGlkPSJGb3JtRHJhZnRUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEZPUkVBQ0ggRm9ybURyYWZ0IElOIERhdGEuRm9ybURyYWZ0cyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRHJhZnROYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIEZvcm1EcmFmdC5MaW5rIHwgSW50ZXJwb2xhdGUgJV07TG9hZEZvcm1EcmFmdD0xO0Zvcm1EcmFmdElEPVslIEZvcm1EcmFmdC5Gb3JtRHJhZnRJRCB8IGh0bWwgJV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iWyUgRm9ybURyYWZ0LkNsYXNzIHwgaHRtbCAlXSBNYXN0ZXJBY3Rpb25MaW5rIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRm9ybURyYWZ0LkxpbmtQYXJhbSAlXT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgVHJhbnNsYXRlKEZvcm1EcmFmdC5EZXNjcmlwdGlvbikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRm9ybURyYWZ0Lk5hbWUpIHwgaHRtbCAlXSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdIFslIEZvcm1EcmFmdC5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdIFslIFRyYW5zbGF0ZSgiYnkiKSB8IGh0bWwgJV0gWyUgRm9ybURyYWZ0LkNyZWF0ZWRCeVVzZXIgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXSBbJSBGb3JtRHJhZnQuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXSBbJSBUcmFuc2xhdGUoImJ5IikgfCBodG1sICVdIFslIEZvcm1EcmFmdC5DaGFuZ2VkQnlVc2VyIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRm9ybURyYWZ0LlRpdGxlIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJGb3JtRHJhZnREZWxldGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdP0FjdGlvbj1BZ2VudFRpY2tldFpvb207U3ViYWN0aW9uPUZvcm1EcmFmdERlbGV0ZTtGb3JtRHJhZnRJRD1bJSBGb3JtRHJhZnQuRm9ybURyYWZ0SUQgfCBodG1sICVdO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgJV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRpdGxlPSJbJSBGb3JtRHJhZnQuVGl0bGUgfCBodG1sICVdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRm9ybURyYWZ0LkxpbmtQYXJhbSAlXT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJGb3JtRHJhZnRUYWJsZSIpICVdCgogICAgICAgICAgICBbJSBGT1JFQUNIIFdpZGdldCBJTiBEYXRhLlNpZGViYXJXaWRnZXRzOyAlXQogICAgICAgICAgICAgICAgWyUgSUYgV2lkZ2V0LkFzeW5jOyAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIFdpZGdldC5FbGVtZW50SUQgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRJc0xvYWRpbmciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXNwaW5uZXIgZmEtc3BpbiI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIFslIEVMU0U7ICVdCiAgICAgICAgICAgICAgICAgICAgWyUgV2lkZ2V0Lk91dHB1dCAlXQogICAgICAgICAgICAgICAgWyUgRU5EOyAlXQogICAgICAgICAgICBbJSBFTkQ7ICVdCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IE92ZXJmbG93VmlzaWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93IENsdXN0ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gQXJ0aWNsZVZpZXciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IkFydGljbGVWaWV3U2V0dGluZ3MiIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNldHRpbmdzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY29nIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiU2V0dGluZ3MiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBpZD0ibmF2LVslIERhdGEuTmFtZSB8IHJlcGxhY2UoJyAnLCAnLScpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlR5cGUgPT0gJ0NsdXN0ZXInICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ2xhc3MgJV0iID5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0gPGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdWyUgRGF0YS5MaW5rIHwgSW50ZXJwb2xhdGUgJV0iIGNsYXNzPSJbJSBEYXRhLkNsYXNzICVdIiBbJSBEYXRhLkxpbmtQYXJhbSAlXSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSIgdGFyZ2V0PSJbJSBEYXRhLlRhcmdldCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51U3ViQ29udGFpbmVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9Im5hdi1bJSBEYXRhLk5hbWUgfCByZXBsYWNlKCcgJywgJy0nKSB8IGh0bWwgJV0tY29udGFpbmVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGlja2V0TWVudVN1YkNvbnRhaW5lckl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9Im5hdi1bJSBEYXRhLk5hbWUgfCByZXBsYWNlKCcgJywgJy0nKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgSUYgIURhdGEuRXh0ZXJuYWxMaW5rICVdWyUgRW52KCJCYXNlbGluayIpICVdWyUgRU5EICVdWyUgRGF0YS5MaW5rIHwgSW50ZXJwb2xhdGUgJV0iIGNsYXNzPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSIgWyUgRGF0YS5MaW5rUGFyYW0gJV0gdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlc2NyaXB0aW9uKSB8IGh0bWwgJV0iIHRhcmdldD0iWyUgRGF0YS5UYXJnZXQgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJUaWNrZXRNZW51U3ViQ29udGFpbmVySXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldE1lbnVTdWJDb250YWluZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldE1lbnUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRNZW51UGhvbmVBc0Ryb3Bkb3duIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIiBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0iZ2V0IiBpZD0iWyUgRGF0YS5Gb3JtSUQgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpb24gfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRpY2tldElEIiB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5QaG9uZUVsZW1lbnRJRCB8IGh0bWwgJV0iIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TdGFuZGFyZFJlcGx5U3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJUaWNrZXRNZW51UGhvbmVBc0Ryb3Bkb3duIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTW92ZUxpbmsiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gdGl0bGU9IlslIFRyYW5zbGF0ZSgiTW92ZSB0aWNrZXQgdG8gYSBkaWZmZXJlbnQgcXVldWUiKSB8IGh0bWwgJV0iIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSB8IGh0bWwgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IkFnZW50VGlja2V0TW92ZSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJRdWV1ZUlEIiB2YWx1ZT0iWyUgRGF0YS5RdWV1ZUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUaWNrZXRJRCIgdmFsdWU9IlslIERhdGEuVGlja2V0SUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRlc3RRdWV1ZUlEIiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk1vdmVRdWV1ZXNTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIk1vdmVMaW5rIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiTW92ZUZvcm0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudFRpY2tldE1vdmU7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXTsiIGNsYXNzPSJBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNoYW5nZSBRdWV1ZSIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNb3ZlRm9ybSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldE1lbnVFeHRlcm5hbExpbmsiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBjbGFzcz0iWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0iIFslIERhdGEuTGlua1BhcmFtICVdIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5EZXNjcmlwdGlvbikgfCBodG1sICVdIiB0YXJnZXQ9IlslIERhdGEuVGFyZ2V0ICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0TWVudUV4dGVybmFsTGluayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3V2lkZ2V0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIEV4cGFuZGVkIiBpZD0iRHluYW1pY0ZpZWxkc1dpZGdldCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPjxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZShEYXRhLldpZGdldFRpdGxlKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5leHRBY3Rpdml0eURpYWxvZ3MiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTGlnaHRSb3cgQm90dG9tIj4KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5bJSBUcmFuc2xhdGUoRGF0YS5BY3Rpdml0eU5hbWUpIHwgaHRtbCAlXTo8L3N0cm9uZz48L2xpPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpdml0eURpYWxvZ0RpcmVjdFN1Ym1pdCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0iIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSB8IGh0bWwgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRUaWNrZXRQcm9jZXNzIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU3RvcmVBY3Rpdml0eURpYWxvZyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlRpY2tldElEIiB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJQcm9jZXNzRW50aXR5SUQiIHZhbHVlPSJbJSBEYXRhLlByb2Nlc3NFbnRpdHlJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpdml0eURpYWxvZ0VudGl0eUlEIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpdml0eURpYWxvZ0VudGl0eUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9IkJ1dHRvbl9bJSBEYXRhLkFjdGl2aXR5RGlhbG9nRW50aXR5SUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciIgdHlwZT0ic3VibWl0Ij5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGl2aXR5RGlhbG9nRGlyZWN0U3VibWl0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aXZpdHlEaWFsb2ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24gTmV4dEFjdGl2aXR5RGlhbG9nIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRQcm9jZXNzO1N1YmFjdGlvbj1EaXNwbGF5QWN0aXZpdHlEaWFsb2c7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXTtQcm9jZXNzRW50aXR5SUQ9WyUgRGF0YS5Qcm9jZXNzRW50aXR5SUQgfCB1cmkgJV07QWN0aXZpdHlEaWFsb2dFbnRpdHlJRD1bJSBEYXRhLkFjdGl2aXR5RGlhbG9nRW50aXR5SUQgfCB1cmkgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpdml0eURpYWxvZyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC91bD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9BY3Rpdml0eURpYWxvZ3MiKSAlXQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJBY3Rpb25NZXNzYWdlIj5bJSBUcmFuc2xhdGUoIlRoZXJlIGFyZSBubyBkaWFsb2dzIGF2YWlsYWJsZSBhdCB0aGlzIHBvaW50IGluIHRoZSBwcm9jZXNzLiIpIHwgaHRtbCAlXTwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vQWN0aXZpdHlEaWFsb2dzIikgJV0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5leHRBY3Rpdml0eURpYWxvZ3MiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBQcm9jZXNzSW5mbyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUHJvY2Vzc0luZm9ybWF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwcyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBTZXBhcmF0b3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJGaWVsZFNldFNlcGFyYXRvciI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBTZXBhcmF0b3IiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlN0YW5kYXJkRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGRDb250YWluZXIgRHluYW1pY0ZpZWxkQXV0b1Jlc2l6ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPSJbJSBEYXRhLkxhYmVsIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgfCBodG1sICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJTaG93RmllbGRJbmZvT3ZlcmxheSI+KzwvYT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUgQ3V0VmFsdWUgRHluYW1pY0ZpZWxkX1slIERhdGEuTmFtZSAlXSI+CjwhLS0gT3V0cHV0RmlsdGVySG9va19XaWRnZXREeW5hbWljRmllbGRCZWdpbiAtLT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRMaW5rIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgJV0iPjxhIGhyZWY9IlslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIlslIElGIERhdGEuTGlua1ByZXZpZXcgJV0gZGF0YS10cmlnZ2VyPSJmbG9hdGVyIiBkYXRhLWZsb2F0ZXItdXJsPSJbJSBEYXRhLkxpbmtQcmV2aWV3IHwgSW50ZXJwb2xhdGUgJV0iWyUgRU5EICVdIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iRHluYW1pY0ZpZWxkTGluayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZExpbmsiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWx1ZSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRQbGFpbiIpICVdCjwhLS0gT3V0cHV0RmlsdGVySG9va19XaWRnZXREeW5hbWljRmllbGRFbmQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZUxvbmciPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFZhbHVlTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVMb25nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTdGFuZGFyZEZpZWxkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU2V0RHluYW1pY0ZpZWxkIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkU2V0U2VwYXJhdG9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9IkZpZWxkU2V0U2VwYXJhdG9yIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZFNldFNlcGFyYXRvciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGRDb250YWluZXIgRHluYW1pY0ZpZWxkQXV0b1Jlc2l6ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgdGl0bGU9IlslIERhdGEuTGFiZWwgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsIHwgaHRtbCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXREeW5hbWljRmllbGRWYWx1ZU92ZXJsYXlUcmlnZ2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iU2hvd0ZpZWxkSW5mb092ZXJsYXkiPis8L2E+ClslIFJlbmRlckJsb2NrRW5kKCJTZXREeW5hbWljRmllbGRWYWx1ZU92ZXJsYXlUcmlnZ2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUgQ3V0VmFsdWUgRHluYW1pY0ZpZWxkX1slIERhdGEuTmFtZSAlXSI+CjwhLS0gT3V0cHV0RmlsdGVySG9va19TZXREeW5hbWljRmllbGRCZWdpbiAtLT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RHluYW1pY0ZpZWxkTGluayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgJV0iPjxhIGhyZWY9IlslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIlslIElGIERhdGEuTGlua1ByZXZpZXcgJV0gZGF0YS10cmlnZ2VyPSJmbG9hdGVyIiBkYXRhLWZsb2F0ZXItdXJsPSJbJSBEYXRhLkxpbmtQcmV2aWV3IHwgSW50ZXJwb2xhdGUgJV0iWyUgRU5EICVdIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iRHluYW1pY0ZpZWxkTGluayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJTZXREeW5hbWljRmllbGRMaW5rIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0RHluYW1pY0ZpZWxkUGxhaW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNldER5bmFtaWNGaWVsZFBsYWluIikgJV0KPCEtLSBPdXRwdXRGaWx0ZXJIb29rX1NldER5bmFtaWNGaWVsZEVuZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZUxvbmciPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXREeW5hbWljRmllbGRWYWx1ZUxvbmciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNldER5bmFtaWNGaWVsZFZhbHVlTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRTZXRWYWx1ZVNlcGFyYXRvciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJGaWVsZFNldFNlcGFyYXRvciI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZFNldFZhbHVlU2VwYXJhdG9yIikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNldER5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTZXRGaWVsZCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwcyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1dpZGdldCIpICVdCgogICAgICAgICAgICA8ZGl2IGlkPSJBcnRpY2xlVHJlZSI+ClslIERhdGEuQXJ0aWNsZVRyZWUgJV0KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIaW50Tm9BcnRpY2xlcyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRoaXMgaXRlbSBoYXMgbm8gYXJ0aWNsZXMgeWV0LiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSGludE5vQXJ0aWNsZXMiKSAlXQoKICAgICAgICAgICAgPGRpdiBpZD0iQXJ0aWNsZUl0ZW1zIj4KWyUgRGF0YS5BcnRpY2xlSXRlbXMgJV0KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICBbJSBGT1JFQUNIIFdpZGdldCBJTiBEYXRhLk1haW5XaWRnZXRzOyAlXQogICAgICAgICAgICAgICAgWyUgSUYgV2lkZ2V0LkFzeW5jOyAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIFdpZGdldC5FbGVtZW50SUQgJV0iPjwvZGl2PgogICAgICAgICAgICAgICAgWyUgRUxTRTsgJV0KICAgICAgICAgICAgICAgICAgICBbJSBXaWRnZXQuT3V0cHV0ICVdCiAgICAgICAgICAgICAgICBbJSBFTkQ7ICVdCiAgICAgICAgICAgIFslIEVORDsgJV0KCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+Cgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlciIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlIikgJV0KPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT4KICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+CiAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aDI+CiAgICAgICAgWyUgSUYgRGF0YS5ab29tVGltZWxpbmUgJV0KICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaWNrZXQgVGltZWxpbmUgVmlldyIpIHwgaHRtbCAlXQogICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJBcnRpY2xlIE92ZXJ2aWV3IC0gJXMgQXJ0aWNsZShzKSIsIERhdGEuQXJ0aWNsZUNvdW50KSB8IGh0bWwgJV0KICAgICAgICBbJSBFTkQgJV0KICAgICAgICA8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9IkFkZGl0aW9uYWxJbmZvcm1hdGlvbiBDb250cm9sUm93Ij4KClslIFJlbmRlckJsb2NrU3RhcnQoIkFydGljbGVQYWdlcyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVQYWdlcyBJY29ucyI+CiAgICAgICAgWyUgRk9SRUFDSCBwYWdlIElOIFsxIC4uIERhdGEuUGFnZXNdOyAlXQogICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEIHwgdXJpICVdO0FydGljbGVQYWdlPVslIHBhZ2UgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoJ1BhZ2UgJXMnLCBwYWdlKSB8IGh0bWwgJV0iIGRhdGEtcGFnZT0iWyUgcGFnZSAlXSIgWyUgSUYgcGFnZSA9PSBEYXRhLkN1cnJlbnRQYWdlICVdY2xhc3M9IkFjdGl2ZSJbJSBFTkQgJV0+WyUgcGFnZSAlXTwvYT4KICAgICAgICBbJSBFTkQ7ICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZVBhZ2VzIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQXJ0aWNsZUZpbHRlckRpYWxvZ0xpbmsiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBcnRpY2xlRmlsdGVyIEljb25zIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkFydGljbGUgRmlsdGVyIikgfCBodG1sICVdOjwvc3Bhbj4KIyBPbmx5IHNob3cgb25lOiBTZXQgb3IgUmVzZXQuCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBcnRpY2xlRmlsdGVyU2V0TGluayIpICVdCiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iU2V0QXJ0aWNsZUZpbHRlciIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQWRkIEZpbHRlciIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWZpbHRlciI+PC9pPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2V0IikgfCBodG1sICVdPC9zcGFuPjwvYT4KI1slIFJlbmRlckJsb2NrRW5kKCJBcnRpY2xlRmlsdGVyU2V0TGluayIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFydGljbGVGaWx0ZXJSZXNldExpbmsiKSAlXQogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9IlJlc2V0QXJ0aWNsZUZpbHRlciIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVzZXQgRmlsdGVyIikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+PC9pPjxzcGFuPlslIFRyYW5zbGF0ZSgiUmVzZXQiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZUZpbHRlclJlc2V0TGluayIpICVdCiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZUZpbHRlckRpYWxvZ0xpbmsiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQXJ0aWNsZUxpc3QiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IlRpY2tldExpc3QiPgogICAgICAgICAgICA8ZGl2IGlkPSJBcnRpY2xlVGFibGVCb2R5IiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNjcm9sbGVyIj4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgaWQ9IkFydGljbGVUYWJsZSIgY2xhc3M9IkRhdGFUYWJsZSBbJSBEYXRhLlRhYmxlQ2xhc3NlcyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJObyBTb3J0YWJsZSBJbml0aWFsU29ydGluZyBbJSBEYXRhLlpvb21FeHBhbmRTb3J0T3JkZXIgJV0iPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiTm8uIikgfCBodG1sICVdPC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJVbnJlYWRBcnRpY2xlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJVbnJlYWRBcnRpY2xlcyIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVW5yZWFkIGFydGljbGVzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJVbnJlYWRBcnRpY2xlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkRpcmVjdGlvbiBTb3J0YWJsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGlyZWN0aW9uIikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtZXhjaGFuZ2UiPjwvaT48L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlNlbmRlciBTb3J0YWJsZSI+PGEgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJTZW5kZXIiKSB8IGh0bWwgJV08L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5uZWwgU29ydGFibGUiPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiVmlhIikgfCBodG1sICVdPC9hPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJTdWJqZWN0IFNvcnRhYmxlIj48YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIlN1YmplY3QiKSB8IGh0bWwgJV08L2E+PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNyZWF0ZWQgU29ydGFibGUiPjxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTwvYT48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQXJ0aWNsZUVkaXQgU29ydGFibGUgQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQXJ0aWNsZSBFZGl0ZWQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWVkaXQiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJBdHRhY2htZW50cyBMYXN0IENlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkF0dGFjaG1lbnRzIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1wYXBlcmNsaXAiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iWyUgRGF0YS5TZW5kZXJUeXBlIHwgaHRtbCAlXSBbJSBJRiBEYXRhLlNlbmRlclR5cGUgPT0gJ2N1c3RvbWVyJyAlXUluY29taW5nWyUgRUxTRSAlXU91dGdvaW5nWyUgRU5EICVdIFslIElGIERhdGEuSXNWaXNpYmxlRm9yQ3VzdG9tZXIgJV1WaXNpYmxlRm9yQ3VzdG9tZXJbJSBFTFNFICVdTm90VmlzaWJsZUZvckN1c3RvbWVyWyUgRU5EICVdIFslIElGIERhdGEuQXJ0aWNsZURlbGV0ZWQgPT0gIjEiICVdIEFydGljbGVEZWxldGVkIFslIEVORCAlXSBbJSBEYXRhLkNsYXNzUm93IHwgaHRtbCAlXSIgaWQ9IlJvd1slIERhdGEuQXJ0aWNsZU51bWJlciB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJObyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQXJ0aWNsZU51bWJlciB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IkFydGljbGVJbmZvIiBuYW1lPSJMaW5rWyUgRGF0YS5BcnRpY2xlTnVtYmVyIHwgdXJpICVdIiB2YWx1ZT0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50VGlja2V0Wm9vbTtTdWJhY3Rpb249QXJ0aWNsZVVwZGF0ZTtDb3VudD1bJSBEYXRhLkFydGljbGVOdW1iZXIgfCB1cmkgJV07VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV07QXJ0aWNsZUlEPVslIERhdGEuQXJ0aWNsZUlEIHwgaHRtbCAlXTsiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IkFydGljbGVJRCIgdmFsdWU9IlslIERhdGEuQXJ0aWNsZUlEIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5BcnRpY2xlTnVtYmVyIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0gVW5yZWFkQXJ0aWNsZXMgRml4ZWQgTm9uVGV4dENvbnRlbnQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbUltcG9ydGFudEFydGljbGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iSW1wb3J0YW50QXJ0aWNsZXMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkltcG9ydGFudCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbT5bJSBUcmFuc2xhdGUoIkltcG9ydGFudCIpIHwgaHRtbCAlXTwvZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWVJdGVtSW1wb3J0YW50QXJ0aWNsZSIpICVdCgojIFJvdGhlck9TUyAvIEFnZW50VGlja2V0QXJ0aWNsZVBpbgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1QaW5uZWRBcnRpY2xlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlBpbm5lZEFydGljbGUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlBpbm5lZCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGh1bWItdGFjayI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtPlslIFRyYW5zbGF0ZSgiUGlubmVkIikgfCBodG1sICVdPC9lbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1QaW5uZWRBcnRpY2xlIikgJV0KCiMgRU8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbU5ld0FydGljbGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlVucmVhZCBBcnRpY2xlISIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc3RhciI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1OZXdBcnRpY2xlIikgJV0KCiMgUm90aGVyT1NTIC8gQWdlbnRUaWNrZXRBcnRpY2xlUGluCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbU5vTmV3QXJ0aWNsZSIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTm9Db250ZW50Ij48L3NwYW4+CiNbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1Ob05ld0FydGljbGUiKSAlXQojIEVPIEFnZW50VGlja2V0QXJ0aWNsZVBpbgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRGlyZWN0aW9uIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1EaXJlY3Rpb25JbmNvbWluZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEaXJlY3Rpb24gSW5jb21pbmciIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkluY29taW5nIG1lc3NhZ2UiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWxvbmctYXJyb3ctbGVmdCI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IjAiIC8+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbURpcmVjdGlvbkluY29taW5nIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1EaXJlY3Rpb25PdXRnb2luZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEaXJlY3Rpb24gT3V0Z29pbmciIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk91dGdvaW5nIG1lc3NhZ2UiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWxvbmctYXJyb3ctcmlnaHQiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSIxIiAvPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1EaXJlY3Rpb25PdXRnb2luZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtRGlyZWN0aW9uSW50ZXJuYWwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iRGlyZWN0aW9uIEludGVybmFsIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJJbnRlcm5hbCBtZXNzYWdlIikgfCBodG1sICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IjIiIC8+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbURpcmVjdGlvbkludGVybmFsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iU2VuZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgRGF0YS5BcnRpY2xlRmllbGRzLlNlbmRlci5WYWx1ZSB8IGh0bWwgJV0iPjxhIGhyZWY9IiMiPlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TZW5kZXIuUmVhbG5hbWUgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvYT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5BcnRpY2xlRmllbGRzLlNlbmRlci5WYWx1ZSB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNoYW5uZWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIFRyYW5zbGF0ZShEYXRhLkNoYW5uZWxEaXNwbGF5TmFtZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuQ2hhbm5lbEludmFsaWQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBUcmFuc2xhdGUoIk1pc3NpbmcgY2hhbm5lbCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIFdhcm5pbmciIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLlRyYW5zbWlzc2lvblN0YXR1cyAmJiBEYXRhLlRyYW5zbWlzc2lvblN0YXR1cy5TdGF0dXMgPT0gJ0ZhaWxlZCcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNlbmRpbmcgb2YgdGhpcyBtZXNzYWdlIGhhcyBmYWlsZWQuIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGltZXMgRXJyb3IiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKERhdGEuQ2hhbm5lbERpc3BsYXlOYW1lKSB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlN1YmplY3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLkFydGljbGVGaWVsZHMuU3ViamVjdC5WYWx1ZSB8IGh0bWwgJV0iPjxhIGhyZWY9IiMiPlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TdWJqZWN0LlZhbHVlIHwgdHJ1bmNhdGUoMTAwKSB8IGh0bWwgJV08L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TdWJqZWN0LlZhbHVlIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ3JlYXRlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCdUaW1lU2hvcnQnKSAlXSI+PGEgaHJlZj0iIyI+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC9hPjwvZGl2PgojIEluY2x1ZGUgY3VzdG9tIHNvcnRpbmcgaW5mb3JtYXRpb246IGRhdGUgaW4gSVNPIGZvcm1hdC4KIyBPdGhlciBkYXRlIGZvcm1hdHMgY2Fubm90IGJlIHNvcnRlZCByZWxpYWJseS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5DcmVhdGVUaW1lIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUaGUgYXJ0aWNsZSB3YXMgZWRpdGVkIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuSXNFZGl0ZWQgPT0gIjEiICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkVkaXRJY29uIj48aSBjbGFzcz0iZmEgZmEtY2xvbmUiPjwvaT48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IlslIERhdGEuSXNFZGl0ZWQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQXR0YWNobWVudHMgQ2VudGVyIEF0dGFjaG1lbnQgRml4ZWQgTm9uVGV4dENvbnRlbnQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbUF0dGFjaG1lbnQiKSAlXQpbJSBQUk9DRVNTIEFydGljbGVBdHRhY2htZW50cy50dCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1BdHRhY2htZW50IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1Ob0F0dGFjaG1lbnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTm9Db250ZW50Ij48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbU5vQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGFuZGxlIHVpLXJlc2l6YWJsZS1oYW5kbGUgdWktcmVzaXphYmxlLXMiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiUmVzaXplIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZUxpc3QiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVGltZWxpbmVWaWV3IikgJV0KCiAgICAgICAgPGRpdiBjbGFzcz0iVGltZWxpbmVWaWV3VGlja2V0QWN0aW9ucyBIaWRkZW4iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaW1lbGluZVZpZXdUaWNrZXRBY3Rpb25zIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iVGlja2V0QWN0aW9ucyBBcnRpY2xlSURfWyUgRGF0YS5BcnRpY2xlSUQgfCBodG1sICVdIj4KWyUgUFJPQ0VTUyBBcnRpY2xlQWN0aW9uTWVudS50dCAlXQogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVsaW5lVmlld1RpY2tldEFjdGlvbnMiKSAlXQogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJUaW1lbGluZVZpZXdBcnRpY2xlQXR0YWNobWVudHMgSGlkZGVuIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGltZWxpbmVWaWV3QXJ0aWNsZUF0dGFjaG1lbnRzIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXJ0aWNsZUF0dGFjaG1lbnRzIEFydGljbGVJRF9bJSBEYXRhLkFydGljbGVJRCB8IGh0bWwgJV0iPgpbJSBQUk9DRVNTIEFydGljbGVBdHRhY2htZW50cy50dCAlXQogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVsaW5lVmlld0FydGljbGVBdHRhY2htZW50cyIpICVdCiAgICAgICAgPC9kaXY+CgogICAgICAgIDx1bCBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgPGxpIGlkPSJUZW1wbGF0ZUxpc3RJdGVtIj4KICAgICAgICAgICAgICAgIDxoMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJVbnJlYWRBcnRpY2xlcyBSZW1hcmthYmxlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJNYXJrIHRoaXMgYXJ0aWNsZSBhcyByZWFkIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkltcG9ydGFudCIpIHwgaHRtbCAlXSI+PC9pPgogICAgICAgICAgICAgICAgICAgIDxlbT48L2VtPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9IlR5cGUiPjwvc3Ryb25nPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPjxzcGFuPjwvc3Bhbj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9IlNob3dGdWxsQXJ0aWNsZVRleHQiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgRnVsbCBUZXh0IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXNlYXJjaC1wbHVzIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgoKICAgICAgICA8ZGl2IGlkPSJUZW1wbGF0ZUFydGljbGVEYXRhIiBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJzdWJqZWN0Ij4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZSgiU3ViamVjdCIpIHwgaHRtbCAlXTogPC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmcm9tIj4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZSgiRnJvbSIpIHwgaHRtbCAlXTogPC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0byI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5bJSBUcmFuc2xhdGUoIlRvIikgfCBodG1sICVdOiA8L3N0cm9uZz4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImNjIj4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZSgiQ2MiKSB8IGh0bWwgJV06IDwvc3Ryb25nPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGlkZGVuIEZ1bGxBcnRpY2xlUGxhaW5UZXh0IiBkYXRhLXRpdGxlPSJbJSBUcmFuc2xhdGUoIkZ1bGwgQXJ0aWNsZSBUZXh0IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlRpbWVsaW5lUGxhaW5UZXh0Ij48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxwIGNsYXNzPSJQbGFpblRleHQiPjwvcD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGlkZGVuIEFydGljbGVJRnJhbWUiIGRhdGEtdGl0bGU9IlslIFRyYW5zbGF0ZSgiRnVsbCBBcnRpY2xlIFRleHQiKSB8IGh0bWwgJV0iPjwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJUaW1lbGluZVZpZXcgVXNlQXJ0aWNsZUNvbG9ycyI+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iTGlzdExlZnQiPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJOb0V2ZW50cyI+WyUgVHJhbnNsYXRlKCJObyBtb3JlIGV2ZW50cyBmb3VuZC4gUGxlYXNlIHRyeSBjaGFuZ2luZyB0aGUgZmlsdGVyIHNldHRpbmdzLiIpIHwgaHRtbCAlXTwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iTGlzdFJpZ2h0Ij48L3VsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1zcGlubmVyIGZhLXNwaW4iPjwvaT48L3NwYW4+CiAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja0VuZCgiVGltZWxpbmVWaWV3IikgJV0KCiAgICA8L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlIikgJV0KClslIERhdGEuQXJ0aWNsZVdpZGdldHNIVE1MICVdCg==</File>
        <File Location="Kernel/Output/HTML/ArticleAction/ArticlePin.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKIyBUT0RPOiB3aGVuIG1lcmdpbmcgdG8gQ29yZSwgYWRhcHQgaGFuZGxpbmcgdG8gYmUgdGhlIHNhbWUgYXMgd2l0aCAiTWFya0FzSW1wb3J0YW50Iihmb3VuZCBpbiBBZ2VudFRpY2tldFpvb20pCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBcnRpY2xlUGluOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBDaGVja0FjY2VzcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgQ2hlY2sgbmVlZGVkIHN0dWZmLgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldCBBcnRpY2xlIENoYW5uZWxOYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIERlZmluZSBhY3Rpb24gYW5kIGdldCBpdHMgZnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4KICAgIG15ICRBY3Rpb24gICAgICAgPSAnQWdlbnRUaWNrZXRBcnRpY2xlUGluJzsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJENvbmZpZyAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn07CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgIG15ICRQZXJtaXNzaW9uID0gMDsKCiAgICAjIGNoZWNrIGlmIG1vZHVsZSBpcyByZWdpc3RlcmVkCiAgICByZXR1cm4gaWYgISRDb25maWc7CgogICAgIyBjaGVjayBBY2wKICAgIHJldHVybiBpZiAhJFBhcmFte0FjbEFjdGlvbkxvb2t1cH0tPnskQWN0aW9ufTsKCiAgICAjIEdldCBncm91cCBuYW1lcyBmcm9tIGNvbmZpZy4KICAgIG15IEBHcm91cE5hbWVzICAgPSBAeyAkQ29uZmlnLT57R3JvdXB9ICAgfHwgW10gfTsKICAgIG15IEBHcm91cFJvTmFtZXMgPSBAeyAkQ29uZmlnLT57R3JvdXBSb30gfHwgW10gfTsKCiAgICBwdXNoKCBAR3JvdXBOYW1lcywgQEdyb3VwUm9OYW1lcyApOwoKICAgICMgSWYgYWNjZXNzIGlzIHJlc3RyaWN0ZWQsIGFsbG93IGFjY2VzcyBvbmx5IGlmIHVzZXIgaGFzIGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zIGluIGNvbmZpZ3VyZWQgZ3JvdXAocykuCiAgICBpZiAoQEdyb3VwTmFtZXMpIHsKICAgICAgICBteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiAgICAgICAgIyBHZXQgdXNlciBncm91cHMsIHdoZXJlIHRoZSB1c2VyIGhhcyB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMuCiAgICAgICAgbXkgJUdyb3VwcyA9ICRHcm91cE9iamVjdC0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgICAgICk7CgogICAgICAgIEdST1VQOgogICAgICAgIGZvciBteSAkR3JvdXBOYW1lIChAR3JvdXBOYW1lcykgewogICAgICAgICAgICBuZXh0IEdST1VQIGlmICEkR3JvdXBOYW1lOwoKICAgICAgICAgICAgIyBHZXQgdGhlIGdyb3VwIElELgogICAgICAgICAgICBteSAkR3JvdXBJRCA9ICRHcm91cE9iamVjdC0+R3JvdXBMb29rdXAoCiAgICAgICAgICAgICAgICBHcm91cCA9PiAkR3JvdXBOYW1lLAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IEdST1VQIGlmICEkR3JvdXBJRDsKCiAgICAgICAgICAgICMgU3RvcCBjaGVja2luZyBpZiBtZW1iZXJzaGlwIGluIGF0IGxlYXN0IG9uZSBncm91cCBpcyBmb3VuZC4KICAgICAgICAgICAgaWYgKCAkR3JvdXBzeyRHcm91cElEfSApIHsKICAgICAgICAgICAgICAgICRQZXJtaXNzaW9uID0gMTsKICAgICAgICAgICAgICAgIGxhc3QgR1JPVVA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBPdGhlcndpc2UsIGFsd2F5cyBhbGxvdyBhY2Nlc3MuCiAgICBlbHNlIHsKICAgICAgICAkUGVybWlzc2lvbiA9IDE7CiAgICB9CgogICAgaWYgKCAkUGVybWlzc2lvbiA9PSAxICkgewoKICAgICAgICBteSAkUGluQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEFydGljbGVQaW4nKTsKCiAgICAgICAgaWYgKCAkUGluQ29uZmlnLT57UGVybWlzc2lvbn0gKSB7CiAgICAgICAgICAgIG15ICRPayA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkUGluQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17VGlja2V0fS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgTG9nTm8gICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuIGlmICEkT2s7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRQaW5Db25maWctPntSZXF1aXJlZExvY2t9ICkgewogICAgICAgICAgICBteSAkTG9ja2VkID0gJFRpY2tldE9iamVjdC0+VGlja2V0TG9ja0dldCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXR9LT57VGlja2V0SUR9CiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkTG9ja2VkKSB7CiAgICAgICAgICAgICAgICBteSAkQWNjZXNzT2sgPSAkVGlja2V0T2JqZWN0LT5Pd25lckNoZWNrKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXR9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIE93bmVySUQgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybiBpZiAhJEFjY2Vzc09rOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBHZXRDb25maWcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIENoZWNrIG5lZWRlZCBzdHVmZi4KICAgIGZvciBteSAkTmVlZGVkIChxdyhUaWNrZXQgQXJ0aWNsZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB1c2UgdXNlciBpZCAxIGJlY2F1c2UgYXJ0aWNsZXMgYXJlIHBpbm5lZCBmb3IgYWxsIHVzZXJzCiAgICBteSAlQXJ0aWNsZUZsYWdzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5BcnRpY2xlRmxhZ0dldCgKICAgICAgICBBcnRpY2xlSUQgPT4gJFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgbXkgJEFydGljbGVJc1Bpbm5lZCA9ICRBcnRpY2xlRmxhZ3N7UGlubmVkfTsKCiAgICBteSAkTGluayAgICAgICAgPSAiQWN0aW9uPUFnZW50VGlja2V0QXJ0aWNsZVBpbjtUaWNrZXRJRD0kUGFyYW17VGlja2V0fS0+e1RpY2tldElEfTtBcnRpY2xlSUQ9JFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSI7CiAgICBteSAkRGVzY3JpcHRpb24gPSBUcmFuc2xhdGFibGUoJ1BpbicpOwogICAgaWYgKCRBcnRpY2xlSXNQaW5uZWQpIHsKICAgICAgICAkRGVzY3JpcHRpb24gPSBUcmFuc2xhdGFibGUoJ1VucGluJyk7CiAgICB9CgogICAgIyBzZXQgaW1wb3J0YW50IG1lbnUgaXRlbQogICAgbXkgJU1lbnVJdGVtID0gKAogICAgICAgIEl0ZW1UeXBlICAgID0+ICdMaW5rJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAkRGVzY3JpcHRpb24sCiAgICAgICAgTmFtZSAgICAgICAgPT4gJERlc2NyaXB0aW9uLAogICAgICAgIExpbmsgICAgICAgID0+ICRMaW5rLAogICAgKTsKCiAgICByZXR1cm4gKCBcJU1lbnVJdGVtICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/AgentTicketArticlePin.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50VGlja2V0QXJ0aWNsZVBpbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXJ0aWNsZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICROZWVkZWQgKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5lZWRlZCApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBhcnRpY2xlcyBhcmUgcGlubmVkIGZvciBhbGwgdXNlcnMKICAgIG15ICVBcnRpY2xlRmxhZ3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkFydGljbGVGbGFnR2V0KAogICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgIG15ICRBcnRpY2xlSXNQaW5uZWQgPSAkQXJ0aWNsZUZsYWdze1Bpbm5lZH07CgogICAgaWYgKCRBcnRpY2xlSXNQaW5uZWQpIHsKCiAgICAgICAgIyB1c2UgdXNlciBpZCAxIGJlY2F1c2UgYXJ0aWNsZXMgYXJlIHBpbm5lZCBmb3IgYWxsIHVzZXJzCiAgICAgICAgJEFydGljbGVPYmplY3QtPkFydGljbGVGbGFnRGVsZXRlKAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIEtleSAgICAgICA9PiAnUGlubmVkJywKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIHVzZSB1c2VyIGlkIDEgYmVjYXVzZSBhcnRpY2xlcyBhcmUgcGlubmVkIGZvciBhbGwgdXNlcnMKICAgICAgICAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdTZXQoCiAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdQaW5uZWQnLAogICAgICAgICAgICBWYWx1ZSAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFNlbGYtPntUaWNrZXRJRH07QXJ0aWNsZUlEPSRTZWxmLT57QXJ0aWNsZUlEfSIsCiAgICApOwp9CgoxOwo=</File>
        <File Location="Kernel/Config/Files/XML/ArticlePin.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zIyMjSW50ZXJuYWwiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBhdmFpbGFibGUgYXJ0aWNsZSBhY3Rpb25zIGZvciBJbnRlcm5hbCBhcnRpY2xlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0Wm9vbTo6QXJ0aWNsZUFjdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0QXJ0aWNsZVJlc3RvcmUiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0QXJ0aWNsZVJlc3RvcmU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEFydGljbGVEZWxldGUiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0QXJ0aWNsZURlbGV0ZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4yMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0QXJ0aWNsZVZlcnNpb24iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0QXJ0aWNsZVZlcnNpb248L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MzA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEFydGljbGVFZGl0Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldEFydGljbGVFZGl0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjQwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRDb21wb3NlIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldENvbXBvc2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRGb3J3YXJkIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldEZvcndhcmQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MjAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRCb3VuY2UiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Qm91bmNlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjMwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0UGhvbmUiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0UGhvbmU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NDAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRQcmludCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj41MDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldFBsYWluIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldFBsYWluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjYwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmtBc0ltcG9ydGFudCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6TWFya0FzSW1wb3J0YW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjcwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0Tm90ZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXROb3RlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjgwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmtBcnRpY2xlU2VlblVuc2VlbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6TWFya0FydGljbGVTZWVuVW5zZWVuPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjkwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFydGljbGVQaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFydGljbGVQaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MTAwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QXJ0aWNsZTo6QWN0aW9ucyMjI1Bob25lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgYXZhaWxhYmxlIGFydGljbGUgYWN0aW9ucyBmb3IgUGhvbmUgYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldFpvb206OkFydGljbGVBY3Rpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldENvbXBvc2UiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Q29tcG9zZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4xMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEFydGljbGVFZGl0Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldEFydGljbGVFZGl0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjExMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEZvcndhcmQiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Rm9yd2FyZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4yMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEJvdW5jZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRCb3VuY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MzAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRQaG9uZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRQaG9uZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj40MDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldFByaW50Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldFByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjUwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0UGxhaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0UGxhaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NjAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFya0FzSW1wb3J0YW50Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpNYXJrQXNJbXBvcnRhbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NzAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXROb3RlIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldE5vdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+ODAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFya0FydGljbGVTZWVuVW5zZWVuIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpNYXJrQXJ0aWNsZVNlZW5VbnNlZW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+OTAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQXJ0aWNsZVBpbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QXJ0aWNsZVBpbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4xMDAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zIyMjRW1haWwiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBhdmFpbGFibGUgYXJ0aWNsZSBhY3Rpb25zIGZvciBlLW1haWwgYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldFpvb206OkFydGljbGVBY3Rpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldENvbXBvc2UiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Q29tcG9zZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4xMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEZvcndhcmQiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Rm9yd2FyZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4yMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldEJvdW5jZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRCb3VuY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+MzAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRQaG9uZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRQaG9uZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj40MDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldFByaW50Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldFByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjUwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0TWVzc2FnZUxvZyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRNZXNzYWdlTG9nPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjU1MDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0UGxhaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0UGxhaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NjAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFya0FzSW1wb3J0YW50Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpNYXJrQXNJbXBvcnRhbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+NzAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXROb3RlIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldE5vdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+ODAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRUaWNrZXRFbWFpbFJlc2VuZCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRFbWFpbFJlc2VuZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj45MDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXJrQXJ0aWNsZVNlZW5VbnNlZW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246Ok1hcmtBcnRpY2xlU2VlblVuc2VlbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4xMDAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQXJ0aWNsZVBpbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QXJ0aWNsZVBpbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj4xMTAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zIyMjQ2hhdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGF2YWlsYWJsZSBhcnRpY2xlIGFjdGlvbnMgZm9yIENoYXQgYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldFpvb206OkFydGljbGVBY3Rpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWQiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudFRpY2tldFByaW50Ij4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldFByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjUwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmtBc0ltcG9ydGFudCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6TWFya0FzSW1wb3J0YW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjcwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0Rm9yd2FyZCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRGb3J3YXJkPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjIwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZW50VGlja2V0Q29tcG9zZSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRDb21wb3NlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjEwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcmtBcnRpY2xlU2VlblVuc2VlbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6TWFya0FydGljbGVTZWVuVW5zZWVuPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjMwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFydGljbGVQaW4iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFydGljbGVQaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+ODAwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlZhbGlkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRUaWNrZXRBcnRpY2xlUGluIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5BZ2VudFRpY2tldEFydGljbGVQaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudFRpY2tldFpvb20jIyMwMTAtQXJ0aWNsZVBpbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWdlbnQuQXJ0aWNsZVBpbi5jc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkFydGljbGVQaW4uanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPnRoaXJkcGFydHkvanF1ZXJ5LXRhYmxlc29ydGVyLTIuMjguMTQvd2lkZ2V0LXN0YXRpY1Jvdy5taW4uanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEFydGljbGVQaW4jIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHBlcm1pc3Npb24gcmVxdWlyZWQgdG8gcGluL3VucGluIGFydGljbGVzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OkFnZW50VGlja2V0QXJ0aWNsZVBpbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPm5vdGU8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0QXJ0aWNsZVBpbiMjI1JlcXVpcmVkTG9jayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgdG8gcGluIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6QWdlbnRUaWNrZXRBcnRpY2xlUGluPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L290b2JvX2NvbmZpZz4K</File>
        <File Location="var/httpd/htdocs/js/thirdparty/jquery-tablesorter-2.28.14/widget-staticRow.min.js" Permission="660" Encode="Base64">KGZ1bmN0aW9uKGZhY3Rvcnkpe2lmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpe2RlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTt9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gJ29iamVjdCcpe21vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSk7fSBlbHNlIHtmYWN0b3J5KGpRdWVyeSk7fX0oZnVuY3Rpb24oalF1ZXJ5KXsKLyohIHdpZGdldDogc3RhdGljUm93IC0gdXBkYXRlZCAxMC8zMS8yMDE1ICh2Mi4yNC4wKSAqLwohZnVuY3Rpb24ocCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHModCl7dmFyIGUsaSxhLHMsbzsodD10LmNvbmZpZykmJihpPXQud2lkZ2V0T3B0aW9ucyx0LiR0Ym9kaWVzLmVhY2goZnVuY3Rpb24oKXtlPXAodGhpcykuY2hpbGRyZW4oKSxvPWUubGVuZ3RoLGUuZmlsdGVyKGkuc3RhdGljUm93X2NsYXNzKS5lYWNoKGZ1bmN0aW9uKCl7ZT1wKHRoaXMpLHM9dm9pZCAwIT09KHM9ZS5kYXRhKGkuc3RhdGljUm93X2luZGV4KSk/KGE9cGFyc2VGbG9hdChzKSwvJS8udGVzdChzKT9NYXRoLnJvdW5kKGEvMTAwKm8pOmEpOmUuaW5kZXgoKSxlLmRhdGEoaS5zdGF0aWNSb3dfZGF0YSxzKX0pfSkpfXZhciBvPXAudGFibGVzb3J0ZXI7by5hZGRXaWRnZXQoe2lkOiJzdGF0aWNSb3ciLG9wdGlvbnM6e3N0YXRpY1Jvd19jbGFzczoiLnN0YXRpYyIsc3RhdGljUm93X2RhdGE6InN0YXRpYy1pbmRleCIsc3RhdGljUm93X2luZGV4OiJyb3ctaW5kZXgiLHN0YXRpY1Jvd19ldmVudDoic3RhdGljUm93c1JlZnJlc2gifSxpbml0OmZ1bmN0aW9uKHQsZSxpLGEpe3ModCksaS4kdGFibGUudW5iaW5kKCgidXBkYXRlQ29tcGxldGUudHNzdGF0aWNyb3dzICIrYS5zdGF0aWNSb3dfZXZlbnQpLnJlcGxhY2UoL1xzKy9nLCIgIikpLmJpbmQoInVwZGF0ZUNvbXBsZXRlLnRzc3RhdGljcm93cyAiK2Euc3RhdGljUm93X2V2ZW50LGZ1bmN0aW9uKCl7cyh0KSxvLmFwcGx5V2lkZ2V0KHQpfSl9LGZvcm1hdDpmdW5jdGlvbih0LGUsaSl7dmFyIGEscyxvLG4sYyxkLHIsbDtlLiR0Ym9kaWVzLmVhY2goZnVuY3Rpb24oKXtmb3IoYz1wLnRhYmxlc29ydGVyLnByb2Nlc3NUYm9keSh0LHAodGhpcyksITApLGQ9ITAsbz0wLHI9Yy5jaGlsZHJlbihpLnN0YXRpY1Jvd19jbGFzcyksbj1jLmNoaWxkcmVuKCJ0ciIpLmxlbmd0aC0xLGw9ci5sZW5ndGg7ZCYmbzxsOylkPSExLHIuZWFjaChmdW5jdGlvbigpe2E9cCh0aGlzKS5kYXRhKGkuc3RhdGljUm93X2RhdGEpLChhPW48PWE/bjphPDA/MDphKSE9PXAodGhpcykuaW5kZXgoKSYmKGQ9ITAscz1wKHRoaXMpLmRldGFjaCgpLG48PWE/cy5hcHBlbmRUbyhjKTowPT09YT9zLnByZXBlbmRUbyhjKTpzLmluc2VydEJlZm9yZShjLmZpbmQoInRyOmVxKCIrYSsiKSIpKSl9KSxvKys7cC50YWJsZXNvcnRlci5wcm9jZXNzVGJvZHkodCxjLCExKX0pLGUuJHRhYmxlLnRyaWdnZXJIYW5kbGVyKCJzdGF0aWNSb3dzQ29tcGxldGUiLHQpfSxyZW1vdmU6ZnVuY3Rpb24odCxlLGkpe2UuJHRhYmxlLnVuYmluZCgoInVwZGF0ZUNvbXBsZXRlLnRzc3RhdGljcm93cyAiK2kuc3RhdGljUm93X2V2ZW50KS5yZXBsYWNlKC9ccysvZywiICIpKX19KX0oalF1ZXJ5KTtyZXR1cm4galF1ZXJ5O30pKTsK</File>
        <File Location="var/httpd/htdocs/js/Core.Agent.ArticlePin.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuQWdlbnQgPSBDb3JlLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgQ29yZS5BZ2VudC5BcnRpY2xlUGluCiAqIEBtZW1iZXJvZiBDb3JlLkFnZW50CiAqIEBhdXRob3IKICogQGRlc2NyaXB0aW9uCiAqCiAqLwpDb3JlLkFnZW50LkFydGljbGVQaW4gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBuYW1lIEluaXQKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICoKICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgbGV0ICRBcnRpY2xlVGFibGUgPSAkKCcjQXJ0aWNsZVRhYmxlJyk7CgogICAgICAgIC8vIG1ha2UgcGlubmVkIGxpc3QgaXRlbXMgc3RhdGljIGFuZCBhc3NpZ24gdGhlbSB0byB0aGUgZmlyc3Qgcm93cyBpbiB0aGUgdGFibGUgKGhhbmRsZWQgYnkganF1ZXJ5LXRhYmxlc29ydGVyIHdpZGdldCBzdGF0aWNSb3cpCiAgICAgICAgbGV0ICRQaW5uZWRBcnRpY2xlTGlzdEl0ZW1zID0gJCgnLlBpbm5lZEFydGljbGUnLCAkQXJ0aWNsZVRhYmxlKS5jbG9zZXN0KCd0cicpOwogICAgICAgICRQaW5uZWRBcnRpY2xlTGlzdEl0ZW1zLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7CiAgICAgICAgICAgIGxldCAkUGlubmVkQXJ0aWNsZUxpc3RJdGVtID0gJCh0aGlzKTsKICAgICAgICAgICAgJFBpbm5lZEFydGljbGVMaXN0SXRlbS5hZGRDbGFzcygnc3RhdGljJyk7CiAgICAgICAgICAgICRQaW5uZWRBcnRpY2xlTGlzdEl0ZW0uYXR0cignZGF0YS1yb3ctaW5kZXgnLCBpbmRleCk7CiAgICAgICAgfSk7CgoKICAgICAgICBsZXQgUGlubmVkQXJ0aWNsZUlEcyA9ICQoJy5ObyBpbnB1dC5BcnRpY2xlSUQnLCAkUGlubmVkQXJ0aWNsZUxpc3RJdGVtcykubWFwKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gJCh0aGlzKS52YWwoKTsKICAgICAgICB9KS5nZXQoKTsKCiAgICAgICAgLy8gZmluZCBjb250YWluZXJzIG9mIHdpZGdldHMgb2YgcGlubmVkIGFydGljbGVzIGJ5IHRoZWlyIGFydGljbGUgSUQgYW5kIGFkZCB0aGVtIHRvIHRoZSBzdGFydCBvZiB0aGUgc3Vycm91bmRpbmcgZGl2CiAgICAgICAgbGV0ICRBcnRpY2xlV2lkZ2V0c0NvbnRhaW5lciA9ICQoJyNBcnRpY2xlSXRlbXMnKTsKICAgICAgICBsZXQgJFBpbm5lZEFydGljbGVzID0gJCgnPiBkaXYnLCAkQXJ0aWNsZVdpZGdldHNDb250YWluZXIpLmZpbHRlcihmdW5jdGlvbigpIHsKICAgICAgICAgICAgbGV0IEFydGljbGVJRCA9ICQoJ2E6Zmlyc3QtY2hpbGQnLCAkKHRoaXMpKS5hdHRyKCduYW1lJykuc2xpY2UoNyk7CiAgICAgICAgICAgIHJldHVybiBQaW5uZWRBcnRpY2xlSURzLmluY2x1ZGVzKEFydGljbGVJRCk7CiAgICAgICAgfSk7CgogICAgICAgICRQaW5uZWRBcnRpY2xlcy5kZXRhY2goKTsKICAgICAgICAkUGlubmVkQXJ0aWNsZXMucHJlcGVuZFRvKCRBcnRpY2xlV2lkZ2V0c0NvbnRhaW5lcik7CiAgICAgICAgJFBpbm5lZEFydGljbGVzLmFkZENsYXNzKCdQaW5uZWQnKTsKCiAgICAgICAgJCgnLkhlYWRlciBoMicsICRQaW5uZWRBcnRpY2xlcykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGxldCAkUGluID0gJC5wYXJzZUhUTUwoJzxwIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlBpbm5lZCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLXRodW1iLXRhY2siPjwvaT48ZW0+WyUgVHJhbnNsYXRlKCJQaW5uZWQiKSB8IGh0bWwgJV08L2VtPjwvcD4nKTsKICAgICAgICAgICAgJCh0aGlzKS5hZnRlcigkUGluKTsKICAgICAgICB9KTsKCiAgICB9OwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEVfRUFSTFknKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cgp9KENvcmUuQWdlbnQuQXJ0aWNsZVBpbiB8fCB7fSkpOwo=</File>
        <File Location="var/httpd/htdocs/js/Core.UI.Table.Sort.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vICRvcmlnaW46IG90b2JvIC0gNmVmZGM3YmYyYTMzMjUyNzdjZDc5YTYwZjBmMjQwN2Y4YWQ1OWU4NyAtIHZhci9odHRwZC9odGRvY3MvanMvQ29yZS5VSS5UYWJsZS5Tb3J0LmpzCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuVUkgPSBDb3JlLlVJIHx8IHt9OwpDb3JlLlVJLlRhYmxlID0gQ29yZS5VSS5UYWJsZSB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlIENvcmUuVUkuVGFibGUuU29ydAogKiBAbWVtYmVyb2YgQ29yZS5VSS5UYWJsZQogKiBAYXV0aG9yCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCBmdW5jdGlvbnMgZm9yIGNsaWVudCBzaWRlIHRhYmxlIHNvcnRpbmcuCiAqLwpDb3JlLlVJLlRhYmxlLlNvcnQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICogQG5hbWUgQ3VzdG9tVGV4dEV4dHJhY3RvcgogICAgICogQG1lbWJlcm9mIENvcmUuVUkuVGFibGUuU29ydAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBFeHRyYWN0ZWQgdGV4dC4KICAgICAqIEBwYXJhbSB7RE9NT2JqZWN0fSAkTm9kZSAtIEN1cnJlbnQgbm9kZSBvZiB3aGljaCB0aGUgc29ydGluZyBkYXRhIHNob3VsZCBiZSBleHRyYWN0ZWQuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgQ3VzdG9tIHRleHQgZXh0cmFjdG9yLiBJdCB3aWxsIGxvb2sgaWYgYW4gaGlkZGVuIGZpZWxkIHdpdGggdGhlIGNsYXNzCiAgICAgKiAgICAgICdTb3J0RGF0YScgaXMgaW4gdGhlIHRhYmxlIGNlbGwgYW5kIHJldHVybiBpdHMgY29udGVudHMuCiAgICAgKi8KICAgIGZ1bmN0aW9uIEN1c3RvbVRleHRFeHRyYWN0b3IoJE5vZGUpIHsKICAgICAgICByZXR1cm4gJCgkTm9kZSkuZmluZCgnLlNvcnREYXRhJykudmFsKCkgfHwgJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5VSS5UYWJsZS5Tb3J0CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7alF1ZXJ5T2JqZWN0fSAkVGFibGUgLSBUaGUgdGFibGUgZWxlbWVudCB3aGljaCBzaG91bGQgYmUgc29ydGVkLgogICAgICogQHBhcmFtIHtGdW5jdGlvbn0gRmluaXNoZWQgIC0gQW4gb3B0aW9uYWwgZnVuY3Rpb24sIGNhbGxlZCBhZnRlciB0aGUgc29ydGluZy4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSB0YWJsZSBzb3J0aW5nLgogICAgICogICAgICBJZiB5b3UgaGF2ZSBjZWxscyB3aXRoIHNwZWNpYWwgY29udGVudCBsaWtlIGRhdGVzLCB5b3UgY2FuCiAgICAgKiAgICAgIHB1dCBhIGhpZGRlbiBmaWVsZCB3aXRoIHRoZSBjbGFzcyAnU29ydERhdGEnIGluIHRoZW0gd2hpY2ggY29udGFpbnMKICAgICAqICAgICAgYSBzb3J0YWJsZSB0ZXh0IHJlcHJlc2VudGF0aW9uIGxpa2UgYW4gSVNPIGRhdGUuIFRoaXMgd2lsbCB0aGVuIGJlCiAgICAgKiAgICAgIHVzZWQgZm9yIHRoZSBzb3J0aW5nLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCRUYWJsZSwgRmluaXNoZWQpIHsKICAgICAgICB2YXIgJFNvcnRhYmxlQ29sdW1ucywKICAgICAgICAgICAgJEluaXRpYWxTb3J0aW5nLAogICAgICAgICAgICBTb3J0T3JkZXIsCiAgICAgICAgICAgIEhlYWRlcnMgPSB7fSwKICAgICAgICAgICAgSW5pdGlhbFNvcnQgPSBbXSwKICAgICAgICAgICAgQ29sdW1uQ291bnQgPSAwOwoKICAgICAgICBpZiAoaXNKUXVlcnlPYmplY3QoJFRhYmxlKSkgewogICAgICAgICAgICAkU29ydGFibGVDb2x1bW5zID0gJFRhYmxlLmZpbmQoJ3RoLlNvcnRhYmxlJyk7CiAgICAgICAgICAgICRJbml0aWFsU29ydGluZyA9ICRTb3J0YWJsZUNvbHVtbnMuZmlsdGVyKCcuSW5pdGlhbFNvcnRpbmcnKTsKCiAgICAgICAgICAgIC8vIE9ubHkgc3RhcnQsIGlmIHRoZXJlIGFyZSBjb2x1bW5zIHRoYXQgYWxsb3cgc29ydGluZwogICAgICAgICAgICBpZiAoJFNvcnRhYmxlQ29sdW1ucy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIC8vIEdldCBhbGwgY29sdW1ucyB3aGljaCBzaG91bGQgbm90IGJlIHNvcnRlZAogICAgICAgICAgICAgICAgJFRhYmxlLmZpbmQoJ3RoJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEkKHRoaXMpLmhhc0NsYXNzKCdTb3J0YWJsZScpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlcnNbQ29sdW1uQ291bnRdID0geyBzb3J0ZXI6IGZhbHNlIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIENvbHVtbkNvdW50Kys7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL0dldCB0aGUgY29sdW1uLCB3aGljaCBzaG91bGQgYmUgc29ydGVkIGluaXRpYWxseSAoY2FuIGJlIG9ubHkgb25lKQogICAgICAgICAgICAgICAgaWYgKCRJbml0aWFsU29ydGluZy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICBTb3J0T3JkZXIgPSAkSW5pdGlhbFNvcnRpbmcuaGFzQ2xhc3MoJ0Rlc2NlbmRpbmcnKSA/ICcxJyA6ICcwJzsKICAgICAgICAgICAgICAgICAgICAvLyBJbml0aWFsbHkgc29ydCB0aGUgc3BlY2lmaWVkIGNvbHVtbiBhc2NlbmRpbmcgKDApIG9yIGRlc2NlbmRpbmcgKDEpCiAgICAgICAgICAgICAgICAgICAgSW5pdGlhbFNvcnQgPSBbWyRJbml0aWFsU29ydGluZy5pbmRleCgpLCBTb3J0T3JkZXJdXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkVGFibGUudGFibGVzb3J0ZXIoewogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IEhlYWRlcnMsCiAgICAgICAgICAgICAgICAgICAgc29ydExpc3Q6IEluaXRpYWxTb3J0LAogICAgICAgICAgICAgICAgICAgIHRleHRFeHRyYWN0aW9uOiBDdXN0b21UZXh0RXh0cmFjdG9yLAovLyBSb3RoZXJPU1MgLyBBZ2VudFRpY2tldEFydGljbGVQaW4KICAgICAgICAgICAgICAgICAgICB3aWRnZXRzOiBbJ3N0YXRpY1JvdyddCi8vIEVPIEFnZW50VGlja2V0QXJ0aWNsZVBpbgogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgJFRhYmxlLnRhYmxlc29ydGVyLmxhbmd1YWdlID0gewogICAgICAgICAgICAgICAgICAgIHNvcnRBc2MgICAgICA6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdBc2NlbmRpbmcgc29ydCBhcHBsaWVkLCAnKSwKICAgICAgICAgICAgICAgICAgICBzb3J0RGVzYyAgICAgOiBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnRGVzY2VuZGluZyBzb3J0IGFwcGxpZWQsICcpLAogICAgICAgICAgICAgICAgICAgIHNvcnROb25lICAgICA6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdObyBzb3J0IGFwcGxpZWQsICcpLAogICAgICAgICAgICAgICAgICAgIHNvcnREaXNhYmxlZCA6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdzb3J0aW5nIGlzIGRpc2FibGVkJyksCiAgICAgICAgICAgICAgICAgICAgbmV4dEFzYyAgICAgIDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ2FjdGl2YXRlIHRvIGFwcGx5IGFuIGFzY2VuZGluZyBzb3J0JyksCiAgICAgICAgICAgICAgICAgICAgbmV4dERlc2MgICAgIDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ2FjdGl2YXRlIHRvIGFwcGx5IGEgZGVzY2VuZGluZyBzb3J0JyksCiAgICAgICAgICAgICAgICAgICAgbmV4dE5vbmUgICAgIDogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ2FjdGl2YXRlIHRvIHJlbW92ZSB0aGUgc29ydCcpCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24oRmluaXNoZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgJFRhYmxlLm9uKCdzb3J0RW5kJywgRmluaXNoZWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oQ29yZS5VSS5UYWJsZS5Tb3J0IHx8IHt9KSk7Cg==</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/Core.Agent.ArticlePin.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi5QaW5uZWQgLldpZGdldFNpbXBsZSAuSGVhZGVyID4gcCBlbSwKc3Bhbi5QaW5uZWRBcnRpY2xlIGVtIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5QaW5uZWQgLldpZGdldFNpbXBsZSB7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA0cHggMCByZ2IoIGZyb20gdmFyKC0tY29sU2hhZG93RGFyaykgciBnIGIgLyAwLjI1KTsKfQoKLlBpbm5lZCAuV2lkZ2V0U2ltcGxlIC5IZWFkZXIgPiBwIHsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHBhZGRpbmc6IDRweCAzcHggNHB4IDZweDsKICAgIG1hcmdpbjogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBmb250LXNpemU6IDEzcHg7CiAgICB0ZXh0LXNoYWRvdzogMXB4IDFweCAjZmZmOwogICAgY29sb3I6IHZhcigtLWNvbFRleHREYXJrKTsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGguVW5yZWFkQXJ0aWNsZXMsCiNBcnRpY2xlVGFibGUuRGF0YVRhYmxlIHRoLlVucmVhZEFydGljbGVzIC50YWJsZXNvcnRlci1oZWFkZXItaW5uZXIgewogICAgd2lkdGg6IGNhbGMoIDE2cHggKiAzICsgOHB4KTsgLyogMyBpY29ucyArIDJweCBtYXJnaW4gKi8KfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGguVW5yZWFkQXJ0aWNsZXMgc3Bhbi5VbnJlYWRBcnRpY2xlc3sKICAgIHdpZHRoOiAxNnB4OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OyAvKiBpbXBvcnRhbnQgdG8gb3ZlcnJpZGUgQ29yZS5EZWZhdWx0LmNzcyBpbXBvcnRhbnQgc2V0dGluZyB0aGF0IHNob3VsZCBiZSBjaGFuZ2VkICovCiAgICBtYXJnaW46IDA7Cn0KCiNBcnRpY2xlVGFibGUuRGF0YVRhYmxlIHRkLlVucmVhZEFydGljbGVzIHsKICAgIHdpZHRoOiB1bnNldDsKICAgIGhlaWdodDogMjBweDsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGguVW5yZWFkQXJ0aWNsZXMgYSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGQuVW5yZWFkQXJ0aWNsZXMsCiNBcnRpY2xlVGFibGUuRGF0YVRhYmxlIHRoLlVucmVhZEFydGljbGVzIGEgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwYWRkaW5nOiAwcHggMnB4OwogICAgY29sdW1uLWdhcDogMnB4Owp9CgojQXJ0aWNsZVRhYmxlLkRhdGFUYWJsZSB0ZC5VbnJlYWRBcnRpY2xlcyBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBmbG9hdDogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKI0FydGljbGVUYWJsZS5EYXRhVGFibGUgdGQuVW5yZWFkQXJ0aWNsZXMgc3BhbiBpIHsKICAgIG1hcmdpbjogMDsKfQo=</File>
        <File Location="doc/en/AgentTicketArticlePin.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>