<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>CustomerAgeShowCreated</Name>
    <Version>10.1.2</Version>
    <Vendor>Rother OSS GmbH</Vendor>
    <URL>https://otobo.io/</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <ChangeLog Date="2026-10-28 11:09:49" Version="10.1.2">Updated package to latest OTOBO 10.1 state.</ChangeLog>
    <ChangeLog Date="2024-07-23 11:28:45" Version="10.1.1">Initial release.</ChangeLog>
    <Description Lang="en">The package CustomerAgeShowCreated allows to switch between Age and Created date in customer ticket lists via system configuration.</Description>
    <Framework>10.1.x</Framework>
    <BuildCommitID>8a2e1335d57b5c4fc8da64ce807cc5937c59c7e3</BuildCommitID>
    <BuildDate>2026-10-28 11:09:53</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Modules/CustomerElasticsearchQuickResult.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL01vZHVsZXMvQ3VzdG9tZXJFbGFzdGljc2VhcmNoUXVpY2tSZXN1bHQucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkN1c3RvbWVyRWxhc3RpY3NlYXJjaFF1aWNrUmVzdWx0OwojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpEQk9iamVjdCkKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok1vZHVsZXM6OkN1c3RvbWVyRWxhc3RpY3NlYXJjaFF1aWNrUmVzdWx0IC0gdGlja2V0IHNlYXJjaCB2aWEgRWxhc3RpY3NlYXJjaAoKPWhlYWQxIERFU0NSSVBUSU9OCgpDdXN0b21lckVsYXN0aWNzZWFyY2hRdWlja1Jlc3VsdCByZXR1cm5zIG4tbnVtYmVyIG9mIHRpY2tldHMgKGRlZmluZWQgYnkgdGhlIHN5c2NvbmZpZykgZnJvbSB0aGUgRVMtcXVlcnkgc29ydGVkIGJ5IGRlc2NlbmRpbmcgYWdlCgo9aGVhZDIgbmV3KCkKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUnVuKCkKClF1aWNrc2VhcmNoIHJlc3VsdCBpcyB1cGRhdGVkIHZpYSBBSkFYLgoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkQ29uZmlnT2JqZWN0ICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFRpY2tldE9iamVjdCAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKICAgIG15ICRFU09iamVjdCAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RWxhc3RpY3NlYXJjaCcpOwogICAgbXkgJERpc2FibGVDb21wYW55VGlja2V0cyA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJEaXNhYmxlQ29tcGFueVRpY2tldEFjY2VzcycpOwoKICAgIG15ICRTZWFyY2hPYmplY3RzID0gJENvbmZpZ09iamVjdC0+R2V0KCdFbGFzdGljc2VhcmNoOjpRdWlja1NlYXJjaFNob3cnKTsKICAgIG15ICRDb3VudCAgICAgICAgID0gJFNlYXJjaE9iamVjdHMtPntUaWNrZXR9ID8gJFNlYXJjaE9iamVjdHMtPntUaWNrZXR9e0NvdW50fSA6IDA7CiAgICBteSAkRVNTdHJMZW5ndGggICA9IGxlbmd0aCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRnVsbHRleHRFUycgKTsKCiAgICAjIFN1YmFjdGlvbiBlcSBTZWFyY2hVcGRhdGUgaXMgcmV0dXJuZWQgYnkgb24gY2xpY2sgYW5kIG9uIGlucHV0IGV2ZW50cyBvZiB0aGUgRVNmdWxsdGV4dC1maWVsZC4gU2VlIENvcmUuVUkuRWxhc3RpY3NlYXJjaC5qcwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlYXJjaFVwZGF0ZScgJiYgJEVTU3RyTGVuZ3RoID4gMSAmJiAkQ291bnQgKSB7CgogICAgICAgICMgQWRkIGZpbHRlciBmb3IgY3VzdG9tZXIgY29tcGFueSBpZiB0aGUgY29tcGFueSB0aWNrZXRzIGFyZSBub3QgZGlzYWJsZWQuCiAgICAgICAgbXkgJVNlbGVjdGlvbjsKICAgICAgICBpZiAoICEkRGlzYWJsZUNvbXBhbnlUaWNrZXRzICkgewogICAgICAgICAgICBteSAlQWNjZXNzaWJsZUN1c3RvbWVycyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lckdyb3VwJyktPkdyb3VwQ29udGV4dEN1c3RvbWVycygKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGVjdGlvbntDdXN0b21lcklEUmF3fSA9IFsga2V5cyAlQWNjZXNzaWJsZUN1c3RvbWVycyBdOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGVjdGlvbntDdXN0b21lclVzZXJMb2dpblJhd30gPSAkU2VsZi0+e1VzZXJJRH07CiAgICAgICAgfQoKICAgICAgICAjIFNlYXJjaCB0aWNrZXQgYnkgRVMgc29ydCBieSBhZ2UuIFNob3cgJFNpemUgcmVzdWx0cy4KICAgICAgICBteSBAVGlja2V0SURzID0gJEVTT2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICAgICAgICAgICVTZWxlY3Rpb24sCiAgICAgICAgICAgIEZ1bGx0ZXh0ICAgICAgID0+ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGdWxsdGV4dEVTJyApLAogICAgICAgICAgICBDdXN0b21lclVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIExpbWl0ICAgICAgICAgID0+ICRDb3VudCwKICAgICAgICAgICAgUGVybWlzc2lvbiAgICAgPT4gJ3JvJywKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgPT4gJ0ZVTEwnLAogICAgICAgICk7CgogICAgICAgICMgQmxvY2sgdGlja2V0IGRhdGEKICAgICAgICBmb3IgbXkgJFRpY2tldCAoQFRpY2tldElEcykgewoKICAgICAgICAgICAgIyB3ZSBvbmx5IGhhdmUgb25lIGtleSBhbmQgb25lIHZhbHVlIGluIGVhY2ggYXJyYXkgZWxlbWVudAogICAgICAgICAgICBteSAoICRUaWNrZXRJRCwgJFRpY2tldFBhcmFtICkgPSAoICV7JFRpY2tldH0gKTsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkQWdlID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJBZ2UoCiMgUm90aGVyIE9TUyAvIEN1c3RvbWVyQWdlU2hvd0NyZWF0ZWQKIyAgICAgICAgICAgICAgICAgQWdlICAgPT4gJFRpY2tldFBhcmFtLT57QWdlfSwKIyAgICAgICAgICAgICAgICAgU3BhY2UgPT4gJyAnLAogICAgICAgICAgICAgICAgQWdlICAgICAgICAgICAgPT4gJFRpY2tldFBhcmFtLT57QWdlfSwKICAgICAgICAgICAgICAgIFNwYWNlICAgICAgICAgID0+ICcgJywKICAgICAgICAgICAgICAgIENyZWF0ZWRBdEVwb2NoID0+ICRUaWNrZXRQYXJhbS0+e0NyZWF0ZWR9LAojIEVPIEN1c3RvbWVyQWdlU2hvd0NyZWF0ZWQKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkVGlja2V0QWdlJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgVGlja2V0QWdlID0+ICRBZ2UsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmRUaWNrZXROdW1iZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldFBhcmFtLT57VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkVGlja2V0VGl0bGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIFRpY2tldFRpdGxlID0+ICRUaWNrZXRQYXJhbS0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIENyZWF0ZSBvdXRwdXQKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0N1c3RvbWVyRWxhc3RpY3NlYXJjaFF1aWNrUmVzdWx0JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgI1JldHVybiBIVE1MLW91dHB1dCBiYWNrIHRvIGNhbGxiYWNrIGZ1bmN0aW9uIGluIENvcmUuVUkuRWxhc3RpY3NlYXJjaC5qcwogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICAgICAgQ2hhcnNldCAgICAgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dCB8fCAnJywKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgIENoYXJzZXQgICAgID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgQ29udGVudCAgICAgPT4gJzxkaXYvPicsCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICApOwp9CgoxOwo=</File>
        <File Location="Custom/Kernel/Modules/CustomerTicketSearch.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSBmZjllMjk3YmFmMjg3ZTE2MDcxZDNhYzZhZDdmNmMxM2YxMWFjN2ZhIC0gS2VybmVsL01vZHVsZXMvQ3VzdG9tZXJUaWNrZXRTZWFyY2gucG0KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkN1c3RvbWVyVGlja2V0U2VhcmNoOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkT3V0cHV0OwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgY29uZmlnIGZvciBmcm9udGVuZCBtb2R1bGUKICAgIG15ICREeW5hbWljRmllbGRGaWx0ZXIgPSAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRpY2tldCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydUaWNrZXQnXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiAkRHluYW1pY0ZpZWxkRmlsdGVyIHx8IHt9LAogICAgKTsKCiAgICAjIGdldCBiYWNrZW5kIG9iamVjdAogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyByZWR1Y2UgdGhlIGR5bmFtaWMgZmllbGRzIHRvIG9ubHkgdGhlIG9uZXMgdGhhdCBhcmUgZGVzaW5nZWQgZm9yIGN1c3RvbWVyIGludGVyZmFjZQogICAgbXkgQEN1c3RvbWVyRHluYW1pY0ZpZWxkczsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgIG15ICRJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZSA9ICRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNDdXN0b21lckludGVyZmFjZUNhcGFibGUnLAogICAgICAgICk7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISRJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZTsKCiAgICAgICAgcHVzaCBAQ3VzdG9tZXJEeW5hbWljRmllbGRzLCAkRHluYW1pY0ZpZWxkQ29uZmlnOwogICAgfQogICAgJER5bmFtaWNGaWVsZCA9IFxAQ3VzdG9tZXJEeW5hbWljRmllbGRzOwoKICAgIG15ICRQcm9maWxlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Byb2ZpbGUnICkgfHwgJyc7CgogICAgIyBjaGVjayByZXF1ZXN0CiAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZWFyY2hUZW1wbGF0ZScgKSAmJiAkUHJvZmlsZSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+CiAgICAgICAgICAgICAgICAiQWN0aW9uPUN1c3RvbWVyVGlja2V0U2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7VGFrZUxhc3RTZWFyY2g9MTtTYXZlUHJvZmlsZT0xO1Byb2ZpbGU9JFByb2ZpbGUiLAogICAgICAgICk7CiAgICB9CgogICAgIyByZW1lbWJlciBleGNsdWRlIGF0dHJpYnV0ZXMKICAgIG15IEBFeGNsdWRlcyA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdFeGNsdWRlJyApOwoKICAgICMgZ2V0IHNpbmdsZSBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKCiAgICAjIGdldCBjb25maWcgZGF0YQogICAgbXkgJFN0YXJ0SGl0ICAgID0gaW50KCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU3RhcnRIaXQnICkgfHwgMSApOwogICAgbXkgJFNlYXJjaExpbWl0ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkN1c3RvbWVyVGlja2V0U2VhcmNoOjpTZWFyY2hMaW1pdCcpCiAgICAgICAgfHwgMjAwOwogICAgbXkgJFNlYXJjaFBhZ2VTaG93biA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpDdXN0b21lclRpY2tldFNlYXJjaDo6U2VhcmNoUGFnZVNob3duJykgfHwgNDA7CiAgICBteSAkU29ydEJ5ICAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NvcnRCeScgKQogICAgICAgIHx8ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpDdXN0b21lclRpY2tldFNlYXJjaDo6U29ydEJ5OjpEZWZhdWx0JykKICAgICAgICB8fCAnQWdlJzsKICAgIG15ICRDdXJyZW50T3JkZXIgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXInICkKICAgICAgICB8fCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6Q3VzdG9tZXJUaWNrZXRTZWFyY2g6Ok9yZGVyOjpEZWZhdWx0JykKICAgICAgICB8fCAnRG93bic7CgogICAgIyBnZXQgc2VhcmNoIHByb2ZpbGUgb2JqZWN0CiAgICBteSAkU2VhcmNoUHJvZmlsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZWFyY2hQcm9maWxlJyk7CiAgICBteSAkVGFrZUxhc3RTZWFyY2ggICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUYWtlTGFzdFNlYXJjaCcgKSB8fCAnJzsKCiAgICAjIGNvbGxlY3QgYWxsIHNlYXJjaGFibGUgYXJ0aWNsZSBmaWVsZCBkZWZpbml0aW9ucyBhbmQgYWRkIHRoZSBmaWVsZHMgdG8gdGhlIGF0dHJpYnV0ZXMgYXJyYXkKICAgIG15ICVBcnRpY2xlU2VhcmNoYWJsZUZpZWxkcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QXJ0aWNsZVNlYXJjaGFibGVGaWVsZHNMaXN0KCk7CgogICAgIyBsb2FkIHByb2ZpbGVzIHN0cmluZyBwYXJhbXMgKHByZXNzIGxvYWQgcHJvZmlsZSkKICAgIGlmICggKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0xvYWRQcm9maWxlJyAmJiAkUHJvZmlsZSApIHx8ICRUYWtlTGFzdFNlYXJjaCApIHsKICAgICAgICAlR2V0UGFyYW0gPSAkU2VhcmNoUHJvZmlsZU9iamVjdC0+U2VhcmNoUHJvZmlsZUdldCgKICAgICAgICAgICAgQmFzZSAgICAgID0+ICdDdXN0b21lclRpY2tldFNlYXJjaCcsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkUHJvZmlsZSwKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNlYXJjaCBzdHJpbmcgcGFyYW1zIChnZXQgc3VibWl0dGVkIHBhcmFtcykKICAgIGVsc2UgewogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAoCiAgICAgICAgICAgIHNvcnQga2V5cyAlQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHMsCiAgICAgICAgICAgIHF3KFRpY2tldE51bWJlciBSZXN1bHRGb3JtIFRpbWVTZWFyY2hUeXBlIFN0YXRlVHlwZSBTZWFyY2hJbkFyY2hpdmUKICAgICAgICAgICAgVGlja2V0Q3JlYXRlVGltZVBvaW50Rm9ybWF0IFRpY2tldENyZWF0ZVRpbWVQb2ludCBUaWNrZXRDcmVhdGVUaW1lUG9pbnRTdGFydAogICAgICAgICAgICBUaWNrZXRDcmVhdGVUaW1lU3RhcnQgVGlja2V0Q3JlYXRlVGltZVN0YXJ0RGF5IFRpY2tldENyZWF0ZVRpbWVTdGFydE1vbnRoCiAgICAgICAgICAgIFRpY2tldENyZWF0ZVRpbWVTdGFydFllYXIgVGlja2V0Q3JlYXRlVGltZVN0b3AgVGlja2V0Q3JlYXRlVGltZVN0b3BEYXkKICAgICAgICAgICAgVGlja2V0Q3JlYXRlVGltZVN0b3BNb250aCBUaWNrZXRDcmVhdGVUaW1lU3RvcFllYXIKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBuZXh0IEtFWSBpZiAkQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHN7JEtleX0gJiYgJEFydGljbGVTZWFyY2hhYmxlRmllbGRzeyRLZXl9LT57SGlkZUluQ3VzdG9tZXJJbnRlcmZhY2V9OwoKICAgICAgICAgICAgIyBnZXQgc2VhcmNoIHN0cmluZyBwYXJhbXMgKGdldCBzdWJtaXR0ZWQgcGFyYW1zKQogICAgICAgICAgICAkR2V0UGFyYW17JEtleX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkS2V5ICk7CgogICAgICAgICAgICAjIHJlbW92ZSB3aGl0ZSBzcGFjZSBvbiB0aGUgc3RhcnQgYW5kIGVuZAogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXskS2V5fSApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskS2V5fSA9fiBzL1xzKyQvL2c7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JEtleX0gPX4gcy9eXHMrLy9nOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhcnJheSBwYXJhbXMKICAgICAgICBmb3IgbXkgJEtleSAoCiAgICAgICAgICAgIHF3KEN1c3RvbWVySUQgU3RhdGVJRHMgU3RhdGVUeXBlSURzIFByaW9yaXR5SURzIE93bmVySURzIFJlc3BvbnNpYmxlSURzIFNlcnZpY2VJRHMKICAgICAgICAgICAgVHlwZUlEcwogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIGdldCBzZWFyY2ggYXJyYXkgcGFyYW1zIChnZXQgc3VibWl0dGVkIHBhcmFtcykKICAgICAgICAgICAgbXkgQEFycmF5ID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJEtleSApOwogICAgICAgICAgICBpZiAoQEFycmF5KSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JEtleX0gPSBcQEFycmF5OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBEeW5hbWljIGZpZWxkcyBmb3JtIHBhcmFtIG9iamVjdAogICAgICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgICMgZ2V0IHNlYXJjaCBmaWVsZCBwcmVmZXJlbmNlcwogICAgICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRTZWFyY2hGaWVsZFByZWZlcmVuY2VzKTsKCiAgICAgICAgICAgIFBSRUZFUkVOQ0U6CiAgICAgICAgICAgIGZvciBteSAkUHJlZmVyZW5jZSAoIEB7JFNlYXJjaEZpZWxkUHJlZmVyZW5jZXN9ICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIHRoZSB3ZWIgcmVxdWVzdAogICAgICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkVmFsdWVHZXQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIFJldHVyblByb2ZpbGVTdHJ1Y3R1cmUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICA9PiAkUHJlZmVyZW5jZS0+e1R5cGV9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCB0aGUgY29tcGxldGUgdmFsdWUgc3RydWN0dXJlIGluIEdldFBhcmFtIHRvIHN0b3JlIGl0IGxhdGVyIGluIHRoZSBzZWFyY2gKICAgICAgICAgICAgICAgICMgcHJvZmlsZQogICAgICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkVmFsdWUpICkgewogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSA9ICggJUdldFBhcmFtLCAleyREeW5hbWljRmllbGRWYWx1ZX0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIGl0ZW0gbmVlZCB0byBnZXQgZXhjbHVkZWQKICAgIGZvciBteSAkRXhjbHVkZSAoQEV4Y2x1ZGVzKSB7CiAgICAgICAgaWYgKCAkR2V0UGFyYW17JEV4Y2x1ZGV9ICkgewogICAgICAgICAgICBkZWxldGUgJEdldFBhcmFteyRFeGNsdWRlfTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGltZSBvcHRpb24KICAgIGlmICggISRHZXRQYXJhbXtUaW1lU2VhcmNoVHlwZX0gKSB7CiAgICAgICAgJEdldFBhcmFteydUaW1lU2VhcmNoVHlwZTo6Tm9uZSd9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgIH0KICAgIGVsc2lmICggJEdldFBhcmFte1RpbWVTZWFyY2hUeXBlfSBlcSAnVGltZVBvaW50JyApIHsKICAgICAgICAkR2V0UGFyYW17J1RpbWVTZWFyY2hUeXBlOjpUaW1lUG9pbnQnfSA9ICdjaGVja2VkPSJjaGVja2VkIic7CiAgICB9CiAgICBlbHNpZiAoICRHZXRQYXJhbXtUaW1lU2VhcmNoVHlwZX0gZXEgJ1RpbWVTbG90JyApIHsKICAgICAgICAkR2V0UGFyYW17J1RpbWVTZWFyY2hUeXBlOjpUaW1lU2xvdCd9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgIH0KCiAgICAjIHNldCByZXN1bHQgZm9ybSBlbnYKICAgIGlmICggISRHZXRQYXJhbXtSZXN1bHRGb3JtfSApIHsKICAgICAgICAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gPSAnJzsKICAgIH0KICAgIGlmICggJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdQcmludCcgKSB7CiAgICAgICAgJFNlYXJjaFBhZ2VTaG93biA9ICRTZWFyY2hMaW1pdDsKICAgIH0KCiAgICAjIGNoZWNrIHJlcXVlc3QKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdPcGVuU2VhcmNoRGVzY3JpcHRpb24nICkgewogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQ3VzdG9tZXJUaWNrZXRTZWFyY2hPcGVuU2VhcmNoRGVzY3JpcHRpb24nLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBUT0RPOiB3aHkgbm90IENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9vcGVuc2VhcmNoZGVzY3JpcHRpb24reG1sJywKICAgICAgICAjIFRPRE86IG1heWJlIGRlY2xhcmUgYXMgVVRGLTgKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJ09wZW5TZWFyY2hEZXNjcmlwdGlvbi54bWwnLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC94bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICApOwogICAgfQoKICAgIG15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CgogICAgIyBHZXQgcHJvZmlsZSBzZWFyY2ggYW5kIHRlbXBsYXRlIGRhdGEuCiAgICBteSAkU2F2ZVByb2ZpbGUgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2F2ZVByb2ZpbGUnICkgICAgfHwgJyc7CiAgICBteSAkU2VsZWN0VGVtcGxhdGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VsZWN0VGVtcGxhdGUnICkgfHwgJyc7CiAgICBteSAkRXJhc2VUZW1wbGF0ZSAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRXJhc2VUZW1wbGF0ZScgKSAgfHwgJyc7CgogICAgIyBjaGVjayBmb3Igc2VydmVyIGVycm9ycwogICAgbXkgJVNlcnZlckVycm9yczsKICAgIGlmICgKICAgICAgICAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlYXJjaCcKICAgICAgICAmJiAhJFNlbGYtPntFcmFzZVRlbXBsYXRlfQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBjaGVjayBmb3Igc3RvcCB3b3JkIGVycm9ycwogICAgICAgIG15ICVTdG9wV29yZHNTZXJ2ZXJFcnJvcnMgPSAkU2VsZi0+X1N0b3BXb3Jkc1NlcnZlckVycm9yc0dldCgKICAgICAgICAgICAgRnJvbSAgICA9PiAkR2V0UGFyYW17RnJvbX0sCiAgICAgICAgICAgIFRvICAgICAgPT4gJEdldFBhcmFte1RvfSwKICAgICAgICAgICAgQ2MgICAgICA9PiAkR2V0UGFyYW17Q2N9LAogICAgICAgICAgICBTdWJqZWN0ID0+ICRHZXRQYXJhbXtTdWJqZWN0fSwKICAgICAgICAgICAgQm9keSAgICA9PiAkR2V0UGFyYW17Qm9keX0sCiAgICAgICAgKTsKCiAgICAgICAgJVNlcnZlckVycm9ycyA9ICggJVNlcnZlckVycm9ycywgJVN0b3BXb3Jkc1NlcnZlckVycm9ycyApOwogICAgfQoKICAgICMgc2hvdyByZXN1bHQgcGFnZQogICAgaWYgKCAhJVNlcnZlckVycm9ycyAmJiAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlYXJjaCcgJiYgISRFcmFzZVRlbXBsYXRlICkgewoKICAgICAgICBteSAkUHJvZmlsZU5hbWUgPSAnJzsKICAgICAgICBpZiAoJFByb2ZpbGUpIHsKICAgICAgICAgICAgJFByb2ZpbGVOYW1lID0gIigkUHJvZmlsZSkiOwogICAgICAgIH0KCiAgICAgICAgIyBmaWxsIHVwIHByb2ZpbGUgbmFtZSAoZS5nLiB3aXRoIGxhc3Qtc2VhcmNoKQogICAgICAgIGlmICggISRQcm9maWxlIHx8ICEkU2F2ZVByb2ZpbGUgKSB7CiAgICAgICAgICAgICRQcm9maWxlID0gJ2xhc3Qtc2VhcmNoJzsKICAgICAgICB9CgogICAgICAgIGlmICggISRQcm9maWxlTmFtZSApIHsKICAgICAgICAgICAgJFByb2ZpbGVOYW1lID0gIigkUHJvZmlsZSkiOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkUHJvZmlsZU5hbWUgZXEgJyhsYXN0LXNlYXJjaCknICkgewogICAgICAgICAgICAkUHJvZmlsZU5hbWUgPSAnKCcgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ2xhc3Qtc2VhcmNoJykgLiAnKSc7CiAgICAgICAgfQoKICAgICAgICAjIHN0b3JlIHNlYXJjaCBVUkwgaW4gTGFzdFNjcmVlbk92ZXJ2aWV3IHRvIG1ha2Ugc3VyZSB0aGUKICAgICAgICAjIGN1c3RvbWVyIGNhbiB1c2UgdGhlICJiYWNrIiBsaW5rIGFzIGV4cGVjdGVkCiAgICAgICAgbXkgJFVSTCA9ICJBY3Rpb249Q3VzdG9tZXJUaWNrZXRTZWFyY2g7U3ViYWN0aW9uPVNlYXJjaDtQcm9maWxlPSRQcm9maWxlOyIKICAgICAgICAgICAgLiAiU29ydEJ5PSRTb3J0Qnk7T3JkZXI9JEN1cnJlbnRPcmRlcjtUYWtlTGFzdFNlYXJjaD0xOyIKICAgICAgICAgICAgLiAiU3RhcnRIaXQ9JFN0YXJ0SGl0IjsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24nKS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5PdmVydmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CgogICAgICAgICMgc2F2ZSBzZWFyY2ggcHJvZmlsZSAodW5kZXIgbGFzdC1zZWFyY2ggb3IgcmVhbCBwcm9maWxlIG5hbWUpCiAgICAgICAgJFNhdmVQcm9maWxlID0gMTsKCiAgICAgICAgIyByZW1lbWJlciBsYXN0IHNlYXJjaCB2YWx1ZXMKICAgICAgICBpZiAoICRTYXZlUHJvZmlsZSAmJiAkUHJvZmlsZSApIHsKCiAgICAgICAgICAgICMgcmVtb3ZlIG9sZCBwcm9maWxlIHN0dWZmCiAgICAgICAgICAgICRTZWFyY2hQcm9maWxlT2JqZWN0LT5TZWFyY2hQcm9maWxlRGVsZXRlKAogICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdDdXN0b21lclRpY2tldFNlYXJjaCcsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgPT4gJFByb2ZpbGUsCiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBpbnNlcnQgbmV3IHByb2ZpbGUgcGFyYW1zCiAgICAgICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVHZXRQYXJhbSApIHsKICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFteyRLZXl9ICkgewogICAgICAgICAgICAgICAgICAgICRTZWFyY2hQcm9maWxlT2JqZWN0LT5TZWFyY2hQcm9maWxlQWRkKAogICAgICAgICAgICAgICAgICAgICAgICBCYXNlICAgICAgPT4gJ0N1c3RvbWVyVGlja2V0U2VhcmNoJywKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRQcm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgPT4gJEtleSwKICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRHZXRQYXJhbXskS2V5fSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAlVGltZU1hcCA9ICgKICAgICAgICAgICAgVGlja2V0Q3JlYXRlID0+ICdUaW1lJywKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJFRpbWVUeXBlICggc29ydCBrZXlzICVUaW1lTWFwICkgewoKICAgICAgICAgICAgIyBnZXQgY3JlYXRlIHRpbWUgc2V0dGluZ3MKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyAkVGltZU1hcHskVGltZVR5cGV9IC4gJ1NlYXJjaFR5cGUnIH0gKSB7CgogICAgICAgICAgICAgICAgIyBkbyBub3RoaW5nIHdpdGggdGltZSBzdHVmZgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZU1hcHskVGltZVR5cGV9IC4gJ1NlYXJjaFR5cGUnIH0gZXEgJ1RpbWVTbG90JyApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkS2V5IChxdyhNb250aCBEYXkpKSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0JyAuICRLZXkgfSA9IHNwcmludGYoICIlMDJkIiwgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0JyAuICRLZXkgfSApOwogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wJyAuICRLZXkgfSAgPSBzcHJpbnRmKCAiJTAyZCIsICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wJyAuICRLZXkgfSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydERheScgfQogICAgICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydE1vbnRoJyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0YXJ0WWVhcicgfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFllYXIgICAgID0+ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydFllYXInIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb250aCAgICA9PiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RhcnRNb250aCcgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERheSAgICAgID0+ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdGFydERheScgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvdXIgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1pZG5pZ2h0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW51dGUgICA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVab25lID0+ICRTZWxmLT57VXNlclRpbWVab25lfSB8fCBLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUtPlVzZXJEZWZhdWx0VGltZVpvbmVHZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIENvbnZlcnQgc3RhcnQgdGltZSB0byBsb2NhbCBzeXN0ZW0gdGltZSB6b25lLgogICAgICAgICAgICAgICAgICAgICREYXRlVGltZU9iamVjdC0+VG9PVE9CT1RpbWVab25lKCk7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU5ld2VyRGF0ZScgfSA9ICREYXRlVGltZU9iamVjdC0+VG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcERheScgfQogICAgICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVTdG9wTW9udGgnIH0KICAgICAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcFllYXInIH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBZZWFyICAgICA9PiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcFllYXInIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb250aCAgICA9PiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lU3RvcE1vbnRoJyB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF5ICAgICAgPT4gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVN0b3BEYXknIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3VyICAgICA9PiAyMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBqdXN0IGJlZm9yZSBtaWRuaWdodAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWludXRlICAgPT4gNTksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNvbmQgICA9PiA1OSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVab25lID0+ICRTZWxmLT57VXNlclRpbWVab25lfSB8fCBLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUtPlVzZXJEZWZhdWx0VGltZVpvbmVHZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIENvbnZlcnQgc3RvcCB0aW1lIHRvIGxvY2FsIHN5c3RlbSB0aW1lIHpvbmUuCiAgICAgICAgICAgICAgICAgICAgJERhdGVUaW1lT2JqZWN0LT5Ub09UT0JPVGltZVpvbmUoKTsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lT2xkZXJEYXRlJyB9ID0gJERhdGVUaW1lT2JqZWN0LT5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZU1hcHskVGltZVR5cGV9IC4gJ1NlYXJjaFR5cGUnIH0gZXEgJ1RpbWVQb2ludCcgKSB7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50U3RhcnQnIH0KICAgICAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJFRpbWUgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50Rm9ybWF0JyB9IGVxICdtaW51dGUnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRGb3JtYXQnIH0gZXEgJ2hvdXInICkgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZSA9ICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludCcgfSAqIDYwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfSBlcSAnZGF5JyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWUgPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnQnIH0gKiA2MCAqIDI0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfSBlcSAnd2VlaycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9ICogNjAgKiAyNCAqIDc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50Rm9ybWF0JyB9IGVxICdtb250aCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9ICogNjAgKiAyNCAqIDMwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludEZvcm1hdCcgfSBlcSAneWVhcicgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lID0gJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZVBvaW50JyB9ICogNjAgKiAyNCAqIDM2NTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lUG9pbnRTdGFydCcgfSBlcSAnQmVmb3JlJyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgbW9yZSB0aGFuIC4uLiBhZ28KICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU9sZGVyTWludXRlcycgfSA9ICRUaW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVQb2ludFN0YXJ0JyB9IGVxICdOZXh0JyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgd2l0aGluIG5leHQKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU5ld2VyTWludXRlcycgfSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVPbGRlck1pbnV0ZXMnIH0gPSAtJFRpbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyB3aXRoaW4gbGFzdCAuLi4KICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU9sZGVyTWludXRlcycgfSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVOZXdlck1pbnV0ZXMnIH0gPSAkVGltZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcHJlcGFyZSBhcmNoaXZlIGZsYWcKICAgICAgICBpZiAoCiAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpBcmNoaXZlU3lzdGVtJykKICAgICAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkN1c3RvbWVyQXJjaGl2ZVN5c3RlbScpCiAgICAgICAgICAgICYmICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpDdXN0b21lckFyY2hpdmVTeXN0ZW0nKSBlcSAxCiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAkR2V0UGFyYW17U2VhcmNoSW5BcmNoaXZlfSB8fD0gJyc7CiAgICAgICAgICAgIGlmICggJEdldFBhcmFte1NlYXJjaEluQXJjaGl2ZX0gZXEgJ0FsbFRpY2tldHMnICkgewogICAgICAgICAgICAgICAgJEdldFBhcmFte0FyY2hpdmVGbGFnc30gPSBbICd5JywgJ24nIF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17U2VhcmNoSW5BcmNoaXZlfSBlcSAnQXJjaGl2ZWRUaWNrZXRzJyApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtBcmNoaXZlRmxhZ3N9ID0gWyd5J107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17QXJjaGl2ZUZsYWdzfSA9IFsnbiddOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICgKICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkFyY2hpdmVTeXN0ZW0nKQogICAgICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6Q3VzdG9tZXJBcmNoaXZlU3lzdGVtJykKICAgICAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkN1c3RvbWVyQXJjaGl2ZVN5c3RlbScpIGVxIDIKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEdldFBhcmFte0FyY2hpdmVGbGFnc30gPSBbJ24nXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtBcmNoaXZlRmxhZ3N9ID0gWyAneScsICduJyBdOwogICAgICAgIH0KCiAgICAgICAgIyBkeW5hbWljIGZpZWxkcyBzZWFyY2ggcGFyYW1ldGVycyBmb3IgdGlja2V0IHNlYXJjaAogICAgICAgIG15ICVEeW5hbWljRmllbGRTZWFyY2hQYXJhbWV0ZXJzOwogICAgICAgIG15ICVEeW5hbWljRmllbGRTZWFyY2hEaXNwbGF5OwoKICAgICAgICAjIGN5Y2xlIHRocm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAjIGdldCBzZWFyY2ggZmllbGQgcHJlZmVyZW5jZXMKICAgICAgICAgICAgbXkgJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSgkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyk7CgogICAgICAgICAgICBQUkVGRVJFTkNFOgogICAgICAgICAgICBmb3IgbXkgJFByZWZlcmVuY2UgKCBAeyRTZWFyY2hGaWVsZFByZWZlcmVuY2VzfSApIHsKCiAgICAgICAgICAgICAgICBteSAkRHluYW1pY0ZpZWxkVmFsdWUgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRWYWx1ZUdldCgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgICAgID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICA9PiAkUHJlZmVyZW5jZS0+e1R5cGV9LAogICAgICAgICAgICAgICAgICAgIFJldHVyblByb2ZpbGVTdHJ1Y3R1cmUgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIGNvbXBsZXRlIHZhbHVlIHN0cnVjdHVyZSBpbiAlRHluYW1pY0ZpZWxkVmFsdWVzIHRvIGRpc2NhcmQgdGhvc2Ugd2hlcmUgdGhlCiAgICAgICAgICAgICAgICAjIHZhbHVlIHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIGdldAogICAgICAgICAgICAgICAgbmV4dCBQUkVGRVJFTkNFIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkVmFsdWUpOwoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBwcm9maWxlCiAgICAgICAgICAgICAgICBteSAkU2VhcmNoUGFyYW1ldGVyID0gJEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkUGFyYW1ldGVyQnVpbGQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgUHJvZmlsZSAgICAgICAgICAgID0+IFwlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgID0+ICRQcmVmZXJlbmNlLT57VHlwZX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2V0IHNlYXJjaCBwYXJhbWV0ZXIKICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCAkU2VhcmNoUGFyYW1ldGVyICkgewogICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRTZWFyY2hQYXJhbWV0ZXJzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICRTZWFyY2hQYXJhbWV0ZXItPntQYXJhbWV0ZXJ9OwoKICAgICAgICAgICAgICAgICAgICAjIHNldCB2YWx1ZSB0byBkaXNwbGF5CiAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZFNlYXJjaERpc3BsYXl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJFNlYXJjaFBhcmFtZXRlci0+e0Rpc3BsYXl9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGRpc2FibGUgb3V0cHV0IG9mIGN1c3RvbWVyIGNvbXBhbnkgdGlja2V0cwogICAgICAgIG15ICREaXNhYmxlQ29tcGFueVRpY2tldHMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyRGlzYWJsZUNvbXBhbnlUaWNrZXRBY2Nlc3MnKTsKCiAgICAgICAgaWYgKCREaXNhYmxlQ29tcGFueVRpY2tldHMpIHsKICAgICAgICAgICAgJEdldFBhcmFte0N1c3RvbWVyVXNlckxvZ2luUmF3fSA9ICRTZWxmLT57VXNlcklEfTsKICAgICAgICB9CgogICAgICAgICMgcGVyZm9ybSB0aWNrZXQgc2VhcmNoCiAgICAgICAgbXkgQFZpZXdhYmxlVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgICAgICAgICBSZXN1bHQgICAgICAgICAgICAgID0+ICdBUlJBWScsCiAgICAgICAgICAgIFNvcnRCeSAgICAgICAgICAgICAgPT4gJFNvcnRCeSwKICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICAgICA9PiAkQ3VycmVudE9yZGVyLAogICAgICAgICAgICBMaW1pdCAgICAgICAgICAgICAgID0+ICRTZWFyY2hMaW1pdCwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIENvbmRpdGlvbklubGluZSAgICAgPT4gJENvbmZpZy0+e0V4dGVuZGVkU2VhcmNoQ29uZGl0aW9ufSwKICAgICAgICAgICAgQ29udGVudFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICAgICAgICAgIENvbnRlbnRTZWFyY2hTdWZmaXggPT4gJyonLAogICAgICAgICAgICBGdWxsVGV4dEluZGV4ICAgICAgID0+IDEsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJUR5bmFtaWNGaWVsZFNlYXJjaFBhcmFtZXRlcnMsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgICAgICBteSAkVXNlck9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKICAgICAgICBteSAkQ3VzdG9tZXJVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwoKICAgICAgICAjIENTViBhbmQgRXhjZWwgb3V0cHV0CiAgICAgICAgaWYgKAogICAgICAgICAgICAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gZXEgJ0NTVicKICAgICAgICAgICAgfHwgJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdFeGNlbCcKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgY3JlYXRlIGhlYWQgKGFjdHVhbCBoZWFkIGFuZCBoZWFkIGZvciBkYXRhIGZpbGwpCiAgICAgICAgICAgIG15IEBUbXBDU1ZIZWFkID0gQHsgJENvbmZpZy0+e1NlYXJjaENTVkRhdGF9IH07CiAgICAgICAgICAgIG15IEBDU1ZIZWFkICAgID0gQHsgJENvbmZpZy0+e1NlYXJjaENTVkRhdGF9IH07CgogICAgICAgICAgICAjIGdldCB0aGUgdGlja2V0IGR5bmFtaWMgZmllbGRzIGZvciBDU1YgZGlzcGxheQogICAgICAgICAgICBteSAkQ1NWRHluYW1pY0ZpZWxkID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICAgICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBPYmplY3RUeXBlICA9PiBbJ1RpY2tldCddLAogICAgICAgICAgICAgICAgRmllbGRGaWx0ZXIgPT4gJENvbmZpZy0+e1NlYXJjaENTVkR5bmFtaWNGaWVsZH0gfHwge30sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlZHVjZSB0aGUgZHluYW1pYyBmaWVsZHMgdG8gb25seSB0aGUgb25lcyB0aGF0IGFyZSBkZXNpbmdlZCBmb3IgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICAgICAgICAgIG15IEBDU1ZDdXN0b21lckR5bmFtaWNGaWVsZHM7CiAgICAgICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyRDU1ZEeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgICAgIG15ICRJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZSA9ICRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlOwoKICAgICAgICAgICAgICAgIHB1c2ggQENTVkN1c3RvbWVyRHluYW1pY0ZpZWxkcywgJER5bmFtaWNGaWVsZENvbmZpZzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkQ1NWRHluYW1pY0ZpZWxkID0gXEBDU1ZDdXN0b21lckR5bmFtaWNGaWVsZHM7CgogICAgICAgICAgICAjIGluY2x1ZGUgdGhlIHNlbGVjdGVkIGR5bmFtaWMgZmllbGRzIGluIENWUyByZXN1bHRzCiAgICAgICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyRDU1ZEeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWctPntOYW1lfTsKICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSBlcSAnJzsKCiAgICAgICAgICAgICAgICBwdXNoIEBUbXBDU1ZIZWFkLCAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICAgICAgICAgICAgICBwdXNoIEBDU1ZIZWFkLCAgICAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSBAQ1NWRGF0YTsKICAgICAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQFZpZXdhYmxlVGlja2V0SURzKSB7CgogICAgICAgICAgICAgICAgIyBHZXQgdGlja2V0IGRhdGEuCiAgICAgICAgICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgR2V0IGZpcnN0IGFydGljbGUgZGF0YS4KICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgICAgICAgICBPbmx5Rmlyc3QgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICVBcnRpY2xlOwogICAgICAgICAgICAgICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZXMpIHsKICAgICAgICAgICAgICAgICAgICAlQXJ0aWNsZSA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSggJXskQXJ0aWNsZX0gKS0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAlRGF0YTsKCiAgICAgICAgICAgICAgICAjIElmIG5vIGFydGljbGUgd2FzIGZvdW5kLCBzZXQgc29tZSBkZWZhdWx0cy4KICAgICAgICAgICAgICAgIGlmICggISVBcnRpY2xlICkgewogICAgICAgICAgICAgICAgICAgICVEYXRhICAgICAgICAgID0gJVRpY2tldDsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtTdWJqZWN0fSA9ICRUaWNrZXR7VGl0bGV9IHx8ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVW50aXRsZWQnKTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtCb2R5fSAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVGhpcyBpdGVtIGhhcyBubyBhcnRpY2xlcyB5ZXQuJyk7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7RnJvbX0gICAgPSAnLS0nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJURhdGEgPSAoICVUaWNrZXQsICVBcnRpY2xlICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZm9yIG15ICRLZXkgKHF3KFN0YXRlIExvY2spKSB7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7JEtleX0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICREYXRheyRLZXl9ICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJERhdGF7QWdlfSA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyQWdlKAojIFJvdGhlciBPU1MgLyBDdXN0b21lckFnZVNob3dDcmVhdGVkCiMgICAgICAgICAgICAgICAgICAgICBBZ2UgICA9PiAkRGF0YXtBZ2V9LAojICAgICAgICAgICAgICAgICAgICAgU3BhY2UgPT4gJyAnCiAgICAgICAgICAgICAgICAgICAgQWdlICAgICAgID0+ICREYXRhe0FnZX0sCiAgICAgICAgICAgICAgICAgICAgU3BhY2UgICAgID0+ICcgJywKICAgICAgICAgICAgICAgICAgICBDcmVhdGVkQXQgPT4gJERhdGF7Q3JlYXRlZH0sCiMgRU8gQ3VzdG9tZXJBZ2VTaG93Q3JlYXRlZAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGdldCB3aG9sZSBhcnRpY2xlIChpZiBjb25maWd1cmVkISkKICAgICAgICAgICAgICAgIGlmICggJENvbmZpZy0+e1NlYXJjaEFydGljbGVDU1ZUcmVlfSAmJiAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gZXEgJ0NTVicgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgQEFydGljbGVzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoQEFydGljbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSggJXskQXJ0aWNsZX0gKS0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgICAgID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZXtCb2R5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXtBcnRpY2xlVHJlZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLj0gIlxuLS0+IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJ8fCRBcnRpY2xle1NlbmRlclR5cGV9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJ8fCRBcnRpY2xle0Zyb219IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJ8fCRBcnRpY2xle0NyZWF0ZVRpbWV9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJ8fDwtLS0tLS0tLS0tLS0tLVxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRBcnRpY2xle0JvZHl9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXtBcnRpY2xlVHJlZX0gLj0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoaXMgaXRlbSBoYXMgbm8gYXJ0aWNsZXMgeWV0LicKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBjdXN0b21lciBpbmZvIChjdXN0b21lciBuYW1lKQogICAgICAgICAgICAgICAgaWYgKCAkRGF0YXtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7Q3VzdG9tZXJOYW1lfSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyTmFtZSgKICAgICAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICREYXRhe0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgdXNlciBpbmZvCiAgICAgICAgICAgICAgICBteSAlVXNlckluZm8gPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiAkRGF0YXtPd25lcn0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgbWVyZ2Ugcm93IGRhdGEKICAgICAgICAgICAgICAgIG15ICVJbmZvID0gKAogICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgICVVc2VySW5mbywKICAgICAgICAgICAgICAgICAgICBBY2NvdW50ZWRUaW1lID0+CiAgICAgICAgICAgICAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldEFjY291bnRlZFRpbWVHZXQoIFRpY2tldElEID0+ICRUaWNrZXRJRCApLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSBARGF0YTsKICAgICAgICAgICAgICAgIGZvciBteSAkSGVhZGVyIChAVG1wQ1NWSGVhZCkgewoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGhlYWRlciBpcyBhIGR5bmFtaWMgZmllbGQgYW5kIGdldCB0aGUgdmFsdWUgZnJvbSBkeW5hbWljIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgIyBiYWNrZW5kCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkSGVhZGVyID1+IG17XEEgRHluYW1pY0ZpZWxkXyAoIFthLXpBLVpcZF0rICkgXHp9eG1zICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBsb29wIG92ZXIgdGhlIGR5bmFtaWMgZmllbGRzIGNvbmZpZ3VyZWQgZm9yIENTViBvdXRwdXQKICAgICAgICAgICAgICAgICAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JENTVkR5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBhbGwgZmllbGRzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBjdXJyZW50IGZpZWxkIG5hbWUgKCQxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3aXRoIG91dCB0aGUgJ0R5bmFtaWNGaWVsZF8nIHByZWZpeAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IG5lICQxOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSB2YWx1ZSBmb3IgcHJpbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkSW5mb3skSGVhZGVyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MT3V0cHV0ICAgICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBEYXRhLCAkVmFsdWVTdHJnLT57VmFsdWV9OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVybWluYXRlIHRoZSBsb29wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IERZTkFNSUNGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgcmV0cmlldmUgZGF0YSBmcm9tIGFydGljbGUKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARGF0YSwgJEluZm97JEhlYWRlcn07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHVzaCBAQ1NWRGF0YSwgXEBEYXRhOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBTZXBhcmF0b3IgZnJvbSBsYW5ndWFnZSBmaWxlCiAgICAgICAgICAgIG15ICRVc2VyQ1NWU2VwYXJhdG9yID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+e1NlcGFyYXRvcn07CgogICAgICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnUHJlZmVyZW5jZXNHcm91cHMnKS0+e0NTVlNlcGFyYXRvcn0tPntBY3RpdmV9ICkgewogICAgICAgICAgICAgICAgbXkgJVVzZXJEYXRhID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKCBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9ICk7CiAgICAgICAgICAgICAgICAkVXNlckNTVlNlcGFyYXRvciA9ICRVc2VyRGF0YXtVc2VyQ1NWU2VwYXJhdG9yfSBpZiAkVXNlckRhdGF7VXNlckNTVlNlcGFyYXRvcn07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICVIZWFkZXJNYXAgPSAoCiAgICAgICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gVHJhbnNsYXRhYmxlKCdUaWNrZXQgTnVtYmVyJyksCiAgICAgICAgICAgICAgICBDdXN0b21lck5hbWUgPT4gVHJhbnNsYXRhYmxlKCdDdXN0b21lciBSZWFsbmFtZScpLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgQENTVkhlYWRUcmFuc2xhdGVkID0gbWFwIHsgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkSGVhZGVyTWFweyRffSB8fCAkXyApOyB9CiAgICAgICAgICAgICAgICBAQ1NWSGVhZDsKCiAgICAgICAgICAgICMgcmV0dXJuIGNzdiB0byBkb3dubG9hZAogICAgICAgICAgICBteSAkQ3VyU3lzdGVtRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgICAgICAgICAgbXkgJEZpbGVOYW1lICAgICAgICAgICAgICAgID0gc3ByaW50ZigKICAgICAgICAgICAgICAgICd0aWNrZXRfc2VhcmNoXyVzJywKICAgICAgICAgICAgICAgICRDdXJTeXN0ZW1EYXRlVGltZU9iamVjdC0+Rm9ybWF0KAogICAgICAgICAgICAgICAgICAgIEZvcm1hdCA9PiAnJVktJW0tJWRfJUgtJU0nCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBDU1Ygb2JqZWN0CiAgICAgICAgICAgIG15ICRDU1ZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q1NWJyk7CgogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtSZXN1bHRGb3JtfSBlcSAnQ1NWJyApIHsKCiAgICAgICAgICAgICAgICBteSAkQ1NWID0gJENTVk9iamVjdC0+QXJyYXkyQ1NWKAogICAgICAgICAgICAgICAgICAgIEhlYWQgPT4gXEBDU1ZIZWFkVHJhbnNsYXRlZCwKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IFxAQ1NWRGF0YSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGVOYW1lIC4gJy5jc3YnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJ0ZXh0L2NzdjsgY2hhcnNldD0iIC4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAkQ1NWLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmV0dXJuIEV4Y2VsIHRvIGRvd25sb2FkCiAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdFeGNlbCcgKSB7CiAgICAgICAgICAgICAgICBteSAkRXhjZWwgPSAkQ1NWT2JqZWN0LT5BcnJheTJDU1YoCiAgICAgICAgICAgICAgICAgICAgSGVhZCAgID0+IFxAQ1NWSGVhZFRyYW5zbGF0ZWQsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgID0+IFxAQ1NWRGF0YSwKICAgICAgICAgICAgICAgICAgICBGb3JtYXQgPT4gIkV4Y2VsIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGVOYW1lIC4gJy54bHN4JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQiLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRFeGNlbCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2lmICggJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdQcmludCcgKSB7CgogICAgICAgICAgICAjIGdldCBQREYgb2JqZWN0CiAgICAgICAgICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgICAgICAgICBteSBAUERGRGF0YTsKICAgICAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQFZpZXdhYmxlVGlja2V0SURzKSB7CgogICAgICAgICAgICAgICAgIyBHZXQgdGlja2V0IGRhdGEuCiAgICAgICAgICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICBFeHRlbmRlZCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgR2V0IGxhc3QgY3VzdG9tZXIgYXJ0aWNsZS4KICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgICAgIE9ubHlMYXN0ICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgSWYgdGhlIHRpY2tldCBoYXMgbm8gY3VzdG9tZXIgYXJ0aWNsZSwgZ2V0IHRoZSBsYXN0IGFnZW50IGFydGljbGUuCiAgICAgICAgICAgICAgICBpZiAoICFAQXJ0aWNsZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgQEFydGljbGVzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICdhZ2VudCcsCiAgICAgICAgICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIE9ubHlMYXN0ICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEZpbmFsbHksIGlmIGV2ZXJ5dGhpbmcgZmFpbGVkLCBnZXQgbGF0ZXN0IGFydGljbGUuCiAgICAgICAgICAgICAgICBpZiAoICFAQXJ0aWNsZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgQEFydGljbGVzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIE9ubHlMYXN0ICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZTsKICAgICAgICAgICAgICAgIGZvciBteSAkQXJ0aWNsZSAoQEFydGljbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgJUFydGljbGUgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoICV7JEFydGljbGV9ICktPkFydGljbGVHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEFydGljbGV9LAogICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAlRGF0YTsKCiAgICAgICAgICAgICAgICAjIElmIG5vIGFydGljbGUgd2FzIGZvdW5kLCBzZXQgc29tZSBkZWZhdWx0cy4KICAgICAgICAgICAgICAgIGlmICggISVBcnRpY2xlICkgewogICAgICAgICAgICAgICAgICAgICVEYXRhICAgICAgICAgID0gJVRpY2tldDsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtTdWJqZWN0fSA9ICRUaWNrZXR7VGl0bGV9IHx8ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVW50aXRsZWQnKTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtGcm9tfSAgICA9ICctLSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAlRGF0YSA9ICggJVRpY2tldCwgJUFydGljbGUgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGN1c3RvbWVyIGluZm8KICAgICAgICAgICAgICAgIG15ICVDdXN0b21lckRhdGE7CiAgICAgICAgICAgICAgICBpZiAoICREYXRhe0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAgICAgICAgICAgICAlQ3VzdG9tZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgVXNlciA9PiAkRGF0YXtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJERhdGF7Q3VzdG9tZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJUN1c3RvbWVyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgPT4gJERhdGF7Q3VzdG9tZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGN1c3RvbWVyIGluZm8gKGN1c3RvbWVyIG5hbWUpCiAgICAgICAgICAgICAgICBpZiAoICRDdXN0b21lckRhdGF7VXNlckxvZ2lufSApIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtDdXN0b21lck5hbWV9ID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJOYW1lKAogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJEN1c3RvbWVyRGF0YXtVc2VyTG9naW59LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyB1c2VyIGluZm8KICAgICAgICAgICAgICAgIG15ICVVc2VySW5mbyA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgICAgICBVc2VyID0+ICREYXRhe093bmVyfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjdXN0b21lciBpbmZvIHN0cmluZwogICAgICAgICAgICAgICAgJFVzZXJJbmZve0N1c3RvbWVyTmFtZX0gPSAnKCcgLiAkVXNlckluZm97Q3VzdG9tZXJOYW1lfSAuICcpJwogICAgICAgICAgICAgICAgICAgIGlmICggJFVzZXJJbmZve0N1c3RvbWVyTmFtZX0gKTsKCiAgICAgICAgICAgICAgICBteSAlSW5mbyAgICA9ICggJURhdGEsICVVc2VySW5mbyApOwogICAgICAgICAgICAgICAgbXkgJENyZWF0ZWQgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5Gb3JtYXRUaW1lU3RyaW5nKAogICAgICAgICAgICAgICAgICAgICREYXRhe0NyZWF0ZVRpbWV9IC8vICREYXRhe0NyZWF0ZWR9LAogICAgICAgICAgICAgICAgICAgICdEYXRlRm9ybWF0JywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJEN1c3RvbWVyID0gIiREYXRhe0N1c3RvbWVySUR9ICREYXRhe0N1c3RvbWVyTmFtZX0iOwoKICAgICAgICAgICAgICAgIG15IEBQREZSb3c7CiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICAkRGF0YXtUaWNrZXROdW1iZXJ9OwogICAgICAgICAgICAgICAgcHVzaCBAUERGUm93LCAgJENyZWF0ZWQ7CiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICAkRGF0YXtGcm9tfTsKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgICREYXRhe1N1YmplY3R9OwogICAgICAgICAgICAgICAgcHVzaCBAUERGUm93LCAgJERhdGF7U3RhdGV9OwogICAgICAgICAgICAgICAgcHVzaCBAUERGUm93LCAgJERhdGF7UXVldWV9OwogICAgICAgICAgICAgICAgcHVzaCBAUERGUm93LCAgJEN1c3RvbWVyOwogICAgICAgICAgICAgICAgcHVzaCBAUERGRGF0YSwgXEBQREZSb3c7CgogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkVGl0bGUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1RpY2tldCcpIC4gJyAnCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU2VhcmNoJyk7CiAgICAgICAgICAgIG15ICRQcmludGVkQnkgICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgncHJpbnRlZCBieScpOwogICAgICAgICAgICBteSAkUGFnZSAgICAgICAgICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1BhZ2UnKTsKICAgICAgICAgICAgbXkgJERhdGVUaW1lU3RyaW5nID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvU3RyaW5nKCk7CiAgICAgICAgICAgIG15ICRUaW1lICAgICAgICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkZvcm1hdFRpbWVTdHJpbmcoCiAgICAgICAgICAgICAgICAkRGF0ZVRpbWVTdHJpbmcsCiAgICAgICAgICAgICAgICAnRGF0ZUZvcm1hdCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBtYXhpbXVtIG51bWJlciBvZiBwYWdlcwogICAgICAgICAgICBteSAkTWF4UGFnZXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1BERjo6TWF4UGFnZXMnKTsKICAgICAgICAgICAgaWYgKCAhJE1heFBhZ2VzIHx8ICRNYXhQYWdlcyA8IDEgfHwgJE1heFBhZ2VzID4gMTAwMCApIHsKICAgICAgICAgICAgICAgICRNYXhQYWdlcyA9IDEwMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJENlbGxEYXRhOwoKICAgICAgICAgICAgIyB2ZXJpZnkgaWYgdGhlcmUgYXJlIHRpY2tldHMgdG8gc2hvdwogICAgICAgICAgICBpZiAoQFBERkRhdGEpIHsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgaGVhZGVyCiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzBdLT57Q29udGVudH0gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6SG9vaycpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlswXS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlsxXS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDcmVhdGVkJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzFdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzJdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0Zyb20nKTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMl0tPntGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bM10tPntDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnU3ViamVjdCcpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlszXS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls0XS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdTdGF0ZScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls0XS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls1XS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdRdWV1ZScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls1XS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls2XS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDdXN0b21lcklEJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzZdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgdGhlIGNvbnRlbnQgYXJyYXkKICAgICAgICAgICAgICAgIG15ICRDb3VudGVyUm93ID0gMTsKICAgICAgICAgICAgICAgIGZvciBteSAkUm93IChAUERGRGF0YSkgewogICAgICAgICAgICAgICAgICAgIG15ICRDb3VudGVyQ29sdW1uID0gMDsKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJENvbnRlbnQgKCBAeyRSb3d9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlskQ291bnRlclJvd10tPlskQ291bnRlckNvbHVtbl0tPntDb250ZW50fSA9ICRDb250ZW50OwogICAgICAgICAgICAgICAgICAgICAgICAkQ291bnRlckNvbHVtbisrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkQ291bnRlclJvdysrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG90aGVyd2lzZSwgc2hvdyAnTm8gdGlja2V0IGRhdGEgZm91bmQnIG1lc3NhZ2UKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzBdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ05vIHRpY2tldCBkYXRhIGZvdW5kLicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHBhZ2UgcGFyYW1zCiAgICAgICAgICAgIG15ICVQYWdlUGFyYW07CiAgICAgICAgICAgICRQYWdlUGFyYW17UGFnZU9yaWVudGF0aW9ufSA9ICdsYW5kc2NhcGUnOwogICAgICAgICAgICAkUGFnZVBhcmFte01hcmdpblRvcH0gICAgICAgPSAzMDsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5SaWdodH0gICAgID0gNDA7CiAgICAgICAgICAgICRQYWdlUGFyYW17TWFyZ2luQm90dG9tfSAgICA9IDQwOwogICAgICAgICAgICAkUGFnZVBhcmFte01hcmdpbkxlZnR9ICAgICAgPSA0MDsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtIZWFkZXJSaWdodH0gICAgID0gJFRpdGxlOwogICAgICAgICAgICAkUGFnZVBhcmFte0hlYWRsaW5lTGVmdH0gICAgPSAkVGl0bGU7CgogICAgICAgICAgICAjIHRhYmxlIHBhcmFtcwogICAgICAgICAgICBteSAlVGFibGVQYXJhbTsKICAgICAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9ICAgICAgICAgICAgPSAkQ2VsbERhdGE7CiAgICAgICAgICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAgICAgICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgID0gNjsKICAgICAgICAgICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgPSAwOwogICAgICAgICAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3JFdmVufSA9ICcjREREREREJzsKICAgICAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICAgICAgPSAxOwogICAgICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICA9IDM7CiAgICAgICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgID0gMzsKCiAgICAgICAgICAgICMgY3JlYXRlIG5ldyBwZGYgZG9jdW1lbnQKICAgICAgICAgICAgJFBERk9iamVjdC0+RG9jdW1lbnROZXcoCiAgICAgICAgICAgICAgICBUaXRsZSAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9kdWN0JykgLiAnOiAnIC4gJFRpdGxlLAogICAgICAgICAgICAgICAgRW5jb2RlID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHN0YXJ0IHRhYmxlIG91dHB1dAogICAgICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgJVBhZ2VQYXJhbSwKICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdlIC4gJyAxJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgICAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgICAgICAgICBZICAgID0+IC02LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBvdXRwdXQgdGl0bGUKICAgICAgICAgICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICAgICAgICAgIFRleHQgICAgID0+ICRUaXRsZSwKICAgICAgICAgICAgICAgIEZvbnRTaXplID0+IDEzLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgICAgIFkgICAgPT4gLTYsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCAicHJpbnRlZCBieSIKICAgICAgICAgICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICAgICAgICAgIFRleHQgPT4gJFByaW50ZWRCeSAuICcgJwogICAgICAgICAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRnVsbG5hbWV9IC4gJyAoJwogICAgICAgICAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRW1haWx9IC4gJyknCiAgICAgICAgICAgICAgICAgICAgLiAnLCAnIC4gJFRpbWUsCiAgICAgICAgICAgICAgICBGb250U2l6ZSA9PiA5LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgICAgIFkgICAgPT4gLTE0LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgUEFHRToKICAgICAgICAgICAgZm9yIG15ICRQYWdlTnVtYmVyICggMiAuLiAkTWF4UGFnZXMgKSB7CgogICAgICAgICAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgICAgICAgICAlVGFibGVQYXJhbSA9ICRQREZPYmplY3QtPlRhYmxlKCVUYWJsZVBhcmFtKTsKCiAgICAgICAgICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIGFub3RoZXIgcGFnZQogICAgICAgICAgICAgICAgaWYgKCAkVGFibGVQYXJhbXtTdGF0ZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgbGFzdCBQQUdFOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgICAgICAgICAgICAgJVBhZ2VQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gJFBhZ2UgLiAnICcgLiAkUGFnZU51bWJlciwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJldHVybiB0aGUgcGRmIGRvY3VtZW50CiAgICAgICAgICAgIG15ICRDdXJTeXN0ZW1EYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwogICAgICAgICAgICBteSAkRmlsZW5hbWUgICAgICAgICAgICAgICAgPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgJ3RpY2tldF9zZWFyY2hfJXMucGRmJywKICAgICAgICAgICAgICAgICRDdXJTeXN0ZW1EYXRlVGltZU9iamVjdC0+Rm9ybWF0KCBGb3JtYXQgPT4gJyVZLSVtLSVkXyVILSVNJyApLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJFBERlN0cmluZyA9ICRQREZPYmplY3QtPkRvY3VtZW50T3V0cHV0KCk7CgogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJhcHBsaWNhdGlvbi9wZGYiLAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFBERlN0cmluZywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICApOwoKICAgICAgICB9CgogICAgICAgIG15ICRDb3VudGVyID0gMDsKCiAgICAgICAgIyBnZXQgdGhlIHRpY2tldCBkeW5hbWljIGZpZWxkcyBmb3Igb3ZlcnZpZXcgZGlzcGxheQogICAgICAgIG15ICRPdmVydmlld0R5bmFtaWNGaWVsZCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgICAgIE9iamVjdFR5cGUgID0+IFsnVGlja2V0J10sCiAgICAgICAgICAgIEZpZWxkRmlsdGVyID0+ICRDb25maWctPntTZWFyY2hPdmVydmlld0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICAgICAgKTsKCiAgICAgICAgIyByZWR1Y2UgdGhlIGR5bmFtaWMgZmllbGRzIHRvIG9ubHkgdGhlIG9uZXMgdGhhdCBhcmUgZGVzaW5nZWQgZm9yIGN1c3RvbWVyIGludGVyZmFjZQogICAgICAgIG15IEBPdmVydmlld0N1c3RvbWVyRHluYW1pY0ZpZWxkczsKICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyRPdmVydmlld0R5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgIG15ICRJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZSA9ICRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgQmVoYXZpb3IgICAgICAgICAgID0+ICdJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkSXNDdXN0b21lckludGVyZmFjZUNhcGFibGU7CgogICAgICAgICAgICBwdXNoIEBPdmVydmlld0N1c3RvbWVyRHluYW1pY0ZpZWxkcywgJER5bmFtaWNGaWVsZENvbmZpZzsKICAgICAgICB9CiAgICAgICAgJE92ZXJ2aWV3RHluYW1pY0ZpZWxkID0gXEBPdmVydmlld0N1c3RvbWVyRHluYW1pY0ZpZWxkczsKCiAgICAgICAgIyBpZiB0aGVyZSBhcmUgcmVzdWx0cyB0byBzaG93CiAgICAgICAgaWYgKEBWaWV3YWJsZVRpY2tldElEcykgewoKICAgICAgICAgICAgIyBEeW5hbWljIGZpZWxkcyB0YWJsZSBoZWFkZXJzCiAgICAgICAgICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskT3ZlcnZpZXdEeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgICAgIG15ICRMYWJlbCA9ICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH07CgogICAgICAgICAgICAgICAgIyBnZXQgZmllbGQgc29ydGFibGUgY29uZGl0aW9uCiAgICAgICAgICAgICAgICBteSAkSXNTb3J0YWJsZSA9ICRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzU29ydGFibGUnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoJElzU29ydGFibGUpIHsKICAgICAgICAgICAgICAgICAgICBteSAkQ1NTICAgPSAnJzsKICAgICAgICAgICAgICAgICAgICBteSAkT3JkZXIgPSAnRG93bic7CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkU29ydEJ5CiAgICAgICAgICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTb3J0QnkgZXEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICggJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9ICkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRDdXJyZW50T3JkZXIgJiYgKCAkQ3VycmVudE9yZGVyIGVxICdVcCcgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRPcmRlciA9ICdEb3duJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDU1MgLj0gJyBTb3J0QXNjZW5kaW5nJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRPcmRlciA9ICdVcCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydERlc2NlbmRpbmcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1MgPT4gJENTUywKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyRHluYW1pY0ZpZWxkU29ydGFibGUnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyICAgICAgICAgICAgPT4gJE9yZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGROYW1lID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJEeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyRHluYW1pY0ZpZWxkTm90U29ydGFibGUnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsID0+ICRMYWJlbCwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgbXkgJFRpY2tldElEIChAVmlld2FibGVUaWNrZXRJRHMpIHsKICAgICAgICAgICAgICAgICRDb3VudGVyKys7CgogICAgICAgICAgICAgICAgIyBidWlsZCBzZWFyY2ggcmVzdWx0CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJENvdW50ZXIgPj0gJFN0YXJ0SGl0CiAgICAgICAgICAgICAgICAgICAgJiYgJENvdW50ZXIgPCAoICRTZWFyY2hQYWdlU2hvd24gKyAkU3RhcnRIaXQgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgIyBHZXQgdGlja2V0IGRhdGEuCiAgICAgICAgICAgICAgICAgICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWQgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIEdldCBsYXN0IGN1c3RvbWVyIGFydGljbGUuCiAgICAgICAgICAgICAgICAgICAgbXkgQEFydGljbGVzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIE9ubHlMYXN0ICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGUgdGlja2V0IGhhcyBubyBjdXN0b21lciBhcnRpY2xlLCBnZXQgdGhlIGxhc3QgYWdlbnQgYXJ0aWNsZS4KICAgICAgICAgICAgICAgICAgICBpZiAoICFAQXJ0aWNsZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICdhZ2VudCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seUxhc3QgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgRmluYWxseSwgaWYgZXZlcnl0aGluZyBmYWlsZWQsIGdldCBsYXRlc3QgYXJ0aWNsZS4KICAgICAgICAgICAgICAgICAgICBpZiAoICFAQXJ0aWNsZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5TGFzdCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJUFydGljbGU7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJUFydGljbGUgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoICV7JEFydGljbGV9ICktPkFydGljbGVHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAleyRBcnRpY2xlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIG15ICVEYXRhOwoKICAgICAgICAgICAgICAgICAgICAjIElmIG5vIGFydGljbGUgd2FzIGZvdW5kLCBzZXQgc29tZSBkZWZhdWx0cy4KICAgICAgICAgICAgICAgICAgICBpZiAoICElQXJ0aWNsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJURhdGEgICAgICAgICAgPSAlVGlja2V0OwogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXtTdWJqZWN0fSA9ICRUaWNrZXR7VGl0bGV9IHx8ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVW50aXRsZWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7Qm9keX0gICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyBpdGVtIGhhcyBubyBhcnRpY2xlcyB5ZXQuJwogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJURhdGEgPSAoICVUaWNrZXQsICVBcnRpY2xlICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGN1c3RvbWVyIGluZm8KICAgICAgICAgICAgICAgICAgICBteSAlQ3VzdG9tZXJEYXRhOwogICAgICAgICAgICAgICAgICAgIGlmICggJERhdGF7Q3VzdG9tZXJVc2VySUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAlQ3VzdG9tZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gJERhdGF7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICREYXRhe0N1c3RvbWVySUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAlQ3VzdG9tZXJEYXRhID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gJERhdGF7Q3VzdG9tZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGN1c3RvbWVyIGluZm8gKGN1c3RvbWVyIG5hbWUpCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ3VzdG9tZXJEYXRhe1VzZXJMb2dpbn0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRhe0N1c3RvbWVyTmFtZX0gPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lck5hbWUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJEN1c3RvbWVyRGF0YXtVc2VyTG9naW59LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyB1c2VyIGluZm8KICAgICAgICAgICAgICAgICAgICBteSAlT3duZXIgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIgPT4gJERhdGF7T3duZXJ9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgQ29uZGVuc2UgZG93biB0aGUgc3ViamVjdAogICAgICAgICAgICAgICAgICAgIG15ICRTdWJqZWN0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3ViamVjdENsZWFuKAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJERhdGF7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgID0+ICREYXRhe1N1YmplY3R9IHx8ICcnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7Q3VzdG9tZXJBZ2V9ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJBZ2UoCiMgUm90aGVyIE9TUyAvIEN1c3RvbWVyQWdlU2hvd0NyZWF0ZWQKIyAgICAgICAgICAgICAgICAgICAgICAgICBBZ2UgICA9PiAkRGF0YXtBZ2V9LAojICAgICAgICAgICAgICAgICAgICAgICAgIFNwYWNlID0+ICcgJywKICAgICAgICAgICAgICAgICAgICAgICAgQWdlICAgICAgID0+ICREYXRhe0FnZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIFNwYWNlICAgICA9PiAnICcsCiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZWRBdCA9PiAkRGF0YXtDcmVhdGVkfSwKIyBFTyBDdXN0b21lckFnZVNob3dDcmVhdGVkCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBjdXN0b21lciBpbmZvIHN0cmluZwogICAgICAgICAgICAgICAgICAgIGlmICggJERhdGF7Q3VzdG9tZXJOYW1lfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7Q3VzdG9tZXJOYW1lfSA9ICcoJyAuICREYXRhe0N1c3RvbWVyTmFtZX0gLiAnKSc7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGFkZCBibG9ja3MgdG8gdGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJFN1YmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlT3duZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBEeW5hbWljIGZpZWxkcwogICAgICAgICAgICAgICAgICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgICAgICAgICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JE92ZXJ2aWV3RHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgZmllbGQgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRGF0YXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZU1heENoYXJzICAgICAgPT4gMjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBzaG93IGEgbm8gZGF0YSBmb3VuZCBtc2cKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJyApOwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGF0dHJpYnV0ZXMgdXNlZCBmb3Igc2VhcmNoCiAgICAgICAgbXkgJUlETWFwID0gKAogICAgICAgICAgICBTdGF0ZUlEcyA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAnU3RhdGUnLAogICAgICAgICAgICAgICAgT2JqZWN0ICAgICAgPT4gJ1N0YXRlJywKICAgICAgICAgICAgICAgIE1ldGhvZCAgICAgID0+ICdTdGF0ZUxvb2t1cCcsCiAgICAgICAgICAgICAgICBLZXkgICAgICAgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBTdGF0ZVR5cGVJRHMgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ1N0YXRlVHlwZScsCiAgICAgICAgICAgICAgICBPYmplY3QgICAgICA9PiAnU3RhdGUnLAogICAgICAgICAgICAgICAgTWV0aG9kICAgICAgPT4gJ1N0YXRlVHlwZUxvb2t1cCcsCiAgICAgICAgICAgICAgICBLZXkgICAgICAgICA9PiAnU3RhdGVUeXBlSUQnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUHJpb3JpdHlJRHMgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgICAgIE9iamVjdCAgICAgID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgICAgICBNZXRob2QgICAgICA9PiAnUHJpb3JpdHlMb29rdXAnLAogICAgICAgICAgICAgICAgS2V5ICAgICAgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUXVldWVJRHMgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgICAgIE9iamVjdCAgICAgID0+ICdRdWV1ZScsCiAgICAgICAgICAgICAgICBNZXRob2QgICAgICA9PiAnUXVldWVMb29rdXAnLAogICAgICAgICAgICAgICAgS2V5ICAgICAgICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgT3duZXJJRHMgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ093bmVyJywKICAgICAgICAgICAgICAgIE9iamVjdCAgICAgID0+ICdVc2VyJywKICAgICAgICAgICAgICAgIE1ldGhvZCAgICAgID0+ICdVc2VyTG9va3VwJywKICAgICAgICAgICAgICAgIEtleSAgICAgICAgID0+ICdVc2VySUQnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVzcG9uc2libGVJRHMgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ1Jlc3BvbnNpYmxlJywKICAgICAgICAgICAgICAgIE9iamVjdCAgICAgID0+ICdVc2VyJywKICAgICAgICAgICAgICAgIE1ldGhvZCAgICAgID0+ICdVc2VyTG9va3VwJywKICAgICAgICAgICAgICAgIEtleSAgICAgICAgID0+ICdVc2VySUQnLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIFJlc3BvbnNpYmxlSURzID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdSZXNwb25zaWJsZScsCiAgICAgICAgICAgICAgICBPYmplY3QgICAgICA9PiAnVXNlcicsCiAgICAgICAgICAgICAgICBNZXRob2QgICAgICA9PiAnVXNlckxvb2t1cCcsCiAgICAgICAgICAgICAgICBLZXkgICAgICAgICA9PiAnVXNlcklEJywKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICgKICAgICAgICAgICAgcXcoVGlja2V0TnVtYmVyIEZyb20gVG8gQ2MgU3ViamVjdCBCb2R5IEN1c3RvbWVySUQgVGltZVNlYXJjaFR5cGUgU3RhdGVUeXBlCiAgICAgICAgICAgIFN0YXRlSURzIFN0YXRlVHlwZUlEcyBQcmlvcml0eUlEcyBPd25lcklEcyBSZXNwb25zaWJsZUlEcwogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG5leHQgS0VZIGlmICEkR2V0UGFyYW17JEtleX07CiAgICAgICAgICAgIG15ICRBdHRyaWJ1dGUgICA9ICRJRE1hcHskS2V5fS0+e05hbWV9ICAgfHwgJEtleTsKICAgICAgICAgICAgbXkgJE9iamVjdCAgICAgID0gJElETWFweyRLZXl9LT57T2JqZWN0fSB8fCAnJzsKICAgICAgICAgICAgbXkgJE1ldGhvZCAgICAgID0gJElETWFweyRLZXl9LT57TWV0aG9kfTsKICAgICAgICAgICAgbXkgJE1ldGhvZEtleSAgID0gJElETWFweyRLZXl9LT57S2V5fTsKICAgICAgICAgICAgbXkgJFRyYW5zbGF0aW9uID0gJElETWFweyRLZXl9LT57VHJhbnNsYXRpb259OwogICAgICAgICAgICBteSAkVmFsdWU7CgogICAgICAgICAgICAjIGdldCBhcHByb3ByaWF0ZSBvYmplY3QKICAgICAgICAgICAgbXkgJExvb2t1cE9iamVjdDsKICAgICAgICAgICAgaWYgKCAkSURNYXB7JEtleX0tPntOYW1lfSApIHsKICAgICAgICAgICAgICAgICRMb29rdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCAnS2VybmVsOjpTeXN0ZW06OicgLiAkT2JqZWN0ICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggcmVmICRHZXRQYXJhbXskS2V5fSBlcSAnQVJSQVknICkgewogICAgICAgICAgICAgICAgZm9yIG15ICRJdGVtUmF3ICggQHsgJEdldFBhcmFteyRLZXl9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEl0ZW0gPSAkSXRlbVJhdzsKICAgICAgICAgICAgICAgICAgICBpZiAoJFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRWYWx1ZSAuPSAnKyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgkTG9va3VwT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRJdGVtID0gJExvb2t1cE9iamVjdC0+JE1ldGhvZCggJE1ldGhvZEtleSA9PiAkSXRlbSApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFRyYW5zbGF0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSXRlbSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkSXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJFZhbHVlIC49ICRJdGVtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbXkgJEl0ZW0gPSAkR2V0UGFyYW17JEtleX07CiAgICAgICAgICAgICAgICBpZiAoJExvb2t1cE9iamVjdCkgewogICAgICAgICAgICAgICAgICAgICRJdGVtID0gJExvb2t1cE9iamVjdC0+JE1ldGhvZCggJE1ldGhvZEtleSA9PiAkSXRlbSApOwogICAgICAgICAgICAgICAgICAgIGlmICgkVHJhbnNsYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEl0ZW0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJEl0ZW0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRWYWx1ZSA9ICRJdGVtOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRLZXkgZXEgJ1RpbWVTZWFyY2hUeXBlJyApIHsKCiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtUaW1lU2VhcmNoVHlwZX0gZXEgJ1RpbWVTbG90JyApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJFN0YXJ0RGF0ZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkZvcm1hdFRpbWVTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtUaWNrZXRDcmVhdGVUaW1lU3RhcnRZZWFyfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnLScgLiAkR2V0UGFyYW17VGlja2V0Q3JlYXRlVGltZVN0YXJ0TW9udGh9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICctJyAuICRHZXRQYXJhbXtUaWNrZXRDcmVhdGVUaW1lU3RhcnREYXl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICcgMDA6MDA6MDAnLCAnRGF0ZUZvcm1hdFNob3J0JwogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIG15ICRTdG9wRGF0ZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPkZvcm1hdFRpbWVTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtUaWNrZXRDcmVhdGVUaW1lU3RvcFllYXJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICctJyAuICRHZXRQYXJhbXtUaWNrZXRDcmVhdGVUaW1lU3RvcE1vbnRofQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnLScgLiAkR2V0UGFyYW17VGlja2V0Q3JlYXRlVGltZVN0b3BEYXl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICcgMDA6MDA6MDAnLCAnRGF0ZUZvcm1hdFNob3J0JwogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICRBdHRyaWJ1dGUgPSAnQ3JlYXRlZCBiZXR3ZWVuJzsKICAgICAgICAgICAgICAgICAgICAkVmFsdWUgICAgID0gJFN0YXJ0RGF0ZSAuICcgJwogICAgICAgICAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnYW5kJykgLiAnICcKICAgICAgICAgICAgICAgICAgICAgICAgLiAkU3RvcERhdGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJE1hcHBpbmcgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICdMYXN0JyAgID0+IFRyYW5zbGF0YWJsZSgnQ3JlYXRlZCB3aXRoaW4gdGhlIGxhc3QnKSwKICAgICAgICAgICAgICAgICAgICAgICAgJ0JlZm9yZScgPT4gVHJhbnNsYXRhYmxlKCdDcmVhdGVkIG1vcmUgdGhhbiAuLi4gYWdvJyksCiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgJEF0dHJpYnV0ZSA9ICRNYXBwaW5nLT57ICRHZXRQYXJhbXtUaWNrZXRDcmVhdGVUaW1lUG9pbnRTdGFydH0gfTsKICAgICAgICAgICAgICAgICAgICAkVmFsdWUgICAgID0gJEdldFBhcmFte1RpY2tldENyZWF0ZVRpbWVQb2ludH0gLiAnICcKICAgICAgICAgICAgICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICRHZXRQYXJhbXtUaWNrZXRDcmVhdGVUaW1lUG9pbnRGb3JtYXR9IC4gJyhzKScgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTZWFyY2hUZXJtcycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlID0+ICRBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgID0+ICRLZXksCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGN5Y2xlIHRocm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxECiAgICAgICAgICAgICAgICBpZiAhJER5bmFtaWNGaWVsZFNlYXJjaERpc3BsYXl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9OwoKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTZWFyY2hUZXJtcycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZFNlYXJjaERpc3BsYXl7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICRMaW5rID0gJ1Byb2ZpbGU9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJFByb2ZpbGUpIC4gJzsnOwogICAgICAgICRMaW5rIC49ICdTb3J0Qnk9JyAuICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJFNvcnRCeSkgLiAnOyc7CiAgICAgICAgJExpbmsgLj0gJ09yZGVyPScgLiAkTGF5b3V0T2JqZWN0LT5MaW5rRW5jb2RlKCRDdXJyZW50T3JkZXIpIC4gJzsnOwogICAgICAgICRMaW5rIC49ICdUYWtlTGFzdFNlYXJjaD0xOyc7CgogICAgICAgICMgYnVpbGQgc2VhcmNoIG5hdmlnYXRpb24gYmFyCiAgICAgICAgbXkgJVBhZ2VOYXYgPSAkTGF5b3V0T2JqZWN0LT5QYWdlTmF2QmFyKAogICAgICAgICAgICBMaW1pdCAgICAgPT4gJFNlYXJjaExpbWl0LAogICAgICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgICAgICBQYWdlU2hvd24gPT4gJFNlYXJjaFBhZ2VTaG93biwKICAgICAgICAgICAgQWxsSGl0cyAgID0+ICRDb3VudGVyLAogICAgICAgICAgICBBY3Rpb24gICAgPT4gIkFjdGlvbj1DdXN0b21lclRpY2tldFNlYXJjaDtTdWJhY3Rpb249U2VhcmNoIiwKICAgICAgICAgICAgTGluayAgICAgID0+ICRMaW5rLAogICAgICAgICAgICBJRFByZWZpeCAgPT4gIkN1c3RvbWVyVGlja2V0U2VhcmNoIiwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgZm9vdGVyIGZpbHRlciAtIHNob3cgb25seSBpZiBtb3JlIHRoZSBvbmUgcGFnZSBpcyBhdmFpbGFibGUKICAgICAgICBpZiAoICRTZWFyY2hMaW1pdCAmJiAoICRTZWFyY2hMaW1pdCA+ICRTZWFyY2hQYWdlU2hvd24gKSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdQYWdpbmF0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlUGFnZU5hdiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkT3JkZXIgPSAnRG93bic7CiAgICAgICAgaWYgKCAkQ3VycmVudE9yZGVyIGVxICdEb3duJyApIHsKICAgICAgICAgICAgJE9yZGVyID0gJ1VwJzsKICAgICAgICB9CiAgICAgICAgbXkgJFNvcnQgICAgICAgPSAnJzsKICAgICAgICBteSAkU3RhdGVTb3J0ICA9ICcnOwogICAgICAgIG15ICRUaWNrZXRTb3J0ID0gJyc7CiAgICAgICAgbXkgJEFnZVNvcnQgICAgPSAnJzsKCiAgICAgICAgIyBkZWZpbmUgc29ydCBvcmRlcgogICAgICAgIGlmICggJE9yZGVyIGVxICdEb3duJyApIHsKICAgICAgICAgICAgJFNvcnQgPSAnU29ydEFzY2VuZGluZyc7CiAgICAgICAgfQogICAgICAgIGlmICggJE9yZGVyIGVxICdVcCcgKSB7CiAgICAgICAgICAgICRTb3J0ID0gJ1NvcnREZXNjZW5kaW5nJzsKICAgICAgICB9CgogICAgICAgIGlmICggJFNvcnRCeSBlcSAnU3RhdGUnICkgewogICAgICAgICAgICAkU3RhdGVTb3J0ID0gJFNvcnQ7CiAgICAgICAgfQogICAgICAgIGlmICggJFNvcnRCeSBlcSAnVGlja2V0JyApIHsKICAgICAgICAgICAgJFRpY2tldFNvcnQgPSAkU29ydDsKICAgICAgICB9CiAgICAgICAgaWYgKCAkU29ydEJ5IGVxICdBZ2UnICkgewogICAgICAgICAgICAkQWdlU29ydCA9ICRTb3J0OwogICAgICAgIH0KCiAgICAgICAgIyBzdGFydCBodG1sIHBhZ2UKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJIZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyTmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0N1c3RvbWVyVGlja2V0U2VhcmNoUmVzdWx0U2hvcnQnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJVBhZ2VOYXYsCiAgICAgICAgICAgICAgICBPcmRlciAgICAgICA9PiAkT3JkZXIsCiAgICAgICAgICAgICAgICBTdGF0ZVNvcnQgICA9PiAkU3RhdGVTb3J0LAogICAgICAgICAgICAgICAgVGlja2V0U29ydCAgPT4gJFRpY2tldFNvcnQsCiAgICAgICAgICAgICAgICBBZ2VTb3J0ICAgICA9PiAkQWdlU29ydCwKICAgICAgICAgICAgICAgIFByb2ZpbGUgICAgID0+ICRQcm9maWxlLAogICAgICAgICAgICAgICAgUHJvZmlsZU5hbWUgPT4gJFByb2ZpbGVOYW1lLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIGVtcHR5IHNlYXJjaCBzaXRlCiAgICBlbHNlIHsKCiAgICAgICAgIyBkZWxldGUgcHJvZmlsZQogICAgICAgIGlmICggJEVyYXNlVGVtcGxhdGUgJiYgJFByb2ZpbGUgKSB7CgogICAgICAgICAgICAjIHJlbW92ZSBvbGQgcHJvZmlsZSBzdHVmZgogICAgICAgICAgICAkU2VhcmNoUHJvZmlsZU9iamVjdC0+U2VhcmNoUHJvZmlsZURlbGV0ZSgKICAgICAgICAgICAgICAgIEJhc2UgICAgICA9PiAnQ3VzdG9tZXJUaWNrZXRTZWFyY2gnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRQcm9maWxlLAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJUdldFBhcmFtID0gKCk7CiAgICAgICAgICAgICRQcm9maWxlICA9ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgSFRNTCBzdHJpbmdzIGZvciBhbGwgZHluYW1pYyBmaWVsZHMKICAgICAgICBteSAlRHluYW1pY0ZpZWxkSFRNTDsKCiAgICAgICAgIyBjeWNsZSB0aHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgbXkgJFBvc3NpYmxlVmFsdWVzRmlsdGVyOwoKICAgICAgICAgICAgbXkgJElzQUNMUmVkdWNpYmxlID0gJEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQUNMUmVkdWNpYmxlJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkSXNBQ0xSZWR1Y2libGUpIHsKCiAgICAgICAgICAgICAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgICAgICAgICAgICAgbXkgJFBvc3NpYmxlVmFsdWVzID0gJEJhY2tlbmRPYmplY3QtPlBvc3NpYmxlVmFsdWVzR2V0KAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGZpZWxkIGhhcyBQb3NzaWJsZVZhbHVlcyBwcm9wZXJ0eSBpbiBpdHMgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkUG9zc2libGVWYWx1ZXMpICkgewoKICAgICAgICAgICAgICAgICAgICAjIGdldCBoaXN0b3JpY2FsIHZhbHVlcyBmcm9tIGRhdGFiYXNlCiAgICAgICAgICAgICAgICAgICAgbXkgJEhpc3RvcmljYWxWYWx1ZXMgPSAkQmFja2VuZE9iamVjdC0+SGlzdG9yaWNhbFZhbHVlc0dldCgKICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJERhdGEgPSAkUG9zc2libGVWYWx1ZXM7CgogICAgICAgICAgICAgICAgICAgICMgYWRkIGhpc3RvcmljIHZhbHVlcyB0byBjdXJyZW50IHZhbHVlcyAoaWYgdGhleSBkb24ndCBleGlzdCBhbnltb3JlKQogICAgICAgICAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJEhpc3RvcmljYWxWYWx1ZXMpICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyRIaXN0b3JpY2FsVmFsdWVzfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISREYXRhLT57JEtleX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGEtPnskS2V5fSA9ICRIaXN0b3JpY2FsVmFsdWVzLT57JEtleX07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBwb3NzaWJsZSB2YWx1ZXMga2V5ID0+IHZhbHVlIHRvIGtleSA9PiBrZXkgZm9yIEFDTHMgdXNpbmcgYSBIYXNoIHNsaWNlCiAgICAgICAgICAgICAgICAgICAgbXkgJUFjbERhdGEgPSAleyREYXRhfTsKICAgICAgICAgICAgICAgICAgICBAQWNsRGF0YXsga2V5cyAlQWNsRGF0YSB9ID0ga2V5cyAlQWNsRGF0YTsKCiAgICAgICAgICAgICAgICAgICAgIyBzZXQgcG9zc2libGUgdmFsdWVzIGZpbHRlciBmcm9tIEFDTHMKICAgICAgICAgICAgICAgICAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblR5cGUgICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TdWJUeXBlICA9PiAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICAgID0+IFwlQWNsRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRBQ0wpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUZpbHRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCBGaWxlciBrZXkgPT4ga2V5IGJhY2sgdG8ga2V5ID0+IHZhbHVlIHVzaW5nIG1hcAogICAgICAgICAgICAgICAgICAgICAgICAleyRQb3NzaWJsZVZhbHVlc0ZpbHRlcn0gPSBtYXAgeyAkXyA9PiAkRGF0YS0+eyRffSB9IGtleXMgJUZpbHRlcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IHNlYXJjaCBmaWVsZCBwcmVmZXJlbmNlcwogICAgICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRTZWFyY2hGaWVsZFByZWZlcmVuY2VzKTsKCiAgICAgICAgICAgIFBSRUZFUkVOQ0U6CiAgICAgICAgICAgIGZvciBteSAkUHJlZmVyZW5jZSAoIEB7JFNlYXJjaEZpZWxkUHJlZmVyZW5jZXN9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGZpZWxkIGh0bWwKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAkUHJlZmVyZW5jZS0+e1R5cGV9IH0gPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQcm9maWxlICAgICAgICAgICAgICA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+ICRQb3NzaWJsZVZhbHVlc0ZpbHRlciwKICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmFsdWUgICAgICAgICA9PgogICAgICAgICAgICAgICAgICAgICAgICAkQ29uZmlnLT57RGVmYXVsdHN9LT57RHluYW1pY0ZpZWxkfQogICAgICAgICAgICAgICAgICAgICAgICAtPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgIENvbmZpcm1hdGlvbkNoZWNrYm94ZXMgPT4gMSwKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgID0+ICRQcmVmZXJlbmNlLT57VHlwZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIHNlYXJjaCBtYXNrCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVySGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lck5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5NYXNrRm9ybSgKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBQcm9maWxlICAgICAgICAgID0+ICRQcm9maWxlLAogICAgICAgICAgICBBcmVhICAgICAgICAgICAgID0+ICdDdXN0b21lcicsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZEhUTUwgPT4gXCVEeW5hbWljRmllbGRIVE1MLAogICAgICAgICAgICAlU2VydmVyRXJyb3JzLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIE1hc2tGb3JtIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkVHJlZVZpZXcgPSAwOwogICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okxpc3RUeXBlJykgZXEgJ3RyZWUnICkgewogICAgICAgICRUcmVlVmlldyA9IDE7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAkUGFyYW17UmVzdWx0Rm9ybVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIE5vcm1hbCA9PiAnTm9ybWFsJywKICAgICAgICAgICAgUHJpbnQgID0+ICdQcmludCcsCiAgICAgICAgICAgIENTViAgICA9PiAnQ1NWJywKICAgICAgICAgICAgRXhjZWwgID0+ICdFeGNlbCcsCiAgICAgICAgfSwKICAgICAgICBOYW1lICAgICAgID0+ICdSZXN1bHRGb3JtJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtSZXN1bHRGb3JtfSB8fCAnTm9ybWFsJywKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICBteSAlUHJvZmlsZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VhcmNoUHJvZmlsZScpLT5TZWFyY2hQcm9maWxlTGlzdCgKICAgICAgICBCYXNlICAgICAgPT4gJ0N1c3RvbWVyVGlja2V0U2VhcmNoJywKICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgKTsKCiAgICBpZiAoICRQcm9maWxlc3snbGFzdC1zZWFyY2gnfSApIHsKICAgICAgICAkUHJvZmlsZXN7J2xhc3Qtc2VhcmNoJ30gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ2xhc3Qtc2VhcmNoJyk7CiAgICB9CgogICAgJFBhcmFte1Byb2ZpbGVzU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQcm9maWxlcywKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1Byb2ZpbGUnLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17UHJvZmlsZX0sCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgKTsKCiAgICBteSAlQ3VzdG9tZXJzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyR3JvdXAnKS0+R3JvdXBDb250ZXh0Q3VzdG9tZXJzKAogICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgJFBhcmFte0N1c3RvbWVySURTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVDdXN0b21lcnMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnQ3VzdG9tZXJJRCcsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgPT4gNSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtDdXN0b21lcklEfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGdldCBzZXJ2aWNlIG9iamVjdAogICAgbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKICAgIG15ICVTZXJ2aWNlTGlzdDsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdDdXN0b21lcjo6VGlja2V0U2VhcmNoOjpBbGxTZXJ2aWNlcycpICkgewogICAgICAgICVTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJVNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgICAgICApOwogICAgfQoKICAgICRQYXJhbXtTZXJ2aWNlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVNlcnZpY2VMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1NlcnZpY2VJRHMnLAogICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17U2VydmljZUlEc30sCiAgICAgICAgVHJlZVZpZXcgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CiAgICAkUGFyYW17VHlwZXNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpLT5UeXBlTGlzdCgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICBOYW1lICAgICAgID0+ICdUeXBlSURzJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtUeXBlSURzfSwKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1R5cGVJRHN9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwogICAgJFBhcmFte1N0YXRlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpLT5TdGF0ZUxpc3QoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1N0YXRlSURzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1N0YXRlSURzfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKICAgICRQYXJhbXtTdGF0ZVR5cGVTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBPcGVuICAgPT4gJ29wZW4nLAogICAgICAgICAgICBDbG9zZWQgPT4gJ2Nsb3NlZCcsCiAgICAgICAgfSwKICAgICAgICBOYW1lICAgICAgID0+ICdTdGF0ZVR5cGUnLAogICAgICAgIFNpemUgICAgICAgPT4gNSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtTdGF0ZVR5cGV9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwogICAgJFBhcmFte1ByaW9yaXRpZXNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKS0+UHJpb3JpdHlMaXN0KAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICBOYW1lICAgICAgID0+ICdQcmlvcml0eUlEcycsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgPT4gNSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtQcmlvcml0eUlEc30sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CiAgICAkUGFyYW17VGlja2V0Q3JlYXRlVGltZVBvaW50fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAxICA9PiAnIDEnLAogICAgICAgICAgICAyICA9PiAnIDInLAogICAgICAgICAgICAzICA9PiAnIDMnLAogICAgICAgICAgICA0ICA9PiAnIDQnLAogICAgICAgICAgICA1ICA9PiAnIDUnLAogICAgICAgICAgICA2ICA9PiAnIDYnLAogICAgICAgICAgICA3ICA9PiAnIDcnLAogICAgICAgICAgICA4ICA9PiAnIDgnLAogICAgICAgICAgICA5ICA9PiAnIDknLAogICAgICAgICAgICAxMCA9PiAnMTAnLAogICAgICAgICAgICAxMSA9PiAnMTEnLAogICAgICAgICAgICAxMiA9PiAnMTInLAogICAgICAgICAgICAxMyA9PiAnMTMnLAogICAgICAgICAgICAxNCA9PiAnMTQnLAogICAgICAgICAgICAxNSA9PiAnMTUnLAogICAgICAgICAgICAxNiA9PiAnMTYnLAogICAgICAgICAgICAxNyA9PiAnMTcnLAogICAgICAgICAgICAxOCA9PiAnMTgnLAogICAgICAgICAgICAxOSA9PiAnMTknLAogICAgICAgICAgICAyMCA9PiAnMjAnLAogICAgICAgICAgICAyMSA9PiAnMjEnLAogICAgICAgICAgICAyMiA9PiAnMjInLAogICAgICAgICAgICAyMyA9PiAnMjMnLAogICAgICAgICAgICAyNCA9PiAnMjQnLAogICAgICAgICAgICAyNSA9PiAnMjUnLAogICAgICAgICAgICAyNiA9PiAnMjYnLAogICAgICAgICAgICAyNyA9PiAnMjcnLAogICAgICAgICAgICAyOCA9PiAnMjgnLAogICAgICAgICAgICAyOSA9PiAnMjknLAogICAgICAgICAgICAzMCA9PiAnMzAnLAogICAgICAgICAgICAzMSA9PiAnMzEnLAogICAgICAgICAgICAzMiA9PiAnMzInLAogICAgICAgICAgICAzMyA9PiAnMzMnLAogICAgICAgICAgICAzNCA9PiAnMzQnLAogICAgICAgICAgICAzNSA9PiAnMzUnLAogICAgICAgICAgICAzNiA9PiAnMzYnLAogICAgICAgICAgICAzNyA9PiAnMzcnLAogICAgICAgICAgICAzOCA9PiAnMzgnLAogICAgICAgICAgICAzOSA9PiAnMzknLAogICAgICAgICAgICA0MCA9PiAnNDAnLAogICAgICAgICAgICA0MSA9PiAnNDEnLAogICAgICAgICAgICA0MiA9PiAnNDInLAogICAgICAgICAgICA0MyA9PiAnNDMnLAogICAgICAgICAgICA0NCA9PiAnNDQnLAogICAgICAgICAgICA0NSA9PiAnNDUnLAogICAgICAgICAgICA0NiA9PiAnNDYnLAogICAgICAgICAgICA0NyA9PiAnNDcnLAogICAgICAgICAgICA0OCA9PiAnNDgnLAogICAgICAgICAgICA0OSA9PiAnNDknLAogICAgICAgICAgICA1MCA9PiAnNTAnLAogICAgICAgICAgICA1MSA9PiAnNTEnLAogICAgICAgICAgICA1MiA9PiAnNTInLAogICAgICAgICAgICA1MyA9PiAnNTMnLAogICAgICAgICAgICA1NCA9PiAnNTQnLAogICAgICAgICAgICA1NSA9PiAnNTUnLAogICAgICAgICAgICA1NiA9PiAnNTYnLAogICAgICAgICAgICA1NyA9PiAnNTcnLAogICAgICAgICAgICA1OCA9PiAnNTgnLAogICAgICAgICAgICA1OSA9PiAnNTknLAogICAgICAgIH0sCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICBOYW1lICAgICAgICA9PiAnVGlja2V0Q3JlYXRlVGltZVBvaW50JywKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17VGlja2V0Q3JlYXRlVGltZVBvaW50fSwKICAgICk7CiAgICAkUGFyYW17VGlja2V0Q3JlYXRlVGltZVBvaW50U3RhcnR9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIExhc3QgICA9PiBUcmFuc2xhdGFibGUoJ3dpdGhpbiB0aGUgbGFzdCAuLi4nKSwKICAgICAgICAgICAgQmVmb3JlID0+IFRyYW5zbGF0YWJsZSgnbW9yZSB0aGFuIC4uLiBhZ28nKSwKICAgICAgICB9LAogICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ1RpY2tldENyZWF0ZVRpbWVQb2ludFN0YXJ0JywKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFyYW17VGlja2V0Q3JlYXRlVGltZVBvaW50U3RhcnR9IHx8ICdMYXN0JywKICAgICk7CiAgICAkUGFyYW17VGlja2V0Q3JlYXRlVGltZVBvaW50Rm9ybWF0fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBtaW51dGUgPT4gVHJhbnNsYXRhYmxlKCdtaW51dGUocyknKSwKICAgICAgICAgICAgaG91ciAgID0+IFRyYW5zbGF0YWJsZSgnaG91cihzKScpLAogICAgICAgICAgICBkYXkgICAgPT4gVHJhbnNsYXRhYmxlKCdkYXkocyknKSwKICAgICAgICAgICAgd2VlayAgID0+IFRyYW5zbGF0YWJsZSgnd2VlayhzKScpLAogICAgICAgICAgICBtb250aCAgPT4gVHJhbnNsYXRhYmxlKCdtb250aChzKScpLAogICAgICAgICAgICB5ZWFyICAgPT4gVHJhbnNsYXRhYmxlKCd5ZWFyKHMpJyksCiAgICAgICAgfSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIE5hbWUgICAgICAgID0+ICdUaWNrZXRDcmVhdGVUaW1lUG9pbnRGb3JtYXQnLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtUaWNrZXRDcmVhdGVUaW1lUG9pbnRGb3JtYXR9LAogICAgKTsKICAgICRQYXJhbXtUaWNrZXRDcmVhdGVUaW1lU3RhcnR9ID0gJExheW91dE9iamVjdC0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICVQYXJhbSwKICAgICAgICBQcmVmaXggICAgICAgICAgICAgICAgICAgICA9PiAnVGlja2V0Q3JlYXRlVGltZVN0YXJ0JywKICAgICAgICBUaWNrZXRDcmVhdGVUaW1lU3RhcnRDbGFzcyA9PiAnRGF0ZVNlbGVjdGlvbicsCiAgICAgICAgRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICAgICAgRGlmZlRpbWUgICAgICAgICAgICAgICAgICAgPT4gLSggKCA2MCAqIDYwICogMjQgKSAqIDMwICksCiAgICApOwogICAgJFBhcmFte1RpY2tldENyZWF0ZVRpbWVTdG9wfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAlUGFyYW0sCiAgICAgICAgUHJlZml4ICAgICAgICAgICAgICAgICAgICA9PiAnVGlja2V0Q3JlYXRlVGltZVN0b3AnLAogICAgICAgIFRpY2tldENyZWF0ZVRpbWVTdG9wQ2xhc3MgPT4gJ0RhdGVTZWxlY3Rpb24nLAogICAgICAgIEZvcm1hdCAgICAgICAgICAgICAgICAgICAgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICApOwoKICAgICMgaHRtbCBzZWFyY2ggbWFzayBvdXRwdXQKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1NlYXJjaCcsCiAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgfSwKICAgICk7CgogICAgIyBjcmVhdGUgdGhlIGZ1bGx0ZXh0IGZpZWxkIGVudHJpZXMgdG8gYmUgZGlzcGxheWVkCiAgICBteSAlQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkFydGljbGVTZWFyY2hhYmxlRmllbGRzTGlzdCgpOwoKICAgIEZJRUxEOgogICAgZm9yIG15ICRBcnRpY2xlRmllbGRLZXkgKAogICAgICAgIHNvcnQgeyAkQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHN7JGF9LT57TGFiZWx9IGNtcCAkQXJ0aWNsZVNlYXJjaGFibGVGaWVsZHN7JGJ9LT57TGFiZWx9IH0KICAgICAgICBrZXlzICVBcnRpY2xlU2VhcmNoYWJsZUZpZWxkcwogICAgICAgICkKICAgIHsKICAgICAgICBuZXh0IEZJRUxEIGlmICRBcnRpY2xlU2VhcmNoYWJsZUZpZWxkc3skQXJ0aWNsZUZpZWxkS2V5fS0+e0hpZGVJbkN1c3RvbWVySW50ZXJmYWNlfTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NlYXJjaGFibGVBcnRpY2xlRmllbGQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEFydGljbGVGaWVsZExhYmVsID0+ICRBcnRpY2xlU2VhcmNoYWJsZUZpZWxkc3skQXJ0aWNsZUZpZWxkS2V5fS0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIEFydGljbGVGaWVsZEtleSAgID0+ICRBcnRpY2xlU2VhcmNoYWJsZUZpZWxkc3skQXJ0aWNsZUZpZWxkS2V5fS0+e0tleX0sCiAgICAgICAgICAgICAgICBBcnRpY2xlRmllbGRWYWx1ZSA9PiAkUGFyYW17JEFydGljbGVGaWVsZEtleX0gLy8gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGVuYWJsZSBhcmNoaXZlIHNlYXJjaAogICAgaWYgKAogICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpBcmNoaXZlU3lzdGVtJykKICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6Q3VzdG9tZXJBcmNoaXZlU3lzdGVtJykKICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6Q3VzdG9tZXJBcmNoaXZlU3lzdGVtJykgZXEgMQogICAgICAgICkKICAgIHsKCiAgICAgICAgJFBhcmFte1NlYXJjaEluQXJjaGl2ZVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQXJjaGl2ZWRUaWNrZXRzICAgID0+IFRyYW5zbGF0YWJsZSgnQXJjaGl2ZWQgdGlja2V0cycpLAogICAgICAgICAgICAgICAgTm90QXJjaGl2ZWRUaWNrZXRzID0+IFRyYW5zbGF0YWJsZSgnVW5hcmNoaXZlZCB0aWNrZXRzJyksCiAgICAgICAgICAgICAgICBBbGxUaWNrZXRzICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdBbGwgdGlja2V0cycpLAogICAgICAgICAgICB9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdTZWFyY2hJbkFyY2hpdmUnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtTZWFyY2hJbkFyY2hpdmV9IHx8ICdOb3RBcmNoaXZlZFRpY2tldHMnLAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTZWFyY2hJbkFyY2hpdmUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFNlYXJjaEluQXJjaGl2ZVN0cmcgPT4gJFBhcmFte1NlYXJjaEluQXJjaGl2ZVN0cmd9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBjb25maWcgZm9yIGZyb250ZW5kIG1vZHVsZQogICAgbXkgJER5bmFtaWNGaWVsZEZpbHRlciA9ICRDb25maWctPntEeW5hbWljRmllbGR9OwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsnVGlja2V0J10sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJER5bmFtaWNGaWVsZEZpbHRlciB8fCB7fSwKICAgICk7CgogICAgIyBnZXQgYmFja2VuZCBvYmplY3QKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICMgcmVkdWNlIHRoZSBkeW5hbWljIGZpZWxkcyB0byBvbmx5IHRoZSBvbmVzIHRoYXQgYXJlIGRlc2luZ2VkIGZvciBjdXN0b21lciBpbnRlcmZhY2UKICAgIG15IEBDdXN0b21lckR5bmFtaWNGaWVsZHM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICBteSAkSXNDdXN0b21lckludGVyZmFjZUNhcGFibGUgPSAkQmFja2VuZE9iamVjdC0+SGFzQmVoYXZpb3IoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlJywKICAgICAgICApOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkSXNDdXN0b21lckludGVyZmFjZUNhcGFibGU7CgogICAgICAgIHB1c2ggQEN1c3RvbWVyRHluYW1pY0ZpZWxkcywgJER5bmFtaWNGaWVsZENvbmZpZzsKICAgIH0KICAgICREeW5hbWljRmllbGQgPSBcQEN1c3RvbWVyRHluYW1pY0ZpZWxkczsKCiAgICAjIG91dHB1dCBEeW5hbWljIGZpZWxkcyBibG9ja3MKICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgc2VhcmNoIGZpZWxkIHByZWZlcmVuY2VzCiAgICAgICAgbXkgJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMgPSAkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRQcmVmZXJlbmNlcygKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSgkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyk7CgogICAgICAgIFBSRUZFUkVOQ0U6CiAgICAgICAgZm9yIG15ICRQcmVmZXJlbmNlICggQHskU2VhcmNoRmllbGRQcmVmZXJlbmNlc30gKSB7CgogICAgICAgICAgICAjIHNraXAgZmllbGRzIHRoYXQgSFRNTCBjb3VsZCBub3QgYmUgcmV0cmlldmVkCiAgICAgICAgICAgIG5leHQgUFJFRkVSRU5DRSBpZiAhSXNIYXNoUmVmV2l0aERhdGEoCiAgICAgICAgICAgICAgICAkUGFyYW17RHluYW1pY0ZpZWxkSFRNTH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IC4gJFByZWZlcmVuY2UtPntUeXBlfSB9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkUGFyYW17RHluYW1pY0ZpZWxkSFRNTH0KICAgICAgICAgICAgICAgICAgICAgICAgLT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICRQcmVmZXJlbmNlLT57VHlwZX0gfS0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICBGaWVsZCA9PiAkUGFyYW17RHluYW1pY0ZpZWxkSFRNTH0KICAgICAgICAgICAgICAgICAgICAgICAgLT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICRQcmVmZXJlbmNlLT57VHlwZX0gfS0+e0ZpZWxkfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgaHRtbCBzZWFyY2ggbWFzayBvdXRwdXQKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdDdXN0b21lclRpY2tldFNlYXJjaCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwp9CgpzdWIgX1N0b3BXb3Jkc1NlcnZlckVycm9yc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CgogICAgaWYgKCAhJVBhcmFtICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdHb3Qgbm8gdmFsdWVzIHRvIGNoZWNrLicpLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJVN0b3BXb3Jkc1NlcnZlckVycm9yczsKICAgIGlmICggISRBcnRpY2xlT2JqZWN0LT5TZWFyY2hTdHJpbmdTdG9wV29yZHNVc2FnZVdhcm5pbmdBY3RpdmUoKSApIHsKICAgICAgICByZXR1cm4gJVN0b3BXb3Jkc1NlcnZlckVycm9yczsKICAgIH0KCiAgICBteSAlU2VhcmNoU3RyaW5nczsKCiAgICBGSUVMRDoKICAgIGZvciBteSAkRmllbGQgKCBzb3J0IGtleXMgJVBhcmFtICkgewogICAgICAgIG5leHQgRklFTEQgaWYgIWRlZmluZWQgJFBhcmFteyRGaWVsZH07CiAgICAgICAgbmV4dCBGSUVMRCBpZiAhbGVuZ3RoICRQYXJhbXskRmllbGR9OwoKICAgICAgICAkU2VhcmNoU3RyaW5nc3skRmllbGR9ID0gJFBhcmFteyRGaWVsZH07CiAgICB9CgogICAgaWYgKCVTZWFyY2hTdHJpbmdzKSB7CgogICAgICAgIG15ICRTdG9wV29yZHMgPSAkQXJ0aWNsZU9iamVjdC0+U2VhcmNoU3RyaW5nU3RvcFdvcmRzRmluZCgKICAgICAgICAgICAgU2VhcmNoU3RyaW5ncyA9PiBcJVNlYXJjaFN0cmluZ3MsCiAgICAgICAgKTsKCiAgICAgICAgRklFTEQ6CiAgICAgICAgZm9yIG15ICRGaWVsZCAoIHNvcnQga2V5cyAleyRTdG9wV29yZHN9ICkgewogICAgICAgICAgICBuZXh0IEZJRUxEIGlmICFkZWZpbmVkICRTdG9wV29yZHMtPnskRmllbGR9OwogICAgICAgICAgICBuZXh0IEZJRUxEIGlmIHJlZiAkU3RvcFdvcmRzLT57JEZpZWxkfSBuZSAnQVJSQVknOwogICAgICAgICAgICBuZXh0IEZJRUxEIGlmICFAeyAkU3RvcFdvcmRzLT57JEZpZWxkfSB9OwoKICAgICAgICAgICAgJFN0b3BXb3Jkc1NlcnZlckVycm9yc3sgJEZpZWxkIC4gJ0ludmFsaWQnIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkU3RvcFdvcmRzU2VydmVyRXJyb3JzeyAkRmllbGQgLiAnSW52YWxpZFRvb2x0aXAnIH0KICAgICAgICAgICAgICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdQbGVhc2UgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgd29yZHMgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciB0aGUgc2VhcmNoOicpCiAgICAgICAgICAgICAgICAuICcgJwogICAgICAgICAgICAgICAgLiBqb2luKCAnLCcsIHNvcnQgQHsgJFN0b3BXb3Jkcy0+eyRGaWVsZH0gfSApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJVN0b3BXb3Jkc1NlcnZlckVycm9yczsKfQoKMTsK</File>
        <File Location="Custom/Kernel/Output/HTML/TicketOverview/CustomerList.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA0NGMwMjhiMWQwZmU5OTE2NWE1OGUwZTY4MWQ5YmMzMDNmMWZjMjkyIC0gS2VybmVsL091dHB1dC9IVE1ML1RpY2tldE92ZXJ2aWV3L0N1c3RvbWVyTGlzdC5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRPdmVydmlldzo6Q3VzdG9tZXJMaXN0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwp1c2UgRGlnZXN0OjpNRDUgcXcobWQ1X2hleCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6Q29tbXVuaWNhdGlvbkNoYW5uZWwnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJwopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSBcJVBhcmFtOwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1RpY2tldElEc30gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFRpY2tldExpc3QhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRUaWNrZXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CgogICAgIyBnZW5lcmF0ZSBlbXB0eSBtZXNzYWdlCiAgICBpZiAoIHNjYWxhciBAeyAkUGFyYW17VGlja2V0SURzfSB9ID09IDAgKSB7CgogICAgICAgICMgY3VzdG9tZXJ1c2VyIGhhcyBubyB0aWNrZXRzIGF0IGFsbAogICAgICAgIGlmICggJFBhcmFte05vQWxsVG90YWx9ICkgewogICAgICAgICAgICBpZiAoICRQYXJhbXtDdXN0b21UZXh0fSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0VtcHR5Q3VzdG9tJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRQYXJhbXtDdXN0b21UZXh0fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdFbXB0eURlZmF1bHQnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjdXN0b21lcnVzZXIgaGFzIG5vIHRpY2tldHMgdW5kZXIgdGhlIGN1cnJlbnQgZmlsdGVyCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRW1wdHlGaWx0ZXInLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkVGlja2V0U3RhcnQgPSAkUGFyYW17U3RhcnRIaXR9ID8gJFBhcmFte1N0YXJ0SGl0fSAtIDEgOiAwOwogICAgbXkgJFRpY2tldEVuZCAgID0gJFBhcmFte1BhZ2VTaG93bn0KICAgICAgICA/ICggc29ydCB7ICRhIDw9PiAkYiB9ICggJFBhcmFte1BhZ2VTaG93bn0gLSAxICsgJFRpY2tldFN0YXJ0LCAkI3sgJFBhcmFte1RpY2tldElEc30gfSApIClbMF0KICAgICAgICA6ICQjeyAkUGFyYW17VGlja2V0SURzfSB9OwoKICAgICMgZ2VuZXJhdGUgdGlja2V0IGxpc3QKICAgIGZvciBteSAkVGlja2V0SUQgKCBAeyAkUGFyYW17VGlja2V0SURzfSB9WyAkVGlja2V0U3RhcnQgLi4gJFRpY2tldEVuZCBdICkgewoKICAgICAgICAjIEdldCBsYXN0IGN1c3RvbWVyIGFydGljbGUuCiAgICAgICAgbXkgQEFydGljbGVMaXN0ID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICAgICAgICAgIE9ubHlMYXN0ICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJUFydGljbGU7CiAgICAgICAgaWYgKCAkQXJ0aWNsZUxpc3RbMF0gJiYgSXNIYXNoUmVmV2l0aERhdGEoICRBcnRpY2xlTGlzdFswXSApICkgewogICAgICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoICV7ICRBcnRpY2xlTGlzdFswXSB9ICk7CiAgICAgICAgICAgICVBcnRpY2xlID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUxpc3RbMF0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGlja2V0IGluZm8KICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICk7CgogICAgICAgIG15ICRTdWJqZWN0OwogICAgICAgIG15ICRDb25maWdPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgICAgIG15ICRTbWFsbFZpZXdDb2x1bW5IZWFkZXIgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0T3ZlcnZpZXcnKS0+e0NvbHVtbkhlYWRlcn07CgogICAgICAgICMgQ2hlY2sgaWYgdGhlIGxhc3QgY3VzdG9tZXIgc3ViamVjdCBvciB0aWNrZXQgdGl0bGUgc2hvdWxkIGJlIHNob3duLgogICAgICAgICMgSWYgdGlja2V0IHRpdGxlIHNob3VsZCBiZSBzaG93biwgY2hlY2sgaWYgdGhlcmUgYXJlIGFydGljbGVzLCBiZWNhdXNlIHRpY2tldCB0aXRsZQogICAgICAgICMgY291bGQgYmUgcmVsYXRlZCB3aXRoIGEgc3ViamVjdCBvZiBhbiBhcnRpY2xlIHdoaWNoIGRvZXMgbm90IHZpc2libGUgZm9yIGN1c3RvbWVyIChzZWUgYnVnIzEzNjE0KS4KICAgICAgICAjIElmIHRoZXJlIGlzIG5vIHN1YmplY3QsIHNldCB0byAnVW50aXRsZWQnLgogICAgICAgIGlmICggJFNtYWxsVmlld0NvbHVtbkhlYWRlciBlcSAnTGFzdEN1c3RvbWVyU3ViamVjdCcgKSB7CiAgICAgICAgICAgICRTdWJqZWN0ID0gJEFydGljbGV7U3ViamVjdH0gfHwgJyc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFNtYWxsVmlld0NvbHVtbkhlYWRlciBlcSAnVGlja2V0VGl0bGUnICYmICRBcnRpY2xlTGlzdFswXSApIHsKICAgICAgICAgICAgJFN1YmplY3QgPSAkVGlja2V0e1RpdGxlfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTdWJqZWN0ID0gVHJhbnNsYXRhYmxlKCdVbnRpdGxlZCEnKTsKICAgICAgICB9CgogICAgICAgICMgQ29uZGVuc2UgZG93biB0aGUgc3ViamVjdC4KICAgICAgICAkU3ViamVjdCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN1YmplY3RDbGVhbigKICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgU3ViamVjdCAgICAgID0+ICRTdWJqZWN0LAogICAgICAgICk7CgogICAgICAgICMgQWdlIGRlc2lnbi4KICAgICAgICAkVGlja2V0e0N1c3RvbWVyQWdlfSA9ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyQWdlKAojIFJvdGhlciBPU1MgLyBDdXN0b21lckFnZVNob3dDcmVhdGVkCiMgICAgICAgICAgICAgQWdlICAgPT4gJFRpY2tldHtBZ2V9LAojICAgICAgICAgICAgIFNwYWNlID0+ICcgJwogICAgICAgICAgICBBZ2UgICAgICAgPT4gJFRpY2tldHtBZ2V9LAogICAgICAgICAgICBTcGFjZSAgICAgPT4gJyAnLAogICAgICAgICAgICBDcmVhdGVkQXQgPT4gJFRpY2tldHtDcmVhdGVkfSwKIyBFTyBDdXN0b21lckFnZVNob3dDcmVhdGVkCiAgICAgICAgKSB8fCAwOwoKICAgICAgICAjIHJldHVybiB0aWNrZXQgaW5mb3JtYXRpb24gaWYgdGhlcmUgaXMgbm8gYXJ0aWNsZQogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCBcJUFydGljbGUgKSApIHsKICAgICAgICAgICAgJEFydGljbGV7U3RhdGV9ICAgICAgICA9ICRUaWNrZXR7U3RhdGV9OwogICAgICAgICAgICAkQXJ0aWNsZXtUaWNrZXROdW1iZXJ9ID0gJFRpY2tldHtUaWNrZXROdW1iZXJ9OwogICAgICAgICAgICAkQXJ0aWNsZXtCb2R5fSAgICAgICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdUaGlzIGl0ZW0gaGFzIG5vIGFydGljbGVzIHlldC4nKTsKICAgICAgICB9CgogICAgICAgICMgbmFtZSBhbmQgYXZhdGFyCiAgICAgICAgbXkgJUN1c3RvbWVyVXNlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKS0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgVXNlciA9PiAkQXJ0aWNsZXtDdXN0b21lclVzZXJJRH0gfHwgJFRpY2tldHtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBteSAkQ3VzdG9tZXJOYW1lID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5DdXN0b21lck5hbWUoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkQXJ0aWNsZXtDdXN0b21lclVzZXJJRH0gfHwgJFRpY2tldHtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBteSAoICRBdmF0YXIsICRVc2VySW5pdGlhbHMgKTsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6OkF2YXRhckVuZ2luZScpIGVxICdHcmF2YXRhcicgJiYgJEN1c3RvbWVyVXNlcntVc2VyRW1haWx9ICkgewogICAgICAgICAgICBteSAkRGVmYXVsdEljb24gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpHcmF2YXRhcjo6RGVmYXVsdEltYWdlJykgfHwgJ21tJzsKICAgICAgICAgICAgJEF2YXRhciA9ICcvL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLycgLiBtZDVfaGV4KCBsYyAkQ3VzdG9tZXJVc2Vye1VzZXJFbWFpbH0gKSAuICc/cz0xMDAmZD0nIC4gJERlZmF1bHRJY29uOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFVzZXJJbml0aWFscyA9IHN1YnN0ciggJEN1c3RvbWVyVXNlcntVc2VyRmlyc3RuYW1lfSwgMCwgMSApIC4gc3Vic3RyKCAkQ3VzdG9tZXJVc2Vye1VzZXJMYXN0bmFtZX0sIDAsIDEgKTsKICAgICAgICB9CgogICAgICAgICMgZ2F0aGVyIGNhdGVnb3JpZXMgdG8gYmUgc2hvd24KICAgICAgICBteSAlQ2F0ZWdvcmllczsKICAgICAgICBteSAkQ2F0ZWdvcnlDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkN1c3RvbWVyVGlja2V0Q2F0ZWdvcmllcyIpOwoKICAgICAgICAjIHN0YW5kYXJkIHRpY2tldCBjYXRlZ29yaWVzCiAgICAgICAgQ0FUOgogICAgICAgIGZvciBteSAkQ2F0TmFtZSAocXcvVHlwZSBRdWV1ZSBTZXJ2aWNlIFN0YXRlIE93bmVyLykgewogICAgICAgICAgICBuZXh0IENBVCBpZiAhJFRpY2tldHskQ2F0TmFtZX07CiAgICAgICAgICAgIGlmICggJENhdGVnb3J5Q29uZmlnLT57JENhdE5hbWV9ICkgewogICAgICAgICAgICAgICAgbXkgJENvbmYgPSAkQ2F0ZWdvcnlDb25maWctPnskQ2F0TmFtZX07CiAgICAgICAgICAgICAgICBteSAkVGV4dCA9ICRDb25mLT57VGV4dH0gLy8gJFRpY2tldHskQ2F0TmFtZX07CgogICAgICAgICAgICAgICAgJENvbmYtPntDb2xvclNlbGVjdGlvbn0gLy89IHt9OwogICAgICAgICAgICAgICAgbXkgJENvbG9yID0gJENvbmYtPntDb2xvclNlbGVjdGlvbn17ICRUaWNrZXR7JENhdE5hbWV9IH0gLy8gJENvbmYtPntDb2xvckRlZmF1bHR9OwoKICAgICAgICAgICAgICAgIHB1c2ggQHsgJENhdGVnb3JpZXN7ICRDb25mLT57T3JkZXJ9IH0gfSwgewogICAgICAgICAgICAgICAgICAgIFRleHQgICA9PiAkVGV4dCwKICAgICAgICAgICAgICAgICAgICBDb2xvciAgPT4gJENvbG9yLAogICAgICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkVGlja2V0eyRDYXROYW1lfSwKICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gJENvbmYsCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgICAgICBteSAkQmFja2VuZE9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICAgICAjIGdldCBkeW5hbWljIGZpZWxkIGNvbmZpZyBmb3IgZnJvbnRlbmQgbW9kdWxlCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZEZpbHRlciA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6Q3VzdG9tZXJUaWNrZXRPdmVydmlldyIpLT57RHluYW1pY0ZpZWxkfTsKICAgICAgICBteSAkRHluYW1pY0ZpZWxkICAgICAgID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydUaWNrZXQnXSwKICAgICAgICAgICAgRmllbGRGaWx0ZXIgPT4gJER5bmFtaWNGaWVsZEZpbHRlciB8fCB7fSwKICAgICAgICApOwoKICAgICAgICBteSAlRHluYW1pY0ZpZWxkQ2F0ZWdvcmllcyA9ICRDYXRlZ29yeUNvbmZpZy0+e0R5bmFtaWNGaWVsZH0KICAgICAgICAgICAgPwogICAgICAgICAgICBtYXAgeyAkQ2F0ZWdvcnlDb25maWctPntEeW5hbWljRmllbGR9eyRffXtEeW5hbWljRmllbGR9ID0+ICRfIH0ga2V5cyAleyAkQ2F0ZWdvcnlDb25maWctPntEeW5hbWljRmllbGR9IH0KICAgICAgICAgICAgOiAoKTsKCiAgICAgICAgIyBEeW5hbWljIGZpZWxkcwogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgbXkgJElzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlID0gJEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzQ3VzdG9tZXJJbnRlcmZhY2VDYXBhYmxlJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISRJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZTsKCiAgICAgICAgICAgICMgZ2V0IGZpZWxkIHZhbHVlCiAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRCYWNrZW5kT2JqZWN0LT5WYWx1ZUdldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgKCAhZGVmaW5lZCAkVmFsdWVTdHJnLT57VmFsdWV9IHx8ICRWYWx1ZVN0cmctPntWYWx1ZX0gZXEgJycgKTsKCiAgICAgICAgICAgICMgYnVpbGQgJUNhdGVnb3JpZXMgYXMgJENhdGVnb3JpZXN7PE9yZGVyPn0gPSBbIHtUZXh0ID0+ICcnLCBDb2xvciA9PiAnJ30sIC4uLiBdCiAgICAgICAgICAgIGlmICggJER5bmFtaWNGaWVsZENhdGVnb3JpZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ICkgewogICAgICAgICAgICAgICAgbXkgJENvbmYgPSAkQ2F0ZWdvcnlDb25maWctPntEeW5hbWljRmllbGR9eyAkRHluYW1pY0ZpZWxkQ2F0ZWdvcmllc3sgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gfTsKICAgICAgICAgICAgICAgIG15ICRUZXh0ID0gJENvbmYtPntUZXh0fSAvLyAkVmFsdWVTdHJnLT57VmFsdWV9OwoKICAgICAgICAgICAgICAgICRDb25mLT57Q29sb3JTZWxlY3Rpb259IC8vPSB7fTsKICAgICAgICAgICAgICAgIG15ICRDb2xvciA9ICRDb25mLT57Q29sb3JTZWxlY3Rpb259eyAkVmFsdWVTdHJnLT57VmFsdWV9IH0gLy8gJENvbmYtPntDb2xvckRlZmF1bHR9OwoKICAgICAgICAgICAgICAgIHB1c2ggQHsgJENhdGVnb3JpZXN7ICRDb25mLT57T3JkZXJ9IH0gfSwgewogICAgICAgICAgICAgICAgICAgIFRleHQgICA9PiAkVGV4dCwKICAgICAgICAgICAgICAgICAgICBDb2xvciAgPT4gJENvbG9yLAogICAgICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgIENvbmZpZyA9PiAkQ29uZiwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUaWNrZXQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICAgICAlQXJ0aWNsZSwKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgICA9PiAkU3ViamVjdCwKICAgICAgICAgICAgICAgIEN1c3RvbWVyTmFtZSA9PiAkQ3VzdG9tZXJOYW1lLAogICAgICAgICAgICAgICAgQXZhdGFyICAgICAgID0+ICRBdmF0YXIsCiAgICAgICAgICAgICAgICBVc2VySW5pdGlhbHMgPT4gJFVzZXJJbml0aWFscywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJE9yZGVyICggc29ydCB7ICRhIDw9PiAkYiB9IGtleXMgJUNhdGVnb3JpZXMgKSB7CiAgICAgICAgICAgIGZvciBteSAkQ2F0ZWdvcnkgKCBAeyAkQ2F0ZWdvcmllc3skT3JkZXJ9IH0gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdDYXRlZ29yaWVzJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRDYXRlZ29yeSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgJiByZXR1cm4gb3V0cHV0CiAgICByZXR1cm4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQ3VzdG9tZXJUaWNrZXRMaXN0JywKICAgICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Autoload/CustomerAgeSwitch.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAxOS0yMDI2IFJvdGhlciBPU1MgR21iSCwgaHR0cHM6Ly9vdG9iby5pby8KIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCiMgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAojIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCiMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIyAtLQoKdXNlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQ7ICAgICMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDsgICAgIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRmlsZW5hbWVNYXRjaGVzUGFja2FnZSkKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlICAgICAgICAgICAgICBxdyhUcmFuc2xhdGFibGUpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNQb3NpdGl2ZUludGVnZXIpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAopOwoKIyBkaXNhYmxlIHJlZGVmaW5lIHdhcm5pbmdzIGluIHRoaXMgc2NvcGUKewogICAgbm8gd2FybmluZ3MgJ3JlZGVmaW5lJzsgICAgIyMgbm8gY3JpdGljIHF3KFRlc3RpbmdBbmREZWJ1Z2dpbmc6OlByb2hpYml0Tm9XYXJuaW5ncykKCiAgICBzdWIgQ3VzdG9tZXJBZ2UgewogICAgICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICAgICBteSAkQWdlICAgICAgID0gZGVmaW5lZCggJFBhcmFte0FnZX0gKSA/ICRQYXJhbXtBZ2V9IDogcmV0dXJuOwogICAgICAgIG15ICRTcGFjZSAgICAgPSAkUGFyYW17U3BhY2V9IHx8ICc8YnIvPic7CiAgICAgICAgbXkgJEFnZVN0cmcgICA9ICcnOwogICAgICAgIG15ICREYXlEc2MgICAgPSBUcmFuc2xhdGFibGUoJ2QnKTsKICAgICAgICBteSAkSG91ckRzYyAgID0gVHJhbnNsYXRhYmxlKCdoJyk7CiAgICAgICAgbXkgJE1pbnV0ZURzYyA9IFRyYW5zbGF0YWJsZSgnbScpOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaW1lU2hvd0NvbXBsZXRlRGVzY3JpcHRpb24nKSApIHsKICAgICAgICAgICAgJERheURzYyAgICA9IFRyYW5zbGF0YWJsZSgnZGF5KHMpJyk7CiAgICAgICAgICAgICRIb3VyRHNjICAgPSBUcmFuc2xhdGFibGUoJ2hvdXIocyknKTsKICAgICAgICAgICAgJE1pbnV0ZURzYyA9IFRyYW5zbGF0YWJsZSgnbWludXRlKHMpJyk7CiAgICAgICAgfQogICAgICAgIGlmICggJEFnZSA9fiAvXi0oLiopLyApIHsKICAgICAgICAgICAgJEFnZSAgICAgPSAkMTsKICAgICAgICAgICAgJEFnZVN0cmcgPSAnLSc7CiAgICAgICAgfQoKIyBSb3RoZXIgT1NTIC8gQ3VzdG9tZXJBZ2VTaG93Q3JlYXRlZAoKICAgICAgICAjIGV4cGVjdGVkIHRvIGJlIGFuIGludGVnZXIgbnVtYmVyCiAgICAgICAgbXkgJFRpbWVTaG93Q3JlYXRlZEF0ID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaW1lU2hvd0NyZWF0ZWRBdCcpOwogICAgICAgIGlmICggSXNQb3NpdGl2ZUludGVnZXIoJFRpbWVTaG93Q3JlYXRlZEF0KSApIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgYWdlIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBiZSBhcHBsaWVkCiAgICAgICAgICAgIGlmICggJEFnZSA+PSAoICRUaW1lU2hvd0NyZWF0ZWRBdCAqIDg2NDAwICkgKSB7CiAgICAgICAgICAgICAgICBteSAkQ3JlYXRlZEF0OwogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17Q3JlYXRlZEF0RXBvY2h9ICkgewogICAgICAgICAgICAgICAgICAgIG15ICRDcmVhdGVkQXREYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgRXBvY2ggPT4gJFBhcmFte0NyZWF0ZWRBdEVwb2NofSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICRDcmVhdGVkQXQgPSAkQ3JlYXRlZEF0RGF0ZVRpbWVPYmplY3QtPlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkQ3JlYXRlZEF0IHx8PSAkUGFyYW17Q3JlYXRlZEF0fTsKCiAgICAgICAgICAgICAgICBpZiAoJENyZWF0ZWRBdCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xhbmd1YWdlT2JqZWN0fS0+Rm9ybWF0VGltZVN0cmluZygKICAgICAgICAgICAgICAgICAgICAgICAgJENyZWF0ZWRBdCwKICAgICAgICAgICAgICAgICAgICAgICAgJ0RhdGVGb3JtYXQnLAogICAgICAgICAgICAgICAgICAgICAgICAnTm9TZWNvbmRzJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKIyBFTyBDdXN0b21lckFnZVNob3dDcmVhdGVkCgogICAgICAgICMgZ2V0IGRheXMKICAgICAgICBpZiAoICRBZ2UgPj0gODY0MDAgKSB7CiAgICAgICAgICAgICRBZ2VTdHJnIC49IGludCggKCAkQWdlIC8gMzYwMCApIC8gMjQgKSAuICcgJzsKICAgICAgICAgICAgJEFnZVN0cmcgLj0gJFNlbGYtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkRGF5RHNjKTsKICAgICAgICAgICAgJEFnZVN0cmcgLj0gJFNwYWNlOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgaG91cnMKICAgICAgICBpZiAoICRBZ2UgPj0gMzYwMCApIHsKICAgICAgICAgICAgJEFnZVN0cmcgLj0gaW50KCAoICRBZ2UgLyAzNjAwICkgJSAyNCApIC4gJyAnOwogICAgICAgICAgICAkQWdlU3RyZyAuPSAkU2VsZi0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCRIb3VyRHNjKTsKICAgICAgICAgICAgJEFnZVN0cmcgLj0gJFNwYWNlOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbWludXRlcyAoanVzdCBpZiBhZ2UgPCAxIGRheSkKICAgICAgICBpZiAoICggJFBhcmFte1RpbWVTaG93QWx3YXlzTG9uZ30gfHwgJENvbmZpZ09iamVjdC0+R2V0KCdUaW1lU2hvd0Fsd2F5c0xvbmcnKSB8fCAkQWdlIDwgODY0MDAgKSAmJiAkQWdlICE9IDAgKSB7CiAgICAgICAgICAgICRBZ2VTdHJnIC49IGludCggKCAkQWdlIC8gNjAgKSAlIDYwICkgLiAnICc7CiAgICAgICAgICAgICRBZ2VTdHJnIC49ICRTZWxmLT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJE1pbnV0ZURzYyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkQWdlU3RyZzsKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/Config/Files/XML/CustomerAgeShowCreated.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJBcHBsaWNhdGlvbiI+CiAgICA8U2V0dGluZyBOYW1lPSJUaW1lU2hvd0NyZWF0ZWRBdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBjcmVhdGlvbiBkYXRlIGluc3RlYWQgb2YgYWdlIGlmIHRpY2tldCBpcyBvbGRlciB0aGFuIGNvbmZpZ3VyZWQgdmFsdWUgKGRheXMpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6VGltZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU2VsZWN0IiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMSIgVHJhbnNsYXRhYmxlPSIxIj4xIGRheTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMiIgVHJhbnNsYXRhYmxlPSIxIj4yIGRheXM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjciIFRyYW5zbGF0YWJsZT0iMSI+NyBkYXlzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIzMCIgVHJhbnNsYXRhYmxlPSIxIj4zMCBkYXlzPC9JdGVtPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkF1dG9sb2FkUGVybFBhY2thZ2VzIyMjMjAwMC1DdXN0b21lckFnZVN3aXRjaCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXR1cm4gZm9ybWF0dGVkIENyZWF0ZSBkYXRlIGluc3RlYWQgb2YgQWdlIGlmIGNvbmZpZ3VyZWQgdHJlc2hvbGQgYWdlIGlzIHN1cnBhc3NlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkF1dG9sb2FkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciPktlcm5lbDo6QXV0b2xvYWQ6OkN1c3RvbWVyQWdlU3dpdGNoPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgo=</File>
        <File Location="var/httpd/htdocs/skins/Customer/default/css/Core.TicketList.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHsKCiAgICAub29vVGlja2V0TGlzdEl0ZW0gewogICAgICAgIHdpZHRoOiBjYWxjKCAxMDAlIC0gNDhweCApOwogICAgICAgIGhlaWdodDogMTEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyNHB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwoKICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCAwIHJnYmEoNCwgMCwgNzEsIDAuMTYpOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCAwIHZhcigtLWNvbFNoYWRvd0RhcmspOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CgogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgLyogdGl0bGUgbnVtYmVyIC8gLyBjYXRlZ29yaWVzIC8vIGF2YXRhciAvIG5hbWUgLyBhZ2UgKi8KICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDMycHggMWZyIDgwcHg7CiAgICAgICAgZ3JpZC1jb2x1bW4tZ2FwOiAxNnB4OwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogNDRweCAzMnB4OwogICAgICAgIGdyaWQtcm93LWdhcDogMTZweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgfQoKICAgIC5vb29UaWNrZXRJdGVtRGVzYyB7CiAgICAgICAgZ3JpZC1yb3ctc3RhcnQ6IDE7CiAgICAgICAgZ3JpZC1yb3ctZW5kOiAyOwogICAgICAgIGdyaWQtY29sdW1uLXN0YXJ0OiAxOwogICAgICAgIGdyaWQtY29sdW1uLWVuZDogNDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5vb29UaWNrZXRJdGVtQ2F0IHsKICAgICAgICBncmlkLXJvdy1zdGFydDogMTsKICAgICAgICBncmlkLXJvdy1lbmQ6IDI7CiAgICAgICAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDM7CiAgICAgICAgZ3JpZC1jb2x1bW4tZW5kOiA0OwogICAgfQoKICAgIC5vb29UaWNrZXRJdGVtQ2F0ID4gZGl2IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CgogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBtYXJnaW4tdG9wOiAzM3B4OwogICAgfQoKICAgIC5vb29Sb3cxID4gLm9vb0NhdGVnb3J5LAogICAgLm9vb1JvdzIgPiAub29vQ2F0ZWdvcnksCiAgICAub29vVGlja2V0SXRlbUNhdCA+IC5vb29DYXRlZ29yeSB7CiAgICAgICAgd2lkdGg6IDBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAub29vVGlja2V0SXRlbUF2YXRhciwKICAgIC5vb29UaWNrZXRJdGVtT3duZXIsCiAgICAub29vVGlja2V0SXRlbUFnZSB7CiAgICAgICAgZ3JpZC1yb3ctc3RhcnQ6IDI7CiAgICAgICAgZ3JpZC1yb3ctZW5kOiAzOwogICAgfQoKICAgIC5vb29UaWNrZXRJdGVtSW5mbyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAub29vVGlja2V0SXRlbUF2YXRhciB7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgfQoKICAgIC5vb29UaWNrZXRJdGVtQXZhdGFyID4gLkluaXRpYWxzIHsKICAgICAgICBsaW5lLWhlaWdodDogMzJweDsKICAgIH0KCn0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsKCiAgICAub29vVGlja2V0TGlzdEl0ZW0gewogICAgICAgIHdpZHRoOiBjYWxjKCAxMDAlIC0gODBweCApOwogICAgICAgIGhlaWdodDogODZweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmctbGVmdDogNDBweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA0MHB4OwoKICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCAwIHJnYmEoNCwgMCwgNzEsIDAuMTYpOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCAwIHZhcigtLWNvbFNoYWRvd0RhcmspOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CgogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgLyogdGl0bGUgbnVtYmVyIC8gY2F0ZWdvcmllcyAvIGF2YXRhciAvIG5hbWUgLyBhZ2UgLyBvcHRpb25zICovCiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBtaW5tYXgoMCwgMC43N2ZyKSA0MHB4IG1pbm1heCgwLCAwLjM2ZnIpIDg0cHggMjlweDsKICAgICAgICBncmlkLWNvbHVtbi1nYXA6IDE2cHg7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxMDAlOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CgogICAgLm9vb1RpY2tldEl0ZW1DYXQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAub29vVGlja2V0SXRlbUNhdCA+IGRpdiB7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgLm9vb1JvdzIgewogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgIH0KCiAgICAub29vVGlja2V0SXRlbUF2YXRhciB7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgfQoKICAgIC5vb29UaWNrZXRJdGVtQXZhdGFyID4gLkluaXRpYWxzIHsKICAgICAgICBsaW5lLWhlaWdodDogNDBweDsKICAgIH0KCn0KCi5vb29UaWNrZXRMaXN0IGgzLAovKiBSb3RoZXIgT1NTIC8gVGlja2V0QWdlQ3JlYXRlRGF0ZVN3aXRjaCAqLwovKiAub29vVGlja2V0TGlzdCBwIHsgKi8KLm9vb1RpY2tldExpc3QgcDpub3QoLm9vb1RpY2tldEl0ZW1BZ2UpIHsKLyogRU8gVGlja2V0QWdlQ3JlYXRlRGF0ZVN3aXRjaCAqLwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKLm9vb1RpY2tldExpc3RNZXNzYWdlIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IGNhbGMoIDEwMCUgLSA4MHB4ICk7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICBwYWRkaW5nLXRvcDogMjRweDsKICAgIHBhZGRpbmctYm90dG9tOiAyNHB4OwogICAgcGFkZGluZy1sZWZ0OiA0MHB4OwogICAgcGFkZGluZy1yaWdodDogNDBweDsKCiAgICBib3JkZXItcmFkaXVzOiAxNXB4OwogICAgYm94LXNoYWRvdzogMCAxcHggNHB4IDAgcmdiYSg0LCAwLCA3MSwgMC4xNik7CiAgICBib3gtc2hhZG93OiAwIDFweCA0cHggMCB2YXIoLS1jb2xTaGFkb3dEYXJrKTsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cn0KCi5vb29UaWNrZXRMaXN0TWVzc2FnZSA+IGgzIHsKICAgIHBhZGRpbmctYm90dG9tOiA4cHg7Cn0KCi5vb29UaWNrZXRMaXN0SXRlbTpmaXJzdC1jaGlsZCB7CiAgICBtYXJnaW4tdG9wOiA4cHg7Cn0KCi5vb29UaWNrZXRJdGVtSW5mbywKLm9vb1RpY2tldEl0ZW1BZ2UgewogICAgdGV4dC1hbGlnbjogcmlnaHQ7Cn0KCi5vb29UaWNrZXRJdGVtSW5mbyA+IGkgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIHBhZGRpbmctYm90dG9tOiAzcHg7Cn0KCi5vb29UaWNrZXRJdGVtQ2F0ID4gcC5vb29DYXRlZ29yeSB7CiAgICBoZWlnaHQ6IDBweDsKICAgIG1pbi1oZWlnaHQ6IDBweDsKICAgIHBhZGRpbmctdG9wOiAwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMHB4Owp9Cgoub29vVGlja2V0SXRlbUF2YXRhciA+IGltZyB7CiAgICB3aWR0aDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBib3JkZXItcmFkaXVzOiAyMHB4Owp9CgovKiBJRSAqLwpAbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSkgewoKICAgIC5vb29UaWNrZXRMaXN0SXRlbSB7CiAgICAgICAgZGlzcGxheTogLW1zLWdyaWQ7CiAgICAgICAgLyogdGl0bGUgbnVtYmVyIC8gY2F0ZWdvcmllcyAvIGF2YXRhciAvIG5hbWUgLyBhZ2UgLyBvcHRpb25zICovCiAgICAgICAgLW1zLWdyaWQtY29sdW1uczogMWZyIDAuNzdmciA0MHB4IDAuMzZmciA4NHB4IDI5cHg7CiAgICAgICAgLW1zLWdyaWQtcm93czogMTAwJTsKICAgIH0KCiAgICAub29vVGlja2V0SXRlbURlc2MgewogICAgICAgIC1tcy1ncmlkLWNvbHVtbjogMTsKICAgICAgICAtbXMtZ3JpZC1yb3ctYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAub29vVGlja2V0SXRlbUNhdCB7CiAgICAgICAgLW1zLWdyaWQtY29sdW1uOiAyOwogICAgICAgIC1tcy1ncmlkLXJvdy1hbGlnbjogY2VudGVyOwogICAgfQoKICAgIC5vb29UaWNrZXRJdGVtQXZhdGFyIHsKICAgICAgICAtbXMtZ3JpZC1jb2x1bW46IDM7CiAgICAgICAgLW1zLWdyaWQtcm93LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLm9vb1RpY2tldEl0ZW1Pd25lciB7CiAgICAgICAgLW1zLWdyaWQtY29sdW1uOiA0OwogICAgICAgIC1tcy1ncmlkLXJvdy1hbGlnbjogY2VudGVyOwogICAgfQoKICAgIC5vb29UaWNrZXRJdGVtQWdlIHsKICAgICAgICAtbXMtZ3JpZC1jb2x1bW46IDU7CiAgICAgICAgLW1zLWdyaWQtcm93LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLm9vb1RpY2tldEl0ZW1JbmZvIHsKICAgICAgICAtbXMtZ3JpZC1jb2x1bW46IDY7CiAgICAgICAgLW1zLWdyaWQtcm93LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgQHN1cHBvcnRzIChkaXNwbGF5OiBncmlkKSB7CiAgICAgICAgLm9vb1RpY2tldExpc3RJdGVtIHsKICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICB9CiAgICB9Cgp9Cg==</File>
        <File Location="doc/en/CustomerAgeShowCreated.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>