<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>AgentTicketFormDraftReview</Name>
    <Version>11.1.1</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-06-26 15:58:20" Version="11.1.1">Initial release for OTOBO 11.1.</ChangeLog>
    <Description Lang="en">Enables users to view ticket drafts if they have read permissions, and to edit ticket drafts if they have write permissions.</Description>
    <Framework>11.1.x</Framework>
    <BuildCommitID>a800fdc98d9b4e8e0f35ee1831e493515cbb3f40</BuildCommitID>
    <BuildDate>2026-06-26 15:58:23</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Modules/AgentTicketZoom.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBiZGM2M2M0YjQ0MDU4YTE3ZTg4YjMyMjJiMmQwZWZmNWI1OTBmMGZjIC0gS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRab29tLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldFpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKIyBjb3JlIG1vZHVsZXMKdXNlIExpc3Q6OlV0aWwgcXcoYW55KTsKdXNlIFBPU0lYICAgICAgcXcoY2VpbCk7CgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IGJsZXNzIHslUGFyYW19LCAkVHlwZTsKCiAgICAjIHNldCBkZWJ1ZwogICAgJFNlbGYtPntEZWJ1Z30gPSAwOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkVXNlck9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+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+Rm9ybURyYWZ0R2V0KAogICAgICAgICAgICAgICAgRm9ybURyYWZ0SUQgPT4gJEZvcm1EcmFmdElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyB1c2UgY29uZmlnIG9mIGRyYWZ0IGFjdGlvbiBmb3IgY2hlY2sKICAgICAgICAgICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCggJ1RpY2tldDo6RnJvbnRlbmQ6OicgLiAkRm9ybURyYWZ0LT57QWN0aW9ufSApOwogICAgICAgICAgICBpZiAoICRBY2xBY3Rpb25Mb29rdXB7ICRGb3JtRHJhZnQtPntBY3Rpb259IH0gJiYgSXNIYXNoUmVmV2l0aERhdGEoJENvbmZpZykgKSB7CgogICAgICAgICAgICAgICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICAgICAgICAgICAgICBpZiAoICRDb25maWctPntQZXJtaXNzaW9ufSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkQWNjZXNzT2sgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICEkQWNjZXNzT2sgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRSZXNwb25zZXtFcnJvcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlRoaXMgdGlja2V0IGRvZXMgbm90IGV4aXN0LCBvciB5b3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgaXQgaW4gaXRzIGN1cnJlbnQgc3RhdGUuIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgdGlja2V0IGxvY2sgY2hlY2sKICAgICAgICAgICAgICAgIGlmICggJENvbmZpZy0+e1JlcXVpcmVkTG9ja30gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkVGlja2V0T2JqZWN0LT5UaWNrZXRMb2NrR2V0KCBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSApICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkQWNjZXNzT2sgPSAkVGlja2V0T2JqZWN0LT5Pd25lckNoZWNrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPd25lcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRBY2Nlc3NPayApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRSZXNwb25zZXtFcnJvcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIlNvcnJ5LCB5b3UgbmVlZCB0byBiZSB0aGUgdGlja2V0IG93bmVyIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24uIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhJFJlc3BvbnNle0Vycm9yfSApIHsKICAgICAgICAgICAgICAgICAgICAkUmVzcG9uc2V7U3VjY2Vzc30gPSAkRm9ybURyYWZ0T2JqZWN0LT5Gb3JtRHJhZnREZWxldGUoCiAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRGb3JtRHJhZnRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRSZXNwb25zZXtFcnJvcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoIk1pc3NpbmcgRm9ybURyYWZ0SUQhIik7CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIEpTT04gb3V0cHV0CiAgICAgICAgbXkgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKAogICAgICAgICAgICBEYXRhID0+IFwlUmVzcG9uc2UsCiAgICAgICAgKTsKCiAgICAgICAgIyBzZW5kIEpTT04gcmVzcG9uc2UKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnTG9hZFdpZGdldCcgKSB7CiAgICAgICAgbXkgJEVsZW1lbnRJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdFbGVtZW50SUQnICk7CiAgICAgICAgbXkgJENvbmZpZzsKICAgICAgICBXSURHRVQ6CiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9LT57V2lkZ2V0c30gLy8ge30gfSApIHsKICAgICAgICAgICAgaWYgKCAkRWxlbWVudElEIGVxICdBc3luY18nIC4gJExheW91dE9iamVjdC0+TGlua0VuY29kZSgkS2V5KSApIHsKICAgICAgICAgICAgICAgICRDb25maWcgPSAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc30tPntXaWRnZXRzfS0+eyRLZXl9OwogICAgICAgICAgICAgICAgbGFzdCBXSURHRVQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRDb25maWcpIHsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSBldmFsIHsgJE1haW5PYmplY3QtPlJlcXVpcmUoICRDb25maWctPntNb2R1bGV9ICkgfTsKICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW5ub3QgbG9hZCAkQ29uZmlnLT57TW9kdWxlfTogJEAiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15ICRNb2R1bGUgPSBldmFsIHsgJENvbmZpZy0+e01vZHVsZX0tPm5ldyggJXskU2VsZn0gKSB9OwogICAgICAgICAgICBpZiAoICEkTW9kdWxlICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAibmV3KCkgb2YgV2lkZ2V0IG1vZHVsZSAkQ29uZmlnLT57TW9kdWxlfSBub3Qgc3VjY2Vzc2Z1bCEiLAoKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSAkV2lkZ2V0T3V0cHV0ID0gJE1vZHVsZS0+UnVuKAogICAgICAgICAgICAgICAgVGlja2V0ICAgID0+IFwlVGlja2V0LAogICAgICAgICAgICAgICAgQWNsQWN0aW9uID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgQ29uZmlnICAgID0+ICRDb25maWcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFdpZGdldE91dHB1dC0+e091dHB1dH0gLy8gJyAnLAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhcnNldCAgICAgPT4gJ3V0Zi04JywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW5ub3QgbG9jYXRlIG1vZHVsZSBmb3IgRWxlbWVudElEICRFbGVtZW50SUQiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgbWFyayBzaG93biBhcnRpY2xlIGFzIHNlZW4KICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdNYXJrQXNTZWVuJyApIHsKICAgICAgICBteSAkU3VjY2VzcyA9IDE7CgogICAgICAgIG15ICRJc0FydGljbGVEZWxldGVkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZUZlYXR1cmVzJyktPklzQXJ0aWNsZURlbGV0ZWQoCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRJc0FydGljbGVEZWxldGVkKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gMjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgYWx3YXlzIHNob3cgYXJjaGl2ZWQgdGlja2V0cyBhcyBzZWVuCiAgICAgICAgICAgIGlmICggJFRpY2tldHtBcmNoaXZlRmxhZ30gbmUgJ3knICkgewogICAgICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkU2VsZi0+X0FydGljbGVJdGVtU2VlbigKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRTZWxmLT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkU3VjY2VzcywKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFydGljbGUgdXBkYXRlCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQXJ0aWNsZVVwZGF0ZScgKSB7CiAgICAgICAgbXkgJENvdW50ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NvdW50JyApOwoKICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICApOwoKICAgICAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkU2VsZi0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIFJlYWxOYW1lcyAgICAgPT4gMSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICk7CiAgICAgICAgJEFydGljbGV7Q291bnR9ID0gJENvdW50OwoKICAgICAgICAjIEdldCBhdHRhY2htZW50IGluZGV4IChleGNsdWRpbmcgYm9keSBhdHRhY2htZW50cykuCiAgICAgICAgbXkgJUF0bUluZGV4ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAleyAkU2VsZi0+e0V4Y2x1ZGVBdHRhY2htZW50c30gfSwKICAgICAgICApOwogICAgICAgICRBcnRpY2xle0F0bXN9ID0gXCVBdG1JbmRleDsKCiAgICAgICAgIyBmZXRjaCBhbGwgc3RkLiB0ZW1wbGF0ZXMKICAgICAgICBteSAlU3RhbmRhcmRUZW1wbGF0ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCgKICAgICAgICAgICAgUXVldWVJRCAgICAgICA9PiAkVGlja2V0e1F1ZXVlSUR9LAogICAgICAgICAgICBUZW1wbGF0ZVR5cGVzID0+IDEsCiAgICAgICAgICAgIFZhbGlkICAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAkQXJ0aWNsZVdpZGdldHNIVE1MID0gJFNlbGYtPl9BcnRpY2xlSXRlbSgKICAgICAgICAgICAgVGlja2V0ICAgICAgICAgICAgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgIEFydGljbGUgICAgICAgICAgID0+IFwlQXJ0aWNsZSwKICAgICAgICAgICAgQWNsQWN0aW9uICAgICAgICAgPT4gXCVBY2xBY3Rpb24sCiAgICAgICAgICAgIFN0YW5kYXJkUmVzcG9uc2VzID0+ICRTdGFuZGFyZFRlbXBsYXRlc3tBbnN3ZXJ9LAogICAgICAgICAgICBTdGFuZGFyZEZvcndhcmRzICA9PiAkU3RhbmRhcmRUZW1wbGF0ZXN7Rm9yd2FyZH0sCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgID0+ICdPbkxvYWQnLAogICAgICAgICk7CgogICAgICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZUlEcycsCiAgICAgICAgICAgIFZhbHVlID0+IFsgJFNlbGYtPntBcnRpY2xlSUR9IF0sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdNZW51SXRlbXMnLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e01lbnVJdGVtc30sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJENvbnRlbnQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaWNrZXRab29tJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICAgICAlQXJ0aWNsZSwKICAgICAgICAgICAgICAgICVBY2xBY3Rpb24sCiAgICAgICAgICAgICAgICBBcnRpY2xlV2lkZ2V0c0hUTUwgPT4gJEFydGljbGVXaWRnZXRzSFRNTAogICAgICAgICAgICB9LAogICAgICAgICAgICBBSkFYID0+IDEsCiAgICAgICAgKTsKICAgICAgICBpZiAoICEkQ29udGVudCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDYW5cJ3QgZ2V0IGZvciBBcnRpY2xlSUQgJXMhJywgJFNlbGYtPntBcnRpY2xlSUR9ICksCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ2hhcnNldCAgICAgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJENvbnRlbnQsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRVc2VyT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKICAgIG15ICRTZXNzaW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyk7CgogICAgIyB3cml0ZSBhcnRpY2xlIGZpbHRlciBzZXR0aW5ncyB0byBzZXNzaW9uCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQXJ0aWNsZUZpbHRlclNldCcgKSB7CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIG15ICRUaWNrZXRJRCAgICAgICAgICAgICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaWNrZXRJRCcgKTsKICAgICAgICBteSAkU2F2ZURlZmF1bHRzICAgICAgICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2F2ZURlZmF1bHRzJyApOwogICAgICAgIG15IEBDb21tdW5pY2F0aW9uQ2hhbm5lbEZpbHRlcklEcyA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdDb21tdW5pY2F0aW9uQ2hhbm5lbEZpbHRlcicgKTsKICAgICAgICBteSAkQ3VzdG9tZXJWaXNpYmlsaXR5ICAgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ3VzdG9tZXJWaXNpYmlsaXR5RmlsdGVyJyApOwogICAgICAgIG15IEBBcnRpY2xlU2VuZGVyVHlwZUZpbHRlcklEcyAgICA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdBcnRpY2xlU2VuZGVyVHlwZUZpbHRlcicgKTsKCiAgICAgICAgIyBidWlsZCBzZXNzaW9uIHN0cmluZwogICAgICAgIG15ICRTZXNzaW9uU3RyaW5nID0gJyc7CiAgICAgICAgaWYgKEBDb21tdW5pY2F0aW9uQ2hhbm5lbEZpbHRlcklEcykgewogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSAnQ29tbXVuaWNhdGlvbkNoYW5uZWxGaWx0ZXI8JzsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gam9pbiAnLCcsIEBDb21tdW5pY2F0aW9uQ2hhbm5lbEZpbHRlcklEczsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgLj0gJz4nOwogICAgICAgIH0KICAgICAgICBpZiAoIGRlZmluZWQgJEN1c3RvbWVyVmlzaWJpbGl0eSAmJiAkQ3VzdG9tZXJWaXNpYmlsaXR5ICE9IDIgKSB7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nIC49ICJDdXN0b21lclZpc2liaWxpdHlGaWx0ZXI8JEN1c3RvbWVyVmlzaWJpbGl0eT4iOwogICAgICAgIH0KICAgICAgICBpZiAoQEFydGljbGVTZW5kZXJUeXBlRmlsdGVySURzKSB7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nIC49ICdBcnRpY2xlU2VuZGVyVHlwZUZpbHRlcjwnOwogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSBqb2luICcsJywgQEFydGljbGVTZW5kZXJUeXBlRmlsdGVySURzOwogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSAnPic7CiAgICAgICAgfQoKICAgICAgICAjIHdyaXRlIHRoZSBzZXNzaW9uCgogICAgICAgICMgc2F2ZSBkZWZhdWx0IGZpbHRlciBzZXR0aW5ncyB0byB1c2VyIHByZWZlcmVuY2VzCiAgICAgICAgaWYgKCRTYXZlRGVmYXVsdHMpIHsKICAgICAgICAgICAgJFVzZXJPYmplY3QtPlNldFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIEtleSAgICA9PiAnQXJ0aWNsZUZpbHRlckRlZmF1bHQnLAogICAgICAgICAgICAgICAgVmFsdWUgID0+ICRTZXNzaW9uU3RyaW5nLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAnQXJ0aWNsZUZpbHRlckRlZmF1bHQnLAogICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZXNzaW9uU3RyaW5nLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB0dXJuIG9mZiBmaWx0ZXIgZXhwbGljaXRseSBmb3IgdGhpcyB0aWNrZXQKICAgICAgICBpZiAoICRTZXNzaW9uU3RyaW5nIGVxICcnICkgewogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyA9ICdvZmYnOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIHNlc3Npb24KICAgICAgICBteSAkVXBkYXRlID0gJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICJBcnRpY2xlRmlsdGVyJFRpY2tldElEIiwKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZXNzaW9uU3RyaW5nLAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgSlNPTiBvdXRwdXQKICAgICAgICBteSAkSlNPTiA9ICcnOwogICAgICAgIGlmICgkVXBkYXRlKSB7CiAgICAgICAgICAgICRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdBcnRpY2xlIGZpbHRlciBzZXR0aW5ncyB3ZXJlIHNhdmVkLicpLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2VuZCBKU09OIHJlc3BvbnNlCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyB3cml0ZSBhcnRpY2xlIGZpbHRlciBzZXR0aW5ncyB0byBzZXNzaW9uCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRXZlblR5cGVGaWx0ZXJTZXQnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkVGlja2V0SUQgICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RpY2tldElEJyApOwogICAgICAgIG15ICRTYXZlRGVmYXVsdHMgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2F2ZURlZmF1bHRzJyApOwogICAgICAgIG15IEBFdmVudFR5cGVGaWx0ZXJJRHMgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnRXZlbnRUeXBlRmlsdGVyJyApOwoKICAgICAgICAjIGJ1aWxkIHNlc3Npb24gc3RyaW5nCiAgICAgICAgbXkgJFNlc3Npb25TdHJpbmcgPSAnJzsKICAgICAgICBpZiAoQEV2ZW50VHlwZUZpbHRlcklEcykgewogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSAnRXZlbnRUeXBlRmlsdGVyPCc7CiAgICAgICAgICAgICRTZXNzaW9uU3RyaW5nIC49IGpvaW4gJywnLCBARXZlbnRUeXBlRmlsdGVySURzOwogICAgICAgICAgICAkU2Vzc2lvblN0cmluZyAuPSAnPic7CiAgICAgICAgfQoKICAgICAgICAjIHdyaXRlIHRoZSBzZXNzaW9uCgogICAgICAgICMgc2F2ZSBkZWZhdWx0IGZpbHRlciBzZXR0aW5ncyB0byB1c2VyIHByZWZlcmVuY2VzCiAgICAgICAgaWYgKCRTYXZlRGVmYXVsdHMpIHsKICAgICAgICAgICAgJFVzZXJPYmplY3QtPlNldFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIEtleSAgICA9PiAnRXZlbnRUeXBlRmlsdGVyRGVmYXVsdCcsCiAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJFNlc3Npb25TdHJpbmcsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZXNzaW9uT2JqZWN0LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICAgICAgS2V5ICAgICAgID0+ICdFdmVudFR5cGVGaWx0ZXJEZWZhdWx0JywKICAgICAgICAgICAgICAgIFZhbHVlICAgICA9PiAkU2Vzc2lvblN0cmluZywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgdHVybiBvZmYgZmlsdGVyIGV4cGxpY2l0bHkgZm9yIHRoaXMgdGlja2V0CiAgICAgICAgaWYgKCAkU2Vzc2lvblN0cmluZyBlcSAnJyApIHsKICAgICAgICAgICAgJFNlc3Npb25TdHJpbmcgPSAnb2ZmJzsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHRoZSBzZXNzaW9uCiAgICAgICAgbXkgJFVwZGF0ZSA9ICRTZXNzaW9uT2JqZWN0LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgICAgIEtleSAgICAgICA9PiAiRXZlbnRUeXBlRmlsdGVyJFRpY2tldElEIiwKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZXNzaW9uU3RyaW5nLAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgSlNPTiBvdXRwdXQKICAgICAgICBteSAkSlNPTiA9ICcnOwogICAgICAgIGlmICgkVXBkYXRlKSB7CiAgICAgICAgICAgICRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdFdmVudCB0eXBlIGZpbHRlciBzZXR0aW5ncyB3ZXJlIHNhdmVkLicpLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2VuZCBKU09OIHJlc3BvbnNlCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBhcnRpY2xlIGZpbHRlciBpcyBhY3RpdmF0ZWQgaW4gc3lzY29uZmlnCiAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUZpbHRlckFjdGl2ZX0gKSB7CgogICAgICAgICMgZ2V0IGFydGljbGUgZmlsdGVyIHNldHRpbmdzIGZyb20gc2Vzc2lvbiBzdHJpbmcKICAgICAgICBteSAkQXJ0aWNsZUZpbHRlclNlc3Npb25TdHJpbmcgPSAkU2VsZi0+e1Nlc3Npb259eyAnQXJ0aWNsZUZpbHRlcicgLiAkU2VsZi0+e1RpY2tldElEfSB9OwoKICAgICAgICAjIHNldCBhcnRpY2xlIGZpbHRlciBmb3IgdGhpcyB0aWNrZXQgZnJvbSB1c2VyIHByZWZlcmVuY2VzCiAgICAgICAgaWYgKCAhJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nICkgewogICAgICAgICAgICAkQXJ0aWNsZUZpbHRlclNlc3Npb25TdHJpbmcgPSAkU2VsZi0+e1Nlc3Npb259e0FydGljbGVGaWx0ZXJEZWZhdWx0fTsKICAgICAgICB9CgogICAgICAgICMgZG8gbm90IHVzZSBkZWZhdWx0cyBmb3IgdGhpcyB0aWNrZXQgaWYgZmlsdGVyIHdhcyBleHBsaWNpdGx5IHR1cm5lZCBvZmYKICAgICAgICBlbHNpZiAoICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyBlcSAnb2ZmJyApIHsKICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nID0gJyc7CiAgICAgICAgfQoKICAgICAgICAjIGV4dHJhY3QgQ29tbXVuaWNhdGlvbkNoYW5uZWxzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQXJ0aWNsZUZpbHRlclNlc3Npb25TdHJpbmcKICAgICAgICAgICAgJiYgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nID1+IG17IENvbW11bmljYXRpb25DaGFubmVsRmlsdGVyIDwgKCBbXjw+XSsgKSA+IH14bXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgQElEcyA9IHNwbGl0IC8sLywgJDE7CiAgICAgICAgICAgICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSA9IFxASURzOwogICAgICAgIH0KCiAgICAgICAgIyBleHRyYWN0IEN1c3RvbWVyVmlzaWJpbGl0eQogICAgICAgIGlmICgKICAgICAgICAgICAgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nCiAgICAgICAgICAgICYmICRBcnRpY2xlRmlsdGVyU2Vzc2lvblN0cmluZyA9fiBteyBDdXN0b21lclZpc2liaWxpdHlGaWx0ZXIgPCAoIFtePD5dKyApID4gfXhtcwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57Q3VzdG9tZXJWaXNpYmlsaXR5fSA9ICQxOwogICAgICAgIH0KCiAgICAgICAgIyBleHRyYWN0IEFydGljbGVTZW5kZXJUeXBlSURzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQXJ0aWNsZUZpbHRlclNlc3Npb25TdHJpbmcKICAgICAgICAgICAgJiYgJEFydGljbGVGaWx0ZXJTZXNzaW9uU3RyaW5nID1+IG17IEFydGljbGVTZW5kZXJUeXBlRmlsdGVyIDwgKCBbXjw+XSsgKSA+IH14bXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgQElEcyA9IHNwbGl0IC8sLywgJDE7CiAgICAgICAgICAgICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntBcnRpY2xlU2VuZGVyVHlwZUlEfSA9IFxASURzOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZXZlbnQgdHlwZSBmaWx0ZXIgc2V0dGluZ3MgZnJvbSBzZXNzaW9uIHN0cmluZwogICAgICAgIG15ICRFdmVudFR5cGVGaWx0ZXJTZXNzaW9uU3RyaW5nID0gJFNlbGYtPnsgJ0V2ZW50VHlwZUZpbHRlcicgLiAkU2VsZi0+e1RpY2tldElEfSB9OwoKICAgICAgICAjIHNldCBhcnRpY2xlIGZpbHRlciBmb3IgdGhpcyB0aWNrZXQgZnJvbSB1c2VyIHByZWZlcmVuY2VzCiAgICAgICAgaWYgKCAhJEV2ZW50VHlwZUZpbHRlclNlc3Npb25TdHJpbmcgKSB7CiAgICAgICAgICAgICRFdmVudFR5cGVGaWx0ZXJTZXNzaW9uU3RyaW5nID0gJFNlbGYtPntFdmVudFR5cGVGaWx0ZXJEZWZhdWx0fTsKICAgICAgICB9CgogICAgICAgICMgZG8gbm90IHVzZSBkZWZhdWx0cyBmb3IgdGhpcyB0aWNrZXQgaWYgZmlsdGVyIHdhcyBleHBsaWNpdGx5IHR1cm5lZCBvZmYKICAgICAgICBlbHNpZiAoICRFdmVudFR5cGVGaWx0ZXJTZXNzaW9uU3RyaW5nIGVxICdvZmYnICkgewogICAgICAgICAgICAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZyA9ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBTZXQgYXJ0aWNsZSBmaWx0ZXIgd2l0aCB2YWx1ZSBpZiBpdCBleGlzdHMuCiAgICAgICAgaWYgKAogICAgICAgICAgICAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZwogICAgICAgICAgICAmJiAkRXZlbnRUeXBlRmlsdGVyU2Vzc2lvblN0cmluZyA9fiBteyBFdmVudFR5cGVGaWx0ZXIgPCAoIFtePD5dKyApID4gfXhtcwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSBASURzID0gc3BsaXQgLywvLCAkMTsKICAgICAgICAgICAgJFNlbGYtPntFdmVudFR5cGVGaWx0ZXJ9LT57RXZlbnRUeXBlSUR9ID0gXEBJRHM7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICByZXR1cm4gam9pbiAnJywKICAgICAgICAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgICAgIFZhbHVlICAgID0+ICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgKSwKICAgICAgICAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyLAogICAgICAgICRTZWxmLT5NYXNrQWdlbnRab29tKAogICAgICAgICAgICBUaWNrZXQgICAgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgIEFjbEFjdGlvbiA9PiBcJUFjbEFjdGlvbgogICAgICAgICksCiAgICAgICAgJExheW91dE9iamVjdC0+Rm9vdGVyOwp9CgpzdWIgTWFza0FnZW50Wm9vbSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVUaWNrZXQgICAgPSAleyAkUGFyYW17VGlja2V0fSB9OwogICAgbXkgJUFjbEFjdGlvbiA9ICV7ICRQYXJhbXtBY2xBY3Rpb259IH07CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CgogICAgIyBDcmVhdGUgYSBsaXN0IG9mIGFydGljbGUgc2VuZGVyIHR5cGVzIGZvciBsb29rdXAKICAgIG15ICVBcnRpY2xlU2VuZGVyVHlwZUxpc3QgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZVNlbmRlclR5cGVMaXN0KCk7CgogICAgIyBlbHNlIHNob3cgbm9ybWFsIHRpY2tldCB6b29tIHZpZXcKICAgICMgZmV0Y2ggYWxsIG1vdmUgcXVldWVzCiAgICBteSAlTW92ZVF1ZXVlcyA9ICRUaWNrZXRPYmplY3QtPk1vdmVMaXN0KAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBBY3Rpb24gICA9PiAnQWdlbnRUaWNrZXRNb3ZlJywKICAgICAgICBUeXBlICAgICA9PiAnbW92ZV9pbnRvJywKICAgICk7CgogICAgIyBmZXRjaCBhbGwgc3RkLiB0ZW1wbGF0ZXMKICAgIG15ICVTdGFuZGFyZFRlbXBsYXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJMaXN0KAogICAgICAgIFF1ZXVlSUQgICAgICAgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICBUZW1wbGF0ZVR5cGVzID0+IDEsCiAgICApOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2VuZXJhdGUgc2hvd24gYXJ0aWNsZXMKICAgIG15ICRMaW1pdCA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TWF4QXJ0aWNsZXNQZXJQYWdlJyk7CgogICAgbXkgJE9yZGVyID0gJFNlbGYtPntab29tRXhwYW5kU29ydH0gZXEgJ3JldmVyc2UnID8gJ0RFU0MnIDogJ0FTQyc7CiAgICBteSAkUGFnZTsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBhcnRpY2xlIHBhZ2UKICAgIG15ICRBcnRpY2xlUGFnZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdBcnRpY2xlUGFnZScgKTsKCiAgICBteSAkSXNWaXNpYmxlRm9yQ3VzdG9tZXI7CiAgICBpZiAoIGRlZmluZWQgJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0N1c3RvbWVyVmlzaWJpbGl0eX0gKSB7CiAgICAgICAgJElzVmlzaWJsZUZvckN1c3RvbWVyID0gJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0N1c3RvbWVyVmlzaWJpbGl0eX07CiAgICB9CgogICAgIyBHZXQgYWxsIGFydGljbGVzLgogICAgbXkgQEFydGljbGVCb3hBbGwgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gJElzVmlzaWJsZUZvckN1c3RvbWVyLAogICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICk7CgogICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSApICkgewogICAgICAgIG15ICVGaWx0ZXIgPSBtYXAgeyAkXyA9PiAxIH0gQHsgJFNlbGYtPntBcnRpY2xlRmlsdGVyfS0+e0NvbW11bmljYXRpb25DaGFubmVsSUR9IH07CgogICAgICAgIEBBcnRpY2xlQm94QWxsID0gZ3JlcCB7ICRGaWx0ZXJ7ICRfLT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gfSB9IEBBcnRpY2xlQm94QWxsOwogICAgfQoKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57QXJ0aWNsZVNlbmRlclR5cGVJRH0gKSApIHsKICAgICAgICBteSAlRmlsdGVyID0gbWFwIHsgJF8gPT4gMSB9IEB7ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntBcnRpY2xlU2VuZGVyVHlwZUlEfSB9OwoKICAgICAgICBAQXJ0aWNsZUJveEFsbCA9IGdyZXAgeyAkRmlsdGVyeyAkXy0+e1NlbmRlclR5cGVJRH0gfSB9IEBBcnRpY2xlQm94QWxsOwogICAgfQoKICAgIGlmICggJE9yZGVyIGVxICdERVNDJyApIHsKICAgICAgICBAQXJ0aWNsZUJveEFsbCA9IHJldmVyc2UgQEFydGljbGVCb3hBbGw7CiAgICB9CgogICAgbXkgJUFydGljbGVGbGFncyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlRmxhZ3NPZlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0e1RpY2tldElEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgbXkgJEFydGljbGVJRDsKCiAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUlEfSApIHsKCiAgICAgICAgbXkgQEFydGljbGVJRHMgPSBtYXAgeyAkXy0+e0FydGljbGVJRH0gfSBAQXJ0aWNsZUJveEFsbDsKCiAgICAgICAgbXkgJUFydGljbGVJbmRleDsKICAgICAgICBAQXJ0aWNsZUluZGV4e0BBcnRpY2xlSURzfSA9ICggMCAuLiAkI0FydGljbGVJRHMgKTsKCiAgICAgICAgbXkgJEluZGV4ID0gJEFydGljbGVJbmRleHsgJFNlbGYtPntBcnRpY2xlSUR9IH07CiAgICAgICAgJEluZGV4IC8vPSAwOwogICAgICAgICRQYWdlID0gaW50KCAkSW5kZXggLyAkTGltaXQgKSArIDE7CiAgICB9CiAgICBlbHNpZiAoJEFydGljbGVQYWdlKSB7CiAgICAgICAgJFBhZ2UgPSAkQXJ0aWNsZVBhZ2U7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBGaW5kIGxhdGVzdCBub3Qgc2VlbiBhcnRpY2xlLgogICAgICAgIEFSVElDTEU6CiAgICAgICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZUJveEFsbCkgewoKICAgICAgICAgICAgIyBJZ25vcmUgc3lzdGVtIHNlbmRlciB0eXBlLgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6TmV3QXJ0aWNsZUlnbm9yZVN5c3RlbVNlbmRlcicpCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZVNlbmRlclR5cGVMaXN0eyAkQXJ0aWNsZS0+e1NlbmRlclR5cGVJRH0gfSBlcSAnc3lzdGVtJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuZXh0IEFSVElDTEU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5leHQgQVJUSUNMRSBpZiAkQXJ0aWNsZUZsYWdzeyAkQXJ0aWNsZS0+e0FydGljbGVJRH0gfS0+e1NlZW59OwogICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEFydGljbGUtPntBcnRpY2xlSUR9OwoKICAgICAgICAgICAgbXkgQEFydGljbGVJRHMgPSBtYXAgeyAkXy0+e0FydGljbGVJRH0gfSBAQXJ0aWNsZUJveEFsbDsKCiAgICAgICAgICAgIG15ICVBcnRpY2xlSW5kZXg7CiAgICAgICAgICAgIEBBcnRpY2xlSW5kZXh7QEFydGljbGVJRHN9ID0gKCAwIC4uICQjQXJ0aWNsZUlEcyApOwoKICAgICAgICAgICAgbXkgJEluZGV4ID0gJEFydGljbGVJbmRleHskQXJ0aWNsZUlEfTsKICAgICAgICAgICAgJFBhZ2UgPSBpbnQoICRJbmRleCAvICRMaW1pdCApICsgMTsKCiAgICAgICAgICAgIGxhc3QgQVJUSUNMRTsKICAgICAgICB9CgogICAgICAgIGlmICggISRBcnRpY2xlSUQgKSB7CiAgICAgICAgICAgICRQYWdlID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyBXZSBuZWVkIHRvIGZpbmQgb3V0IHdoZXRoZXIgcGFnaW5hdGlvbiBpcyBhY3R1YWxseSBuZWNlc3NhcnkuCiAgICAjIFRoZSBlYXNpZXN0IHdheSB3b3VsZCBiZSBjb3VudCB0aGUgYXJ0aWNsZXMsIGJ1dCB0aGF0IHdvdWxkIHNsb3cKICAgICMgZG93biB0aGUgbW9zdCBjb21tb24gY2FzZSAoZmV3ZXIgYXJ0aWNsZXMgdGhhbiAkTGltaXQgaW4gdGhlIHRpY2tldCkuCiAgICAjIFNvIGluc3RlYWQgd2UgdXNlIHRoZSBmb2xsb3dpbmcgdHJpY2s6CiAgICAjIDEpIGlmIHRoZSAkUGFnZSA+IDEsIHdlIG5lZWQgcGFnaW5hdGlvbgogICAgIyAyKSBpZiBub3QsIHJlcXVlc3QgJExpbWl0ICsgMSBhcnRpY2xlcy4gSWYgJExpbWl0ICsgMSBhcmUgYWN0dWFsbHkKICAgICMgICAgcmV0dXJuZWQsIHBhZ2luYXRpb24gaXMgbmVjZXNzYXJ5CiAgICBteSAkTmVlZFBhZ2luYXRpb247CgogICAgbXkgQEFydGljbGVCb3ggPSAkU2VsZi0+X0FydGljbGVCb3hHZXQoCiAgICAgICAgUGFnZSAgICAgICAgICA9PiAkUGFnZSwKICAgICAgICBBcnRpY2xlQm94QWxsID0+IFxAQXJ0aWNsZUJveEFsbCwKICAgICAgICBMaW1pdCAgICAgICAgID0+ICRMaW1pdCwKICAgICk7CgogICAgaWYgKCAhQEFydGljbGVCb3ggJiYgJFBhZ2UgPiAxICkgewoKICAgICAgICAjIElmIHRoZSBwYWdlIGFyZ3VtZW50IGlzIHBhc3QgdGhlIGFjdHVhbCBudW1iZXIgb2YgcGFnZXMuCiAgICAgICAgIyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIG5ldyBhcnRpY2xlIGZpbHRlciB3YXMgYWRkZWQuCiAgICAgICAgIyBUcnkgdG8gZ2V0IHJlc3VsdHMgZm9yIHRoZSAxc3QgcGFnZS4KCiAgICAgICAgQEFydGljbGVCb3ggPSAkU2VsZi0+X0FydGljbGVCb3hHZXQoCiAgICAgICAgICAgIFBhZ2UgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQXJ0aWNsZUJveEFsbCA9PiBcQEFydGljbGVCb3hBbGwsCiAgICAgICAgICAgIExpbWl0ICAgICAgICAgPT4gJExpbWl0LAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCBAQXJ0aWNsZUJveCA+ICRMaW1pdCApIHsKICAgICAgICBwb3AgQEFydGljbGVCb3g7CiAgICAgICAgJE5lZWRQYWdpbmF0aW9uID0gMTsKICAgIH0KICAgIGVsc2lmICggJFBhZ2UgPT0gMSAmJiBzY2FsYXIgQEFydGljbGVCb3hBbGwgPD0gJExpbWl0ICkgewogICAgICAgICROZWVkUGFnaW5hdGlvbiA9IDA7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkTmVlZFBhZ2luYXRpb24gPSAxOwogICAgfQoKICAgICRQYWdlIHx8PSAxOwoKICAgIG15ICRQYWdlczsKICAgIGlmICgkTmVlZFBhZ2luYXRpb24pIHsKICAgICAgICAkUGFnZXMgPSBjZWlsKCBzY2FsYXIgQEFydGljbGVCb3hBbGwgLyAkTGltaXQgKTsKICAgIH0KCiAgICBteSAkQXJ0aWNsZUlERm91bmQgPSAwOwogICAgQVJUSUNMRToKICAgIGZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVCb3gpIHsKICAgICAgICBuZXh0IEFSVElDTEUgaWYgISRTZWxmLT57QXJ0aWNsZUlEfTsKICAgICAgICBuZXh0IEFSVElDTEUgaWYgISRBcnRpY2xlLT57QXJ0aWNsZUlEfTsKICAgICAgICBuZXh0IEFSVElDTEUgaWYgJFNlbGYtPntBcnRpY2xlSUR9IG5lICRBcnRpY2xlLT57QXJ0aWNsZUlEfTsKCiAgICAgICAgJEFydGljbGVJREZvdW5kID0gMTsKICAgIH0KCiAgICAjIGdldCBzZWxlY3RlZCBvciBsYXN0IGN1c3RvbWVyIGFydGljbGUKICAgIGlmICgkQXJ0aWNsZUlERm91bmQpIHsKICAgICAgICAkQXJ0aWNsZUlEID0gJFNlbGYtPntBcnRpY2xlSUR9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgaWYgKCAhJEFydGljbGVJRCApIHsKICAgICAgICAgICAgaWYgKEBBcnRpY2xlQm94KSB7CgogICAgICAgICAgICAgICAgIyBzZXQgZmlyc3QgbGlzdGVkIGFydGljbGUgYXMgZmFsbGJhY2sKICAgICAgICAgICAgICAgICRBcnRpY2xlSUQgPSAkQXJ0aWNsZUJveFswXS0+e0FydGljbGVJRH07CgogICAgICAgICAgICAgICAgIyBzZXQgbGFzdCBjdXN0b21lciBhcnRpY2xlIGFzIHNlbGVjdGVkIGFydGljbGUgcmVwbGFjaW5nIGxhc3Qgc2V0CiAgICAgICAgICAgICAgICBBUlRJQ0xFVE1QOgogICAgICAgICAgICAgICAgZm9yIG15ICRBcnRpY2xlVG1wIChAQXJ0aWNsZUJveCkgewogICAgICAgICAgICAgICAgICAgIGlmICggJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGVUbXAtPntTZW5kZXJUeXBlSUR9IH0gZXEgJ2N1c3RvbWVyJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEFydGljbGVJRCA9ICRBcnRpY2xlVG1wLT57QXJ0aWNsZUlEfTsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBBUlRJQ0xFVE1QIGlmICRTZWxmLT57Wm9vbUV4cGFuZFNvcnR9IGVxICdyZXZlcnNlJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBleHBhbmQgdmlldyBpcyB1c2FibGUgKG9ubHkgZm9yIGxlc3MgdGhlbiA0MDAgYXJ0aWNsZSkKICAgICMgaWYgeW91IGhhdmUgbW9yZSBhcnRpY2xlcyBpcyBnb2luZyB0byBiZSBzbG93IGFuZCBub3QgdXNhYmxlCiAgICBteSAkQXJ0aWNsZU1heExpbWl0ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpNYXhBcnRpY2xlc1pvb21FeHBhbmQnKQogICAgICAgIC8vIDQwMDsKICAgIGlmICggJFNlbGYtPntab29tRXhwYW5kfSAmJiAkI0FydGljbGVCb3ggPiAkQXJ0aWNsZU1heExpbWl0ICkgewogICAgICAgICRTZWxmLT57Wm9vbUV4cGFuZH0gPSAwOwogICAgfQoKICAgICMgZ2V0IHNob3duIGFydGljbGUocykKICAgIG15IEBBcnRpY2xlQm94U2hvd247CiAgICBpZiAoICEkU2VsZi0+e1pvb21FeHBhbmR9ICkgewogICAgICAgIEFSVElDTEVCT1g6CiAgICAgICAgZm9yIG15ICRBcnRpY2xlVG1wIChAQXJ0aWNsZUJveCkgewogICAgICAgICAgICBpZiAoICRBcnRpY2xlSUQgZXEgJEFydGljbGVUbXAtPntBcnRpY2xlSUR9ICkgewogICAgICAgICAgICAgICAgcHVzaCBAQXJ0aWNsZUJveFNob3duLCAkQXJ0aWNsZVRtcDsKICAgICAgICAgICAgICAgIGxhc3QgQVJUSUNMRUJPWDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIEBBcnRpY2xlQm94U2hvd24gPSBAQXJ0aWNsZUJveDsKICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgYWdlIGRlc2lnbgogICAgJFRpY2tldHtBZ2V9ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJBZ2UoCiAgICAgICAgQWdlICAgPT4gJFRpY2tldHtBZ2V9LAogICAgICAgIFNwYWNlID0+ICcgJwogICAgKTsKCiAgICBteSAkTWFpbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CgogICAgbXkgJVdpZGdldHM7CiAgICBteSAlQXN5bmNXaWRnZXRBY3Rpb25zOwogICAgV0lER0VUOgogICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9LT57V2lkZ2V0c30gLy8ge30gfSApIHsKICAgICAgICBteSAkQ29uZmlnID0gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9LT57V2lkZ2V0c30tPnskS2V5fTsKCiAgICAgICAgaWYgKCAkQ29uZmlnLT57QXN5bmN9ICkgewogICAgICAgICAgICBpZiAoICEkQ29uZmlnLT57TG9jYXRpb259ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PgogICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGNvbmZpZ3VyYXRpb24gZm9yICRDb25maWctPntNb2R1bGV9IG11c3QgY29udGFpbiBhIExvY2F0aW9uLCBiZWNhdXNlIGl0IGlzIG1hcmtlZCBhcyBBc3luYy4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG5leHQgV0lER0VUOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15ICRFbGVtZW50SUQgPSAnQXN5bmNfJyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJEtleSk7CiAgICAgICAgICAgIHB1c2ggQHsgJFdpZGdldHN7ICRDb25maWctPntMb2NhdGlvbn0gfSB9LCB7CiAgICAgICAgICAgICAgICBBc3luYyA9PiAxLAogICAgICAgICAgICAgICAgUmFuayAgPT4gJENvbmZpZy0+e1Jhbmt9IHx8ICRLZXksCiAgICAgICAgICAgICAgICAlVGlja2V0LAogICAgICAgICAgICAgICAgRWxlbWVudElEID0+ICRFbGVtZW50SUQsCiAgICAgICAgICAgIH07CiAgICAgICAgICAgICRBc3luY1dpZGdldEFjdGlvbnN7JEVsZW1lbnRJRH0gPSAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249TG9hZFdpZGdldDsiCiAgICAgICAgICAgICAgICAuICJUaWNrZXRJRD0kU2VsZi0+e1RpY2tldElEfTtFbGVtZW50SUQ9JEVsZW1lbnRJRCI7CiAgICAgICAgICAgIG5leHQgV0lER0VUOwogICAgICAgIH0KICAgICAgICBteSAkU3VjY2VzcyA9IGV2YWwgeyAkTWFpbk9iamVjdC0+UmVxdWlyZSggJENvbmZpZy0+e01vZHVsZX0gKSB9OwoKICAgICAgICBuZXh0IFdJREdFVCB1bmxlc3MgJFN1Y2Nlc3M7CgogICAgICAgIG15ICRNb2R1bGUgPSBldmFsIHsgJENvbmZpZy0+e01vZHVsZX0tPm5ldyglJFNlbGYpIH07CiAgICAgICAgaWYgKCAhJE1vZHVsZSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIm5ldygpIG9mIFdpZGdldCBtb2R1bGUgJENvbmZpZy0+e01vZHVsZX0gbm90IHN1Y2Nlc3NmdWwhIiwKCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFdJREdFVDsKICAgICAgICB9CgogICAgICAgIG15ICRXaWRnZXRPdXRwdXQgPSAkTW9kdWxlLT5SdW4oCiAgICAgICAgICAgIFRpY2tldCAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgQWNsQWN0aW9uID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICBDb25maWcgICAgPT4gJENvbmZpZywKICAgICAgICApOwoKICAgICAgICBuZXh0IFdJREdFVCB1bmxlc3MgJFdpZGdldE91dHB1dDsKCiAgICAgICAgJFdpZGdldE91dHB1dC0+e1Jhbmt9IC8vPSAkS2V5OwogICAgICAgIG15ICRMb2NhdGlvbiA9ICRXaWRnZXRPdXRwdXQtPntMb2NhdGlvbn0gfHwgJENvbmZpZy0+e0xvY2F0aW9ufTsKICAgICAgICBwdXNoIEB7ICRXaWRnZXRzeyRMb2NhdGlvbn0gfSwgJFdpZGdldE91dHB1dDsKICAgIH0KICAgIGZvciBteSAkTG9jYXRpb24gKCBzb3J0IGtleXMgJVdpZGdldHMgKSB7CiAgICAgICAgJFBhcmFteyAkTG9jYXRpb24gLiAnV2lkZ2V0cycgfSA9IFsKICAgICAgICAgICAgc29ydCB7ICRhLT57UmFua30gY21wICRiLT57UmFua30gfSBAeyAkV2lkZ2V0c3skTG9jYXRpb259IH0KICAgICAgICBdOwogICAgfQogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdBc3luY1dpZGdldEFjdGlvbnMnLAogICAgICAgIFZhbHVlID0+IFwlQXN5bmNXaWRnZXRBY3Rpb25zLAogICAgKTsKCiAgICAjIHNldCBkaXNwbGF5IG9wdGlvbnMKICAgICRQYXJhbXtIb29rfSA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rJykgfHwgJ1RpY2tldCMnOwoKICAgICMgb25seSBzaG93IGFydGljbGUgdHJlZSBpZiBhcnRpY2xlcyBhcmUgcHJlc2VudCwKICAgICMgb3IgaWYgYSBmaWx0ZXIgaXMgc2V0IChzbyB0aGF0IHRoZSB1c2VyIGhhcyB0aGUgb3B0aW9uIHRvCiAgICAjIGRpc2FibGUgdGhlIGZpbHRlcikKICAgIGlmICggQEFydGljbGVCb3ggfHwgJFNlbGYtPntBcnRpY2xlRmlsdGVyfSApIHsKCiAgICAgICAgbXkgJFBhZ2luYXRpb247CgogICAgICAgIGlmICgkTmVlZFBhZ2luYXRpb24pIHsKICAgICAgICAgICAgJFBhZ2luYXRpb24gPSB7CiAgICAgICAgICAgICAgICBQYWdlcyAgICAgICA9PiAkUGFnZXMsCiAgICAgICAgICAgICAgICBDdXJyZW50UGFnZSA9PiAkUGFnZSwKICAgICAgICAgICAgICAgIFRpY2tldElEICAgID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGFydGljbGUgdHJlZQogICAgICAgICRQYXJhbXtBcnRpY2xlVHJlZX0gPSAkU2VsZi0+X0FydGljbGVUcmVlKAogICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgQXJ0aWNsZUZsYWdzICAgICAgPT4gXCVBcnRpY2xlRmxhZ3MsCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgIEFydGljbGVNYXhMaW1pdCAgID0+ICRBcnRpY2xlTWF4TGltaXQsCiAgICAgICAgICAgIEFydGljbGVCb3ggICAgICAgID0+IFxAQXJ0aWNsZUJveCwKICAgICAgICAgICAgUGFnaW5hdGlvbiAgICAgICAgPT4gJFBhZ2luYXRpb24sCiAgICAgICAgICAgIFBhZ2UgICAgICAgICAgICAgID0+ICRQYWdlLAogICAgICAgICAgICBBcnRpY2xlQ291bnQgICAgICA9PiBzY2FsYXIgQEFydGljbGVCb3gsCiAgICAgICAgICAgIEFjbEFjdGlvbiAgICAgICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICBTdGFuZGFyZFJlc3BvbnNlcyA9PiAkU3RhbmRhcmRUZW1wbGF0ZXN7QW5zd2VyfSwKICAgICAgICAgICAgU3RhbmRhcmRGb3J3YXJkcyAgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0ZvcndhcmR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IGFydGljbGVzIGl0ZW1zCiAgICBpZiAoICEkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CgogICAgICAgIG15IEBBcnRpY2xlSURzOwogICAgICAgICRQYXJhbXtBcnRpY2xlSXRlbXN9ID0gJyc7CgogICAgICAgIG15ICRBcnRpY2xlV2lkZ2V0c0hUTUwgPSAnJzsKCiAgICAgICAgQVJUSUNMRToKICAgICAgICBmb3IgbXkgJEFydGljbGVUbXAgKEBBcnRpY2xlQm94U2hvd24pIHsKICAgICAgICAgICAgbXkgJUFydGljbGUgPSAlJEFydGljbGVUbXA7CgogICAgICAgICAgICAkQXJ0aWNsZVdpZGdldHNIVE1MIC49ICRTZWxmLT5fQXJ0aWNsZUl0ZW0oCiAgICAgICAgICAgICAgICBUaWNrZXQgICAgICAgICAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgICAgIEFydGljbGUgICAgICAgICAgID0+IFwlQXJ0aWNsZSwKICAgICAgICAgICAgICAgIEFjbEFjdGlvbiAgICAgICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgU3RhbmRhcmRSZXNwb25zZXMgPT4gJFN0YW5kYXJkVGVtcGxhdGVze0Fuc3dlcn0sCiAgICAgICAgICAgICAgICBTdGFuZGFyZEZvcndhcmRzICA9PiAkU3RhbmRhcmRUZW1wbGF0ZXN7Rm9yd2FyZH0sCiAgICAgICAgICAgICAgICBBY3R1YWxBcnRpY2xlSUQgICA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgPT4gJ1N0YXRpYycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQEFydGljbGVJRHMsICRBcnRpY2xlVG1wLT57QXJ0aWNsZUlEfTsKICAgICAgICB9CgogICAgICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZUlEcycsCiAgICAgICAgICAgIFZhbHVlID0+IFxAQXJ0aWNsZUlEcywKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ01lbnVJdGVtcycsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TWVudUl0ZW1zfSwKICAgICAgICApOwoKICAgICAgICAkUGFyYW17QXJ0aWNsZUl0ZW1zfSAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaWNrZXRab29tJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICAgICAlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgQXJ0aWNsZVdpZGdldHNIVE1MID0+ICRBcnRpY2xlV2lkZ2V0c0hUTUwsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFsd2F5cyBzaG93IGFyY2hpdmVkIHRpY2tldHMgYXMgc2VlbgogICAgaWYgKCAkU2VsZi0+e1pvb21FeHBhbmR9ICYmICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICd5JyApIHsKCiAgICAgICAgIyBzZW5kIGRhdGEgdG8gSlMKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXRJdGVtTWFya0FzU2VlbicsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG51bWJlciBvZiBhcnRpY2xlcwogICAgJFBhcmFte0FydGljbGVDb3VudH0gPSBzY2FsYXIgQEFydGljbGVCb3g7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnSGVhZGVyJywKICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCAlVGlja2V0LCAlQWNsQWN0aW9uIH0sCiAgICApOwoKICAgIG15ICVBY3Rpb25Mb29rdXA7CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBydW4gdGlja2V0IG1lbnUgbW9kdWxlcwogICAgaWYgKCByZWYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgZXEgJ0hBU0gnICkgewogICAgICAgIG15ICVNZW51cyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TWVudU1vZHVsZScpIH07CiAgICAgICAgbXkgJU1lbnVDbHVzdGVyczsKICAgICAgICBteSAlWm9vbU1lbnVJdGVtczsKCiAgICAgICAgTUVOVToKICAgICAgICBmb3IgbXkgJE1lbnUgKCBzb3J0IGtleXMgJU1lbnVzICkgewoKICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkTWVudXN7JE1lbnV9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNZW51c3skTWVudX0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgIG15ICRJdGVtID0gJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgVGlja2V0ID0+IFwlVGlja2V0LAogICAgICAgICAgICAgICAgQUNMICAgID0+IFwlQWNsQWN0aW9uLAogICAgICAgICAgICAgICAgQ29uZmlnID0+ICRNZW51c3skTWVudX0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG5leHQgTUVOVSBpZiAhJEl0ZW07CiAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e1BvcHVwVHlwZX0gKSB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSA9ICJBc1BvcHVwIFBvcHVwVHlwZV8kTWVudXN7JE1lbnV9LT57UG9wdXBUeXBlfSI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJE1lbnVzeyRNZW51fS0+e0FjdGlvbn0gKSB7CiAgICAgICAgICAgICAgICAkQWN0aW9uTG9va3VweyAkTWVudXN7JE1lbnV9LT57QWN0aW9ufSB9ID0gewogICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgID0+ICRJdGVtLT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJEl0ZW0tPntDbGFzc30sCiAgICAgICAgICAgICAgICAgICAgTGlua1BhcmFtICAgICAgPT4gJEl0ZW0tPntMaW5rUGFyYW19LAogICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgID0+ICRJdGVtLT57RGVzY3JpcHRpb259LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICRJdGVtLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlZE5hbWUgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpLT5UcmFuc2xhdGUoICRJdGVtLT57TmFtZX0gKSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISRNZW51c3skTWVudX0tPntDbHVzdGVyTmFtZX0gKSB7CgogICAgICAgICAgICAgICAgJFpvb21NZW51SXRlbXN7JE1lbnV9ID0gJEl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayB0aGUgY29uZmlndXJlZCBwcmlvcml0eSBmb3IgdGhpcyBpdGVtLiBUaGUgbG93ZXN0IENsdXN0ZXJQcmlvcml0eQogICAgICAgICAgICAgICAgIyB3aXRoaW4gdGhlIHNhbWUgY2x1c3RlciB3aW5zLgogICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5ID0gJE1lbnVDbHVzdGVyc3sgJE1lbnVzeyRNZW51fS0+e0NsdXN0ZXJOYW1lfSB9LT57UHJpb3JpdHl9IHx8IDA7CiAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57Q2x1c3RlclByaW9yaXR5fSB8fD0gMDsKICAgICAgICAgICAgICAgIGlmICggISRQcmlvcml0eSB8fCAkUHJpb3JpdHkgIX4gL15cZHszfSQvIHx8ICRQcmlvcml0eSA+ICRNZW51c3skTWVudX0tPntDbHVzdGVyUHJpb3JpdHl9ICkgewogICAgICAgICAgICAgICAgICAgICRQcmlvcml0eSA9ICRNZW51c3skTWVudX0tPntDbHVzdGVyUHJpb3JpdHl9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJE1lbnVDbHVzdGVyc3sgJE1lbnVzeyRNZW51fS0+e0NsdXN0ZXJOYW1lfSB9LT57UHJpb3JpdHl9ID0gJFByaW9yaXR5OwogICAgICAgICAgICAgICAgJE1lbnVDbHVzdGVyc3sgJE1lbnVzeyRNZW51fS0+e0NsdXN0ZXJOYW1lfSB9LT57SXRlbXN9LT57JE1lbnV9ID0gJEl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvciBteSAkQ2x1c3RlciAoIHNvcnQga2V5cyAlTWVudUNsdXN0ZXJzICkgewogICAgICAgICAgICAkWm9vbU1lbnVJdGVtc3sgJE1lbnVDbHVzdGVyc3skQ2x1c3Rlcn0tPntQcmlvcml0eX0gLiAkQ2x1c3RlciB9ID0gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJENsdXN0ZXIsCiAgICAgICAgICAgICAgICBUeXBlICA9PiAnQ2x1c3RlcicsCiAgICAgICAgICAgICAgICBMaW5rICA9PiAnIycsCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAnQ2x1c3RlckxpbmsnLAogICAgICAgICAgICAgICAgSXRlbXMgPT4gJE1lbnVDbHVzdGVyc3skQ2x1c3Rlcn0tPntJdGVtc30sCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAjIGRpc3BsYXkgYWxsIGl0ZW1zCiAgICAgICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVab29tTWVudUl0ZW1zICkgewogICAgICAgICAgICBpZiAoICRab29tTWVudUl0ZW1zeyRJdGVtfS0+e0V4dGVybmFsTGlua30gJiYgJFpvb21NZW51SXRlbXN7JEl0ZW19LT57RXh0ZXJuYWxMaW5rfSA9PSAxICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0TWVudUV4dGVybmFsTGluaycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkWm9vbU1lbnVJdGVtc3skSXRlbX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0TWVudScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkWm9vbU1lbnVJdGVtc3skSXRlbX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRab29tTWVudUl0ZW1zeyRJdGVtfS0+e1R5cGV9IGVxICdDbHVzdGVyJyApIHsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51U3ViQ29udGFpbmVyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBhIG1hcCBvZiBwcmlvcml0aWVzIHZlcnN1cyBzdWJpdGVtcyBiYXNlZCBvbiB0aGUgQ2x1c3RlclByaW9yaXR5IG9mIGVhY2ggc3ViaXRlbQogICAgICAgICAgICAgICAgIyB0aGUgc2V0dGluZ3Mga2V5IG9yZGVyIHByZXZhaWxzIGJldHdlZW4gc3ViaXRlbXMgd2l0aCBlcXVhbCBDbHVzdGVyUHJpb3JpdHkKICAgICAgICAgICAgICAgICMgcHJpb3JpdGllcyBhcmUgYWx3YXlzIGFwcGVuZGVkIGEgc2VxdWVudGlhbCBzdWZmaXggb2YgdHdvIGRpZ2l0cyAoODAwLTAxLCA4MDAtMDIsIDgwMC0wMywgZXRjLikKICAgICAgICAgICAgICAgICMgdGhpcyBlbmZvcmNlcyBkaXN0aW5jdCBtYXAga2V5cyBldmVuIGFtb25nIHN1Yml0ZW1zIHdpdGggdGhlIHNhbWUgQ2x1c3RlclByaW9yaXR5CiAgICAgICAgICAgICAgICBteSAlUHJpb3JpdHlTdWZmaXhlczsKICAgICAgICAgICAgICAgIG15ICVNYXBQcmlvcml0eVRvU3ViSXRlbTsKICAgICAgICAgICAgICAgIGZvciBteSAkU3ViSXRlbSAoIHNvcnQga2V5cyAleyAkWm9vbU1lbnVJdGVtc3skSXRlbX0tPntJdGVtc30gfSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkSXRlbVByaW9yaXR5ID0gJFpvb21NZW51SXRlbXN7JEl0ZW19LT57SXRlbXN9LT57JFN1Ykl0ZW19LT57Q2x1c3RlclByaW9yaXR5fTsKICAgICAgICAgICAgICAgICAgICBpZiAoICEkUHJpb3JpdHlTdWZmaXhlc3skSXRlbVByaW9yaXR5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX0gPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX0rKzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZW5mb3JjZSB0aGUgdHdvIGRpZ2l0cyBzdWZmaXgsIHNpbmNlIDEwIG9yIG1vcmUgc3ViaXRlbXMgYXJlIHBvc3NpYmxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUHJpb3JpdHlTdWZmaXhlc3skSXRlbVByaW9yaXR5fSA9fiAvXlxkJC8gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQcmlvcml0eVN1ZmZpeGVzeyRJdGVtUHJpb3JpdHl9ID0gIjAiIC4gJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlLZXkgPSAkSXRlbVByaW9yaXR5IC4gIi0iIC4gJFByaW9yaXR5U3VmZml4ZXN7JEl0ZW1Qcmlvcml0eX07CiAgICAgICAgICAgICAgICAgICAgJE1hcFByaW9yaXR5VG9TdWJJdGVteyRQcmlvcml0eUtleX0gPSAkU3ViSXRlbTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJlbmRlciBzdWJpdGVtcyBhY2NvcmRpbmcgdG8gdGhlIHByaW9yaXRpZXMgbWFwCiAgICAgICAgICAgICAgICBmb3IgbXkgJFByaW9yaXR5S2V5ICggc29ydCBrZXlzICVNYXBQcmlvcml0eVRvU3ViSXRlbSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkU3ViSXRlbSA9ICRNYXBQcmlvcml0eVRvU3ViSXRlbXskUHJpb3JpdHlLZXl9OwogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRNZW51U3ViQ29udGFpbmVySXRlbScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFpvb21NZW51SXRlbXN7JEl0ZW19LT57SXRlbXN9LT57JFN1Ykl0ZW19LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgTW92ZVF1ZXVlc1N0cmcKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpNb3ZlVHlwZScpID1+IC9eZm9ybSQvaSApIHsKICAgICAgICAkTW92ZVF1ZXVlc3swfSAgICAgICAgID0gJy0gJyAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTW92ZScpIC4gJyAtJzsKICAgICAgICAkUGFyYW17TW92ZVF1ZXVlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QWdlbnRRdWV1ZUxpc3RPcHRpb24oCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdEZXN0UXVldWVJRCcsCiAgICAgICAgICAgIFRyZWVWaWV3ICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKSBlcSAndHJlZScgPyAxIDogMCwKICAgICAgICAgICAgRGF0YSAgICAgICAgICAgPT4gXCVNb3ZlUXVldWVzLAogICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAnTW9kZXJuaXplIFNtYWxsJywKICAgICAgICAgICAgQ3VycmVudFF1ZXVlSUQgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICApOwogICAgfQogICAgbXkgJUFjbEFjdGlvbkxvb2t1cCA9IHJldmVyc2UgJUFjbEFjdGlvbjsKICAgIGlmICgKICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+e0FnZW50VGlja2V0TW92ZX0KICAgICAgICAmJiAoICRBY2xBY3Rpb25Mb29rdXB7QWdlbnRUaWNrZXRNb3ZlfSApCiAgICAgICAgKQogICAgewogICAgICAgIG15ICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgICA9PiAnbW92ZScsCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkUGFyYW17VGlja2V0SUR9ID0gJFRpY2tldHtUaWNrZXRJRH07CiAgICAgICAgaWYgKCRBY2Nlc3MpIHsKICAgICAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok1vdmVUeXBlJykgPX4gL15mb3JtJC9pICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTW92ZUxpbmsnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sICVBY2xBY3Rpb24gfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdNb3ZlRm9ybScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJUFjbEFjdGlvbiB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJEFjdGlvbkxvb2t1cHtBZ2VudFRpY2tldE1vdmV9ID0gewogICAgICAgICAgICAgICAgTGluayAgICAgICAgICAgPT4gJ0FjdGlvbj1BZ2VudFRpY2tldE1vdmU7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXScsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAnQXNQb3B1cCBQb3B1cFR5cGVfVGlja2V0QWN0aW9uJywKICAgICAgICAgICAgICAgIExpbmtQYXJhbSAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgPT4gVHJhbnNsYXRhYmxlKCdDaGFuZ2UgUXVldWUnKSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+IFRyYW5zbGF0YWJsZSgnUXVldWUnKSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWROYW1lID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCdRdWV1ZScpLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiMgUm90aGVyIE9TUyAvIEFnZW50VGlja2V0Rm9ybURyYWZ0UmV2aWV3CiMgICAgICMgQ2hlY2sgaWYgQWdlbnRUaWNrZXRDb21wb3NlIGFuZCBBZ2VudFRpY2tldEZvcndhcmQgYXJlIGFsbG93ZWQgYXMgYWN0aW9uIChmb3IgZGlzcGxheSBvZiBGb3JtRHJhZnRzKS4KICAgICMgQ2hlY2sgaWYgQWdlbnRUaWNrZXRDb21wb3NlL0FnZW50VGlja2V0Rm9ybURyYWZ0RWRpdCBhbmQgQWdlbnRUaWNrZXRGb3J3YXJkIGFyZSBhbGxvd2VkIGFzIGFjdGlvbiAoZm9yIGRpc3BsYXkgb2YgRm9ybURyYWZ0cykuCiMgRU8gQWdlbnRUaWNrZXRGb3JtRHJhZnRSZXZpZXcKICAgIG15ICVBY3Rpb25Db25maWcgPSAoCiAgICAgICAgQWdlbnRUaWNrZXRDb21wb3NlID0+IHsKICAgICAgICAgICAgTGluayAgICAgICAgICAgPT4gJ0FjdGlvbj1BZ2VudFRpY2tldENvbXBvc2U7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXScsCiAgICAgICAgICAgIENsYXNzICAgICAgICAgID0+ICdBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24nLAogICAgICAgICAgICBMaW5rUGFyYW0gICAgICA9PiAnJywKICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgPT4gVHJhbnNsYXRhYmxlKCdSZXBseScpLAogICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiBUcmFuc2xhdGFibGUoJ1JlcGx5JyksCiAgICAgICAgICAgIFRyYW5zbGF0ZWROYW1lID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCdSZXBseScpLAogICAgICAgIH0sCiAgICAgICAgQWdlbnRUaWNrZXRGb3J3YXJkID0+IHsKICAgICAgICAgICAgTGluayAgICAgICAgICAgPT4gJ0FjdGlvbj1BZ2VudFRpY2tldEZvcndhcmQ7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IHVyaSAlXScsCiAgICAgICAgICAgIENsYXNzICAgICAgICAgID0+ICdBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24nLAogICAgICAgICAgICBMaW5rUGFyYW0gICAgICA9PiAnJywKICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgPT4gVHJhbnNsYXRhYmxlKCdGb3J3YXJkIGFydGljbGUgdmlhIG1haWwnKSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdGb3J3YXJkJyksCiAgICAgICAgICAgIFRyYW5zbGF0ZWROYW1lID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCdGb3J3YXJkJyksCiAgICAgICAgfSwKIyBSb3RoZXIgT1NTIC8gQWdlbnRUaWNrZXRGb3JtRHJhZnRSZXZpZXcKICAgICAgICBBZ2VudFRpY2tldEZvcm1EcmFmdEVkaXQgPT4gewogICAgICAgICAgICBMaW5rICAgICAgICAgICA9PiAnQWN0aW9uPUFnZW50VGlja2V0Rm9ybURyYWZ0RWRpdDtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEIHwgdXJpICVdJywKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ0FzUG9wdXAgUG9wdXBUeXBlX1RpY2tldEFjdGlvbicsCiAgICAgICAgICAgIExpbmtQYXJhbSAgICAgID0+ICcnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICA9PiBUcmFuc2xhdGFibGUoJ0VkaXQgZHJhZnQnKSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdFZGl0JyksCiAgICAgICAgICAgIFRyYW5zbGF0ZWROYW1lID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCdFZGl0JyksCiAgICAgICAgfSwKIyBFTyBBZ2VudFRpY2tldEZvcm1EcmFmdFJldmlldwogICAgKTsKCiMgUm90aGVyIE9TUyAvIEFnZW50VGlja2V0Rm9ybURyYWZ0UmV2aWV3CiMgICAgQUNUSU9OOgojICAgIGZvciBteSAkQWN0aW9uIChxdyhBZ2VudFRpY2tldENvbXBvc2UgQWdlbnRUaWNrZXRGb3J3YXJkKSkgewogICAgQUNUSU9OOgogICAgZm9yIG15ICRBY3Rpb24gKHF3KEFnZW50VGlja2V0Q29tcG9zZSBBZ2VudFRpY2tldEZvcndhcmQgQWdlbnRUaWNrZXRGb3JtRHJhZnRFZGl0KSkgewojIEVPIEFnZW50VGlja2V0Rm9ybURyYWZ0UmV2aWV3CiAgICAgICAgbmV4dCBBQ1RJT04gaWYgISRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn07CiAgICAgICAgbmV4dCBBQ1RJT04gaWYgISRBY2xBY3Rpb25Mb29rdXB7JEFjdGlvbn07CgogICAgICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoICdUaWNrZXQ6OkZyb250ZW5kOjonIC4gJEFjdGlvbiApOwogICAgICAgIGlmICggJENvbmZpZy0+e1Blcm1pc3Npb259ICkgewogICAgICAgICAgICBuZXh0IEFDVElPTiBpZiAhJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICAgICAgICAgIFR5cGUgICAgID0+ICRDb25maWctPntQZXJtaXNzaW9ufSwKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgTG9nTm8gICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJEFjdGlvbkxvb2t1cHskQWN0aW9ufSA9ICRBY3Rpb25Db25maWd7JEFjdGlvbn07CiAgICB9CgogICAgIyBHZXQgYW5kIHNob3cgYXZhaWxhYmxlIEZvcm1EcmFmdHMuCiAgICBteSAlU2hvd25Gb3JtRHJhZnRFbnRyaWVzOwogICAgbXkgJEZvcm1EcmFmdExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Rm9ybURyYWZ0JyktPkZvcm1EcmFmdExpc3RHZXQoCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICBPYmplY3RJRCAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiMgUm90aGVyIE9TUyAvIEFnZW50VGlja2V0Rm9ybURyYWZ0UmV2aWV3CiAgICAjIGdldCB1c2VyIGF1dGhvcml6YXRpb24gbGV2ZWwgKG93bmVyLCBydywgcm8pCiAgICBteSAkVXNlclBlcm1pc3Npb24gPSAkU2VsZi0+X0dldFVzZXJQZXJtaXNzaW9uTGV2ZWwoKTsKICAgIG15ICRUaWNrZXRJc0xvY2tlZCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0KICAgICk7CgogICAgIyBvbiBsb2NrZWQgdGlja2V0cyBvbmx5IHRoZSBvd25lciBjYW4gZnVsbHkgYWNjZXNzIGNvbXBvc2UgYW5kIGZvcndhcmQgZm9ybSBkcmFmdHMKICAgIGlmICggJFRpY2tldElzTG9ja2VkICYmICRVc2VyUGVybWlzc2lvbiBuZSAnb3duZXInICkgewogICAgICAgIGRlbGV0ZSAkQWN0aW9uTG9va3Vwe0FnZW50VGlja2V0Q29tcG9zZX07CiAgICAgICAgZGVsZXRlICRBY3Rpb25Mb29rdXB7QWdlbnRUaWNrZXRGb3J3YXJkfTsKICAgIH0KCiAgICBlbHNpZiAoICRVc2VyUGVybWlzc2lvbiBlcSAncm8nICkgewogICAgICAgICRBY3Rpb25Mb29rdXB7QWdlbnRUaWNrZXRGb3JtRHJhZnRFZGl0fXtEZXNjcmlwdGlvbn0gICAgPSBUcmFuc2xhdGFibGUoJ1ZpZXcgZHJhZnQnKTsKICAgICAgICAkQWN0aW9uTG9va3Vwe0FnZW50VGlja2V0Rm9ybURyYWZ0RWRpdH17TmFtZX0gICAgICAgICAgID0gVHJhbnNsYXRhYmxlKCdWaWV3Jyk7CiAgICAgICAgJEFjdGlvbkxvb2t1cHtBZ2VudFRpY2tldEZvcm1EcmFmdEVkaXR9e1RyYW5zbGF0ZWROYW1lfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKS0+VHJhbnNsYXRlKCdWaWV3Jyk7CiAgICB9CiMgRU8gQWdlbnRUaWNrZXRGb3JtRHJhZnRSZXZpZXcKCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkRm9ybURyYWZ0TGlzdCkgKSB7CiAgICAgICAgRm9ybURyYWZ0OgogICAgICAgIGZvciBteSAkRm9ybURyYWZ0ICggQHskRm9ybURyYWZ0TGlzdH0gKSB7CiMgUm90aGVyIE9TUyAvIEFnZW50VGlja2V0Rm9ybURyYWZ0UmV2aWV3CiMgICAgICAgICAgICBuZXh0IEZvcm1EcmFmdCBpZiAhJEFjdGlvbkxvb2t1cHsgJEZvcm1EcmFmdC0+e0FjdGlvbn0gfTsKICAgICAgICAgICAgaWYgKCAhJEFjdGlvbkxvb2t1cHsgJEZvcm1EcmFmdC0+e0FjdGlvbn0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGlmIHdlIGNhbm5vdCBkaXJlY3RseSBhY2Nlc3MgdGhlIGFjdGlvbiwgYWx0ZXJuYXRpdmVseSBsb2FkIHRoZSBkcmFmdCB2aWEgRm9ybURyYWZ0RWRpdCBpZiBhdmFpbGFibGUKICAgICAgICAgICAgICAgIG5leHQgRm9ybURyYWZ0IGlmICEkQWN0aW9uTG9va3Vwe0FnZW50VGlja2V0Rm9ybURyYWZ0RWRpdH07CgogICAgICAgICAgICAgICAgJEZvcm1EcmFmdC0+e0FjdGlvbn0gPSAnQWdlbnRUaWNrZXRGb3JtRHJhZnRFZGl0JzsKICAgICAgICAgICAgfQojIEVPIEFnZW50VGlja2V0Rm9ybURyYWZ0UmV2aWV3CgogICAgICAgICAgICBwdXNoIEB7ICRTaG93bkZvcm1EcmFmdEVudHJpZXN7ICRGb3JtRHJhZnQtPntBY3Rpb259IH0gfSwgJEZvcm1EcmFmdDsKICAgICAgICB9CiAgICB9CiAgICBpZiAoJVNob3duRm9ybURyYWZ0RW50cmllcykgewoKICAgICAgICBteSAkTGFzdEFydGljbGU7CiAgICAgICAgaWYgKCAkT3JkZXIgZXEgJ0RFU0MnICkgewogICAgICAgICAgICAkTGFzdEFydGljbGUgPSAkQXJ0aWNsZUJveEFsbFswXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXN0QXJ0aWNsZSA9ICRBcnRpY2xlQm94QWxsWy0xXTsKICAgICAgICB9CgogICAgICAgIG15ICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWU7CiAgICAgICAgaWYgKCAkTGFzdEFydGljbGUtPntDcmVhdGVUaW1lfSApIHsKICAgICAgICAgICAgbXkgJExhc3RBcnRpY2xlU3lzdGVtVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRMYXN0QXJ0aWNsZS0+e0NyZWF0ZVRpbWV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJExhc3RBcnRpY2xlU3lzdGVtVGltZSA9ICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWVPYmplY3QtPlRvRXBvY2goKTsKICAgICAgICB9CgogICAgICAgIG15IEBGb3JtRHJhZnRzOwoKICAgICAgICBmb3IgbXkgJEFjdGlvbiAoCiAgICAgICAgICAgIHNvcnQgewogICAgICAgICAgICAgICAgJEFjdGlvbkxvb2t1cHskYX0tPntUcmFuc2xhdGVkTmFtZX0KICAgICAgICAgICAgICAgICAgICBjbXAKICAgICAgICAgICAgICAgICAgICAkQWN0aW9uTG9va3VweyRifS0+e1RyYW5zbGF0ZWROYW1lfQogICAgICAgICAgICB9IGtleXMgJVNob3duRm9ybURyYWZ0RW50cmllcwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkQWN0aW9uRGF0YSA9ICRBY3Rpb25Mb29rdXB7JEFjdGlvbn07CgogICAgICAgICAgICBmb3IgbXkgJFNob3duRm9ybURyYWZ0QWN0aW9uRW50cnkgKAogICAgICAgICAgICAgICAgc29ydCB7CiAgICAgICAgICAgICAgICAgICAgJGEtPntUaXRsZX0KICAgICAgICAgICAgICAgICAgICAgICAgY21wCiAgICAgICAgICAgICAgICAgICAgICAgICRiLT57VGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICRhLT57Rm9ybURyYWZ0SUR9CiAgICAgICAgICAgICAgICAgICAgICAgIDw9PgogICAgICAgICAgICAgICAgICAgICAgICAkYi0+e0Zvcm1EcmFmdElEfQogICAgICAgICAgICAgICAgfSBAeyAkU2hvd25Gb3JtRHJhZnRFbnRyaWVzeyRBY3Rpb259IH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFNob3duRm9ybURyYWZ0QWN0aW9uRW50cnktPntDcmVhdGVkQnlVc2VyfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNob3duRm9ybURyYWZ0QWN0aW9uRW50cnktPntDcmVhdGVCeX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFNob3duRm9ybURyYWZ0QWN0aW9uRW50cnktPntDaGFuZ2VkQnlVc2VyfSA9ICRVc2VyT2JqZWN0LT5Vc2VyTmFtZSgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNob3duRm9ybURyYWZ0QWN0aW9uRW50cnktPntDaGFuZ2VCeX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTaG93bkZvcm1EcmFmdEFjdGlvbkVudHJ5ID0gewogICAgICAgICAgICAgICAgICAgICV7JFNob3duRm9ybURyYWZ0QWN0aW9uRW50cnl9LAogICAgICAgICAgICAgICAgICAgICV7JEFjdGlvbkRhdGF9LAoKICAgICAgICAgICAgICAgIH07CgojIFJvdGhlciBPU1MgLyBBZ2VudFRpY2tldEZvcm1EcmFmdFJldmlldwogICAgICAgICAgICAgICAgJFNob3duRm9ybURyYWZ0QWN0aW9uRW50cnktPntSZWFkV3JpdGVQZXJtaXNzaW9ufSA9ICRVc2VyUGVybWlzc2lvbiBuZSAicm8iOwojIEVPIEFnZW50VGlja2V0Rm9ybURyYWZ0UmV2aWV3CiAgICAgICAgICAgICAgICBwdXNoIEBGb3JtRHJhZnRzLCAkU2hvd25Gb3JtRHJhZnRBY3Rpb25FbnRyeTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0Zvcm1EcmFmdFRhYmxlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBGb3JtRHJhZnRzID0+IFxARm9ybURyYWZ0cywKICAgICAgICAgICAgICAgIFRpY2tldElEICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgY3JlYXRlZCBieSBpZiBkaWZmZXJlbnQgdGhlbiBVc2VyIElEIDEKICAgIGlmICggJFRpY2tldHtDcmVhdGVCeX0gPiAxICkgewoKICAgICAgICAjIGdldCB1c2VyIG9iamVjdAogICAgICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKICAgICAgICAkVGlja2V0e0NyZWF0ZWRCeVVzZXJ9ID0gJFVzZXJPYmplY3QtPlVzZXJOYW1lKCBVc2VySUQgPT4gJFRpY2tldHtDcmVhdGVCeX0gKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ3JlYXRlZEJ5JywKICAgICAgICAgICAgRGF0YSA9PiB7JVRpY2tldH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgbm8gYXJ0aWNsZXMgYmxvY2sgaWYgdGlja2V0IGRvZXMgbm90IGNvbnRhaW4gYXJ0aWNsZXMKICAgIGlmICggIUBBcnRpY2xlQm94ICYmICEkU2VsZi0+e1pvb21UaW1lbGluZX0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0hpbnROb0FydGljbGVzJywKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgaWYgdGlja2V0IGlzIG5vcm1hbCBvciBwcm9jZXNzIHRpY2tldAogICAgbXkgJElzUHJvY2Vzc1RpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENoZWNrRm9yUHJvY2Vzc1R5cGUoCiAgICAgICAgJ1RpY2tldElEJyA9PiAkU2VsZi0+e1RpY2tldElEfQogICAgKTsKCiAgICAjIGNvbGxlY3QgZGF0YSBmb3Igb3ZlcnZpZXcgd2lkZ2V0CiAgICBteSAlV2lkZ2V0RGF0YTsKICAgIGlmICggJElzUHJvY2Vzc1RpY2tldCB8fCAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc317RHluYW1pY0ZpZWxkV2lkZ2V0RGlzcGxheX0gKSB7CiAgICAgICAgJVdpZGdldERhdGEgPSAkSXNQcm9jZXNzVGlja2V0CiAgICAgICAgICAgID8gKAogICAgICAgICAgICAgICAgV2lkZ2V0RGlzcGxheSAgICAgICAgICAgID0+ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfXtQcm9jZXNzRGlzcGxheX0sCiAgICAgICAgICAgICAgICBXaWRnZXRUaXRsZSAgICAgICAgICAgICAgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e1Byb2Nlc3NEaXNwbGF5fXtXaWRnZXRUaXRsZX0sCiAgICAgICAgICAgICAgICBXaWRnZXREeW5hbWljRmllbGRHcm91cHMgPT4gJFNlbGYtPntEaXNwbGF5U2V0dGluZ3N9e1Byb2Nlc3NXaWRnZXREeW5hbWljRmllbGRHcm91cHN9LAogICAgICAgICAgICApCiAgICAgICAgICAgIDogKAogICAgICAgICAgICAgICAgV2lkZ2V0RGlzcGxheSAgICAgICAgICAgID0+ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfXtEeW5hbWljRmllbGRXaWRnZXREaXNwbGF5fSwKICAgICAgICAgICAgICAgIFdpZGdldFRpdGxlICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc317RHluYW1pY0ZpZWxkV2lkZ2V0RGlzcGxheX17V2lkZ2V0VGl0bGV9LAogICAgICAgICAgICAgICAgV2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBzID0+ICRTZWxmLT57RGlzcGxheVNldHRpbmdzfXtEeW5hbWljRmllbGRXaWRnZXREeW5hbWljRmllbGRHcm91cHN9LAoKICAgICAgICAgICAgKTsKCiAgICAgICAgJFdpZGdldERhdGF7V2lkZ2V0RHluYW1pY0ZpZWxkfSA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tIikKICAgICAgICAgICAgLT57ICggJElzUHJvY2Vzc1RpY2tldCA/ICdQcm9jZXNzV2lkZ2V0RHluYW1pY0ZpZWxkJyA6ICdEeW5hbWljRmllbGRXaWRnZXREeW5hbWljRmllbGQnICkgfSAvLyB7fTsKICAgIH0KCiAgICAjIGRlY2lkZSBpZiB3aWRnZXQgc2hvdWxkIGJlIHNob3duCiAgICBteSAkU2hvd1dpZGdldCA9IDA7CgogICAgIyBhbHdheXMgc2hvdyBpZiB3ZSBoYXZlIGEgcHJvY2VzcyB0aWNrZXQgZm9yIGFjdGl2aXR5IGRpYWxvZ3MKICAgIGlmICgkSXNQcm9jZXNzVGlja2V0KSB7CiAgICAgICAgJFNob3dXaWRnZXQgPSAxOwogICAgfQoKICAgICMgZWxzZSBzaG93IG9ubHkgaWYgZHluYW1pYyBmaWVsZHMgYXJlIGRlZmluZWQgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGVtIGhhcyBhIHZhbHVlCiAgICBlbHNpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkV2lkZ2V0RGF0YXtXaWRnZXREeW5hbWljRmllbGR9ICkgKSB7CiAgICAgICAgREZWQUxVRToKICAgICAgICBmb3IgbXkgJEZpZWxkTmFtZSAoIGtleXMgJFdpZGdldERhdGF7V2lkZ2V0RHluYW1pY0ZpZWxkfS0+JSogKSB7CiAgICAgICAgICAgIG5leHQgREZWQUxVRSB1bmxlc3MgJFdpZGdldERhdGF7V2lkZ2V0RHluYW1pY0ZpZWxkfXskRmllbGROYW1lfTsKICAgICAgICAgICAgbmV4dCBERlZBTFVFIHVubGVzcyAkVGlja2V0eyJEeW5hbWljRmllbGRfJEZpZWxkTmFtZSJ9OwoKICAgICAgICAgICAgJFNob3dXaWRnZXQgPSAxOwoKICAgICAgICAgICAgbGFzdCBERlZBTFVFOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgb3ZlcnZpZXcgd2lkZ2V0IHdpdGggZWl0aGVyIGR5bmFtaWMgZmllbGQgZGF0YSBvciB3aXRoIHByb2Nlc3MgYW5kIGFjdGl2aXR5IGRpYWxvZyBkYXRhCiAgICBpZiAoJFNob3dXaWRnZXQpIHsKCiAgICAgICAgIyBzZW5kIGRhdGEgdG8gSlMKICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgIEtleSAgID0+ICdPdmVydmlld1dpZGdldCcsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgdGhlIG92ZXJ2aWV3IHdpZGdldCBpbiB0aGUgbWFpbiBzY3JlZW4KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFdpZGdldFRpdGxlID0+ICRXaWRnZXREYXRhe1dpZGdldFRpdGxlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGNvbGxlY3QgYW5kIHJlbmRlciBwcm9jZXNzIGRhdGEgaWYgbmVjZXNzYXJ5CiAgICAgICAgbXkgJEFjdGl2aXR5TmFtZTsKICAgICAgICBteSAkTmV4dEFjdGl2aXR5RGlhbG9nczsKICAgICAgICBteSAkUHJvY2Vzc0VudGl0eUlERmllbGQ7CiAgICAgICAgaWYgKCRJc1Byb2Nlc3NUaWNrZXQpIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBERiB3aGVyZSB0aGUgUHJvY2Vzc0VudGl0eUlEIGlzIHN0b3JlZAogICAgICAgICAgICAkUHJvY2Vzc0VudGl0eUlERmllbGQgPSAnRHluYW1pY0ZpZWxkXycKICAgICAgICAgICAgICAgIC4gJENvbmZpZ09iamVjdC0+R2V0KCJQcm9jZXNzOjpEeW5hbWljRmllbGRQcm9jZXNzTWFuYWdlbWVudFByb2Nlc3NJRCIpOwoKICAgICAgICAgICAgIyBnZXQgdGhlIERGIHdoZXJlIHRoZSBBY3Rpdml0eUVudGl0eUlEIGlzIHN0b3JlZAogICAgICAgICAgICBteSAkQWN0aXZpdHlFbnRpdHlJREZpZWxkID0gJ0R5bmFtaWNGaWVsZF8nCiAgICAgICAgICAgICAgICAuICRDb25maWdPYmplY3QtPkdldCgiUHJvY2Vzczo6RHluYW1pY0ZpZWxkUHJvY2Vzc01hbmFnZW1lbnRBY3Rpdml0eUlEIik7CgogICAgICAgICAgICBteSAkQWN0aXZpdHlEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByb2Nlc3NNYW5hZ2VtZW50OjpBY3Rpdml0eScpLT5BY3Rpdml0eUdldCgKICAgICAgICAgICAgICAgIEludGVyZmFjZSAgICAgICAgPT4gJ0FnZW50SW50ZXJmYWNlJywKICAgICAgICAgICAgICAgIEFjdGl2aXR5RW50aXR5SUQgPT4gJFRpY2tldHskQWN0aXZpdHlFbnRpdHlJREZpZWxkfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IG5leHQgYWN0aXZpdHkgZGlhbG9ncwogICAgICAgICAgICBpZiAoICRUaWNrZXR7JEFjdGl2aXR5RW50aXR5SURGaWVsZH0gKSB7CgogICAgICAgICAgICAgICAgIyBwcm90ZWN0aW9uIGFnYWluc3QgYXV0b3ZpZmljYXRpb24KICAgICAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJEFjdGl2aXR5RGF0YSkgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBY3Rpdml0eURhdGEtPntBY3Rpdml0eURpYWxvZ30gKSApIHsKICAgICAgICAgICAgICAgICAgICAkTmV4dEFjdGl2aXR5RGlhbG9ncyA9ICR7QWN0aXZpdHlEYXRhfS0+e0FjdGl2aXR5RGlhbG9nfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICROZXh0QWN0aXZpdHlEaWFsb2dzID0ge307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEFjdGl2aXR5TmFtZSA9ICRBY3Rpdml0eURhdGEtPntOYW1lfTsKICAgICAgICB9CgogICAgICAgIGlmICgkTmV4dEFjdGl2aXR5RGlhbG9ncykgewoKICAgICAgICAgICAgIyBnZXQgQWN0aXZpdHlEaWFsb2cgb2JqZWN0CiAgICAgICAgICAgIG15ICRBY3Rpdml0eURpYWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcm9jZXNzTWFuYWdlbWVudDo6QWN0aXZpdHlEaWFsb2cnKTsKCiAgICAgICAgICAgICMgd2UgaGF2ZSB0byBjaGVjayBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyB0aGUgbmVlZGVkIHBlcm1pc3Npb25zIHRvIHZpZXcgdGhlCiAgICAgICAgICAgICMgZGlmZmVyZW50IGFjdGl2aXR5IGRpYWxvZ3MsIHNvIHdlIGxvb3Agb3ZlciBldmVyeSBhY3Rpdml0eSBkaWFsb2cgYW5kIGNoZWNrIGlmIHRoZXJlCiAgICAgICAgICAgICMgaXMgYSBwZXJtaXNzaW9uIGNvbmZpZ3VyZWQuIElmIHRoZXJlIGlzIGEgcGVybWlzc2lvbiBjb25maWd1cmVkIHdlIGNoZWNrIHRoaXMKICAgICAgICAgICAgIyBhbmQgZGlzcGxheS9oaWRlIHRoZSBhY3Rpdml0eSBkaWFsb2cgbGluawogICAgICAgICAgICBteSAlUGVybWlzc2lvblJpZ2h0czsKICAgICAgICAgICAgbXkgJVBlcm1pc3Npb25BY3Rpdml0eURpYWxvZ0xpc3Q7CiAgICAgICAgICAgIEFDVElWSVRZRElBTE9HUEVSTUlTU0lPTjoKICAgICAgICAgICAgZm9yIG15ICRJbmRleCAoIHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlzICV7JE5leHRBY3Rpdml0eURpYWxvZ3N9ICkgewogICAgICAgICAgICAgICAgbXkgJEN1cnJlbnRBY3Rpdml0eURpYWxvZ0VudGl0eUlEID0gJE5leHRBY3Rpdml0eURpYWxvZ3MtPnskSW5kZXh9OwogICAgICAgICAgICAgICAgbXkgJEN1cnJlbnRBY3Rpdml0eURpYWxvZyAgICAgICAgID0gJEFjdGl2aXR5RGlhbG9nT2JqZWN0LT5BY3Rpdml0eURpYWxvZ0dldCgKICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2UgICAgICAgICAgICAgID0+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+e05hbWV9IH07CgogICAgICAgICAgICAgICAgICAgICAgICAjIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBsZW5zIGZpZWxkIHBvaW50aW5nIHRvIGEgU2V0LCBnZXQgdGhlIGNvbmZpZyBvZiB0aGUgU2V0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJERGQ29uZmlnLT57RmllbGRUeXBlfSBlcSAnTGVucycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkQXR0cmlidXRlREYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCA9PiAkREZDb25maWctPntDb25maWd9e0F0dHJpYnV0ZURGfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGVERi0+e0ZpZWxkVHlwZX0gZXEgJ1NldCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERGQ29uZmlnID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQXR0cmlidXRlREYtPiUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkREZDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJERGQ29uZmlnLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2V0IGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJERGQ29uZmlnLT57RmllbGRUeXBlfSBlcSAnU2V0JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldEZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkU2V0U2VwYXJhdG9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15IEBJbmNsdWRlZEZpZWxkcyA9ICRTZWxmLT5fR2V0SW5jbHVkZWRGaWVsZE9yZGVyZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSA9PiAkREZDb25maWctPntDb25maWd9e0luY2x1ZGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFZhbHVlSW5kZXggKCAwIC4uICQjeyAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntOYW1lfSB9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFZhbHVlSXRlbSA9ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICRGaWVsZC0+e05hbWV9IH1bJFZhbHVlSW5kZXhdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEluY2x1ZGVGaWVsZCAoQEluY2x1ZGVkRmllbGRzKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkSW5jbHVkZURGQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICRJbmNsdWRlRmllbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRJbmNsdWRlREZDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlSXRlbS0+eyAkSW5jbHVkZURGQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gVmFsdWVNYXhDaGFycyBoZXJlLCBlbm91Z2ggc3BhY2UgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAlSW5jbHVkZUZpZWxkID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9ID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgICAgPT4gJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlS2V5ICAgICAgICAgICAgICAgICA9PiAkVmFsdWVJdGVtLT57ICRJbmNsdWRlREZDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgICAgICAgICAgICAgICAgICAgID0+ICRJbmNsdWRlREZDb25maWctPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRJbmNsdWRlREZDb25maWctPntOYW1lfSIgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJEluY2x1ZGVGaWVsZHtOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkSW5jbHVkZUZpZWxke0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGRWYWx1ZU92ZXJsYXlUcmlnZ2VyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEluY2x1ZGVERkNvbmZpZy0+e0xpbmt9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJbmNsdWRlRmllbGR7TmFtZX0gPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVUaWNrZXQsCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsaWFzIGZvciB0aWNrZXQgdGl0bGUsIFRpdGxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0VGl0bGUgPT4gJFRpY2tldHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgID0+ICRJbmNsdWRlRmllbGR7VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgPT4gJEluY2x1ZGVGaWVsZHtMaW5rfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlua1ByZXZpZXcgPT4gJEluY2x1ZGVGaWVsZHtMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBsZWFzZSBzZWUgYnVnIzEzMzYyIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRJbmNsdWRlRmllbGR7TmFtZX0iID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RHluYW1pY0ZpZWxkUGxhaW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkSW5jbHVkZUZpZWxke1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARmllbGRzSW5BR3JvdXAsICRGaWVsZC0+e05hbWV9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRWYWx1ZUluZGV4ICE9ICQjeyAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGQtPntOYW1lfSB9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkU2V0VmFsdWVTZXBhcmF0b3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGFuZGFyZCBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YW5kYXJkRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkRmllbGQtPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJEZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkVmFsdWVPdmVybGF5VHJpZ2dlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEZpZWxkLT57TGlua30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZpZWxkLT57TmFtZX0gPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVRpY2tldCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsaWFzIGZvciB0aWNrZXQgdGl0bGUsIFRpdGxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldFRpdGxlID0+ICRUaWNrZXR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgPT4gJEZpZWxkLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgICAgICAgPT4gJEZpZWxkLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgPT4gJEZpZWxkLT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyA9PiAkRmllbGQtPntMaW5rUHJldmlld30sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHVuaXF1ZSBwYXJhbWV0ZXIgd2l0aCBkeW5hbWljIGZpZWxkIG5hbWUgaW4gY2FzZSBvZiBjb2xsaXNpb24gd2l0aCBvdGhlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHluYW1pY0ZpZWxkXyRGaWVsZC0+e05hbWV9IiA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZFBsYWluJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkRmllbGQtPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEZpZWxkc0luQUdyb3VwLCAkRmllbGQtPntOYW1lfTsKCiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkU2hvd0dyb3VwVGl0bGUpIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRHcm91cFNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkR3JvdXBOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGR5bmFtaWMgZmllbGRzIG5vdCByZWdpc3RlcmVkIGluIGEgZ3JvdXAgaW4gdGhlIG92ZXJ2aWV3IHdpZGdldAogICAgICAgIG15IEBSZW1haW5pbmdGaWVsZHNXaWRnZXQ7CiAgICAgICAgZm9yIG15ICRGaWVsZCAoQEZpZWxkc1dpZGdldCkgewoKICAgICAgICAgICAgaWYgKCAhZ3JlcCB7ICRfIGVxICRGaWVsZC0+e05hbWV9IH0gQEZpZWxkc0luQUdyb3VwICkgewogICAgICAgICAgICAgICAgcHVzaCBAUmVtYWluaW5nRmllbGRzV2lkZ2V0LCAkRmllbGQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1dpZGdldER5bmFtaWNGaWVsZEdyb3VwcycsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkI1JlbWFpbmluZ0ZpZWxkc1dpZGdldCArIDEgKSB7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkR3JvdXBTZXBhcmF0b3InLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0ZpZWxkcyB3aXRoIG5vIGdyb3VwJyksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBmb3IgbXkgJEZpZWxkIChAUmVtYWluaW5nRmllbGRzV2lkZ2V0KSB7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICgkREZDb25maWcpID0gZ3JlcCB7ICRfLT57TmFtZX0gZXEgJEZpZWxkLT57TmFtZX0gfSAkRHluYW1pY0ZpZWxkLT5AKjsKCiAgICAgICAgICAgICMgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGxlbnMgZmllbGQgcG9pbnRpbmcgdG8gYSBTZXQsIGdldCB0aGUgY29uZmlnIG9mIHRoZSBTZXQKICAgICAgICAgICAgaWYgKCAkREZDb25maWctPntGaWVsZFR5cGV9IGVxICdMZW5zJyApIHsKICAgICAgICAgICAgICAgIG15ICRBdHRyaWJ1dGVERiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgICAgIElEID0+ICRERkNvbmZpZy0+e0NvbmZpZ317QXR0cmlidXRlREZ9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggJEF0dHJpYnV0ZURGLT57RmllbGRUeXBlfSBlcSAnU2V0JyApIHsKICAgICAgICAgICAgICAgICAgICAkREZDb25maWcgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVERi0+JSosCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICRERkNvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkREZDb25maWctPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgZmllbGQKICAgICAgICAgICAgaWYgKCAkREZDb25maWctPntGaWVsZFR5cGV9IGVxICdTZXQnICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU2V0RmllbGQnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGRTZXRTZXBhcmF0b3InLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgQEluY2x1ZGVkRmllbGRzID0gJFNlbGYtPl9HZXRJbmNsdWRlZEZpZWxkT3JkZXJlZCgKICAgICAgICAgICAgICAgICAgICBJbmNsdWRlID0+ICRERkNvbmZpZy0+e0NvbmZpZ317SW5jbHVkZX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGZvciBteSAkVmFsdWVJbmRleCAoIDAgLi4gJCN7ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICRGaWVsZC0+e05hbWV9IH0gfSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWVJdGVtID0gJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkLT57TmFtZX0gfVskVmFsdWVJbmRleF07CgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkSW5jbHVkZUZpZWxkIChASW5jbHVkZWRGaWVsZHMpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRJbmNsdWRlREZDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJEluY2x1ZGVGaWVsZCwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJEluY2x1ZGVERkNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWVJdGVtLT57ICRJbmNsdWRlREZDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBWYWx1ZU1heENoYXJzIGhlcmUsIGVub3VnaCBzcGFjZSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVJbmNsdWRlRmllbGQgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5jbHVkZURGQ29uZmlnLT57TmFtZX0gPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICAgICA9PiAkSW5jbHVkZURGQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkgICAgICAgICAgICAgICAgID0+ICRWYWx1ZUl0ZW0tPnsgJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCAgICAgICAgICAgICAgICAgICAgPT4gJEluY2x1ZGVERkNvbmZpZy0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e0xpbmtQcmV2aWV3fSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGRfJEluY2x1ZGVERkNvbmZpZy0+e05hbWV9IiA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldER5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkSW5jbHVkZUZpZWxke05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRJbmNsdWRlRmllbGR7TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1NldER5bmFtaWNGaWVsZFZhbHVlT3ZlcmxheVRyaWdnZXInLAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSW5jbHVkZURGQ29uZmlnLT57TGlua30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGRMaW5rJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEluY2x1ZGVGaWVsZHtOYW1lfSA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVRpY2tldCwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxpYXMgZm9yIHRpY2tldCB0aXRsZSwgVGl0bGUgd2lsbCBiZSBvdmVyd3JpdHRlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRUaXRsZSA9PiAkVGlja2V0e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgPT4gJEluY2x1ZGVGaWVsZHtWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRJbmNsdWRlRmllbGR7VGl0bGV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICA9PiAkSW5jbHVkZUZpZWxke0xpbmt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rUHJldmlldyA9PiAkSW5jbHVkZUZpZWxke0xpbmtQcmV2aWV3fSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5jbHVkZSB1bmlxdWUgcGFyYW1ldGVyIHdpdGggZHluYW1pYyBmaWVsZCBuYW1lIGluIGNhc2Ugb2YgY29sbGlzaW9uIHdpdGggb3RoZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGxlYXNlIHNlZSBidWcjMTMzNjIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGRfJEluY2x1ZGVGaWVsZHtOYW1lfSIgPT4gJEluY2x1ZGVGaWVsZHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTZXREeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRJbmNsdWRlRmllbGR7VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PiAkSW5jbHVkZUZpZWxke1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBGaWVsZHNJbkFHcm91cCwgJEZpZWxkLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICggJFZhbHVlSW5kZXggIT0gJCN7ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICRGaWVsZC0+e05hbWV9IH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGRTZXRWYWx1ZVNlcGFyYXRvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHN0YW5kYXJkIGZpZWxkCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU3RhbmRhcmRGaWVsZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICRGaWVsZC0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRWYWx1ZU92ZXJsYXlUcmlnZ2VyJywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAkRmllbGQtPntMaW5rfSApIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdXaWRnZXREeW5hbWljRmllbGRMaW5rJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRmllbGQtPntOYW1lfSA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlVGlja2V0LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxpYXMgZm9yIHRpY2tldCB0aXRsZSwgVGl0bGUgd2lsbCBiZSBvdmVyd3JpdHRlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0VGl0bGUgPT4gJFRpY2tldHtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICA9PiAkRmllbGQtPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICA9PiAkRmllbGQtPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICA9PiAkRmllbGQtPntMaW5rfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtQcmV2aWV3ID0+ICRGaWVsZC0+e0xpbmtQcmV2aWV3fSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluY2x1ZGUgdW5pcXVlIHBhcmFtZXRlciB3aXRoIGR5bmFtaWMgZmllbGQgbmFtZSBpbiBjYXNlIG9mIGNvbGxpc2lvbiB3aXRoIG90aGVycy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBQbGVhc2Ugc2VlIGJ1ZyMxMzM2MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEeW5hbWljRmllbGRfJEZpZWxkLT57TmFtZX0iID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3V2lkZ2V0RHluYW1pY0ZpZWxkUGxhaW4nLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRGaWVsZC0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICRGaWVsZC0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHVzaCBARmllbGRzSW5BR3JvdXAsICRGaWVsZC0+e05hbWV9OwoKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICB9CgogICAgIyBhcnRpY2xlIGZpbHRlciBpcyBhY3RpdmF0ZWQgaW4gc3lzY29uZmlnCiAgICBpZiAoICRTZWxmLT57QXJ0aWNsZUZpbHRlckFjdGl2ZX0gKSB7CgogICAgICAgIGlmICggJFNlbGYtPntab29tVGltZWxpbmV9ICkgewoKICAgICAgICAgICAgIyBidWlsZCBldmVudCB0eXBlIGxpc3QgZm9yIGZpbHRlciBkaWFsb2cKICAgICAgICAgICAgJFBhcmFte0V2ZW50VHlwZUZpbHRlclN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+ICRTZWxmLT57SGlzdG9yeVR5cGVNYXBwaW5nfSwKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRTZWxmLT57RXZlbnRUeXBlRmlsdGVyfS0+e0V2ZW50VHlwZUlEfSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgICAgICAgICAgICAgU29ydCAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdFdmVudFR5cGVGaWx0ZXInLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZUZpbHRlckRpYWxvZycsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAwLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdFdmVudFR5cGVGaWx0ZXJEaWFsb2cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICBteSBAQ29tbXVuaWNhdGlvbkNoYW5uZWxzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNvbW11bmljYXRpb25DaGFubmVsJyktPkNoYW5uZWxMaXN0KAogICAgICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJUNoYW5uZWxzID0gbWFwIHsgJF8tPntDaGFubmVsSUR9ID0+ICRfLT57RGlzcGxheU5hbWV9IH0gQENvbW11bmljYXRpb25DaGFubmVsczsKCiAgICAgICAgICAgICMgYnVpbGQgYXJ0aWNsZSB0eXBlIGxpc3QgZm9yIGZpbHRlciBkaWFsb2cKICAgICAgICAgICAgJFBhcmFte0NoYW5uZWxzfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gXCVDaGFubmVscywKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgICAgICAgICAgICAgU29ydCAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdDb21tdW5pY2F0aW9uQ2hhbm5lbEZpbHRlcicsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQYXJhbXtDdXN0b21lclZpc2liaWxpdHl9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAwID0+IFRyYW5zbGF0YWJsZSgnSW52aXNpYmxlIG9ubHknKSwKICAgICAgICAgICAgICAgICAgICAxID0+IFRyYW5zbGF0YWJsZSgnVmlzaWJsZSBvbmx5JyksCiAgICAgICAgICAgICAgICAgICAgMiA9PiBUcmFuc2xhdGFibGUoJ1Zpc2libGUgYW5kIGludmlzaWJsZScpLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntDdXN0b21lclZpc2liaWxpdHl9IC8vIDIsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgU29ydCAgICAgICAgPT4gJ051bWVyaWNLZXknLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0N1c3RvbWVyVmlzaWJpbGl0eUZpbHRlcicsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHNlbmRlciB0eXBlcwogICAgICAgICAgICBteSAlQXJ0aWNsZVNlbmRlclR5cGVzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVTZW5kZXJUeXBlTGlzdCgpOwoKICAgICAgICAgICAgIyBidWlsZCBhcnRpY2xlIHNlbmRlciB0eXBlIGxpc3QgZm9yIGZpbHRlciBkaWFsb2cKICAgICAgICAgICAgJFBhcmFte0FydGljbGVTZW5kZXJUeXBlRmlsdGVyU3RyaW5nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gXCVBcnRpY2xlU2VuZGVyVHlwZXMsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57QXJ0aWNsZVNlbmRlclR5cGVJRH0sCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNvcnQgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnQXJ0aWNsZVNlbmRlclR5cGVGaWx0ZXInLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIFRpY2tldCBJRAogICAgICAgICAgICAkUGFyYW17VGlja2V0SUR9ID0gJFNlbGYtPntUaWNrZXRJRH07CgogICAgICAgICAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZUZpbHRlckRpYWxvZycsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBcnRpY2xlRmlsdGVyRGlhbG9nJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgdGlja2V0IG5lZWQgdG8gYmUgbWFya2VkIGFzIHNlZW4KICAgIG15ICRBcnRpY2xlQWxsU2VlbiA9IDE7CiAgICBBUlRJQ0xFOgogICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZUJveCkgewoKICAgICAgICAjIGlnbm9yZSBzeXN0ZW0gc2VuZGVyIHR5cGUKICAgICAgICBuZXh0IEFSVElDTEUKICAgICAgICAgICAgaWYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Ok5ld0FydGljbGVJZ25vcmVTeXN0ZW1TZW5kZXInKQogICAgICAgICAgICAmJiAkQXJ0aWNsZVNlbmRlclR5cGVMaXN0eyAkQXJ0aWNsZS0+e1NlbmRlclR5cGVJRH0gfSBlcSAnc3lzdGVtJzsKCiAgICAgICAgIyBsYXN0IEFSVElDTEUgaWYgYXJ0aWNsZSB3YXMgbm90IHNob3duCiAgICAgICAgaWYgKCAhJEFydGljbGVGbGFnc3sgJEFydGljbGUtPntBcnRpY2xlSUR9IH0tPntTZWVufSApIHsKICAgICAgICAgICAgJEFydGljbGVBbGxTZWVuID0gMDsKICAgICAgICAgICAgbGFzdCBBUlRJQ0xFOwogICAgICAgIH0KICAgIH0KCiAgICAjIG1hcmsgdGlja2V0IGFzIHNlZW4gaWYgYWxsIGFydGljbGUgYXJlIHNob3duCiAgICBpZiAoJEFydGljbGVBbGxTZWVuKSB7CiAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0RmxhZ1NldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEtleSAgICAgID0+ICdTZWVuJywKICAgICAgICAgICAgVmFsdWUgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzZW5kIGRhdGEgdG8gSlMKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZVRhYmxlSGVpZ2h0JywKICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57VXNlclRpY2tldFpvb21BcnRpY2xlVGFibGVIZWlnaHR9LAogICAgKTsKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpGcm9udGVuZDo6SFRNTEFydGljbGVIZWlnaHREZWZhdWx0JywKICAgICAgICBWYWx1ZSA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkhUTUxBcnRpY2xlSGVpZ2h0RGVmYXVsdCcpLAogICAgKTsKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpGcm9udGVuZDo6SFRNTEFydGljbGVIZWlnaHRNYXgnLAogICAgICAgIFZhbHVlID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6SFRNTEFydGljbGVIZWlnaHRNYXgnKSwKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ0xhbmd1YWdlJywKICAgICAgICBWYWx1ZSA9PiB7CiAgICAgICAgICAgIEF0dGFjaG1lbnRWaWV3TWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoCiAgICAgICAgICAgICAgICAnQXJ0aWNsZSBjb3VsZCBub3QgYmUgb3BlbmVkISBQZXJoYXBzIGl0IGlzIG9uIGFub3RoZXIgYXJ0aWNsZSBwYWdlPycKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGluaXQganMKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1RpY2tldFpvb21Jbml0JywKICAgICk7CgogICAgIyByZXR1cm4gb3V0cHV0CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaWNrZXRab29tJywKICAgICAgICBEYXRhICAgICAgICAgPT4geyAlUGFyYW0sICVUaWNrZXQsICVBY2xBY3Rpb24gfSwKICAgICk7Cn0KCnN1YiBfQXJ0aWNsZVRyZWUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlVGlja2V0ICAgICAgID0gJXsgJFBhcmFte1RpY2tldH0gfTsKICAgIG15ICVBcnRpY2xlRmxhZ3MgPSAleyAkUGFyYW17QXJ0aWNsZUZsYWdzfSB9OwogICAgbXkgQEFydGljbGVCb3ggICA9IEB7ICRQYXJhbXtBcnRpY2xlQm94fSB9OwogICAgbXkgJEFydGljbGVJRCAgICA9ICRQYXJhbXtBcnRpY2xlSUR9OwogICAgbXkgJFRhYmxlQ2xhc3NlczsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgYnVpbGQgdGhyZWFkIHN0cmluZwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnVHJlZScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVGFibGVDbGFzc2VzID0+ICRUYWJsZUNsYXNzZXMsCiAgICAgICAgICAgIFpvb21UaW1lbGluZSA9PiAkU2VsZi0+e1pvb21UaW1lbGluZX0sCiAgICAgICAgfSwKICAgICk7CgogICAgaWYgKCAkUGFyYW17UGFnaW5hdGlvbn0gJiYgISRTZWxmLT57Wm9vbVRpbWVsaW5lfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXJ0aWNsZVBhZ2VzJywKICAgICAgICAgICAgRGF0YSA9PiAkUGFyYW17UGFnaW5hdGlvbn0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSBAQXJ0aWNsZVZpZXdzID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0NvbGxhcHNlJywKICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdTaG93IG9uZSBhcnRpY2xlJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdFeHBhbmQnLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ1Nob3cgYWxsIGFydGljbGVzJyksCiAgICAgICAgfSwKICAgICk7CgogICAgIyBBZGQgdGltZWxpbmUgdmlldyBvcHRpb24gb25seSBpZiBlbmFibGVkLgogICAgaWYgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1RpbWVsaW5lVmlld0VuYWJsZWQnKSApIHsKICAgICAgICBwdXNoIEBBcnRpY2xlVmlld3MsIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpbWVsaW5lJywKICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdTaG93IFRpY2tldCBUaW1lbGluZSBWaWV3JyksCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkQXJ0aWNsZVZpZXdTZWxlY3RlZCA9ICdDb2xsYXBzZSc7CiAgICBpZiAoICRTZWxmLT57Wm9vbUV4cGFuZH0gKSB7CiAgICAgICAgJEFydGljbGVWaWV3U2VsZWN0ZWQgPSAnRXhwYW5kJzsKICAgIH0KICAgIGVsc2lmICggJFNlbGYtPntab29tVGltZWxpbmV9ICkgewogICAgICAgICRBcnRpY2xlVmlld1NlbGVjdGVkID0gJ1RpbWVsaW5lJzsKICAgIH0KCiAgICBteSAkQXJ0aWNsZVZpZXdTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgPT4gXEBBcnRpY2xlVmlld3MsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJEFydGljbGVWaWV3U2VsZWN0ZWQsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICBTb3J0ICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgIE5hbWUgICAgICAgID0+ICdBcnRpY2xlVmlldycsCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgU2VuZCBkYXRhIHRvIEpTLgogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdBcnRpY2xlVmlld1N0cmcnLAogICAgICAgIFZhbHVlID0+ICRBcnRpY2xlVmlld1N0cmcsCiAgICApOwogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdab29tRXhwYW5kJywKICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e1pvb21FeHBhbmR9LAogICAgKTsKCiAgICAjIGFydGljbGUgZmlsdGVyIGlzIGFjdGl2YXRlZCBpbiBzeXNjb25maWcKICAgIGlmICggJFNlbGYtPntBcnRpY2xlRmlsdGVyQWN0aXZlfSApIHsKCiAgICAgICAgIyBkZWZpbmUgaGlnaGxpZ2h0IHN0eWxlIGZvciBsaW5rcyBpZiBmaWx0ZXIgaXMgYWN0aXZlCiAgICAgICAgbXkgJEhpZ2hsaWdodFN0eWxlID0gJ21lbnUnOwogICAgICAgIGlmICggJFNlbGYtPntBcnRpY2xlRmlsdGVyfSApIHsKICAgICAgICAgICAgJEhpZ2hsaWdodFN0eWxlID0gJ1ByaW9yaXR5SUQtNSc7CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIGFydGljbGUgZmlsdGVyIGxpbmtzCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FydGljbGVGaWx0ZXJEaWFsb2dMaW5rJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBIaWdobGlnaHRTdHlsZSA9PiAkSGlnaGxpZ2h0U3R5bGUsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBidWlsZCBhcnRpY2xlIGZpbHRlciByZXNldCBsaW5rIG9ubHkgaWYgZmlsdGVyIGlzIHNldAogICAgICAgIGlmICgKICAgICAgICAgICAgKCAhJFNlbGYtPntab29tVGltZWxpbmV9ICYmIElzSGFzaFJlZldpdGhEYXRhKCAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9ICkgKQogICAgICAgICAgICB8fCAoICRTZWxmLT57Wm9vbVRpbWVsaW5lfSAmJiAkU2VsZi0+e0V2ZW50VHlwZUZpbHRlcn0gKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FydGljbGVGaWx0ZXJSZXNldExpbmsnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBDcmVhdGUgYSBsaXN0IG9mIGFydGljbGUgc2VuZGVyIHR5cGVzIGZvciBsb29rdXAKICAgIG15ICVBcnRpY2xlU2VuZGVyVHlwZUxpc3QgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZVNlbmRlclR5cGVMaXN0KCk7CgogICAgIyBzaG93IGFydGljbGUgdHJlZQogICAgaWYgKCAhJFNlbGYtPntab29tVGltZWxpbmV9ICkgewoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXJ0aWNsZUxpc3QnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIFpvb21FeHBhbmRTb3J0T3JkZXIgPT4gJFNlbGYtPntab29tRXhwYW5kU29ydH0gZXEgJ3JldmVyc2UnID8gJ0Rlc2NlbmRpbmcnIDogJ0FzY2VuZGluZycsCiAgICAgICAgICAgICAgICBUYWJsZUNsYXNzZXMgICAgICAgID0+ICRUYWJsZUNsYXNzZXMsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmZXRjaGluZyBhY2NvdW50ZWQgdGltZXMgb2YgYWxsIGFydGljbGVzIHRvIGNoZWNrIGlmIHdlIGRpc3BsYXkgdGhlIGNvbHVtbgogICAgICAgIG15ICVBcnRpY2xlQWNjb3VudGVkVGltZXM7CiAgICAgICAgbXkgJFNob3dUaW1lVW5pdHMgPSAwOwogICAgICAgIGlmICggJFNlbGYtPntDb25maWd9e0FydGljbGVMaXN0U2hvd1RpbWVVbml0c30gKSB7CiAgICAgICAgICAgIGZvciBteSAkQXJ0aWNsZVRtcCAoQEFydGljbGVCb3gpIHsKCiAgICAgICAgICAgICAgICAjIEdldCBhY2NvdW50ZWQgdGltZSBmb3IgYXJ0aWNsZSB1c2luZyBBcnRpY2xlQWNjb3VudGVkVGltZUdldAogICAgICAgICAgICAgICAgJEFydGljbGVBY2NvdW50ZWRUaW1lc3sgJEFydGljbGVUbXAtPntBcnRpY2xlSUR9IH0gPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlVG1wLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFNob3dUaW1lVW5pdHMgPSAoIGFueSB7ICRfICE9IDAgfSB2YWx1ZXMgJUFydGljbGVBY2NvdW50ZWRUaW1lcyApID8gMSA6IDA7CiAgICAgICAgICAgIGlmICgkU2hvd1RpbWVVbml0cykgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGltZVVuaXRIZWFkZXInLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgQVJUSUNMRToKICAgICAgICBmb3IgbXkgJEFydGljbGVUbXAgKEBBcnRpY2xlQm94KSB7CiAgICAgICAgICAgIG15ICVBcnRpY2xlID0gJSRBcnRpY2xlVG1wOwoKICAgICAgICAgICAgIyBhcnRpY2xlIGZpbHRlciBpcyBhY3RpdmF0ZWQgaW4gc3lzY29uZmlnIGFuZCB0aGVyZSBhcmUgYXJ0aWNsZXMKICAgICAgICAgICAgIyB0aGF0IHBhc3NlZCB0aGUgZmlsdGVyCiAgICAgICAgICAgIGlmICggJFNlbGYtPntBcnRpY2xlRmlsdGVyQWN0aXZlfSApIHsKICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntBcnRpY2xlRmlsdGVyfSAmJiAkU2VsZi0+e0FydGljbGVGaWx0ZXJ9LT57U2hvd25BcnRpY2xlSURzfSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBkbyBub3Qgc2hvdyBhcnRpY2xlIGluIHRyZWUgaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGZpbHRlcgogICAgICAgICAgICAgICAgICAgIGlmICggISRTZWxmLT57QXJ0aWNsZUZpbHRlcn0tPntTaG93bkFydGljbGVJRHN9LT57ICRBcnRpY2xle0FydGljbGVJRH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBBUlRJQ0xFOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzaG93IGFydGljbGUgZmxhZ3MKICAgICAgICAgICAgbXkgJENsYXNzICAgICAgPSAnJzsKICAgICAgICAgICAgbXkgJENsYXNzUm93ICAgPSAnJzsKICAgICAgICAgICAgbXkgJE5ld0FydGljbGUgPSAwOwoKICAgICAgICAgICAgIyBpZ25vcmUgc3lzdGVtIHNlbmRlciB0eXBlcwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAhJEFydGljbGVGbGFnc3sgJEFydGljbGV7QXJ0aWNsZUlEfSB9LT57U2Vlbn0KICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAhJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Ok5ld0FydGljbGVJZ25vcmVTeXN0ZW1TZW5kZXInKQogICAgICAgICAgICAgICAgICAgIHx8ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpOZXdBcnRpY2xlSWdub3JlU3lzdGVtU2VuZGVyJykKICAgICAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZVNlbmRlclR5cGVMaXN0eyAkQXJ0aWNsZXtTZW5kZXJUeXBlSUR9IH0gbmUgJ3N5c3RlbScKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJE5ld0FydGljbGUgPSAxOwoKICAgICAgICAgICAgICAgICMgc2hvdyB0aWNrZXQgZmxhZ3MKCiAgICAgICAgICAgICAgICAjIGFsd2F5cyBzaG93IGFyY2hpdmVkIHRpY2tldHMgYXMgc2VlbgogICAgICAgICAgICAgICAgaWYgKCAkVGlja2V0e0FyY2hpdmVGbGFnfSBuZSAneScgKSB7CiAgICAgICAgICAgICAgICAgICAgJENsYXNzICAgIC49ICcgVW5yZWFkQXJ0aWNsZXMnOwogICAgICAgICAgICAgICAgICAgICRDbGFzc1JvdyAuPSAnIFVucmVhZEFydGljbGVzJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGp1c3Qgc2hvdyB0aWNrZXQgZmxhZ3MgaWYgYWdlbnQgYmVsb25ncyB0byB0aGUgdGlja2V0CiAgICAgICAgICAgICAgICBteSAkU2hvd01ldGE7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntVc2VySUR9ID09ICRUaWNrZXR7T3duZXJJRH0KICAgICAgICAgICAgICAgICAgICB8fCAkU2VsZi0+e1VzZXJJRH0gPT0gJFRpY2tldHtSZXNwb25zaWJsZUlEfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkU2hvd01ldGEgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAhJFNob3dNZXRhICYmICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpXYXRjaGVyJykgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJVdhdGNoID0gJFRpY2tldE9iamVjdC0+VGlja2V0V2F0Y2hHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRBcnRpY2xle1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmICggJFdhdGNoeyAkU2VsZi0+e1VzZXJJRH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFNob3dNZXRhID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBzaG93IHRpY2tldCBmbGFncwogICAgICAgICAgICAgICAgaWYgKCRTaG93TWV0YSkgewogICAgICAgICAgICAgICAgICAgICRDbGFzcyAuPSAnIFJlbWFya2FibGUnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJENsYXNzIC49ICcgT3JkaW5hcnknOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlmIHRoaXMgaXMgdGhlIHNob3duIGFydGljbGUgLT0+IHNldCBjbGFzcyB0byBhY3RpdmUKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZUlEIGVxICRBcnRpY2xle0FydGljbGVJRH0gJiYgISRTZWxmLT57Wm9vbUV4cGFuZH0gKSB7CiAgICAgICAgICAgICAgICAkQ2xhc3NSb3cgLj0gJyBBY3RpdmUnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkVG1wU3ViamVjdCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN1YmplY3RDbGVhbigKCiAgICAgICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgID0+ICRBcnRpY2xle1N1YmplY3R9IHx8ICcnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJUFydGljbGVGaWVsZHMgPSAkTGF5b3V0T2JqZWN0LT5BcnRpY2xlRmllbGRzKAogICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkU2hvd1RpbWVVbml0cykgewoKICAgICAgICAgICAgICAgIG15ICVUaW1lVW5pdEZpZWxkID0gKAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRBcnRpY2xlQWNjb3VudGVkVGltZXN7ICRBcnRpY2xlVG1wLT57QXJ0aWNsZUlEfSB9LAogICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICdUaW1lIFVuaXQnCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJEFydGljbGV7VGltZVVuaXR9ID0gJEFydGljbGVBY2NvdW50ZWRUaW1lc3sgJEFydGljbGVUbXAtPntBcnRpY2xlSUR9IH07CgogICAgICAgICAgICAgICAgJEFydGljbGVGaWVsZHN7VGltZVVuaXR9ID0gXCVUaW1lVW5pdEZpZWxkOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEdldCB0cmFuc21pc3Npb24gc3RhdHVzIGluZm9ybWF0aW9uIGZvciBlbWFpbCBhcnRpY2xlcy4KICAgICAgICAgICAgbXkgJFRyYW5zbWlzc2lvblN0YXR1czsKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZXtDaGFubmVsTmFtZX0gJiYgJEFydGljbGV7Q2hhbm5lbE5hbWV9IGVxICdFbWFpbCcgKSB7CiAgICAgICAgICAgICAgICAkVHJhbnNtaXNzaW9uU3RhdHVzID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKCVBcnRpY2xlKS0+QXJ0aWNsZVRyYW5zbWlzc2lvblN0YXR1cygKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGlmIHdlIG5lZWQgdG8gc2hvdyBhbHNvIGV4cGFuZC9jb2xsYXBzZSBpY29uCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVHJlZUl0ZW0nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUZpZWxkcyAgICAgID0+IFwlQXJ0aWNsZUZpZWxkcywKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgICAgPT4gJENsYXNzLAogICAgICAgICAgICAgICAgICAgIENsYXNzUm93ICAgICAgICAgICA9PiAkQ2xhc3NSb3csCiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgID0+ICRUbXBTdWJqZWN0LAogICAgICAgICAgICAgICAgICAgIFRyYW5zbWlzc2lvblN0YXR1cyA9PiAkVHJhbnNtaXNzaW9uU3RhdHVzLAogICAgICAgICAgICAgICAgICAgIFpvb21FeHBhbmQgICAgICAgICA9PiAkU2VsZi0+e1pvb21FeHBhbmR9LAogICAgICAgICAgICAgICAgICAgIFpvb21FeHBhbmRTb3J0ICAgICA9PiAkU2VsZi0+e1pvb21FeHBhbmRTb3J0fSwKICAgICAgICAgICAgICAgICAgICBTaG93VGltZVVuaXRzICAgICAgPT4gJFNob3dUaW1lVW5pdHMsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgYXJ0aWNsZSBmbGFncwogICAgICAgICAgICAjIEFsd2F5cyB1c2UgdXNlciBpZCAxIGJlY2F1c2Ugb3RoZXIgdXNlcnMgYWxzbyBoYXZlIHRvIHNlZSB0aGUgaW1wb3J0YW50IGZsYWcKICAgICAgICAgICAgbXkgJUFydGljbGVJbXBvcnRhbnRGbGFncyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlRmxhZ0dldCgKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNob3cgaW1wb3J0YW50IGZsYWcKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZUltcG9ydGFudEZsYWdze0ltcG9ydGFudH0gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbUltcG9ydGFudEFydGljbGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFsd2F5cyBzaG93IGFyY2hpdmVkIHRpY2tldHMgYXMgc2VlbgogICAgICAgICAgICBpZiAoICROZXdBcnRpY2xlICYmICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICd5JyApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtTmV3QXJ0aWNsZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVBcnRpY2xlLAogICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQnVnZml4IGZvciBJRTc6IGEgdGFibGUgY2VsbCBzaG91bGQgbm90IGJlIGVtcHR5CiAgICAgICAgICAgICMgKGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBjZWxsIGJvcmRlcnMgYXJlIG5vdCBzaG93bik6CiAgICAgICAgICAgICMgd2UgYWRkIGFuIGVtcHR5IGVsZW1lbnQgaGVyZQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RyZWVJdGVtTm9OZXdBcnRpY2xlJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBEZXRlcm1pbmUgY29tbXVuaWNhdGlvbiBkaXJlY3Rpb24uCiAgICAgICAgICAgIGlmICggJEFydGljbGV7Q2hhbm5lbE5hbWV9IGVxICdJbnRlcm5hbCcgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnVHJlZUl0ZW1EaXJlY3Rpb25JbnRlcm5hbCcgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRBcnRpY2xlU2VuZGVyVHlwZUxpc3R7ICRBcnRpY2xle1NlbmRlclR5cGVJRH0gfSBlcSAnY3VzdG9tZXInICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ1RyZWVJdGVtRGlyZWN0aW9uSW5jb21pbmcnICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnVHJlZUl0ZW1EaXJlY3Rpb25PdXRnb2luZycgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBHZXQgYXR0YWNobWVudCBpbmRleCAoZXhjbHVkaW5nIGJvZHkgYXR0YWNobWVudHMpLgogICAgICAgICAgICBteSAlQXRtSW5kZXg7CgogICAgICAgICAgICBpZiAoICEkQXJ0aWNsZXtBcnRpY2xlRGVsZXRlZH0gfHwgJFNlbGYtPntBcnRpY2xlU3RvcmFnZX0gPX4gbS9BcnRpY2xlU3RvcmFnZUZTLyApIHsKICAgICAgICAgICAgICAgICVBdG1JbmRleCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSglQXJ0aWNsZSktPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfSwKICAgICAgICAgICAgICAgICAgICAleyAkU2VsZi0+e0V4Y2x1ZGVBdHRhY2htZW50c30gfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAlQXRtSW5kZXggPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoJUFydGljbGUpLT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJEFydGljbGV7RGVsZXRlZFZlcnNpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgU291cmNlQXJ0aWNsZUlEICAgICA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfSwKICAgICAgICAgICAgICAgICAgICBWZXJzaW9uVmlldyAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgJXsgJFNlbGYtPntFeGNsdWRlQXR0YWNobWVudHN9IH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEFydGljbGV7QXRtc30gPSBcJUF0bUluZGV4OwoKICAgICAgICAgICAgIyBzaG93IGF0dGFjaG1lbnQgaW5mbwogICAgICAgICAgICAjIEJ1Z2ZpeCBmb3IgSUU3OiBhIHRhYmxlIGNlbGwgc2hvdWxkIG5vdCBiZSBlbXB0eQogICAgICAgICAgICAjIChiZWNhdXNlIG90aGVyd2lzZSB0aGUgY2VsbCBib3JkZXJzIGFyZSBub3Qgc2hvd24pOgogICAgICAgICAgICAjIHdlIGFkZCBhbiBlbXB0eSBlbGVtZW50IGhlcmUKICAgICAgICAgICAgaWYgKCAhJEFydGljbGV7QXRtc30gfHwgISV7ICRBcnRpY2xle0F0bXN9IH0gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdUcmVlSXRlbU5vQXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBBUlRJQ0xFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgIG15ICRBdHRhY2htZW50cyA9ICRTZWxmLT5fQ29sbGVjdEFydGljbGVBdHRhY2htZW50cygKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlID0+IFwlQXJ0aWNsZSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVHJlZUl0ZW1BdHRhY2htZW50JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgPT4gJEFydGljbGV7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2htZW50cyA9PiAkQXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IHRpbWVsaW5lIHZpZXcKICAgIGVsc2UgewoKICAgICAgICAjIGdldCB0aWNrZXQgaGlzdG9yeQogICAgICAgIG15IEBIaXN0b3J5TGluZXMgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5R2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGFydGljbGVzIGZvciBsYXRlciB1c2UKICAgICAgICBteSBAVGltZWxpbmVBcnRpY2xlQm94ID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJEFydGljbGVJdGVtIChAVGltZWxpbmVBcnRpY2xlQm94KSB7CiAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICAgICAgICAgICV7JEFydGljbGVJdGVtfSwKICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkQXJ0aWNsZUl0ZW0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICAgICAgUmVhbE5hbWVzICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBBcHBlbmQgYXJ0aWNsZSBtZXRhIGRhdGEuCiAgICAgICAgICAgICRBcnRpY2xlSXRlbSA9IHsKICAgICAgICAgICAgICAgICV7JEFydGljbGVJdGVtfSwKICAgICAgICAgICAgICAgICVBcnRpY2xlLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgbXkgJEFydGljbGVzQnlBcnRpY2xlSUQgPSB7fTsKICAgICAgICBmb3IgbXkgJEFydGljbGUgKCBzb3J0IEBUaW1lbGluZUFydGljbGVCb3ggKSB7CiAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICAgICAgICAgICV7JEFydGljbGV9LAogICAgICAgICAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIEdldCBhdHRhY2htZW50IGluZGV4IChleGNsdWRpbmcgYm9keSBhdHRhY2htZW50cykuCiAgICAgICAgICAgIG15ICVBdG1JbmRleCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAleyAkU2VsZi0+e0V4Y2x1ZGVBdHRhY2htZW50c30gfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEFydGljbGUtPntBdG1zfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcJUF0bUluZGV4OwogICAgICAgICAgICAkQXJ0aWNsZS0+e0JhY2tlbmR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+Q2hhbm5lbE5hbWVHZXQoKTsKICAgICAgICAgICAgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEFydGljbGUtPntBcnRpY2xlSUR9IH0gPSAkQXJ0aWNsZTsKCiAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlcmUgaXMgSFRNTCBib2R5IGF0dGFjaG1lbnQuCiAgICAgICAgICAgIG15ICVBdHRhY2htZW50SW5kZXhIVE1MQm9keSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBPbmx5SFRNTEJvZHkgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgKCAkQXJ0aWNsZS0+e0hUTUxCb2R5QXR0YWNobWVudElEfSApID0gc29ydCBrZXlzICVBdHRhY2htZW50SW5kZXhIVE1MQm9keTsKICAgICAgICB9CgogICAgICAgICMgZG8gbm90IGRpc3BsYXkgdGhlc2UgdHlwZXMKICAgICAgICBteSBAVHlwZXNEb2RnZSA9IHF3KAogICAgICAgICAgICBNaXNjCiAgICAgICAgICAgIEFyY2hpdmVGbGFnVXBkYXRlCiAgICAgICAgICAgIExvb3BQcm90ZWN0aW9uCiAgICAgICAgICAgIFJlbW92ZQogICAgICAgICAgICBTdWJzY3JpYmUKICAgICAgICAgICAgVW5zdWJzY3JpYmUKICAgICAgICAgICAgU3lzdGVtUmVxdWVzdAogICAgICAgICAgICBTZW5kQWdlbnROb3RpZmljYXRpb24KICAgICAgICAgICAgU2VuZEN1c3RvbWVyTm90aWZpY2F0aW9uCiAgICAgICAgICAgIFNlbmRBdXRvUmVqZWN0CiAgICAgICAgKTsKCiAgICAgICAgIyBzb3J0IG91dCBub24tZmlsdGVyZWQgZXZlbnQgdHlwZXMgKGlmIGFwcGxpY2FibGUpCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e0V2ZW50VHlwZUZpbHRlcn0tPntFdmVudFR5cGVJRH0KICAgICAgICAgICAgJiYgSXNBcnJheVJlZldpdGhEYXRhKCAkU2VsZi0+e0V2ZW50VHlwZUZpbHRlcn0tPntFdmVudFR5cGVJRH0gKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBmb3IgbXkgJEV2ZW50VHlwZSAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0hpc3RvcnlUeXBlTWFwcGluZ30gfSApIHsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkRXZlbnRUeXBlIG5lICdOZXdUaWNrZXQnICYmICFncmVwIHsgJF8gZXEgJEV2ZW50VHlwZSB9CiAgICAgICAgICAgICAgICAgICAgQHsgJFNlbGYtPntFdmVudFR5cGVGaWx0ZXJ9LT57RXZlbnRUeXBlSUR9IH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAVHlwZXNEb2RnZSwgJEV2ZW50VHlwZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB0eXBlcyB3aGljaCBjYW4gYmUgZGVzY3JpYmVkIGFzICdhY3Rpb24gb24gYSB0aWNrZXQnCiAgICAgICAgbXkgQFR5cGVzVGlja2V0QWN0aW9uID0gcXcoCiAgICAgICAgICAgIFNlcnZpY2VVcGRhdGUKICAgICAgICAgICAgU0xBVXBkYXRlCiAgICAgICAgICAgIFN0YXRlVXBkYXRlCiAgICAgICAgICAgIFNldFBlbmRpbmdUaW1lCiAgICAgICAgICAgIFVubG9jawogICAgICAgICAgICBMb2NrCiAgICAgICAgICAgIFJlc3BvbnNpYmxlVXBkYXRlCiAgICAgICAgICAgIE93bmVyVXBkYXRlCiAgICAgICAgICAgIEN1c3RvbWVyVXBkYXRlCiAgICAgICAgICAgIE5ld1RpY2tldAogICAgICAgICAgICBUaWNrZXRMaW5rQWRkCiAgICAgICAgICAgIFRpY2tldExpbmtEZWxldGUKICAgICAgICAgICAgVGlja2V0RHluYW1pY0ZpZWxkVXBkYXRlCiAgICAgICAgICAgIE1vdmUKICAgICAgICAgICAgTWVyZ2VkCiAgICAgICAgICAgIFByaW9yaXR5VXBkYXRlCiAgICAgICAgICAgIFRpdGxlVXBkYXRlCiAgICAgICAgICAgIFR5cGVVcGRhdGUKICAgICAgICAgICAgRXNjYWxhdGlvblJlc3BvbnNlVGltZU5vdGlmeUJlZm9yZQogICAgICAgICAgICBFc2NhbGF0aW9uUmVzcG9uc2VUaW1lU3RhcnQKICAgICAgICAgICAgRXNjYWxhdGlvblJlc3BvbnNlVGltZVN0b3AKICAgICAgICAgICAgRXNjYWxhdGlvblNvbHV0aW9uVGltZU5vdGlmeUJlZm9yZQogICAgICAgICAgICBFc2NhbGF0aW9uU29sdXRpb25UaW1lU3RhcnQKICAgICAgICAgICAgRXNjYWxhdGlvblNvbHV0aW9uVGltZVN0b3AKICAgICAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWVOb3RpZnlCZWZvcmUKICAgICAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWVTdGFydAogICAgICAgICAgICBFc2NhbGF0aW9uVXBkYXRlVGltZVN0b3AKICAgICAgICAgICAgVGltZUFjY291bnRpbmcKICAgICAgICApOwoKICAgICAgICAjIHR5cGVzIHdoaWNoIGFyZSB1c3VhbGx5IGJlaW5nIGNvbm5lY3RlZCB0byBzb21lIGtpbmQgb2YKICAgICAgICAjIGF1dG9tYXRpYyBwcm9jZXNzIChlLmcuIHRyaWdnZXJlZCBieSBhbm90aGVyIGFjdGlvbikKICAgICAgICBteSBAVHlwZXNUaWNrZXRBdXRvQWN0aW9uID0gcXcoCiAgICAgICAgICAgIFNlbmRBdXRvRm9sbG93VXAKICAgICAgICAgICAgU2VuZEF1dG9SZWplY3QKICAgICAgICAgICAgU2VuZEF1dG9SZXBseQogICAgICAgICk7CgogICAgICAgICMgdHlwZXMgd2hpY2ggY2FuIGJlIGNvbnNpZGVyZWQgYXMgaW50ZXJuYWwKICAgICAgICBteSBAVHlwZXNJbnRlcm5hbCA9IHF3KAogICAgICAgICAgICBBZGROb3RlCiAgICAgICAgICAgIENoYXRJbnRlcm5hbAogICAgICAgICAgICBFbWFpbEFnZW50SW50ZXJuYWwKICAgICAgICApOwoKICAgICAgICAjIG91dGdvaW5nIHR5cGVzCiAgICAgICAgbXkgQFR5cGVzT3V0Z29pbmcgPSBxdygKICAgICAgICAgICAgQWRkU01TCiAgICAgICAgICAgIEZvcndhcmQKICAgICAgICAgICAgRW1haWxBZ2VudAogICAgICAgICAgICBQaG9uZUNhbGxBZ2VudAogICAgICAgICAgICBCb3VuY2UKICAgICAgICAgICAgU2VuZEFuc3dlcgogICAgICAgICk7CgogICAgICAgICMgaW5jb21pbmcgdHlwZXMKICAgICAgICBteSBAVHlwZXNJbmNvbWluZyA9IHF3KAogICAgICAgICAgICBFbWFpbEN1c3RvbWVyCiAgICAgICAgICAgIEFkZE5vdGVDdXN0b21lcgogICAgICAgICAgICBBZGRTTVNDdXN0b21lcgogICAgICAgICAgICBQaG9uZUNhbGxDdXN0b21lcgogICAgICAgICAgICBGb2xsb3dVcAogICAgICAgICAgICBXZWJSZXF1ZXN0Q3VzdG9tZXIKICAgICAgICAgICAgQ2hhdEV4dGVybmFsCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFR5cGVzUmlnaHQgPSAoCiAgICAgICAgICAgIEBUeXBlc0luY29taW5nLAogICAgICAgICAgICBAVHlwZXNUaWNrZXRBY3Rpb24sCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFR5cGVzV2l0aEFydGljbGVzID0gKAogICAgICAgICAgICBAVHlwZXNPdXRnb2luZywKICAgICAgICAgICAgQFR5cGVzSW50ZXJuYWwsCiAgICAgICAgICAgIEBUeXBlc0luY29taW5nLAogICAgICAgICAgICAnUGhvbmVDYWxsQ3VzdG9tZXInLAogICAgICAgICk7CgogICAgICAgIG15ICVIaXN0b3J5SXRlbXM7CiAgICAgICAgbXkgJEl0ZW1Db3VudGVyID0gMDsKICAgICAgICBteSAkTGFzdENyZWF0ZVRpbWU7CiAgICAgICAgbXkgJExhc3RDcmVhdGVTeXN0ZW1UaW1lOwoKICAgICAgICAjIEdldCBtYXBwaW5nIG9mIGhpc3RvcnkgdHlwZXMgdG8gcmVhZGFibGUgc3RyaW5ncwogICAgICAgIG15ICVIaXN0b3J5VHlwZXM7CiAgICAgICAgbXkgJUhpc3RvcnlUeXBlQ29uZmlnID0gJXsgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpIaXN0b3J5VHlwZXMnKSAvLyB7fSB9OwogICAgICAgIGZvciBteSAkRW50cnkgKCBzb3J0IGtleXMgJUhpc3RvcnlUeXBlQ29uZmlnICkgewogICAgICAgICAgICAlSGlzdG9yeVR5cGVzID0gKAogICAgICAgICAgICAgICAgJUhpc3RvcnlUeXBlcywKICAgICAgICAgICAgICAgICV7ICRIaXN0b3J5VHlwZUNvbmZpZ3skRW50cnl9IH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBISVNUT1JZSVRFTToKICAgICAgICBmb3IgbXkgJEl0ZW0gKCByZXZlcnNlIEBIaXN0b3J5TGluZXMgKSB7CgogICAgICAgICAgICAjIHNwZWNpYWwgdHJlYXRtZW50IGZvciBjZXJ0YWluIHR5cGVzLCBlLmcuIGV4dGVybmFsIG5vdGVzIGZyb20gY3VzdG9tZXJzCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgJiYgJEl0ZW0tPntIaXN0b3J5VHlwZX0gZXEgJ0FkZE5vdGUnCiAgICAgICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0gKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntTZW5kZXJUeXBlSUR9IH0gZXEgJ2N1c3RvbWVyJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSA9ICdUeXBlSW5jb21pbmcnOwoKICAgICAgICAgICAgICAgICMgV2UgZmFrZSBhIGN1c3RvbSBoaXN0b3J5IHR5cGUgYmVjYXVzZSBleHRlcm5hbCBub3RlcyBmcm9tIGN1c3RvbWVycyBzdGlsbAogICAgICAgICAgICAgICAgIyBoYXZlIHRoZSBoaXN0b3J5IHR5cGUgJ0FkZE5vdGUnIHdoaWNoIGRvZXMgbm90IGFsbG93IGZvciBkaXN0aW5ndWlzaGluZy4KICAgICAgICAgICAgICAgICRJdGVtLT57SGlzdG9yeVR5cGV9ID0gJ0FkZE5vdGVDdXN0b21lcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGNlcnRhaW4gdHlwZXMsIGUuZy4gZXh0ZXJuYWwgU01TIGZyb20gY3VzdG9tZXJzCiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgJiYgJEl0ZW0tPntIaXN0b3J5VHlwZX0gZXEgJ0FkZFNNUycKICAgICAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfSApCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZVNlbmRlclR5cGVMaXN0eyAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e1NlbmRlclR5cGVJRH0gfSBlcSAnY3VzdG9tZXInCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVJbmNvbWluZyc7CgogICAgICAgICAgICAgICAgIyBXZSBmYWtlIGEgY3VzdG9tIGhpc3RvcnkgdHlwZSBiZWNhdXNlIGV4dGVybmFsIG5vdGVzIGZyb20gY3VzdG9tZXJzIHN0aWxsCiAgICAgICAgICAgICAgICAjIGhhdmUgdGhlIGhpc3RvcnkgdHlwZSAnQWRkU01TJyB3aGljaCBkb2VzIG5vdCBhbGxvdyBmb3IgZGlzdGluZ3Vpc2hpbmcuCiAgICAgICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlfSA9ICdBZGRTTVNDdXN0b21lcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGludGVybmFsIGVtYWlscwogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICYmICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdFbWFpbEFnZW50JwogICAgICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9ICkKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57QmFja2VuZH0gZXEgJ0VtYWlsJwogICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntTZW5kZXJUeXBlSUR9IH0gZXEgJ2FnZW50JwogICAgICAgICAgICAgICAgJiYgISRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ICAgICAgID0gJ1R5cGVOb3RlSW50ZXJuYWwnOwogICAgICAgICAgICAgICAgJEl0ZW0tPntIaXN0b3J5VHlwZX0gPSAnRW1haWxBZ2VudEludGVybmFsJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgY2VydGFpbiB0eXBlcywgZS5nLiBleHRlcm5hbCBub3RlcyBmcm9tIGN1c3RvbWVycwogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVJRH0KICAgICAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfSApCiAgICAgICAgICAgICAgICAmJiAkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0JhY2tlbmR9IGVxICdDaGF0JwogICAgICAgICAgICAgICAgJiYgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntJc1Zpc2libGVGb3JDdXN0b21lcn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEl0ZW0tPntIaXN0b3J5VHlwZX0gPSAnQ2hhdEV4dGVybmFsJzsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ICAgICAgID0gJ1R5cGVJbmNvbWluZyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlSUR9CiAgICAgICAgICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0gKQogICAgICAgICAgICAgICAgJiYgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntCYWNrZW5kfSBlcSAnQ2hhdCcKICAgICAgICAgICAgICAgICYmICEkQXJ0aWNsZXNCeUFydGljbGVJRC0+eyAkSXRlbS0+e0FydGljbGVJRH0gfS0+e0lzVmlzaWJsZUZvckN1c3RvbWVyfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlfSA9ICdDaGF0SW50ZXJuYWwnOwogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gICAgICAgPSAnVHlwZUludGVybmFsJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlfSBlcSAnRm9yd2FyZCcKICAgICAgICAgICAgICAgICYmICRJdGVtLT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9ICkKICAgICAgICAgICAgICAgICYmICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57QmFja2VuZH0gZXEgJ0VtYWlsJwogICAgICAgICAgICAgICAgJiYgJEFydGljbGVTZW5kZXJUeXBlTGlzdHsgJEFydGljbGVzQnlBcnRpY2xlSUQtPnsgJEl0ZW0tPntBcnRpY2xlSUR9IH0tPntTZW5kZXJUeXBlSUR9IH0gZXEgJ2FnZW50JwogICAgICAgICAgICAgICAgJiYgISRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSA9ICdUeXBlTm90ZUludGVybmFsJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIGdyZXAgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc1RpY2tldEFjdGlvbiApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVUaWNrZXRBY3Rpb24nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggZ3JlcCB7ICRfIGVxICRJdGVtLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzVGlja2V0QXV0b0FjdGlvbiApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVUaWNrZXRBdXRvQWN0aW9uJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoIGdyZXAgeyAkXyBlcSAkSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc0ludGVybmFsICkgewogICAgICAgICAgICAgICAgJEl0ZW0tPntDbGFzc30gPSAnVHlwZU5vdGVJbnRlcm5hbCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBncmVwIHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNJbmNvbWluZyApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVJbmNvbWluZyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCBncmVwIHsgJF8gZXEgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNPdXRnb2luZyApIHsKICAgICAgICAgICAgICAgICRJdGVtLT57Q2xhc3N9ID0gJ1R5cGVPdXRnb2luZyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggZ3JlcCB7ICRfIGVxICRJdGVtLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzRG9kZ2UgKSB7CiAgICAgICAgICAgICAgICBuZXh0IEhJU1RPUllJVEVNOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkSXRlbS0+e0NvdW50ZXJ9ID0gJEl0ZW1Db3VudGVyKys7CgogICAgICAgICAgICBpZiAoICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdOZXdUaWNrZXQnICkgewoKICAgICAgICAgICAgICAgICMgaWYgdGhlICdOZXdUaWNrZXQnIGl0ZW0gaGFzIGFuIGFydGljbGUsIGRpc3BsYXkgdGhpcyAiY3JlYXRpb24gYXJ0aWNsZSIgZXZlbnQgc2VwYXJhdGVseQogICAgICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0FydGljbGVJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17SXRlbXN9IH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgJXskSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIgICAgICAgICAgICAgPT4gJEl0ZW0tPntDb3VudGVyfSsrLAogICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgICAgID0+ICdOZXdUaWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZVJlYWRhYmxlID0+IFRyYW5zbGF0YWJsZSgnVGlja2V0IENyZWF0ZWQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgT3JpZW50YXRpb24gICAgICAgICA9PiAnUmlnaHQnLAogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkSXRlbS0+e0NsYXNzfSA9ICdOZXdUaWNrZXQnOwogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkSXRlbS0+e0FydGljbGVJRH07CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57TmFtZX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVtb3ZlIGFydGljbGUgaW5mb3JtYXRpb24gZnJvbSB0eXBlcyB3aGljaCBzaG91bGQgbm90IGRpc3BsYXkgYXJ0aWNsZXMKICAgICAgICAgICAgaWYgKCAhZ3JlcCB7ICRfIGVxICRJdGVtLT57SGlzdG9yeVR5cGV9IH0gQFR5cGVzV2l0aEFydGljbGVzICkgewogICAgICAgICAgICAgICAgZGVsZXRlICRJdGVtLT57QXJ0aWNsZUlEfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgYXJ0aWNsZSAoaWYgcHJlc2VudCkKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0FydGljbGVJRH0gKSB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfSA9ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9OwoKICAgICAgICAgICAgICAgIG15ICVBcnRpY2xlRmllbGRzID0gJExheW91dE9iamVjdC0+QXJ0aWNsZUZpZWxkcygKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRJdGVtLT57QXJ0aWNsZURhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUZpZWxkc30gPSBcJUFydGljbGVGaWVsZHM7CgogICAgICAgICAgICAgICAgIyBHZXQgZHluYW1pYyBmaWVsZHMgYW5kIGFjY291bnRlZCB0aW1lCiAgICAgICAgICAgICAgICBteSAkQmFja2VuZCA9ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57ICRJdGVtLT57QXJ0aWNsZUlEfSB9LT57QmFja2VuZH07CgogICAgICAgICAgICAgICAgIyBHZXQgZHluYW1pYyBmaWVsZHMgYW5kIGFjY291bnRlZCB0aW1lCiAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZU1ldGFGaWVsZHMgPSAkS2VybmVsOjpPTS0+R2V0KCJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0Wm9vbTo6QWdlbnQ6OiRCYWNrZW5kIiktPkFydGljbGVNZXRhRmllbGRzKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlTWV0YUZpZWxkc30gPSBcJUFydGljbGVNZXRhRmllbGRzOwoKICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlQWN0aW9ucyA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVBY3Rpb25zKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICA9PiAnT25Mb2FkJywKICAgICAgICAgICAgICAgICAgICBTaG93RGVsZXRlZEFydGljbGVzID0+ICRTZWxmLT57U2hvd0RlbGV0ZWRBcnRpY2xlc30KICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlUGxhaW59ID0gJExheW91dE9iamVjdC0+QXJ0aWNsZVByZXZpZXcoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgID0+ICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBSZXN1bHRUeXBlID0+ICdwbGFpbicsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57QXJ0aWNsZUhUTUx9ID0gJEtlcm5lbDo6T00tPkdldCgiS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpbWVsaW5lVmlldzo6JEJhY2tlbmQiKS0+QXJ0aWNsZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgICA9PiAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUFjdGlvbnMgPT4gXEBBcnRpY2xlQWN0aW9ucywKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIGVtcHR5IGxpbmVzCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVQbGFpbn0gPX4gc3teW1xuXHJdK317fXhtc2c7CgogICAgICAgICAgICAgICAgIyBNb2RpZnkgcGxhaW4gdGV4dCBhbmQgYm9keSB0byBhdm9pZCAnPC9zY3JpcHQ+JyB0YWcgaXNzdWUgKHNlZSBidWcjMTQwMjMpLgogICAgICAgICAgICAgICAgJEl0ZW0tPntBcnRpY2xlRGF0YX0tPntBcnRpY2xlUGxhaW59ID1+IHN7PC9zY3JpcHQ+fXs8IyMjL3NjcmlwdD59eG1zZzsKICAgICAgICAgICAgICAgICRJdGVtLT57QXJ0aWNsZURhdGF9LT57Qm9keX0gICAgICAgICA9fiBzezwvc2NyaXB0Pn17PCMjIy9zY3JpcHQ+fXhtc2c7CgogICAgICAgICAgICAgICAgbXkgJUFydGljbGVGbGFnc0FsbCA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlRmxhZ0dldCgKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEl0ZW0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZUZsYWdzTWUgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUZsYWdHZXQoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRJdGVtLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJc0ltcG9ydGFudH0gPSAkQXJ0aWNsZUZsYWdzQWxse0ltcG9ydGFudH07CiAgICAgICAgICAgICAgICAkSXRlbS0+e0FydGljbGVEYXRhfS0+e0FydGljbGVJc1NlZW59ICAgICAgPSAkQXJ0aWNsZUZsYWdzTWV7U2Vlbn07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgaWYgKCAkSXRlbS0+e05hbWV9ICYmICRJdGVtLT57TmFtZX0gPX4gbS9eJSUveCApIHsKCiAgICAgICAgICAgICAgICAgICAgJEl0ZW0tPntOYW1lfSA9fiBzL14lJS8veGc7CiAgICAgICAgICAgICAgICAgICAgbXkgQFZhbHVlcyA9IHNwbGl0KCAvJSUveCwgJEl0ZW0tPntOYW1lfSApOwoKICAgICAgICAgICAgICAgICAgICAjIFNlZSBkb2N1bWVudGF0aW9uIGluIEFnZW50VGlja2V0SGlzdG9yeS5wbSwgbGluZSAxNDErCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkSXRlbS0+e0hpc3RvcnlUeXBlfSBlcSAnVGlja2V0RHluYW1pY0ZpZWxkVXBkYXRlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQFZhbHVlcyA9ICggJFZhbHVlc1sxXSwgJFZhbHVlc1s1XSAvLyAnJywgJFZhbHVlc1szXSAvLyAnJyApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRJdGVtLT57SGlzdG9yeVR5cGV9IGVxICdUeXBlVXBkYXRlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQFZhbHVlcyA9ICggJFZhbHVlc1syXSwgJFZhbHVlc1szXSwgJFZhbHVlc1swXSwgJFZhbHVlc1sxXSApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJEl0ZW0tPntOYW1lfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJEhpc3RvcnlUeXBlc3sgJEl0ZW0tPntIaXN0b3J5VHlwZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgQFZhbHVlcywKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBub3QgbmVlZGVkIHBsYWNlIGhvbGRlcgogICAgICAgICAgICAgICAgICAgICRJdGVtLT57TmFtZX0gPX4gcy9cJXMvL3hnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG1ha2UgdGhlIGhpc3RvcnkgdHlwZSBtb3JlIHJlYWRhYmxlIChpZiBhcHBsaWNhYmxlKQogICAgICAgICAgICAkSXRlbS0+e0hpc3RvcnlUeXBlUmVhZGFibGV9ID0gJFNlbGYtPntIaXN0b3J5VHlwZU1hcHBpbmd9LT57ICRJdGVtLT57SGlzdG9yeVR5cGV9IH0KICAgICAgICAgICAgICAgIHx8ICRJdGVtLT57SGlzdG9yeVR5cGV9OwoKICAgICAgICAgICAgIyBncm91cCBpdGVtcyB3aGljaCBoYXBwZW5lZCAobmVhcmx5KSBjb2luY2lkZW50bHkgdG9nZXRoZXIKICAgICAgICAgICAgbXkgJENyZWF0ZVN5c3RlbVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkSXRlbS0+e0NyZWF0ZVRpbWV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEl0ZW0tPntDcmVhdGVTeXN0ZW1UaW1lfSA9ICRDcmVhdGVTeXN0ZW1UaW1lT2JqZWN0CiAgICAgICAgICAgICAgICA/ICRDcmVhdGVTeXN0ZW1UaW1lT2JqZWN0LT5Ub0Vwb2NoKCkKICAgICAgICAgICAgICAgIDogdW5kZWY7CgogICAgICAgICAgICAjIGlmIHdlIGhhdmUgdHdvIGV2ZW50cyB0aGF0IGhhcHBlbmVkICduZWFybHknIHRoZSBzYW1lIHRpbWUsIHRyZWF0CiAgICAgICAgICAgICMgdGhlbSBhcyBpZiB0aGV5IGhhcHBlbmVkIGV4YWN0bHkgb24gdGhlIHNhbWUgdGltZSAodGhyZXNob2xkIDUgc2Vjb25kcykKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJExhc3RDcmVhdGVTeXN0ZW1UaW1lCiAgICAgICAgICAgICAgICAmJiAkSXRlbS0+e0NyZWF0ZVN5c3RlbVRpbWV9IDw9ICRMYXN0Q3JlYXRlU3lzdGVtVGltZQogICAgICAgICAgICAgICAgJiYgJEl0ZW0tPntDcmVhdGVTeXN0ZW1UaW1lfSA+PSAoICRMYXN0Q3JlYXRlU3lzdGVtVGltZSAtIDUgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwdXNoIEB7ICRIaXN0b3J5SXRlbXN7JExhc3RDcmVhdGVUaW1lfSB9LCAkSXRlbTsKICAgICAgICAgICAgICAgICRJdGVtLT57Q3JlYXRlVGltZX0gPSAkTGFzdENyZWF0ZVRpbWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBwdXNoIEB7ICRIaXN0b3J5SXRlbXN7ICRJdGVtLT57Q3JlYXRlVGltZX0gfSB9LCAkSXRlbTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJExhc3RDcmVhdGVUaW1lICAgICAgID0gJEl0ZW0tPntDcmVhdGVUaW1lfTsKICAgICAgICAgICAgJExhc3RDcmVhdGVTeXN0ZW1UaW1lID0gJEl0ZW0tPntDcmVhdGVTeXN0ZW1UaW1lfTsKICAgICAgICB9CgogICAgICAgIG15ICRTb3J0QnlBcnRpY2xlID0gc3ViIHsKCiAgICAgICAgICAgIG15ICRJc0EgPSBncmVwIHsgJF8gZXEgJGEtPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNXaXRoQXJ0aWNsZXM7CiAgICAgICAgICAgIG15ICRJc0IgPSBncmVwIHsgJF8gZXEgJGItPntIaXN0b3J5VHlwZX0gfSBAVHlwZXNXaXRoQXJ0aWNsZXM7CiAgICAgICAgICAgICRJc0IgY21wICRJc0E7CiAgICAgICAgfTsKCiAgICAgICAgIyBzb3J0IGhpc3RvcnkgaXRlbXMgYmFzZWQgb24gaXRlbXMgd2l0aCBhcnRpY2xlcwogICAgICAgICMgdGhlc2UgaXRlbXMgc2hvdWxkIGFsd2F5cyBiZSBvbiB0b3Agb2YgYSBsaXN0IG9mIGNvbm5lY3RlZCBpdGVtcwogICAgICAgICRJdGVtQ291bnRlciA9IDA7CiAgICAgICAgZm9yIG15ICRJdGVtICggcmV2ZXJzZSBzb3J0IGtleXMgJUhpc3RvcnlJdGVtcyApIHsKCiAgICAgICAgICAgIGZvciBteSAkU3ViSXRlbSAoIHNvcnQgJFNvcnRCeUFydGljbGUgQHsgJEhpc3RvcnlJdGVtc3skSXRlbX0gfSApIHsKICAgICAgICAgICAgICAgICRTdWJJdGVtLT57Q291bnRlcn0gPSAkSXRlbUNvdW50ZXIrKzsKCiAgICAgICAgICAgICAgICBpZiAoIGdyZXAgeyAkXyBlcSAkU3ViSXRlbS0+e0hpc3RvcnlUeXBlfSB9IEBUeXBlc1JpZ2h0ICkgewogICAgICAgICAgICAgICAgICAgICRTdWJJdGVtLT57T3JpZW50YXRpb259ID0gJ1JpZ2h0JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTdWJJdGVtLT57T3JpZW50YXRpb259ID0gJ0xlZnQnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17SXRlbXN9IH0sICRTdWJJdGVtOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNldCBUaWNrZXRJRCBmb3IgdXNhZ2UgaW4gSlMKICAgICAgICAkUGFyYW17VGlja2V0SUR9ID0gJFNlbGYtPntUaWNrZXRJRH07CgogICAgICAgICMgc2V0IGtleSAnVGltZUxvbmcnIGZvciBKUwogICAgICAgIGZvciBteSAkSXRlbSAoIEB7ICRQYXJhbXtJdGVtc30gfSApIHsKICAgICAgICAgICAgJEl0ZW0tPntUaW1lTG9uZ30gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5Gb3JtYXRUaW1lU3RyaW5nKCAkSXRlbS0+e0NyZWF0ZVRpbWV9LCAnRGF0ZUZvcm1hdExvbmcnICk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEFydGljbGVJRCAoIHNvcnQga2V5cyAleyRBcnRpY2xlc0J5QXJ0aWNsZUlEfSApIHsKCiAgICAgICAgICAgICMgQ2hlY2sgaWYgYXJ0aWNsZSBoYXMgYXR0YWNobWVudChzKS4KICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnskQXJ0aWNsZUlEfS0+e0F0bXN9ICkgKSB7CgogICAgICAgICAgICAgICAgbXkgKCRJbmRleCkgPSBncmVwIHsgJFBhcmFte0l0ZW1zfS0+WyRfXS0+e0FydGljbGVJRH0gJiYgJFBhcmFte0l0ZW1zfS0+WyRfXS0+e0FydGljbGVJRH0gPT0gJEFydGljbGVJRCB9CiAgICAgICAgICAgICAgICAgICAgMCAuLiBAeyAkUGFyYW17SXRlbXN9IH07CiAgICAgICAgICAgICAgICAkUGFyYW17SXRlbXN9LT5bJEluZGV4XS0+e0hhc0F0dGFjaG1lbnR9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBHZXQgTm9UaW1lbGluZVZpZXdBdXRvQXJ0aWNsZSBjb25maWcgdmFsdWUgZm9yIHVzYWdlIGluIEpTLgogICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgS2V5ICAgPT4gJ05vVGltZWxpbmVWaWV3QXV0b0FydGljbGUnLAogICAgICAgICAgICBWYWx1ZSA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ05vVGltZWxpbmVWaWV3QXV0b0FydGljbGUnKSB8fCAnMCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBJbmNsdWRlIGN1cnJlbnQgYXJ0aWNsZSBJRCBvbmx5IGlmIGl0J3Mgc2VsZWN0ZWQuCiAgICAgICAgJFBhcmFte0N1cnJlbnRBcnRpY2xlSUR9IC8vPSAkU2VsZi0+e0FydGljbGVJRH07CgogICAgICAgICMgTW9kaWZ5IGJvZHkgdGV4dCB0byBhdm9pZCAnPC9zY3JpcHQ+JyB0YWcgaXNzdWUgKHNlZSBidWcjMTQwMjMpLgogICAgICAgIGZvciBteSAkQXJ0aWNsZUJveEl0ZW0gKEBBcnRpY2xlQm94KSB7CiAgICAgICAgICAgICRBcnRpY2xlQm94SXRlbS0+e0JvZHl9ID1+IHN7PC9zY3JpcHQ+fXs8IyMjL3NjcmlwdD59eG1zZzsKICAgICAgICB9CgogICAgICAgICMgc2VuZCBkYXRhIHRvIEpTCiAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICBLZXkgICA9PiAnVGltZWxpbmVWaWV3JywKICAgICAgICAgICAgVmFsdWUgPT4gewogICAgICAgICAgICAgICAgRW5hYmxlZCA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpbWVsaW5lVmlld0VuYWJsZWQnKSwKICAgICAgICAgICAgICAgIERhdGEgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGltZWxpbmVWaWV3JywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMganVtcCB0byBzZWxlY3RlZCBhcnRpY2xlCiAgICAgICAgaWYgKCAkU2VsZi0+e0FydGljbGVJRH0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU2hvd1NlbGVjdGVkQXJ0aWNsZScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFNlbGYtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmVuZGVyIGFjdGlvbiBtZW51IGZvciBhbGwgYXJ0aWNsZXMKICAgICAgICBmb3IgbXkgJEFydGljbGVJRCAoIHNvcnQga2V5cyAleyRBcnRpY2xlc0J5QXJ0aWNsZUlEfSApIHsKCiAgICAgICAgICAgICMgc2hvdyBhdHRhY2htZW50cyBib3gKICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJEFydGljbGVzQnlBcnRpY2xlSUQtPnskQXJ0aWNsZUlEfS0+e0F0bXN9ICkgKSB7CgogICAgICAgICAgICAgICAgbXkgJEFydGljbGVBdHRhY2htZW50cyA9ICRTZWxmLT5fQ29sbGVjdEFydGljbGVBdHRhY2htZW50cygKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlID0+ICRBcnRpY2xlc0J5QXJ0aWNsZUlELT57JEFydGljbGVJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVsaW5lVmlld0FydGljbGVBdHRhY2htZW50cycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgICAgICAgICBBdHRhY2htZW50cyA9PiAkQXJ0aWNsZUF0dGFjaG1lbnRzLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgcmV0dXJuIG91dHB1dAogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsgJVBhcmFtLCAlVGlja2V0IH0sCiAgICApOwp9CgpzdWIgX1RpY2tldEl0ZW1TZWVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQEFydGljbGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5BcnRpY2xlTGlzdCgKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICApOwoKICAgIGZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVzKSB7CiAgICAgICAgJFNlbGYtPl9BcnRpY2xlSXRlbVNlZW4oCiAgICAgICAgICAgIFRpY2tldElEICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfQXJ0aWNsZUl0ZW1TZWVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJElzQXJ0aWNsZURlbGV0ZWQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlRmVhdHVyZXMnKS0+SXNBcnRpY2xlRGVsZXRlZCgKICAgICAgICBBcnRpY2xlSUQgPT4gJFBhcmFte0FydGljbGVJRH0KICAgICk7CgogICAgIyBtYXJrIHNob3duIGFydGljbGUgYXMgc2VlbgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5BcnRpY2xlRmxhZ1NldCgKICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIEFydGljbGVJRCAgICAgID0+ICRQYXJhbXtBcnRpY2xlSUR9LAogICAgICAgIEtleSAgICAgICAgICAgID0+ICdTZWVuJywKICAgICAgICBWYWx1ZSAgICAgICAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBBcnRpY2xlRGVsZXRlZCA9PiAkSXNBcnRpY2xlRGVsZXRlZAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIF9BcnRpY2xlSXRlbSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVUaWNrZXQgID0gJXsgJFBhcmFte1RpY2tldH0gfTsKICAgIG15ICVBcnRpY2xlID0gJXsgJFBhcmFte0FydGljbGV9IH07CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHNob3cgYXJ0aWNsZSBhY3Rpb25zCiAgICBteSBATWVudUl0ZW1zID0gJExheW91dE9iamVjdC0+QXJ0aWNsZUFjdGlvbnMoCiAgICAgICAgJVBhcmFtLAogICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJFBhcmFte1RpY2tldH0tPntUaWNrZXRJRH0sCiAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICA9PiAkUGFyYW17QXJ0aWNsZX0tPntBcnRpY2xlSUR9LAogICAgICAgIFR5cGUgICAgICAgICAgICAgICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgKTsKCiAgICBwdXNoIEB7ICRTZWxmLT57TWVudUl0ZW1zfSB9LCBcQE1lbnVJdGVtczsKCiAgICAjIFRPRE86IFJldmlldwogICAgcmV0dXJuICRTZWxmLT5fQXJ0aWNsZVJlbmRlcigKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgIEFydGljbGVJRCAgICAgICAgICAgICAgPT4gJEFydGljbGV7QXJ0aWNsZUlEfSwKICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBTaG93QnJvd3NlckxpbmtNZXNzYWdlID0+ICRTZWxmLT57RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSA/IDAgOiAxLAogICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIE1lbnVJdGVtcyAgICAgICAgICAgICAgPT4gXEBNZW51SXRlbXMsCiAgICAgICAgU2hvd0RlbGV0ZWRBcnRpY2xlcyAgICA9PiAkU2VsZi0+e1Nob3dEZWxldGVkQXJ0aWNsZXN9CiAgICApOwp9CgpzdWIgX0NvbGxlY3RBcnRpY2xlQXR0YWNobWVudHMgewoKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJUFydGljbGUgPSAleyAkUGFyYW17QXJ0aWNsZX0gfTsKCiAgICBteSAlQXR0YWNobWVudHM7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBkb3dubG9hZCB0eXBlCiAgICBteSAkVHlwZSA9ICRDb25maWdPYmplY3QtPkdldCgnQXR0YWNobWVudERvd25sb2FkVHlwZScpIHx8ICdhdHRhY2htZW50JzsKCiAgICAkQXJ0aWNsZXtBdG1Db3VudH0gPSBzY2FsYXIga2V5cyAleyAkQXJ0aWNsZXtBdG1zfSAvLyB7fSB9OwoKICAgICMgaWYgYXR0YWNobWVudCB3aWxsIGJlIGZvcmNlZCB0byBkb3dubG9hZCwgZG9uJ3Qgb3BlbiBhIG5ldyBkb3dubG9hZCB3aW5kb3chCiAgICBteSAkVGFyZ2V0ID0gJ3RhcmdldD0iQXR0YWNobWVudFdpbmRvdyIgJzsKICAgIGlmICggJFR5cGUgPX4gL2lubGluZS9pICkgewogICAgICAgICRUYXJnZXQgPSAndGFyZ2V0PSJhdHRhY2htZW50IiAnOwogICAgfQoKICAgICRBdHRhY2htZW50c3tab29tQXR0YWNobWVudERpc3BsYXlDb3VudH0gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6Wm9vbUF0dGFjaG1lbnREaXNwbGF5Q291bnQnKTsKCiAgICBBVFRBQ0hNRU5UOgogICAgZm9yIG15ICRGaWxlSUQgKCBzb3J0IGtleXMgJXsgJEFydGljbGV7QXRtc30gfSApIHsKICAgICAgICBwdXNoIEB7ICRBdHRhY2htZW50c3tGaWxlc30gfSwgewogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGV7QXJ0aWNsZUlEfSwKICAgICAgICAgICAgJXsgJEFydGljbGV7QXRtc30tPnskRmlsZUlEfSB9LAogICAgICAgICAgICBGaWxlSUQgPT4gJEZpbGVJRCwKICAgICAgICAgICAgVGFyZ2V0ID0+ICRUYXJnZXQsCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gXCVBdHRhY2htZW50czsKfQoKc3ViIF9BcnRpY2xlQm94R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZSBBcnRpY2xlQm94QWxsIExpbWl0KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgIG15ICRTdGFydCA9ICggJFBhcmFte1BhZ2V9IC0gMSApICogJFBhcmFte0xpbWl0fTsKCiAgICBteSAkRW5kID0gJFBhcmFte1BhZ2V9ICogJFBhcmFte0xpbWl0fSAtIDE7CiAgICBpZiAoICRFbmQgPj0gc2NhbGFyIEB7ICRQYXJhbXtBcnRpY2xlQm94QWxsfSB9ICkgewoKICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGVuZCBpbmRleCBkb2Vzbid0IGV4Y2VlZCBhcnJheSBzaXplLgogICAgICAgICRFbmQgPSBzY2FsYXIgQHsgJFBhcmFte0FydGljbGVCb3hBbGx9IH0gLSAxOwogICAgfQoKICAgIG15IEBBcnRpY2xlSW5kZXhlcyA9ICggJFN0YXJ0IC4uICRFbmQgKTsKCiAgICBteSAkQ29tbXVuaWNhdGlvbkNoYW5uZWxPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29tbXVuaWNhdGlvbkNoYW5uZWwnKTsKCiAgICAjIFNhdmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGRhdGEgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4KICAgIG15ICVDb21tdW5pY2F0aW9uQ2hhbm5lbERhdGE7CgogICAgbXkgQEFydGljbGVCb3g7CiAgICBmb3IgbXkgJEluZGV4IChAQXJ0aWNsZUluZGV4ZXMpIHsKICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgICAgPT4gJFBhcmFte0FydGljbGVCb3hBbGx9LT5bJEluZGV4XS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgIFNob3dEZWxldGVkQXJ0aWNsZXMgPT4gJFNlbGYtPntTaG93RGVsZXRlZEFydGljbGVzfQogICAgICAgICk7CgogICAgICAgIG15ICVBcnRpY2xlID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgID0+ICRQYXJhbXtBcnRpY2xlQm94QWxsfS0+WyRJbmRleF0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgIFJlYWxOYW1lcyAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIEluY2x1ZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCiAgICAgICAgaWYgKCAhJENvbW11bmljYXRpb25DaGFubmVsRGF0YXsgJEFydGljbGV7Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0gfSApIHsKCiAgICAgICAgICAgICMgQ29tbXVuaWNhdGlvbiBjaGFubmVsIGRpc3BsYXkgbmFtZSBpcyBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uLgogICAgICAgICAgICBteSAlQ29tbXVuaWNhdGlvbkNoYW5uZWwgPSAkQ29tbXVuaWNhdGlvbkNoYW5uZWxPYmplY3QtPkNoYW5uZWxHZXQoCiAgICAgICAgICAgICAgICBDaGFubmVsSUQgPT4gJEFydGljbGV7Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIFByZXNlbmNlIG9mIGNvbW11bmljYXRpb24gY2hhbm5lbCBvYmplY3QgaW5kaWNhdGVzIGl0cyB2YWxpZGl0eS4KICAgICAgICAgICAgbXkgJENoYW5uZWxPYmplY3QgPSAkQ29tbXVuaWNhdGlvbkNoYW5uZWxPYmplY3QtPkNoYW5uZWxPYmplY3RHZXQoCiAgICAgICAgICAgICAgICBDaGFubmVsSUQgPT4gJEFydGljbGV7Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQ29tbXVuaWNhdGlvbkNoYW5uZWxEYXRheyAkQXJ0aWNsZXtDb21tdW5pY2F0aW9uQ2hhbm5lbElEfSB9ID0gewogICAgICAgICAgICAgICAgQ2hhbm5lbE5hbWUgICAgICAgID0+ICRDb21tdW5pY2F0aW9uQ2hhbm5lbHtDaGFubmVsTmFtZX0sCiAgICAgICAgICAgICAgICBDaGFubmVsRGlzcGxheU5hbWUgPT4gJENvbW11bmljYXRpb25DaGFubmVse0Rpc3BsYXlOYW1lfSwKICAgICAgICAgICAgICAgIENoYW5uZWxJbnZhbGlkICAgICA9PiAhJENoYW5uZWxPYmplY3QsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAlQXJ0aWNsZSA9ICggJUFydGljbGUsICV7ICRDb21tdW5pY2F0aW9uQ2hhbm5lbERhdGF7ICRBcnRpY2xle0NvbW11bmljYXRpb25DaGFubmVsSUR9IH0gfSApOwoKICAgICAgICBwdXNoIEBBcnRpY2xlQm94LCBcJUFydGljbGU7CiAgICB9CgogICAgcmV0dXJuIEBBcnRpY2xlQm94Owp9Cgo9aGVhZDIgX0FydGljbGVSZW5kZXIoKQoKUmV0dXJucyBhcnRpY2xlIGh0bWwuCgogICAgbXkgJEhUTUwgPSAkU2VsZi0+X0FydGljbGVSZW5kZXIoCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICA9PiAxMjMsICAgICAgIyAocmVxdWlyZWQpCiAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgICAgICA9PiAxMjMsICAgICAgIyAocmVxdWlyZWQpCiAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICA9PiAnU3RhdGljJywgIyAocmVxdWlyZWQpIFN0YXRpYyBvciBPbkxvYWQKICAgICAgICBTaG93QnJvd3NlckxpbmtNZXNzYWdlID0+IDEsICAgICAgICAjIChvcHRpb25hbCkKICAgICk7CgpSZXN1bHQ6CiAgICAkSFRNTCA9ICI8ZGl2Pi4uLjwvZGl2PiI7Cgo9Y3V0CgpzdWIgX0FydGljbGVSZW5kZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIENoZWNrIG5lZWRlZCBzdHVmZi4KICAgIGZvciBteSAkTmVlZGVkIChxdyhUaWNrZXRJRCBBcnRpY2xlSUQgVHlwZSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIEdldCBhcnRpY2xlIGRhdGEuCiAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkJhY2tlbmRGb3JBcnRpY2xlKCVQYXJhbSk7CgogICAgIyBEZXRlcm1pbmUgY2hhbm5lbCBuYW1lIGZvciB0aGlzIEFydGljbGUuCiAgICBteSAkQ2hhbm5lbE5hbWUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkNoYW5uZWxOYW1lR2V0KCk7CgogICAgbXkgJExvYWRlZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoCiAgICAgICAgIktlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBZ2VudDo6JENoYW5uZWxOYW1lIiwKICAgICk7CiAgICByZXR1cm4gaWYgISRMb2FkZWQ7CgogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoIktlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBZ2VudDo6JENoYW5uZWxOYW1lIiktPkFydGljbGVSZW5kZXIoCiAgICAgICAgJVBhcmFtLAogICAgICAgIEFydGljbGVBY3Rpb25zID0+ICRQYXJhbXtNZW51SXRlbXN9LAogICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7Cn0KCnN1YiBfR2V0SW5jbHVkZWRGaWVsZE9yZGVyZWQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBAUmV0dXJuOwoKICAgIElURU06CiAgICBmb3IgbXkgJEluY2x1ZGVJdGVtICggQHsgJFBhcmFte0luY2x1ZGV9IH0gKSB7CgogICAgICAgIGlmICggJEluY2x1ZGVJdGVtLT57R3JpZH0gKSB7CiAgICAgICAgICAgIGZvciBteSAkUm93ICggQHsgJEluY2x1ZGVJdGVtLT57R3JpZH17Um93c30gfSApIHsKCiAgICAgICAgICAgICAgICBDT0xVTU46CiAgICAgICAgICAgICAgICBmb3IgbXkgJERGRW50cnkgKCAkUm93LT5AKiApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IENPTFVNTiBpZiAhJERGRW50cnktPntERn07CgogICAgICAgICAgICAgICAgICAgIHB1c2ggQFJldHVybiwgJERGRW50cnktPntERn07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkSW5jbHVkZUl0ZW0tPntERn0gKSB7CiAgICAgICAgICAgIHB1c2ggQFJldHVybiwgJEluY2x1ZGVJdGVtLT57REZ9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gQFJldHVybjsKfQoKIyBSb3RoZXIgT1NTIC8gQWdlbnRUaWNrZXRGb3JtRHJhZnRSZXZpZXcKc3ViIF9HZXRVc2VyUGVybWlzc2lvbkxldmVsKCkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjY2hlY2sgaWYgdXNlciBpcyB0aGUgb3duZXIKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgaWYgKAogICAgICAgICRUaWNrZXRPYmplY3QtPk93bmVyQ2hlY2soCiAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICBPd25lcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJ293bmVyJzsKICAgIH0KCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGNoZWNrIG1vZHVsZSByZWdpc3RyeQogICAgbXkgJE1vZHVsZVJlZyA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57QWdlbnRUaWNrZXRGb3JtRHJhZnRFZGl0fTsKCiAgICAjIG5vIHBlcm1pc3Npb24gaWYgbW9kdWxlIGlzIG5vdCByZWdpc3RlcmVkCiAgICByZXR1cm4gaWYgISRNb2R1bGVSZWc7CgogICAgIyBtb2R1bGUgcGVybWlzc2lvbiBjaGVjayBmb3IgYWN0aW9uCiAgICBteSAlQWNjZXNzRmxhZzsKICAgIGlmICgKICAgICAgICByZWYgJE1vZHVsZVJlZy0+e0dyb3VwUm99IGVxICdBUlJBWScKICAgICAgICAmJiAhc2NhbGFyIEB7ICRNb2R1bGVSZWctPntHcm91cFJvfSB9CiAgICAgICAgJiYgcmVmICRNb2R1bGVSZWctPntHcm91cH0gZXEgJ0FSUkFZJwogICAgICAgICYmICFzY2FsYXIgQHsgJE1vZHVsZVJlZy0+e0dyb3VwfSB9CiAgICAgICAgKQogICAgewogICAgICAgICRBY2Nlc3NGbGFne0FjY2Vzc1JvfSA9IDE7CiAgICAgICAgJEFjY2Vzc0ZsYWd7QWNjZXNzUnd9ID0gMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIG15ICRHcm91cE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwoKICAgICAgICBQRVJNSVNTSU9OOgogICAgICAgIGZvciBteSAkUGVybWlzc2lvbiAocXcoR3JvdXBSbyBHcm91cCkpIHsKICAgICAgICAgICAgbXkgJEFjY2Vzc09rID0gMDsKICAgICAgICAgICAgbXkgJEdyb3VwICAgID0gJE1vZHVsZVJlZy0+eyRQZXJtaXNzaW9ufTsKICAgICAgICAgICAgbmV4dCBQRVJNSVNTSU9OIGlmICEkR3JvdXA7CiAgICAgICAgICAgIGlmICggcmVmICRHcm91cCBlcSAnQVJSQVknICkgewogICAgICAgICAgICAgICAgSU5ORVI6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEdyb3VwTmFtZSAoIEB7JEdyb3VwfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IElOTkVSIGlmICEkR3JvdXBOYW1lOwogICAgICAgICAgICAgICAgICAgIG5leHQgSU5ORVIgaWYgISRHcm91cE9iamVjdC0+UGVybWlzc2lvbkNoZWNrKAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICBHcm91cE5hbWUgPT4gJEdyb3VwTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICRQZXJtaXNzaW9uIGVxICdHcm91cFJvJyA/ICdybycgOiAncncnLAoKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICRBY2Nlc3NPayA9IDE7CiAgICAgICAgICAgICAgICAgICAgbGFzdCBJTk5FUjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG15ICRIYXNQZXJtaXNzaW9uID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uQ2hlY2soCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBHcm91cE5hbWUgPT4gJEdyb3VwLAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAkUGVybWlzc2lvbiBlcSAnR3JvdXBSbycgPyAncm8nIDogJ3J3JywKCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCRIYXNQZXJtaXNzaW9uKSB7CiAgICAgICAgICAgICAgICAgICAgJEFjY2Vzc09rID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRQZXJtaXNzaW9uIGVxICdHcm91cCcgJiYgJEFjY2Vzc09rICkgewogICAgICAgICAgICAgICAgJEFjY2Vzc0ZsYWd7QWNjZXNzUm99ID0gMTsKICAgICAgICAgICAgICAgICRBY2Nlc3NGbGFne0FjY2Vzc1J3fSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGVybWlzc2lvbiBlcSAnR3JvdXBSbycgJiYgJEFjY2Vzc09rICkgewogICAgICAgICAgICAgICAgJEFjY2Vzc0ZsYWd7QWNjZXNzUm99ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBtb2R1bGUgcmVxdWlyZXMgYXQgbGVhc3QgdGhlIGJhc2ljIHJvIHBlcm1pc3Npb24sIG90aGVyd2lzZSBkbyBub3QgZ3JhbnQgYWNjZXNzCiAgICAgICAgcmV0dXJuIGlmICEkQWNjZXNzRmxhZ3tBY2Nlc3NSb30gJiYgISRBY2Nlc3NGbGFne0FjY2Vzc1J3fSB8fCAhJEFjY2Vzc0ZsYWd7QWNjZXNzUm99ICYmICRBY2Nlc3NGbGFne0FjY2Vzc1J3fTsKICAgIH0KCiAgICAjIGlmIEFjY2Vzc1J3IGlzIHRydWUsIHRoZW4gY2hlY2sgYWNjZXNzIGF0IHRpY2tldCBsZXZlbAogICAgaWYgKCAkQWNjZXNzRmxhZ3tBY2Nlc3NSd30gKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gInJ3IiwKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgTG9nTm8gICAgPT4gMSwKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gInJ3IjsKICAgICAgICB9CiAgICB9CgogICAgIyBhdCB0aGlzIHBvaW50OgogICAgIyBBY2Nlc3NSdyBpcyBmYWxzZSBidXQgQWNjZXNzUm8gaXMgdHJ1ZSBvcgogICAgIyBBY2Nlc3NSdyBpcyB0cnVlIGJ1dCB0aWNrZXQgaGFzIG9ubHkgcm8gcGVybWlzc2lvbgogICAgcmV0dXJuICJybyI7Cn0KIyBFTyBBZ2VudFRpY2tldEZvcm1EcmFmdFJldmlldwoKMTsK</File>
        <File Location="Custom/Kernel/Output/HTML/Templates/Standard/AgentTicketZoom.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBkZWI5OWQ2MGRhZjIxMmFlNzNlYzdmZWI3ODA3NGYzZjdhZTU2M2Y4IC0gS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZ2VudFRpY2tldFpvb20udHQKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpUVDo6U2NyaXB0VXNhZ2UpCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBcnRpY2xlRmlsdGVyRGlhbG9nIikgJV0KPGRpdiBpZD0iQXJ0aWNsZUZpbHRlckRpYWxvZyIgY2xhc3M9IkhpZGRlbiI+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+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KIyBSb3RoZXIgT1NTIC8gQWdlbnRUaWNrZXRGb3JtRHJhZnRSZXZpZXcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBGb3JtRHJhZnQuUmVhZFdyaXRlUGVybWlzc2lvbiAlXQojIEVPIEFnZW50VGlja2V0Rm9ybURyYWZ0UmV2aWV3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iRm9ybURyYWZ0RGVsZXRlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXT9BY3Rpb249QWdlbnRUaWNrZXRab29tO1N1YmFjdGlvbj1Gb3JtRHJhZnREZWxldGU7Rm9ybURyYWZ0SUQ9WyUgRm9ybURyYWZ0LkZvcm1EcmFmdElEIHwgaHRtbCAlXTtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEICVdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXRsZT0iWyUgRm9ybURyYWZ0LlRpdGxlIHwgaHRtbCAlXSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEZvcm1EcmFmdC5MaW5rUGFyYW0gJV0+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXRyYXNoLW8iPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiMgUm90aGVyIE9TUyAvIEFnZW50VGlja2V0Rm9ybURyYWZ0UmV2aWV3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiMgRU8gQWdlbnRUaWNrZXRGb3JtRHJhZnRSZXZpZXcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+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+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVVbml0SGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlRpbWVVbml0Ij48YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIlRpbWUgVW5pdHMiKSB8IGh0bWwgJV08L2E+PC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVVbml0SGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJbJSBEYXRhLlNlbmRlclR5cGUgfCBodG1sICVdIFslIElGIERhdGEuU2VuZGVyVHlwZSA9PSAnY3VzdG9tZXInICVdSW5jb21pbmdbJSBFTFNFICVdT3V0Z29pbmdbJSBFTkQgJV0gWyUgSUYgRGF0YS5Jc1Zpc2libGVGb3JDdXN0b21lciAlXVZpc2libGVGb3JDdXN0b21lclslIEVMU0UgJV1Ob3RWaXNpYmxlRm9yQ3VzdG9tZXJbJSBFTkQgJV0gWyUgSUYgRGF0YS5BcnRpY2xlRGVsZXRlZCA9PSAiMSIgJV0gQXJ0aWNsZURlbGV0ZWQgWyUgRU5EICVdIFslIERhdGEuQ2xhc3NSb3cgfCBodG1sICVdIiBpZD0iUm93WyUgRGF0YS5BcnRpY2xlTnVtYmVyIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Ik5vIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5BcnRpY2xlTnVtYmVyIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iQXJ0aWNsZUluZm8iIG5hbWU9IkxpbmtbJSBEYXRhLkFydGljbGVOdW1iZXIgfCB1cmkgJV0iIHZhbHVlPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRab29tO1N1YmFjdGlvbj1BcnRpY2xlVXBkYXRlO0NvdW50PVslIERhdGEuQXJ0aWNsZU51bWJlciB8IHVyaSAlXTtUaWNrZXRJRD1bJSBEYXRhLlRpY2tldElEIHwgaHRtbCAlXTtBcnRpY2xlSUQ9WyUgRGF0YS5BcnRpY2xlSUQgfCBodG1sICVdOyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iQXJ0aWNsZUlEIiB2YWx1ZT0iWyUgRGF0YS5BcnRpY2xlSUQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSJbJSBEYXRhLkFydGljbGVOdW1iZXIgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSBVbnJlYWRBcnRpY2xlcyBGaXhlZCBOb25UZXh0Q29udGVudCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtSW1wb3J0YW50QXJ0aWNsZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbXBvcnRhbnRBcnRpY2xlcyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiSW1wb3J0YW50IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1pbmZvLWNpcmNsZSI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtPlslIFRyYW5zbGF0ZSgiSW1wb3J0YW50IikgfCBodG1sICVdPC9lbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1JbXBvcnRhbnRBcnRpY2xlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1OZXdBcnRpY2xlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ2xhc3MgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJVbnJlYWQgQXJ0aWNsZSEiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXN0YXIiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zdGFyIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWVJdGVtTmV3QXJ0aWNsZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtTm9OZXdBcnRpY2xlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik5vQ29udGVudCI+PC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW1Ob05ld0FydGljbGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJEaXJlY3Rpb24iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbURpcmVjdGlvbkluY29taW5nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkRpcmVjdGlvbiBJbmNvbWluZyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiSW5jb21pbmcgbWVzc2FnZSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtbG9uZy1hcnJvdy1sZWZ0Ij48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iMCIgLz4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWVJdGVtRGlyZWN0aW9uSW5jb21pbmciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbURpcmVjdGlvbk91dGdvaW5nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkRpcmVjdGlvbiBPdXRnb2luZyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiT3V0Z29pbmcgbWVzc2FnZSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtbG9uZy1hcnJvdy1yaWdodCI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJTb3J0RGF0YSIgdmFsdWU9IjEiIC8+ClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbURpcmVjdGlvbk91dGdvaW5nIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVHJlZUl0ZW1EaXJlY3Rpb25JbnRlcm5hbCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEaXJlY3Rpb24gSW50ZXJuYWwiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkludGVybmFsIG1lc3NhZ2UiKSB8IGh0bWwgJV0iPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iMiIgLz4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWVJdGVtRGlyZWN0aW9uSW50ZXJuYWwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJTZW5kZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLkFydGljbGVGaWVsZHMuU2VuZGVyLlZhbHVlIHwgaHRtbCAlXSI+PGEgaHJlZj0iIyI+WyUgRGF0YS5BcnRpY2xlRmllbGRzLlNlbmRlci5SZWFsbmFtZSB8IHRydW5jYXRlKDEwMCkgfCBodG1sICVdPC9hPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSJbJSBEYXRhLkFydGljbGVGaWVsZHMuU2VuZGVyLlZhbHVlIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2hhbm5lbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+WyUgVHJhbnNsYXRlKERhdGEuQ2hhbm5lbERpc3BsYXlOYW1lKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5DaGFubmVsSW52YWxpZCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIFRyYW5zbGF0ZSgiTWlzc2luZyBjaGFubmVsIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUgV2FybmluZyIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuVHJhbnNtaXNzaW9uU3RhdHVzICYmIERhdGEuVHJhbnNtaXNzaW9uU3RhdHVzLlN0YXR1cyA9PSAnRmFpbGVkJyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2VuZGluZyBvZiB0aGlzIG1lc3NhZ2UgaGFzIGZhaWxlZC4iKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10aW1lcyBFcnJvciIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSJbJSBUcmFuc2xhdGUoRGF0YS5DaGFubmVsRGlzcGxheU5hbWUpIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iU3ViamVjdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQXJ0aWNsZUZpZWxkcy5TdWJqZWN0LlZhbHVlIHwgaHRtbCAlXSI+PGEgaHJlZj0iIyI+WyUgRGF0YS5BcnRpY2xlRmllbGRzLlN1YmplY3QuVmFsdWUgfCB0cnVuY2F0ZSgxMDApIHwgaHRtbCAlXTwvYT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5BcnRpY2xlRmllbGRzLlN1YmplY3QuVmFsdWUgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDcmVhdGVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoJ1RpbWVTaG9ydCcpICVdIj48YSBocmVmPSIjIj5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L2E+PC9kaXY+CiMgSW5jbHVkZSBjdXN0b20gc29ydGluZyBpbmZvcm1hdGlvbjogZGF0ZSBpbiBJU08gZm9ybWF0LgojIE90aGVyIGRhdGUgZm9ybWF0cyBjYW5ub3QgYmUgc29ydGVkIHJlbGlhYmx5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBjbGFzcz0iU29ydERhdGEiIHZhbHVlPSJbJSBEYXRhLkNyZWF0ZVRpbWUgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBUcmFuc2xhdGUoIlRoZSBhcnRpY2xlIHdhcyBlZGl0ZWQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5Jc0VkaXRlZCA9PSAiMSIgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRWRpdEljb24iPjxpIGNsYXNzPSJmYSBmYS1jbG9uZSI+PC9pPjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgY2xhc3M9IlNvcnREYXRhIiB2YWx1ZT0iWyUgRGF0YS5Jc0VkaXRlZCB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJBdHRhY2htZW50cyBDZW50ZXIgQXR0YWNobWVudCBGaXhlZCBOb25UZXh0Q29udGVudCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRyZWVJdGVtQXR0YWNobWVudCIpICVdClslIFBST0NFU1MgQXJ0aWNsZUF0dGFjaG1lbnRzLnR0ICVdClslIFJlbmRlckJsb2NrRW5kKCJUcmVlSXRlbUF0dGFjaG1lbnQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUcmVlSXRlbU5vQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJOb0NvbnRlbnQiPjwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRyZWVJdGVtTm9BdHRhY2htZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU2hvd1RpbWVVbml0cyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iTm8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlRpbWVVbml0IHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZUl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhhbmRsZSB1aS1yZXNpemFibGUtaGFuZGxlIHVpLXJlc2l6YWJsZS1zIj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIlJlc2l6ZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFydGljbGVMaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVsaW5lVmlldyIpICVdCgogICAgICAgIDxkaXYgY2xhc3M9IlRpbWVsaW5lVmlld1RpY2tldEFjdGlvbnMgSGlkZGVuIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGltZWxpbmVWaWV3VGlja2V0QWN0aW9ucyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IlRpY2tldEFjdGlvbnMgQXJ0aWNsZUlEX1slIERhdGEuQXJ0aWNsZUlEIHwgaHRtbCAlXSI+ClslIFBST0NFU1MgQXJ0aWNsZUFjdGlvbk1lbnUudHQgJV0KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUaW1lbGluZVZpZXdUaWNrZXRBY3Rpb25zIikgJV0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iVGltZWxpbmVWaWV3QXJ0aWNsZUF0dGFjaG1lbnRzIEhpZGRlbiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVsaW5lVmlld0FydGljbGVBdHRhY2htZW50cyIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFydGljbGVBdHRhY2htZW50cyBBcnRpY2xlSURfWyUgRGF0YS5BcnRpY2xlSUQgfCBodG1sICVdIj4KWyUgUFJPQ0VTUyBBcnRpY2xlQXR0YWNobWVudHMudHQgJV0KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUaW1lbGluZVZpZXdBcnRpY2xlQXR0YWNobWVudHMiKSAlXQogICAgICAgIDwvZGl2PgoKICAgICAgICA8dWwgY2xhc3M9IkhpZGRlbiI+CiAgICAgICAgICAgIDxsaSBpZD0iVGVtcGxhdGVMaXN0SXRlbSI+CiAgICAgICAgICAgICAgICA8aDM+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVW5yZWFkQXJ0aWNsZXMgUmVtYXJrYWJsZSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiTWFyayB0aGlzIGFydGljbGUgYXMgcmVhZCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zdGFyIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zdGFyIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJJbXBvcnRhbnQiKSB8IGh0bWwgJV0iPjwvaT4KICAgICAgICAgICAgICAgICAgICA8ZW0+PC9lbT4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPSJUeXBlIj48L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj48c3Bhbj48L3NwYW4+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJTaG93RnVsbEFydGljbGVUZXh0IiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IEZ1bGwgVGV4dCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zZWFyY2gtcGx1cyI+PC9pPgogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvaDM+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KCiAgICAgICAgPGRpdiBpZD0iVGVtcGxhdGVBcnRpY2xlRGF0YSIgY2xhc3M9IkhpZGRlbiI+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic3ViamVjdCI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5bJSBUcmFuc2xhdGUoIlN1YmplY3QiKSB8IGh0bWwgJV06IDwvc3Ryb25nPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZnJvbSI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5bJSBUcmFuc2xhdGUoIkZyb20iKSB8IGh0bWwgJV06IDwvc3Ryb25nPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0idG8iPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+WyUgVHJhbnNsYXRlKCJUbyIpIHwgaHRtbCAlXTogPC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJjYyI+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5bJSBUcmFuc2xhdGUoIkNjIikgfCBodG1sICVdOiA8L3N0cm9uZz4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhpZGRlbiBGdWxsQXJ0aWNsZVBsYWluVGV4dCIgZGF0YS10aXRsZT0iWyUgVHJhbnNsYXRlKCJGdWxsIEFydGljbGUgVGV4dCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJUaW1lbGluZVBsYWluVGV4dCI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cCBjbGFzcz0iUGxhaW5UZXh0Ij48L3A+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhpZGRlbiBBcnRpY2xlSUZyYW1lIiBkYXRhLXRpdGxlPSJbJSBUcmFuc2xhdGUoIkZ1bGwgQXJ0aWNsZSBUZXh0IikgfCBodG1sICVdIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iVGltZWxpbmVWaWV3IFVzZUFydGljbGVDb2xvcnMiPgogICAgICAgICAgICA8dWwgY2xhc3M9Ikxpc3RMZWZ0Ij4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iTm9FdmVudHMiPlslIFRyYW5zbGF0ZSgiTm8gbW9yZSBldmVudHMgZm91bmQuIFBsZWFzZSB0cnkgY2hhbmdpbmcgdGhlIGZpbHRlciBzZXR0aW5ncy4iKSB8IGh0bWwgJV08L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8dWwgY2xhc3M9Ikxpc3RSaWdodCI+PC91bD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtc3Bpbm5lciBmYS1zcGluIj48L2k+PC9zcGFuPgogICAgICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVsaW5lVmlldyIpICVdCgogICAgPC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVHJlZSIpICVdCgpbJSBEYXRhLkFydGljbGVXaWRnZXRzSFRNTCAlXQo=</File>
        <File Location="Custom/Kernel/System/FormDraft.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSAyN2ZiNGQ0OGUyNThkZWRmN2RmYzJlMzcwMjk2NjEyZjU2Zjg4YmE5IC0gS2VybmVsL1N5c3RlbS9Gb3JtRHJhZnQucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6Rm9ybURyYWZ0OwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwp1c2UgTUlNRTo6QmFzZTY0IHF3KGRlY29kZV9iYXNlNjQgZW5jb2RlX2Jhc2U2NCk7CnVzZSBTdG9yYWJsZSAgICAgcXcoZGNsb25lKTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RW5jb2RlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTdG9yYWJsZScsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkZvcm1EcmFmdCAtIGRyYWZ0IGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgZHJhZnQgZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkRm9ybURyYWZ0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZvcm1EcmFmdCcpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnRm9ybURyYWZ0JzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9IDYwICogNjAgKiAyNCAqIDMwOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gRm9ybURyYWZ0R2V0KCkKCmdldCBkcmFmdCBhdHRyaWJ1dGVzCgogICAgbXkgJEZvcm1EcmFmdCA9ICRGb3JtRHJhZnRPYmplY3QtPkZvcm1EcmFmdEdldCgKICAgICAgICBGb3JtRHJhZnRJRCAgICA9PiAxMjMsCiAgICAgICAgR2V0Q29udGVudCA9PiAxLCAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBkZWZhdWx0IDEKIyBSb3RoZXIgT1NTIC8gQWdlbnRUaWNrZXRGb3JtRHJhZnRSZXZpZXcKICAgICAgICBPYmplY3RJRCAgID0+IDEyMywgICAgICAgICAgICAgICMgdGhvdWdoIGl0IGlzIGEgc2VjdXJpdHkgY3JpdGljYWwgcG9pbnQsIGl0IHJlbWFpbnMgb3B0aW9uYWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLCAgICAgICAgICMgdGhvdWdoIGl0IGlzIGEgc2VjdXJpdHkgY3JpdGljYWwgcG9pbnQsIGl0IHJlbWFpbnMgb3B0aW9uYWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKIyBFTyBBZ2VudFRpY2tldEZvcm1EcmFmdFJldmlldwogICAgICAgIFVzZXJJRCAgICAgPT4gMTIzLAogICAgKTsKClJldHVybnMgKHdpdGggR2V0Q29udGVudCA9IDApOgoKICAgICRGb3JtRHJhZnQgPSB7CiAgICAgICAgRm9ybURyYWZ0SUQgICAgPT4gMTIzLAogICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgT2JqZWN0SUQgICA9PiAxMiwKICAgICAgICBBY3Rpb24gICAgID0+ICdBZ2VudFRpY2tldENvbXBvc2UnLAogICAgICAgIENyZWF0ZVRpbWUgPT4gJzIwMTYtMDQtMDcgMTU6NDE6MTUnLAogICAgICAgIENyZWF0ZUJ5ICAgPT4gMSwKICAgICAgICBDaGFuZ2VUaW1lID0+ICcyMDE2LTA0LTA3IDE1OjU5OjQ1JywKICAgICAgICBDaGFuZ2VCeSAgID0+IDIsCiAgICB9OwoKUmV0dXJucyAod2l0aG91dCBHZXRDb250ZW50IG9yIEdldENvbnRlbnQgPSAxKToKCiAgICAkRm9ybURyYWZ0ID0gewogICAgICAgIEZvcm1EYXRhID0+IHsKICAgICAgICAgICAgSW5mb3JtVXNlcklEID0+IFsgMTIzLCAxMjQsIF0sCiAgICAgICAgICAgIFN1YmplY3QgICAgICA9PiAnUmVxdWVzdCBmb3IgaW5mb3JtYXRpb24nLAogICAgICAgICAgICAuLi4KICAgICAgICB9LAogICAgICAgIEZpbGVEYXRhID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ0NvbnRlbnQnICAgICA9PiAnRGVhciBjdXN0b21lclxuXG50aGFuayB5b3UhJywKICAgICAgICAgICAgICAgICdDb250ZW50VHlwZScgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgJ0NvbnRlbnRJRCcgICA9PiB1bmRlZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCiAgICAgICAgICAgICAgICAnRmlsZW5hbWUnICAgID0+ICd0aGFua3lvdS50eHQnLAogICAgICAgICAgICAgICAgJ0ZpbGVzaXplJyAgICA9PiAyNSwKICAgICAgICAgICAgICAgICdGaWxlSUQnICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICdEaXNwb3NpdGlvbicgPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICAuLi4KICAgICAgICBdLAogICAgICAgIEZvcm1EcmFmdElEICAgID0+IDEyMywKICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgIE9iamVjdElEICAgPT4gMTIsCiAgICAgICAgQWN0aW9uICAgICA9PiAnQWdlbnRUaWNrZXRDb21wb3NlJywKICAgICAgICBDcmVhdGVUaW1lID0+ICcyMDE2LTA0LTA3IDE1OjQxOjE1JywKICAgICAgICBDcmVhdGVCeSAgID0+IDEsCiAgICAgICAgQ2hhbmdlVGltZSA9PiAnMjAxNi0wNC0wNyAxNTo1OTo0NScsCiAgICAgICAgQ2hhbmdlQnkgICA9PiAyLAogICAgICAgIFRpdGxlICAgICAgPT4gJ215IGRyYWZ0JywKICAgIH07Cgo9Y3V0CgpzdWIgRm9ybURyYWZ0R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhGb3JtRHJhZnRJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGdldCBjb250ZW50CiAgICAkUGFyYW17R2V0Q29udGVudH0gLy89IDE7CiAgICBpZiAoICRQYXJhbXtHZXRDb250ZW50fSAhfiBteyBcQSBbMDFdIFx6IH14bXMgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbnZhbGlkIHZhbHVlICckUGFyYW17R2V0Q29udGVudH0nIGZvciBHZXRDb250ZW50ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0Zvcm1EcmFmdEdldDo6R2V0Q29udGVudCcgLiAkUGFyYW17R2V0Q29udGVudH0gLiAnOjpJRCcgLiAkUGFyYW17Rm9ybURyYWZ0SUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgcHJlcGFyZSBxdWVyeQogICAgbXkgJFNRTCA9CiAgICAgICAgJ1NFTEVDVCBpZCwgb2JqZWN0X3R5cGUsIG9iamVjdF9pZCwgYWN0aW9uLCB0aXRsZSwnCiAgICAgICAgLiAnIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnknOwoKICAgIG15IEBFbmNvZGVDb2x1bW5zID0gKCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxICk7CiAgICBpZiAoICRQYXJhbXtHZXRDb250ZW50fSApIHsKICAgICAgICAkU1FMIC49ICcsIGNvbnRlbnQnOwogICAgICAgIHB1c2ggQEVuY29kZUNvbHVtbnMsIDA7CiAgICB9CiAgICAkU1FMIC49ICcgRlJPTSBmb3JtX2RyYWZ0IFdIRVJFIGlkID0gPyc7CgogICAgIyBhc2sgdGhlIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICAgPT4gJFNRTCwKICAgICAgICBCaW5kICAgPT4gWyBcJFBhcmFte0Zvcm1EcmFmdElEfSBdLAogICAgICAgIExpbWl0ICA9PiAxLAogICAgICAgIEVuY29kZSA9PiBcQEVuY29kZUNvbHVtbnMsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJUZvcm1EcmFmdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICVGb3JtRHJhZnQgPSAoCiAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRSb3dbMF0sCiAgICAgICAgICAgIE9iamVjdFR5cGUgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIE9iamVjdElEICAgID0+ICRSb3dbMl0sCiAgICAgICAgICAgIEFjdGlvbiAgICAgID0+ICRSb3dbM10sCiAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRSb3dbNF0gfHwgJycsCiAgICAgICAgICAgIENyZWF0ZVRpbWUgID0+ICRSb3dbNV0sCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgID0+ICRSb3dbNl0sCiAgICAgICAgICAgIENoYW5nZVRpbWUgID0+ICRSb3dbN10sCiAgICAgICAgICAgIENoYW5nZUJ5ICAgID0+ICRSb3dbOF0sCiAgICAgICAgKTsKCiMgUm90aGVyIE9TUyAvIEFnZW50VGlja2V0Rm9ybURyYWZ0UmV2aWV3CiAgICAgICAgIyBpZiBubyAkUGFyYW17T2JqZWN0VHlwZX0gaXMgcHJvdmlkZWQsIHRoZXJlIGlzIG5vIHZhbGlkYXRpb24KICAgICAgICAjIHRoaXMgdmFsaWRhdGlvbiBpcyBpbXBvcnRhbnQgYnV0IGlzIGtlcHQgb3B0aW9uYWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAgICBpZiAoICRQYXJhbXtPYmplY3RUeXBlfSAmJiAkRm9ybURyYWZ0e09iamVjdFR5cGV9IG5lICRQYXJhbXtPYmplY3RUeXBlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBkcmFmdCAkUGFyYW17Rm9ybURyYWZ0SUR9IGlzIG5vdCBvZiB0aGUgdHlwZSAkUGFyYW17T2JqZWN0VHlwZX0hIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBpZiBubyAkUGFyYW17T2JqZWN0SUR9IGlzIHByb3ZpZGVkLCB0aGVyZSBpcyBubyB2YWxpZGF0aW9uCiAgICAgICAgIyB0aGlzIHZhbGlkYXRpb24gaXMgaW1wb3J0YW50IGJ1dCBpcyBrZXB0IG9wdGlvbmFsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAgICAgICAgaWYgKCAkUGFyYW17T2JqZWN0SUR9ICYmICRGb3JtRHJhZnR7T2JqZWN0SUR9ICE9ICRQYXJhbXtPYmplY3RJRH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgZHJhZnQgJFBhcmFte0Zvcm1EcmFmdElEfSBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlICRQYXJhbXtPYmplY3RUeXBlfSAkUGFyYW17T2JqZWN0SUR9ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiMgRU8gQWdlbnRUaWNrZXRGb3JtRHJhZnRSZXZpZXcKICAgICAgICBpZiAoICRQYXJhbXtHZXRDb250ZW50fSApIHsKCiAgICAgICAgICAgIG15ICRSYXdDb250ZW50ICAgICAgPSAkUm93WzldIC8vIHt9OwogICAgICAgICAgICBteSAkU3RvcmFibGVDb250ZW50ID0gJFJhd0NvbnRlbnQ7CgogICAgICAgICAgICBpZiAoICEkREJPYmplY3QtPkdldERhdGFiYXNlRnVuY3Rpb24oJ0RpcmVjdEJsb2InKSApIHsKICAgICAgICAgICAgICAgICRTdG9yYWJsZUNvbnRlbnQgPSBkZWNvZGVfYmFzZTY0KCRSYXdDb250ZW50KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjb252ZXJ0IGZvcm0gYW5kIGZpbGUgZGF0YSBmcm9tIHlhbWwKICAgICAgICAgICAgbXkgJENvbnRlbnQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RvcmFibGUnKS0+RGVzZXJpYWxpemUoIERhdGEgPT4gJFN0b3JhYmxlQ29udGVudCApIC8vIHt9OwoKICAgICAgICAgICAgJEZvcm1EcmFmdHtGb3JtRGF0YX0gPSAkQ29udGVudC0+e0Zvcm1EYXRhfTsKICAgICAgICAgICAgJEZvcm1EcmFmdHtGaWxlRGF0YX0gPSAkQ29udGVudC0+e0ZpbGVEYXRhfTsKICAgICAgICB9CiAgICB9CgogICAgIyBubyBkYXRhIGZvdW5kCiAgICBpZiAoICElRm9ybURyYWZ0ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRm9ybURyYWZ0IHdpdGggSUQgJyRQYXJhbXtGb3JtRHJhZnRJRH0nIG5vdCBmb3VuZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYWx3YXlzIGNhY2hlIHZlcnNpb24gd2l0aG91dCBjb250ZW50CiAgICBteSAkQ2FjaGVLZXlOb0NvbnRlbnQ7CiAgICBteSAlRm9ybURyYWZ0Tm9Db250ZW50OwogICAgaWYgKCAkUGFyYW17R2V0Q29udGVudH0gKSB7CiAgICAgICAgJENhY2hlS2V5Tm9Db250ZW50ICA9ICdGb3JtRHJhZnRHZXQ6OkdldENvbnRlbnQwOjpJRCcgLiAkUGFyYW17Rm9ybURyYWZ0SUR9OwogICAgICAgICVGb3JtRHJhZnROb0NvbnRlbnQgPSAleyBkY2xvbmUoIFwlRm9ybURyYWZ0ICkgfTsKICAgICAgICBkZWxldGUgJEZvcm1EcmFmdE5vQ29udGVudHtGaWxlRGF0YX07CiAgICAgICAgZGVsZXRlICRGb3JtRHJhZnROb0NvbnRlbnR7Rm9ybURhdGF9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJENhY2hlS2V5Tm9Db250ZW50ICA9ICRDYWNoZUtleTsKICAgICAgICAlRm9ybURyYWZ0Tm9Db250ZW50ID0gJUZvcm1EcmFmdDsKICAgIH0KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleU5vQ29udGVudCwKICAgICAgICBWYWx1ZSA9PiBcJUZvcm1EcmFmdE5vQ29udGVudCwKICAgICk7CgogICAgcmV0dXJuIFwlRm9ybURyYWZ0IGlmICEkUGFyYW17R2V0Q29udGVudH07CgogICAgIyBzZXQgY2FjaGUgd2l0aCBjb250ZW50IChzaG9ydGVyIGNhY2hlIHRpbWUgZHVlIHRvIHBvdGVudGlhbGx5IGxhcmdlIGNvbnRlbnQpCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiA2MCAqIDYwLAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcJUZvcm1EcmFmdCwKICAgICk7CgogICAgcmV0dXJuIFwlRm9ybURyYWZ0Owp9Cgo9aXRlbSBGb3JtRHJhZnRBZGQoKQoKYWRkIGEgbmV3IGRyYWZ0CgogICAgbXkgJFN1Y2Nlc3MgPSAkRm9ybURyYWZ0T2JqZWN0LT5Gb3JtRHJhZnRBZGQoCiAgICAgICAgRm9ybURhdGEgPT4gewogICAgICAgICAgICBJbmZvcm1Vc2VySUQgPT4gWyAxMjMsIDEyNCwgXSwKICAgICAgICAgICAgU3ViamVjdCAgICAgID0+ICdSZXF1ZXN0IGZvciBpbmZvcm1hdGlvbicsCiAgICAgICAgICAgIC4uLgogICAgICAgIH0sCiAgICAgICAgRmlsZURhdGEgPT4gWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICdDb250ZW50JyAgICAgPT4gJ0RlYXIgY3VzdG9tZXJcblxudGhhbmsgeW91IScsCiAgICAgICAgICAgICAgICAnQ29udGVudFR5cGUnID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICdDb250ZW50SUQnICAgPT4gdW5kZWYsICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKICAgICAgICAgICAgICAgICdGaWxlbmFtZScgICAgPT4gJ3RoYW5reW91LnR4dCcsCiAgICAgICAgICAgICAgICAnRmlsZXNpemUnICAgID0+IDI1LAogICAgICAgICAgICAgICAgJ0ZpbGVJRCcgICAgICA9PiAxLAogICAgICAgICAgICAgICAgJ0Rpc3Bvc2l0aW9uJyA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIC4uLgogICAgICAgIF0sCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICBPYmplY3RJRCAgID0+IDEyLAogICAgICAgIEFjdGlvbiAgICAgPT4gJ0FnZW50VGlja2V0Q29tcG9zZScsCiAgICAgICAgVGl0bGUgICAgICA9PiAnbXkgZHJhZnQnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCiAgICAgICAgVXNlcklEICAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIEZvcm1EcmFmdEFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRm9ybURhdGEgT2JqZWN0VHlwZSBBY3Rpb24pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBmb3IgbXkgJE5lZWRlZCAocXcoT2JqZWN0SUQgVXNlcklEKSkgewogICAgICAgIGlmICggIUlzSW50ZWdlciggJFBhcmFteyROZWVkZWR9ICkgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIHNlcmlhbGl6ZSBmb3JtIGFuZCBmaWxlIGRhdGEKICAgIG15ICRTdG9yYWJsZUNvbnRlbnQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RvcmFibGUnKS0+U2VyaWFsaXplKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBGb3JtRGF0YSA9PiAkUGFyYW17Rm9ybURhdGF9LAogICAgICAgICAgICBGaWxlRGF0YSA9PiAkUGFyYW17RmlsZURhdGF9IHx8IFtdLAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICRDb250ZW50ID0gJFN0b3JhYmxlQ29udGVudDsKICAgIG15ICVFeHRyYURvUGFyYW1zOwogICAgaWYgKCAkREJPYmplY3QtPkdldERhdGFiYXNlRnVuY3Rpb24oJ0RpcmVjdEJsb2InKSApIHsKCiAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgY29udGVudCBpcyBwYXNzZWQgYXMgYSBieXRlIGFycmF5IGFuZCBpcyBib3VuZCBhcyBiaW5hcnkKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RW5jb2RlJyktPkVuY29kZU91dHB1dCgkU3RvcmFibGVDb250ZW50KTsKICAgICAgICAkRXh0cmFEb1BhcmFtc3tCaW5kQXNCaW5hcnl9ID0gWyAwLCAwLCAwLCAwLCAxLCAwLCAwLCBdOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJENvbnRlbnQgPSBlbmNvZGVfYmFzZTY0KCRTdG9yYWJsZUNvbnRlbnQpOwogICAgfQoKICAgICMgYWRkIHRvIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+CiAgICAgICAgICAgICdJTlNFUlQgSU5UTyBmb3JtX2RyYWZ0JwogICAgICAgICAgICAuICcgKG9iamVjdF90eXBlLCBvYmplY3RfaWQsIGFjdGlvbiwgdGl0bGUsIGNvbnRlbnQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpJwogICAgICAgICAgICAuICcgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtPYmplY3RUeXBlfSwgXCRQYXJhbXtPYmplY3RJRH0sIFwkUGFyYW17QWN0aW9ufSwgXCRQYXJhbXtUaXRsZX0sIFwkQ29udGVudCwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgIF0sCiAgICAgICAgJUV4dHJhRG9QYXJhbXMsCiAgICApOwoKICAgICMgZGVsZXRlIGFmZmVjdGVkIGNhY2hlcwogICAgJFNlbGYtPl9EZWxldGVBZmZlY3RlZENhY2hlcyglUGFyYW0pOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBGb3JtRHJhZnRVcGRhdGUoKQoKdXBkYXRlIGFuIGV4aXN0aW5nIGRyYWZ0CgogICAgbXkgJFN1Y2Nlc3MgPSAkRm9ybURyYWZ0T2JqZWN0LT5Gb3JtRHJhZnRVcGRhdGUoCiAgICAgICAgRm9ybURhdGEgPT4gewogICAgICAgICAgICBJbmZvcm1Vc2VySUQgPT4gWyAxMjMsIDEyNCwgXSwKICAgICAgICAgICAgU3ViamVjdCAgICAgID0+ICdSZXF1ZXN0IGZvciBpbmZvcm1hdGlvbicsCiAgICAgICAgICAgIC4uLgogICAgICAgIH0sCiAgICAgICAgRmlsZURhdGEgPT4gWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICdDb250ZW50JyAgICAgPT4gJ0RlYXIgY3VzdG9tZXJcblxudGhhbmsgeW91IScsCiAgICAgICAgICAgICAgICAnQ29udGVudFR5cGUnID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICdDb250ZW50SUQnICAgPT4gdW5kZWYsICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwKICAgICAgICAgICAgICAgICdGaWxlbmFtZScgICAgPT4gJ3RoYW5reW91LnR4dCcsCiAgICAgICAgICAgICAgICAnRmlsZXNpemUnICAgID0+IDI1LAogICAgICAgICAgICAgICAgJ0ZpbGVJRCcgICAgICA9PiAxLAogICAgICAgICAgICAgICAgJ0Rpc3Bvc2l0aW9uJyA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIC4uLgogICAgICAgIF0sCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gJ1RpY2tldCcsCiAgICAgICAgT2JqZWN0SUQgICAgPT4gMTIsCiAgICAgICAgQWN0aW9uICAgICAgPT4gJ0FnZW50VGlja2V0Q29tcG9zZScsCiAgICAgICAgVGl0bGUgICAgICAgPT4gJ215IGRyYWZ0JywKICAgICAgICBGb3JtRHJhZnRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgRm9ybURyYWZ0VXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhGb3JtRGF0YSBPYmplY3RUeXBlIEFjdGlvbikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGZvciBteSAkTmVlZGVkIChxdyhPYmplY3RJRCBGb3JtRHJhZnRJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhSXNJbnRlZ2VyKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgc3BlY2lmaWVkIGRyYWZ0IGFscmVhZHkgZXhpc3RzIGFuZCBkbyBzYW5pdHkgY2hlY2tzCiAgICBteSAkRm9ybURyYWZ0ID0gJFNlbGYtPkZvcm1EcmFmdEdldCgKICAgICAgICBGb3JtRHJhZnRJRCA9PiAkUGFyYW17Rm9ybURyYWZ0SUR9LAogICAgICAgIEdldENvbnRlbnQgID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAhJEZvcm1EcmFmdCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZvcm1EcmFmdCB3aXRoIElEICckUGFyYW17Rm9ybURyYWZ0SUR9JyBub3QgZm91bmQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIFZBTElEQVRFUEFSQU06CiAgICBmb3IgbXkgJFZhbGlkYXRlUGFyYW0gKHF3KE9iamVjdFR5cGUgT2JqZWN0SUQgQWN0aW9uKSkgewogICAgICAgIG5leHQgVkFMSURBVEVQQVJBTSBpZiAkUGFyYW17JFZhbGlkYXRlUGFyYW19IGVxICRGb3JtRHJhZnQtPnskVmFsaWRhdGVQYXJhbX07CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PgogICAgICAgICAgICAgICAgIlBhcmFtICckVmFsaWRhdGVQYXJhbScgZm9yIGRyYWZ0IHdpdGggSUQgJyRQYXJhbXtGb3JtRHJhZnRJRH0nIgogICAgICAgICAgICAgICAgLiAiIG11c3Qgbm90IGJlIGNoYW5nZWQgb24gdXBkYXRlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBzZXJpYWxpemUgZm9ybSBhbmQgZmlsZSBkYXRhCiAgICBteSAkU3RvcmFibGVDb250ZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJyktPlNlcmlhbGl6ZSgKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgRm9ybURhdGEgPT4gJFBhcmFte0Zvcm1EYXRhfSwKICAgICAgICAgICAgRmlsZURhdGEgPT4gJFBhcmFte0ZpbGVEYXRhfSB8fCBbXSwKICAgICAgICB9LAogICAgKTsKCiAgICBteSAkQ29udGVudCA9ICRTdG9yYWJsZUNvbnRlbnQ7CiAgICBteSAlRXh0cmFEb1BhcmFtczsKICAgIGlmICggJERCT2JqZWN0LT5HZXREYXRhYmFzZUZ1bmN0aW9uKCdEaXJlY3RCbG9iJykgKSB7CgogICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIGNvbnRlbnQgaXMgcGFzc2VkIGFzIGEgYnl0ZSBhcnJheSBhbmQgaXMgYm91bmQgYXMgYmluYXJ5CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkVuY29kZScpLT5FbmNvZGVPdXRwdXQoJFN0b3JhYmxlQ29udGVudCk7CiAgICAgICAgJEV4dHJhRG9QYXJhbXN7QmluZEFzQmluYXJ5fSA9IFsgMCwgMSwgMCwgMCBdOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJENvbnRlbnQgPSBlbmNvZGVfYmFzZTY0KCRTdG9yYWJsZUNvbnRlbnQpOwogICAgfQoKICAgICMgYWRkIHRvIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMID0+CiAgICAgICAgICAgICdVUERBVEUgZm9ybV9kcmFmdCcKICAgICAgICAgICAgLiAnIFNFVCB0aXRsZSA9ID8sIGNvbnRlbnQgPSA/LCBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/JwogICAgICAgICAgICAuICcgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUaXRsZX0sIFwkQ29udGVudCwgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte0Zvcm1EcmFmdElEfSwgXSwKICAgICAgICAlRXh0cmFEb1BhcmFtcywKICAgICk7CgogICAgIyBkZWxldGUgYWZmZWN0ZWQgY2FjaGVzCiAgICAkU2VsZi0+X0RlbGV0ZUFmZmVjdGVkQ2FjaGVzKCVQYXJhbSk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEZvcm1EcmFmdERlbGV0ZSgpCgpyZW1vdmUgZHJhZnQKCiAgICBteSAkU3VjY2VzcyA9ICRGb3JtRHJhZnRPYmplY3QtPkZvcm1EcmFmdERlbGV0ZSgKICAgICAgICBGb3JtRHJhZnRJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIEZvcm1EcmFmdERlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRm9ybURyYWZ0SUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGRyYWZ0IGRhdGEgYXMgc2FuaXR5IGNoZWNrIGFuZCB0byBkZXRlcm1pbmUgd2hpY2ggY2FjaGVzIHNob3VsZCBiZSByZW1vdmVkCiAgICAjIHVzZSBkYXRhYmFzZSBxdWVyeSBkaXJlY3RseSAod2UgZG9uJ3QgbmVlZCByYXcgY29udGVudCkKICAgIG15ICRGb3JtRHJhZnQgPSAkU2VsZi0+Rm9ybURyYWZ0R2V0KAogICAgICAgIEZvcm1EcmFmdElEID0+ICRQYXJhbXtGb3JtRHJhZnRJRH0sCiAgICAgICAgR2V0Q29udGVudCAgPT4gMCwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CiAgICBpZiAoICEkRm9ybURyYWZ0ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRm9ybURyYWZ0IHdpdGggSUQgJyRQYXJhbXtGb3JtRHJhZnRJRH0nIG5vdCBmb3VuZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcmVtb3ZlIGZyb20gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGZvcm1fZHJhZnQgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtGb3JtRHJhZnRJRH0gXSwKICAgICk7CgogICAgIyBkZWxldGUgYWZmZWN0ZWQgY2FjaGVzCiAgICAkU2VsZi0+X0RlbGV0ZUFmZmVjdGVkQ2FjaGVzKCAleyRGb3JtRHJhZnR9ICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEZvcm1EcmFmdExpc3RHZXQoKQoKZ2V0IGxpc3Qgb2YgZHJhZnRzLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IG9iamVjdCB0eXBlLCBvYmplY3QgaWQgYW5kIGFjdGlvbgoKICAgIG15ICRGb3JtRHJhZnRMaXN0ID0gJEZvcm1EcmFmdE9iamVjdC0+Rm9ybURyYWZ0TGlzdEdldCgKICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLCAgICAgICAgICAgICAjIG9wdGlvbmFsCiAgICAgICAgT2JqZWN0SUQgICA9PiAxMjMsICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbAogICAgICAgIEFjdGlvbiAgICAgPT4gJ0FnZW50VGlja2V0Q29tcG9zZScsICMgb3B0aW9uYWwKICAgICAgICBVc2VySUQgICAgID0+IDEyMywKICAgICk7CgpSZXR1cm5zOgoKICAgICRGb3JtRHJhZnRMaXN0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgRm9ybURyYWZ0SUQgPT4gMTIzLAogICAgICAgICAgICBPYmplY3RUeXBlICA9PiAnVGlja2V0JywKICAgICAgICAgICAgT2JqZWN0SUQgICAgPT4gMTIsCiAgICAgICAgICAgIEFjdGlvbiAgICAgID0+ICdBZ2VudFRpY2tldENvbXBvc2UnLAogICAgICAgICAgICBUaXRsZSAgICAgICA9PiAnbXkgZHJhZnQnLAogICAgICAgICAgICBDcmVhdGVUaW1lICA9PiAnMjAxNi0wNC0wNyAxNTo0MToxNScsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZVRpbWUgID0+ICcyMDE2LTA0LTA3IDE1OjU5OjQ1JywKICAgICAgICAgICAgQ2hhbmdlQnkgICAgPT4gMiwKICAgICAgICB9LAogICAgICAgIC4uLgogICAgXTsKCj1jdXQKCnN1YiBGb3JtRHJhZnRMaXN0R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnRm9ybURyYWZ0TGlzdEdldCc7CiAgICBSRVNUUklDVElPTjoKICAgIGZvciBteSAkUmVzdHJpY3Rpb24gKHF3KE9iamVjdFR5cGUgQWN0aW9uIE9iamVjdElEKSkgewogICAgICAgIG5leHQgUkVTVFJJQ1RJT04gaWYgIUlzU3RyaW5nV2l0aERhdGEoICRQYXJhbXskUmVzdHJpY3Rpb259ICk7CiAgICAgICAgJENhY2hlS2V5IC49ICc6OicgLiAkUmVzdHJpY3Rpb24gLiAkUGFyYW17JFJlc3RyaWN0aW9ufTsKICAgIH0KICAgIG15ICRDYWNoZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDYWNoZSBpZiAkQ2FjaGU7CgogICAgIyBwcmVwYXJlIGRhdGFiYXNlIHJlc3RyaWN0aW9ucyBieSBnaXZlbiBwYXJhbWV0ZXJzCiAgICBteSAlUGFyYW1Ub0ZpZWxkID0gKAogICAgICAgIE9iamVjdFR5cGUgPT4gJ29iamVjdF90eXBlJywKICAgICAgICBBY3Rpb24gICAgID0+ICdhY3Rpb24nLAogICAgICAgIE9iamVjdElEICAgPT4gJ29iamVjdF9pZCcsCiAgICApOwogICAgbXkgJFNRTEV4dCA9ICcnOwogICAgbXkgQEJpbmQ7CiAgICBSRVNUUklDVElPTjoKICAgIGZvciBteSAkUmVzdHJpY3Rpb24gKHF3KE9iamVjdFR5cGUgQWN0aW9uIE9iamVjdElEKSkgewogICAgICAgIG5leHQgUkVTVFJJQ1RJT04gaWYgIUlzU3RyaW5nV2l0aERhdGEoICRQYXJhbXskUmVzdHJpY3Rpb259ICk7CiAgICAgICAgJFNRTEV4dCAuPSAkU1FMRXh0ID8gJyBBTkQgJyA6ICcgV0hFUkUgJzsKICAgICAgICAkU1FMRXh0IC49ICRQYXJhbVRvRmllbGR7JFJlc3RyaWN0aW9ufSAuICcgPSA/JzsKICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFteyRSZXN0cmljdGlvbn07CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGFzayB0aGUgZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PgogICAgICAgICAgICAnU0VMRUNUIGlkLCBvYmplY3RfdHlwZSwgb2JqZWN0X2lkLCBhY3Rpb24sIHRpdGxlLCcKICAgICAgICAgICAgLiAnIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnknCiAgICAgICAgICAgIC4gJyBGUk9NIGZvcm1fZHJhZnQnIC4gJFNRTEV4dAogICAgICAgICAgICAuICcgT1JERVIgQlkgaWQgQVNDJywKICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0cwogICAgbXkgQEZvcm1EcmFmdHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBGb3JtRHJhZnRzLCB7CiAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRSb3dbMF0sCiAgICAgICAgICAgIE9iamVjdFR5cGUgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIE9iamVjdElEICAgID0+ICRSb3dbMl0sCiAgICAgICAgICAgIEFjdGlvbiAgICAgID0+ICRSb3dbM10sCiAgICAgICAgICAgIFRpdGxlICAgICAgID0+ICRSb3dbNF0gfHwgJycsCiAgICAgICAgICAgIENyZWF0ZVRpbWUgID0+ICRSb3dbNV0sCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgID0+ICRSb3dbNl0sCiAgICAgICAgICAgIENoYW5nZVRpbWUgID0+ICRSb3dbN10sCiAgICAgICAgICAgIENoYW5nZUJ5ICAgID0+ICRSb3dbOF0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFxARm9ybURyYWZ0cywKICAgICk7CgogICAgcmV0dXJuIFxARm9ybURyYWZ0czsKfQoKPWl0ZW0gX0RlbGV0ZUFmZmVjdGVkQ2FjaGVzKCkKCnJlbW92ZSBhbGwgcG90ZW50aWFsbHkgYWZmZWN0ZWQgY2FjaGVzCgogICAgbXkgJFN1Y2Nlc3MgPSAkRm9ybURyYWZ0T2JqZWN0LT5fRGVsZXRlQWZmZWN0ZWRDYWNoZXMoCiAgICAgICAgRm9ybURyYWZ0SUQgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbAogICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgT2JqZWN0SUQgICA9PiAxMiwKICAgICAgICBBY3Rpb24gICAgID0+ICdBZ2VudFRpY2tldENvbXBvc2UnLAogICAgKTsKCj1jdXQKCnN1YiBfRGVsZXRlQWZmZWN0ZWRDYWNoZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHByZXBhcmUgYWZmZWN0ZWQgY2FjaGUga2V5cwogICAgbXkgQENhY2hlS2V5cyA9ICgKICAgICAgICAnRm9ybURyYWZ0TGlzdEdldCcsCiAgICAgICAgJ0Zvcm1EcmFmdExpc3RHZXQ6Ok9iamVjdFR5cGUnIC4gJFBhcmFte09iamVjdFR5cGV9LAogICAgICAgICdGb3JtRHJhZnRMaXN0R2V0OjpBY3Rpb24nIC4gJFBhcmFte0FjdGlvbn0sCiAgICAgICAgJ0Zvcm1EcmFmdExpc3RHZXQ6Ok9iamVjdElEJyAuICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgJ0Zvcm1EcmFmdExpc3RHZXQ6Ok9iamVjdFR5cGUnIC4gJFBhcmFte09iamVjdFR5cGV9CiAgICAgICAgICAgIC4gJzo6QWN0aW9uJyAuICRQYXJhbXtBY3Rpb259LAogICAgICAgICdGb3JtRHJhZnRMaXN0R2V0OjpPYmplY3RUeXBlJyAuICRQYXJhbXtPYmplY3RUeXBlfQogICAgICAgICAgICAuICc6Ok9iamVjdElEJyAuICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgJ0Zvcm1EcmFmdExpc3RHZXQ6OkFjdGlvbicgLiAkUGFyYW17QWN0aW9ufQogICAgICAgICAgICAuICc6Ok9iamVjdElEJyAuICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgJ0Zvcm1EcmFmdExpc3RHZXQ6Ok9iamVjdFR5cGUnIC4gJFBhcmFte09iamVjdFR5cGV9CiAgICAgICAgICAgIC4gJzo6QWN0aW9uJyAuICRQYXJhbXtBY3Rpb259CiAgICAgICAgICAgIC4gJzo6T2JqZWN0SUQnIC4gJFBhcmFte09iamVjdElEfSwKICAgICk7CiAgICBpZiAoICRQYXJhbXtGb3JtRHJhZnRJRH0gKSB7CiAgICAgICAgcHVzaCBAQ2FjaGVLZXlzLAogICAgICAgICAgICAnRm9ybURyYWZ0R2V0OjpHZXRDb250ZW50MDo6SUQnIC4gJFBhcmFte0Zvcm1EcmFmdElEfSwKICAgICAgICAgICAgJ0Zvcm1EcmFmdEdldDo6R2V0Q29udGVudDE6OklEJyAuICRQYXJhbXtGb3JtRHJhZnRJRH07CiAgICB9CgogICAgIyBkZWxldGUgYWZmZWN0ZWQgY2FjaGVzCiAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKICAgIGZvciBteSAkQ2FjaGVLZXkgKEBDYWNoZUtleXMpIHsKICAgICAgICAkQ2FjaGVPYmplY3QtPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1iYWNrCgo9Y3V0CgoxOwo=</File>
        <File Location="Kernel/Config/Files/XML/AgentTicketFormDraftEdit.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFRpY2tldEZvcm1EcmFmdEVkaXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+VGlja2V0IENvbXBvc2UgZW1haWwgQW5zd2VyLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPkRyYWZ0IEVkaXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50VGlja2V0Rm9ybURyYWZ0RWRpdCMjIzAwMi1UaWNrZXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5UaWNrZXRGb3JtRHJhZnQuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEZvcm1EcmFmdEVkaXQjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgZHJhZnQgZWRpdCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0Q29tcG9zZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiIFRyYW5zbGF0YWJsZT0iMSI+cm88L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Rm9ybURyYWZ0RWRpdCMjI1JpY2hUZXh0V2lkdGgiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgd2lkdGggZm9yIHRoZSByaWNoIHRleHQgZWRpdG9yIGNvbXBvbmVudCBmb3IgdGhpcyBzY3JlZW4uIEVudGVyIG51bWJlciAocGl4ZWxzKSBvciBwZXJjZW50IHZhbHVlIChyZWxhdGl2ZSkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldENvbXBvc2U8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iXlxkKyU/JCI+NjIwPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldEZvcm1EcmFmdEVkaXQjIyNSaWNoVGV4dEhlaWdodCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBpbml0aWFsIGhlaWdodCBpbiBwaXhlbHMgZm9yIHRoZSByaWNoIHRleHQgZWRpdG9yIGNvbXBvbmVudCBmb3IgdGhpcyBzY3JlZW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldENvbXBvc2U8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iXlxkKyhcLlxkKyk/JCI+MzIwPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgo=</File>
        <File Location="Kernel/Modules/AgentTicketFormDraftEdit.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRUaWNrZXRGb3JtRHJhZnRFZGl0OwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlICAgICAgICAgICAgICBxdyhUcmFuc2xhdGFibGUpOwp1c2UgTWFpbDo6QWRkcmVzcyAgICAgICAgICAgICAgICAgKCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IGJsZXNzIHslUGFyYW19LCAkVHlwZTsKCiAgICAjIGdldCBmb3JtIGlkCiAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpGb3JtQ2FjaGUnKS0+UHJlcGFyZUZvcm1JRCgKICAgICAgICBQYXJhbU9iamVjdCAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLAogICAgICAgIExheW91dE9iamVjdCA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyksCiAgICApOwoKICAgICRTZWxmLT57QWNjZXNzUm99ID0gJFBhcmFte0FjY2Vzc1JvfTsKICAgICRTZWxmLT57QWNjZXNzUnd9ID0gJFBhcmFte0FjY2Vzc1J3fTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IFRpY2tldCBhbmQgRm9ybURyYWZ0SUQKICAgIG15ICRUaWNrZXRJRCAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUaWNrZXRJRCcgKTsKICAgIG15ICRGb3JtRHJhZnRJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGb3JtRHJhZnRJRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFRpY2tldElEIHx8ICEkRm9ybURyYWZ0SUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTmVlZCBUaWNrZXRJRCBhbmQgRm9ybURyYWZ0SUQhJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgICMgZmlyc3QgY2hlY2sgYXQgZnJvbnRlbmQgbGV2ZWwgYW5kIHRoZW4gYXQgdGlja2V0IGxldmVsCiAgICAjIGZyb250ZW5kIHBlcm1pc3Npb25zIG92ZXJ3cml0ZSB0aWNrZXQgbGV2ZWwgcGVybWlzc2lvbnMKICAgIG15IEBBbGxvd2VkQWNjZXNzTW9kZXM7CiAgICBpZiAoICRTZWxmLT57QWNjZXNzUnd9ICkgewogICAgICAgIEBBbGxvd2VkQWNjZXNzTW9kZXMgPSBxdyhydyBybyk7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57QWNjZXNzUm99ICkgewogICAgICAgIEBBbGxvd2VkQWNjZXNzTW9kZXMgPSBxdyhybyk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIGVycm9yIHNjcmVlbiwgdGhlcmUgaXMgbm8gZnJvbnRlbmQgcGVybWlzc2lvbiB0byB0aGlzIG1vZHVsZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdZb3UgaGF2ZSBubyBwZXJtaXNzaW9ucyEnKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQogICAgQUNDRVNTOgogICAgZm9yIG15ICRBY2Nlc3NUeXBlIChAQWxsb3dlZEFjY2Vzc01vZGVzKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gJEFjY2Vzc1R5cGUsCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBMb2dObyAgICA9PiAxLAogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRTZWxmLT57QWNjZXNzTW9kZX0gPSAkQWNjZXNzVHlwZTsKCiAgICAgICAgICAgIGxhc3QgQUNDRVNTOwogICAgICAgIH0KICAgIH0KCiAgICAjIGVycm9yIHNjcmVlbiwgZG9uJ3Qgc2hvdyB0aWNrZXQKICAgIGlmICggISRTZWxmLT57QWNjZXNzTW9kZX0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1lvdSBoYXZlIG5vIHBlcm1pc3Npb25zIScpLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgQUNMIHJlc3RyaWN0aW9ucwogICAgbXkgJVBvc3NpYmxlQWN0aW9ucyA9ICggMSA9PiAkU2VsZi0+e0FjdGlvbn0gKTsKCiAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVQb3NzaWJsZUFjdGlvbnMsCiAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnQWN0aW9uJywKICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICctJywKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBteSAlQWNsQWN0aW9uID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsQWN0aW9uRGF0YSgpOwoKICAgICMgY2hlY2sgaWYgQUNMIHJlc3RyaWN0aW9ucyBleGlzdAogICAgaWYgKCRBQ0wpIHsKICAgICAgICBteSAlQWNsQWN0aW9uTG9va3VwID0gcmV2ZXJzZSAlQWNsQWN0aW9uOwoKICAgICAgICAjIHNob3cgZXJyb3Igc2NyZWVuIGlmIEFDTCBwcm9oaWJpdHMgdGhpcyBhY3Rpb24KICAgICAgICBpZiAoICEkQWNsQWN0aW9uTG9va3VweyAkU2VsZi0+e0FjdGlvbn0gfSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRm9ybURyYWZ0T2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Rm9ybURyYWZ0Jyk7CiAgICBteSAkVXBsb2FkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZScpOwoKICAgIG15ICRGb3JtRHJhZnQgPSAkRm9ybURyYWZ0T2JqZWN0LT5Gb3JtRHJhZnRHZXQoCiAgICAgICAgRm9ybURyYWZ0SUQgPT4gJEZvcm1EcmFmdElELAogICAgICAgIE9iamVjdElEICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgQ2hlY2sgZm9yIGZhaWxlZCBkcmFmdCBsb2FkaW5nIHJlcXVlc3QuCiAgICBpZiAoICEkRm9ybURyYWZ0LT57Rm9ybURyYWZ0SUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0xvYWRpbmcgZHJhZnQgZmFpbGVkIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICEkU2VsZi0+e1N1YmFjdGlvbn0gKSB7CgogICAgICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRAogICAgICAgICk7CgogICAgICAgICMgUHJlcGFyZSBUbywgQ2MgYW5kIEJjYyBmcm9tIGZvcm0gZGF0YQogICAgICAgIG15ICRUbyAgPSAnJzsKICAgICAgICBteSAkQ2MgID0gJyc7CiAgICAgICAgbXkgJEJjYyA9ICcnOwoKICAgICAgICBteSAkQ3VzdG9tZXJzTnVtYmVyVG8gPSAkRm9ybURyYWZ0LT57Rm9ybURhdGF9LT57Q3VzdG9tZXJUaWNrZXRDb3VudGVyVG9DdXN0b21lcn0gfHwgMDsKCiAgICAgICAgaWYgKCRDdXN0b21lcnNOdW1iZXJUbykgewoKICAgICAgICAgICAgQ09VTlQ6CiAgICAgICAgICAgIGZvciBteSAkQ291bnQgKCAxIC4uICRDdXN0b21lcnNOdW1iZXJUbyApIHsKICAgICAgICAgICAgICAgIGxhc3QgQ09VTlQgaWYgJENvdW50ID4gMV8wMDA7ICAgICMgYmFpbCBvdXQgd2hlbiB0aGUgbnVtYmVyIG9mIGN1c3RvbWVycyBpcyBhYm5vcm1hbGx5IGhpZ2gKCiAgICAgICAgICAgICAgICBteSAkQ3VzdG9tZXJFbGVtZW50ID0gJEZvcm1EcmFmdC0+e0Zvcm1EYXRhfS0+eyAnQ3VzdG9tZXJUaWNrZXRUZXh0XycgLiAkQ291bnQgfTsKCiAgICAgICAgICAgICAgICBuZXh0IENPVU5UIHVubGVzcyAkQ3VzdG9tZXJFbGVtZW50OwoKICAgICAgICAgICAgICAgIGlmICgkVG8pIHsKICAgICAgICAgICAgICAgICAgICAkVG8gLj0gJywgJyAuICRDdXN0b21lckVsZW1lbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkVG8gPSAkQ3VzdG9tZXJFbGVtZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkQ3VzdG9tZXJzTnVtYmVyQ2MgPSAkRm9ybURyYWZ0LT57Rm9ybURhdGF9LT57Q3VzdG9tZXJUaWNrZXRDb3VudGVyQ2NDdXN0b21lcn0gfHwgMDsKCiAgICAgICAgaWYgKCRDdXN0b21lcnNOdW1iZXJDYykgewoKICAgICAgICAgICAgQ09VTlQ6CiAgICAgICAgICAgIGZvciBteSAkQ291bnQgKCAxIC4uICRDdXN0b21lcnNOdW1iZXJDYyApIHsKICAgICAgICAgICAgICAgIGxhc3QgQ09VTlQgaWYgJENvdW50ID4gMV8wMDA7ICAgICMgYmFpbCBvdXQgd2hlbiB0aGUgbnVtYmVyIG9mIGN1c3RvbWVycyBpcyBhYm5vcm1hbGx5IGhpZ2gKCiAgICAgICAgICAgICAgICBteSAkQ3VzdG9tZXJFbGVtZW50Q2MgPSAkRm9ybURyYWZ0LT57Rm9ybURhdGF9LT57ICdDY0N1c3RvbWVyVGlja2V0VGV4dF8nIC4gJENvdW50IH07CgogICAgICAgICAgICAgICAgbmV4dCBDT1VOVCB1bmxlc3MgJEN1c3RvbWVyRWxlbWVudENjOwoKICAgICAgICAgICAgICAgIGlmICgkQ2MpIHsKICAgICAgICAgICAgICAgICAgICAkQ2MgLj0gJywgJyAuICRDdXN0b21lckVsZW1lbnRDYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRDYyA9ICRDdXN0b21lckVsZW1lbnRDYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJEN1c3RvbWVyc051bWJlckJjYyA9ICRGb3JtRHJhZnQtPntGb3JtRGF0YX0tPntDdXN0b21lclRpY2tldENvdW50ZXJCY2NDdXN0b21lcn0gfHwgMDsKCiAgICAgICAgaWYgKCRDdXN0b21lcnNOdW1iZXJCY2MpIHsKCiAgICAgICAgICAgIENPVU5UOgogICAgICAgICAgICBmb3IgbXkgJENvdW50ICggMSAuLiAkQ3VzdG9tZXJzTnVtYmVyQmNjICkgewogICAgICAgICAgICAgICAgbGFzdCBDT1VOVCBpZiAkQ291bnQgPiAxXzAwMDsgICAgIyBiYWlsIG91dCB3aGVuIHRoZSBudW1iZXIgb2YgY3VzdG9tZXJzIGlzIGFibm9ybWFsbHkgaGlnaAoKICAgICAgICAgICAgICAgIG15ICRDdXN0b21lckVsZW1lbnRCY2MgPSAkRm9ybURyYWZ0LT57Rm9ybURhdGF9LT57ICdCY2NDdXN0b21lclRpY2tldFRleHRfJyAuICRDb3VudCB9OwoKICAgICAgICAgICAgICAgIG5leHQgQ09VTlQgdW5sZXNzICRDdXN0b21lckVsZW1lbnRCY2M7CgogICAgICAgICAgICAgICAgaWYgKCRCY2MpIHsKICAgICAgICAgICAgICAgICAgICAkQmNjIC49ICcsICcgLiAkQ3VzdG9tZXJFbGVtZW50QmNjOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEJjYyA9ICRDdXN0b21lckVsZW1lbnRCY2M7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIFVwbG9hZENhY2hlIGRhdGEKICAgICAgICBmb3IgbXkgJEZpbGUgKCBAeyAkRm9ybURyYWZ0LT57RmlsZURhdGF9IH0gKSB7CiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICAgICAgJXskRmlsZX0sCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdTbWFsbCcsCiAgICAgICAgICAgIEJvZHlDbGFzcyA9PiAnUG9wdXAnLAogICAgICAgICk7CgogICAgICAgICMgV2hlbiBhIGRyYWZ0IGlzIGxvYWRlZCwgaW5mb3JtIGEgdXNlciB0aGF0IGFydGljbGUgc3ViamVjdCB3aWxsIGJlIGVtcHR5CiAgICAgICAgIyBpZiBjb250YWlucyBvbmx5IHRoZSB0aWNrZXQgaG9vayAoaWYgbm90aGluZyBpcyBtb2RpZmllZCkuCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoCiAgICAgICAgICAgIERhdGEgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ0FydGljbGUgc3ViamVjdCB3aWxsIGJlIGVtcHR5IGlmIHRoZSBzdWJqZWN0IGNvbnRhaW5zIG9ubHkgdGhlIHRpY2tldCBob29rIScKICAgICAgICAgICAgKSwKICAgICAgICApOwoKICAgICAgICBteSAkRnJvbSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUZW1wbGF0ZUdlbmVyYXRvcicpLT5TZW5kZXIoCiAgICAgICAgICAgIFF1ZXVlSUQgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICAgICAgVXNlcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBteSBAQXR0YWNobWVudHMgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzTWV0YSgKICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICApOwoKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFzaygKICAgICAgICAgICAgVGlja2V0SUQgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBBdHRhY2htZW50cyA9PiBcQEF0dGFjaG1lbnRzLAogICAgICAgICAgICBGb3JtRHJhZnRJRCA9PiAkRm9ybURyYWZ0SUQsCiAgICAgICAgICAgIFRvICAgICAgICAgID0+ICRUbywKICAgICAgICAgICAgQ2MgICAgICAgICAgPT4gJENjLAogICAgICAgICAgICBCY2MgICAgICAgICA9PiAkQmNjLAogICAgICAgICAgICBGcm9tICAgICAgICA9PiAkRnJvbSwKICAgICAgICAgICAgRm9ybURyYWZ0ICAgPT4gJEZvcm1EcmFmdCwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKAogICAgICAgICAgICBUeXBlID0+ICdTbWFsbCcsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRm9ybURyYWZ0VXBkYXRlJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJUZvcm1EcmFmdFJlc3BvbnNlOwogICAgICAgIG15ICRGb3JtRHJhZnRBY3Rpb25PayA9ICRTZWxmLT5fVXBkYXRlRm9ybURyYWZ0KAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIE9iamVjdFR5cGUgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBPYmplY3RJRCAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRGb3JtRHJhZnRJRCwKICAgICAgICAgICAgRm9ybUlEICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICBGb3JtRHJhZnQgICA9PiAkRm9ybURyYWZ0LAogICAgICAgICk7CiAgICAgICAgaWYgKCRGb3JtRHJhZnRBY3Rpb25PaykgewogICAgICAgICAgICAkRm9ybURyYWZ0UmVzcG9uc2V7U3VjY2Vzc30gPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJUZvcm1EcmFmdFJlc3BvbnNlID0gKAogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvdWxkIG5vdCBwZXJmb3JtIHJlcXVlc3RlZCBkcmFmdCBhY3Rpb24hJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgSlNPTiBvdXRwdXQKICAgICAgICBteSAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgIERhdGEgPT4gXCVGb3JtRHJhZnRSZXNwb25zZSwKICAgICAgICApOwoKICAgICAgICAjIHNlbmQgSlNPTiByZXNwb25zZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQp9CgpzdWIgX01hc2sgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNvbmZpZyBmb3IgZnJvbnRlbmQgbW9kdWxlCiAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdUaWNrZXRCYWNrJywKICAgICk7CgogICAgIyBhZGQgcmljaCB0ZXh0IGVkaXRvcgogICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKCiAgICAgICAgIyB1c2UgaGVpZ2h0L3dpZHRoIGRlZmluZWQgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgJFBhcmFte1JpY2hUZXh0SGVpZ2h0fSA9ICRDb25maWctPntSaWNoVGV4dEhlaWdodH0gfHwgMDsKICAgICAgICAkUGFyYW17UmljaFRleHRXaWR0aH0gID0gJENvbmZpZy0+e1JpY2hUZXh0V2lkdGh9ICB8fCAwOwoKICAgICAgICAjIHNldCB1cCByaWNoIHRleHQgZWRpdG9yCiAgICAgICAgJExheW91dE9iamVjdC0+U2V0UmljaFRleHRQYXJhbWV0ZXJzKAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgYXR0YWNobWVudHMKICAgIEFUVEFDSE1FTlQ6CiAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKCBAeyAkUGFyYW17QXR0YWNobWVudHN9IH0gKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgICAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0KICAgICAgICAgICAgJiYgJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0KICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfSA9fiAvaW1hZ2UvaSApCiAgICAgICAgICAgICYmICggJEF0dGFjaG1lbnQtPntEaXNwb3NpdGlvbn0gZXEgJ2lubGluZScgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQ7CiAgICAgICAgfQoKICAgICAgICBwdXNoIEB7ICRQYXJhbXtBdHRhY2htZW50TGlzdH0gfSwgJEF0dGFjaG1lbnQ7CiAgICB9CiAgICBteSBAQXJ0aWNsZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkFydGljbGVMaXN0KAogICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgT25seUxhc3QgPT4gMSwKICAgICk7CgogICAgaWYgKEBBcnRpY2xlcykgewogICAgICAgIG15ICRMYXN0QXJ0aWNsZSA9ICRBcnRpY2xlc1swXTsKCiAgICAgICAgbXkgJExhc3RBcnRpY2xlU3lzdGVtVGltZTsKICAgICAgICBpZiAoICRMYXN0QXJ0aWNsZS0+e0NyZWF0ZVRpbWV9ICkgewogICAgICAgICAgICBteSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJExhc3RBcnRpY2xlLT57Q3JlYXRlVGltZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGFzdEFydGljbGVTeXN0ZW1UaW1lID0gJExhc3RBcnRpY2xlU3lzdGVtVGltZU9iamVjdC0+VG9FcG9jaCgpOwogICAgICAgIH0KCiAgICAgICAgbXkgJEZvcm1EcmFmdFN5c3RlbVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17Rm9ybURyYWZ0fS0+e0NoYW5nZVRpbWV9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgbXkgJEZvcm1EcmFmdFN5c3RlbVRpbWUgPSAkRm9ybURyYWZ0U3lzdGVtVGltZU9iamVjdC0+VG9FcG9jaCgpOwoKICAgICAgICBpZiAoICEkTGFzdEFydGljbGVTeXN0ZW1UaW1lIHx8ICRGb3JtRHJhZnRTeXN0ZW1UaW1lIDw9ICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWUgKSB7CiAgICAgICAgICAgICRQYXJhbXtGb3JtRHJhZnRPdXRkYXRlZH0gPSAxOwogICAgICAgIH0KICAgIH0KICAgICRQYXJhbXtGb3JtRHJhZnR9LT57Q2hhbmdlQnlOYW1lfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17Rm9ybURyYWZ0fS0+e0NoYW5nZUJ5fSwKICAgICk7CiAgICBpZiAoICRTZWxmLT57QWNjZXNzTW9kZX0gbmUgInJ3IiApIHsKICAgICAgICAkUGFyYW17UmVhZE9ubHl9ICAgICAgPSAncmVhZG9ubHknOwogICAgICAgICRQYXJhbXtSZWFkT25seUNsYXNzfSA9ICdSZWFkb25seSc7CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnVG9DdXN0b21lcicsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFRvQ3VzdG9tZXIgPT4gJFBhcmFte1RvfQogICAgICAgIH0KICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdDY0N1c3RvbWVyJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgQ2MgPT4gJFBhcmFte0NjfQogICAgICAgIH0KICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdCY2NDdXN0b21lcicsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEJjYyA9PiAkUGFyYW17QmNjfQogICAgICAgIH0KICAgICk7CgogICAgIyBjcmVhdGUgJiByZXR1cm4gb3V0cHV0CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaWNrZXRGb3JtRHJhZnRFZGl0JywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBGb3JtSUQgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgIEZvcm1EcmFmdElEICAgID0+ICRQYXJhbXtGb3JtRHJhZnRJRH0sCiAgICAgICAgICAgIFJlc3BvbnNlRm9ybWF0ID0+ICRQYXJhbXtGb3JtRHJhZnR9LT57Rm9ybURhdGF9LT57Qm9keX0sCiAgICAgICAgICAgIFN1YmplY3QgICAgICAgID0+ICRQYXJhbXtGb3JtRHJhZnR9LT57Rm9ybURhdGF9LT57U3ViamVjdH0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgKTsKfQoKc3ViIF9VcGRhdGVGb3JtRHJhZnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHBhcmFtcwogICAgcmV0dXJuIGlmICEkUGFyYW17VXNlcklEfSB8fCAhJFBhcmFte09iamVjdFR5cGV9IHx8ICFJc0ludGVnZXIoICRQYXJhbXtPYmplY3RJRH0gKTsKCiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgbXkgJEZvcm1EcmFmdCA9ICRQYXJhbXtGb3JtRHJhZnR9OwogICAgbXkgJUZvcm1EYXRhICA9ICRGb3JtRHJhZnQtPntGb3JtRGF0YX0tPiUqOwoKICAgIGZvciBteSAkUGFyYW0gKHF3KFN1YmplY3QgQm9keSkpIHsKICAgICAgICAkRm9ybURhdGF7JFBhcmFtfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbSApOwogICAgfQoKICAgICMgZ2V0IGZpbGVzIGZyb20gdXBsb2FkIGNhY2hlCiAgICBteSBARmlsZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZScpLT5Gb3JtSURHZXRBbGxGaWxlc0RhdGEoCiAgICAgICAgRm9ybUlEID0+ICRQYXJhbXtGb3JtSUR9LAogICAgKTsKCiAgICAjIHByZXBhcmUgZGF0YSB0byBhZGQgb3IgdXBkYXRlIGRyYWZ0CiAgICBteSAlRm9ybURyYWZ0ID0gKAogICAgICAgIEZvcm1EYXRhICAgID0+IFwlRm9ybURhdGEsCiAgICAgICAgRmlsZURhdGEgICAgPT4gXEBGaWxlRGF0YSwKICAgICAgICBGb3JtRHJhZnRJRCA9PiAkUGFyYW17Rm9ybURyYWZ0SUR9LAogICAgICAgIE9iamVjdFR5cGUgID0+ICRQYXJhbXtPYmplY3RUeXBlfSwKICAgICAgICBPYmplY3RJRCAgICA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgIEFjdGlvbiAgICAgID0+ICRGb3JtRHJhZnQtPntBY3Rpb259LAogICAgICAgIFRpdGxlICAgICAgID0+ICRGb3JtRHJhZnQtPntUaXRsZX0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgdXBkYXRlIGRyYWZ0CiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZvcm1EcmFmdCcpLT5Gb3JtRHJhZnRVcGRhdGUoJUZvcm1EcmFmdCk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentTicketFormDraftEdit.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iY29tcG9zZSIgaWQ9IkNvbXBvc2VUaWNrZXQiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkZvcm1EcmFmdFVwZGF0ZSIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVGlja2V0SUQiIHZhbHVlPSJbJSBEYXRhLlRpY2tldElEIHwgaHRtbCAlXSIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRm9ybUlEIiB2YWx1ZT0iWyUgRGF0YS5Gb3JtSUQgfCBodG1sICVdIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJGb3JtRHJhZnRJRCIgdmFsdWU9IlslIERhdGEuRm9ybURyYWZ0SUQgfCBodG1sICVdIi8+CiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRQb3B1cCBBUklBUm9sZU1haW4iPgogICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iSGVhZGVyUG9wdXAiPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJIZWFkZXJQb3B1cGxlZnQiPgogICAgICAgICAgICAgICAgICAgIDxoMT5bJSBUcmFuc2xhdGUoIkNvbXBvc2UgQW5zd2VyIGZvciAlcyVzJXMiLCBDb25maWcoJ1RpY2tldDo6SG9vaycpLCBDb25maWcoJ1RpY2tldDo6SG9va0RpdmlkZXInKSwgRGF0YS5UaWNrZXROdW1iZXIpIHwgaHRtbCAlXSAmbWRhc2g7IFslIERhdGEuVGl0bGUgfCBodG1sICVdPC9oMT4KICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldEJhY2siKSAlXQogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJIZWFkZXJQb3B1cHJpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCIgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJDYW5jZWwgJiBjbG9zZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJUaWNrZXRCYWNrIikgJV0KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgWyUgSU5DTFVERSAiRm9ybUVsZW1lbnRzL0RyYWZ0Tm90aWZpY2F0aW9ucy50dCIgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9Ik1vZHVsYXJGb3JtIEZpeGVkTGFiZWwiPgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZENlbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiRnJvbSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRnJvbSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlRvQ3VzdG9tZXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkQ2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJUbyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Ub0N1c3RvbWVyIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVG9DdXN0b21lciIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDY0N1c3RvbWVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZENlbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ2MiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2MgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJDY0N1c3RvbWVyIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkJjY0N1c3RvbWVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3ciPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZENlbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQmNjIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkJjYyB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkJjY0N1c3RvbWVyIikgJV0KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGRDZWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlN1YmplY3QiPlslIFRyYW5zbGF0ZSgiU3ViamVjdCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbJSBEYXRhLlJlYWRPbmx5ICVdIHR5cGU9InRleHQiIG5hbWU9IlN1YmplY3QiIGlkPSJTdWJqZWN0IiB2YWx1ZT0iWyUgRGF0YS5TdWJqZWN0IHwgaHRtbCAlXSIgY2xhc3M9Ilc3NXBjIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkQ2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJSaWNoVGV4dCI+WyUgVHJhbnNsYXRlKCJUZXh0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSaWNoVGV4dEZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9IlJpY2hUZXh0IiBbJSBEYXRhLlJlYWRPbmx5ICVdIG5hbWU9IkJvZHkiIHJvd3M9IjE1IiBjb2xzPSJbJSBDb25maWcoIlRpY2tldDo6RnJvbnRlbmQ6OlRleHRBcmVhRW1haWwiKSAlXSIgY2xhc3M9IlslIERhdGEuUmVhZE9ubHlDbGFzcyAlXSBSaWNoVGV4dCI+WyUgRGF0YS5SZXNwb25zZUZvcm1hdCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkQ2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBdHRhY2htZW50cyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgpbJSBJRiBEYXRhLlJlYWRPbmx5ICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQXR0YWNobWVudExpc3RDb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkhpZGRlbiBTbWFsbCBEYXRhVGFibGUgQXR0YWNobWVudExpc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRmlsZW5hbWUiPlslIFRyYW5zbGF0ZSgiRmlsZW5hbWUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iRmlsZXR5cGUiPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJGaWxlc2l6ZSI+WyUgVHJhbnNsYXRlKCJTaXplIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBGT1JFQUNIIEF0dGFjaG1lbnQgSU4gRGF0YS5BdHRhY2htZW50TGlzdCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJGaWxlbmFtZSBvb28xMmciPlslIEF0dGFjaG1lbnQuRmlsZW5hbWUgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJGaWxldHlwZSBvb28xMmciPlslIEF0dGFjaG1lbnQuQ29udGVudFR5cGUgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJGaWxlc2l6ZSBvb28xMmciIGRhdGEtZmlsZS1zaXplPSJbJSBBdHRhY2htZW50LkZpbGVzaXplIHwgaHRtbCAlXSI+WyUgQXR0YWNobWVudC5GaWxlc2l6ZSB8IExvY2FsaXplKCdGaWxlc2l6ZScpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElOQ0xVREUgIkZvcm1FbGVtZW50cy9BdHRhY2htZW50TGlzdC50dCIgJV0KWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxici8+CgogICAgICAgIDwvZGl2PgoKICAgIFslIElGICFEYXRhLlJlYWRPbmx5ICVdCiAgICAgICAgPGRpdiBjbGFzcz0iRm9vdGVyIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiIgaWQ9IkZvcm1EcmFmdFVwZGF0ZSIgYWNjZXNza2V5PSJ1IiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJVcGRhdGUgZHJhZnQiKSB8IGh0bWwgJV0gKHUpIj4KICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wZW5jaWwtc3F1YXJlLW8iPjwvaT4gWyUgVHJhbnNsYXRlKCJVcGRhdGUgZHJhZnQiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgWyUgRU5EICVdCgogICAgPC9kaXY+CjwvZm9ybT4K</File>
        <File Location="doc/en/AgentTicketFormDraftReview.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>