<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>OTOBO-AI</Name>
    <Version>11.0.30</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 15:06:10" Version="11.0.30">First stable release for 11.0.</ChangeLog>
    <Description Lang="en">Otobo AI Interface package to connect to Otobo AI Services.</Description>
    <Framework>11.0.x</Framework>
    <IntroInstall Lang="en" Title="Incremental ingestion of FAQ items" Type="post">
        &lt;br/&gt;
        In order for FAQ items to by dynamically synchronized with the Otobo-AI vector DB, please make sure to&lt;br/&gt;
install the optional &lt;b&gt;Elasticsearch-FAQ&lt;/b&gt; package to provide the necessary FAQ event handling.&lt;br/&gt;&lt;br/&gt;
    </IntroInstall>
    <IntroInstall Lang="de" Title="Inkrementelle Aufnahme von FAQ Artikeln" Type="post">
        &lt;br/&gt;
        Damit FAQ Artikel dynamisch mit der Otobo-AI Vector DB synchronisiert werden können, installieren Sie bitte&lt;br/&gt;
das optionale &lt;b&gt;Elasticsearch-FAQ&lt;/b&gt; Paket, um das notwendige FAQ Event Handling bereitzustellen.&lt;br/&gt;&lt;br/&gt;
    </IntroInstall>
    <CodeInstall Type="post">

        # create the package name
        my $CodeModule = 'var::packagesetup::OTOBOAI';

        $Kernel::OM-&gt;Get($CodeModule)-&gt;CodeInstall();
    </CodeInstall>
    <CodeUpgrade Type="post">

        # create the package name
        my $CodeModule = 'var::packagesetup::OTOBOAI';

        $Kernel::OM-&gt;Get($CodeModule)-&gt;CodeUpgrade();
    </CodeUpgrade>
    <CodeUninstall Type="pre">

        # create the package name
        my $CodeModule = 'var::packagesetup::OTOBOAI';

        $Kernel::OM-&gt;Get($CodeModule)-&gt;CodeUninstall();
    </CodeUninstall>
    <BuildCommitID>b8c303e417deebed5540687d1f648cd2265ac320</BuildCommitID>
    <BuildDate>2026-10-28 15:06:15</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Custom/Kernel/Output/HTML/ArticleAction/AgentTicketCompose.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL091dHB1dC9IVE1ML0FydGljbGVBY3Rpb24vQWdlbnRUaWNrZXRDb21wb3NlLnBtCiMgLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgojIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkFydGljbGVBY3Rpb246OkFnZW50VGlja2V0Q29tcG9zZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcsCiMgUm90aGVyIE9TUyAvIE9UT0JPLUFJCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcsCiMgRU8gT1RPQk8tQUkKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgojIG9wdGlvbmFsIEFjbEFjdGlvbkxvb2t1cApzdWIgQ2hlY2tBY2Nlc3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIENoZWNrIG5lZWRlZCBzdHVmZi4KICAgIGZvciBteSAkTmVlZGVkIChxdyhUaWNrZXQgQXJ0aWNsZSBDaGFubmVsTmFtZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkUGFyYW17Q2hhbm5lbE5hbWV9IGVxICdFbWFpbCcgJiYgJFBhcmFte0FydGljbGV9LT57U2VuZGVyVHlwZX0gZXEgJ3N5c3RlbScgKSB7CgogICAgICAgICMgc2tpcCBlbWFpbCBub3RpZmljYXRpb25zCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgY2hlY2sgaWYgbW9kdWxlIGlzIHJlZ2lzdGVyZWQKICAgIHJldHVybiBpZiAhJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPntBZ2VudFRpY2tldENvbXBvc2V9OwoKICAgICMgY2hlY2sgQWNsCiAgICByZXR1cm4gaWYgISRQYXJhbXtBY2xBY3Rpb25Mb29rdXB9LT57QWdlbnRUaWNrZXRDb21wb3NlfTsKCiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Q29tcG9zZScpOwogICAgaWYgKCAkQ29uZmlnLT57UGVybWlzc2lvbn0gKSB7CiAgICAgICAgbXkgJE9rID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJENvbmZpZy0+e1Blcm1pc3Npb259LAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17VGlja2V0fS0+e1RpY2tldElEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIExvZ05vICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gaWYgISRPazsKICAgIH0KICAgIGlmICggJENvbmZpZy0+e1JlcXVpcmVkTG9ja30gKSB7CiAgICAgICAgbXkgJExvY2tlZCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tHZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXR9LT57VGlja2V0SUR9CiAgICAgICAgKTsKICAgICAgICBpZiAoJExvY2tlZCkgewogICAgICAgICAgICBteSAkQWNjZXNzT2sgPSAkVGlja2V0T2JqZWN0LT5Pd25lckNoZWNrKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte1RpY2tldH0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBPd25lcklEICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuIGlmICEkQWNjZXNzT2s7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgR2V0Q29uZmlnIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0IEFydGljbGUgU3RhbmRhcmRUZW1wbGF0ZXMgVHlwZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdldCBTdGFuZGFyZFJlc3BvbnNlc1N0cmcKICAgICMgbXkgJVN0YW5kYXJkUmVzcG9uc2VIYXNoID0gJXsgJFBhcmFte1N0YW5kYXJkUmVzcG9uc2VzfSB8fCB7fSB9OwogICAgbXkgJVN0YW5kYXJkUmVzcG9uc2VIYXNoID0gJXsgJFBhcmFte1N0YW5kYXJkVGVtcGxhdGVzfS0+e0Fuc3dlcn0gfHwge30gfTsKCiMgUm90aGVyIE9TUyAvIE9UT0JPLUFJCiAgICAjIHJldHJpZXZlIHRoZSBhcmljbGUncyBPVE9CT0FJIGR5bmFtaWMgZmllbGQgdmFsdWUKICAgIG15ICREeW5hbWljRmllbGROYW1lID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpEeW5hbWljRmllbGRPVE9CT0FJJykgfHwgJ09UT0JPQUknOwoKICAgIG15ICRPVE9CT0FJREZDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBOYW1lID0+ICREeW5hbWljRmllbGROYW1lLAogICAgKTsKICAgIG15ICRPVE9CT0FJVmFsdWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlZhbHVlR2V0KAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkT1RPQk9BSURGQ29uZmlnLAogICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkUGFyYW17QXJ0aWNsZX0tPntBcnRpY2xlSUR9LAogICAgKSB8fCAnJzsKCiAgICAjIHJlbW92ZSBPVE9CT0FJIGFuc3dlciB0ZW1wbGF0ZSBpZiB0aGUgZHluYW1pYyBmaWVsZCBob2xkcyB0aGUgZW1wdHkgYW5zd2VyIHRva2VuCiAgICBteSAkRW1wdHlBbnN3ZXJUb2tlbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnT1RPQk9BSTo6RHluYW1pY0ZpZWxkT1RPQk9BSTo6RW1wdHlBbnN3ZXJUb2tlbicpOwogICAgaWYgKCAkRW1wdHlBbnN3ZXJUb2tlbiAmJiAkT1RPQk9BSVZhbHVlIGVxICRFbXB0eUFuc3dlclRva2VuICkgewogICAgICAgIGRlbGV0ZSBAU3RhbmRhcmRSZXNwb25zZUhhc2h7IGdyZXAgeyAkU3RhbmRhcmRSZXNwb25zZUhhc2h7JF99IGVxICdPVE9CT0FJIEFuc3dlciBUZW1wbGF0ZScgfSBrZXlzICVTdGFuZGFyZFJlc3BvbnNlSGFzaCB9OwogICAgfQojIEVPIE9UT0JPLUFJCiAgICAjIGdldCByZXZlcnMgU3RhbmRhcmRSZXNwb25zZUhhc2ggYmVjYXVzZSB3ZSBuZWVkIHRvIHNvcnQgYnkgVmFsdWVzCiAgICAjIGZyb20gJVJldmVyc2VTdGFuZGFyZFJlc3BvbnNlSGFzaCB3ZSBnZXQgdmFsdWUgb2YgS2V5IGJ5ICVTdGFuZGFyZFJlc3BvbnNlSGFzaCBWYWx1ZQogICAgIyBhbmQgQFN0YW5kYXJkUmVzcG9uc2VBcnJheSBpcyBjcmVhdGVkIGFzIGFycmF5IG9mIGhhc2hlcyB3aXRoIGVsZW1lbnRzIEtleSBhbmQgVmFsdWUKCiAgICBteSAlUmV2ZXJzZVN0YW5kYXJkUmVzcG9uc2VIYXNoID0gcmV2ZXJzZSAlU3RhbmRhcmRSZXNwb25zZUhhc2g7CiAgICBteSBAU3RhbmRhcmRSZXNwb25zZUFycmF5ICAgICAgID0gbWFwIHsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRSZXZlcnNlU3RhbmRhcmRSZXNwb25zZUhhc2h7JF99LAogICAgICAgICAgICBWYWx1ZSA9PiAkXwogICAgICAgIH0KICAgIH0gc29ydCB2YWx1ZXMgJVN0YW5kYXJkUmVzcG9uc2VIYXNoOwoKICAgICMgdXNlIHRoaXMgYXJyYXkgdHdpY2UgKGFsc28gZm9yIFJlcGx5IEFsbCksIHNvIGNvcHkgaXQgZmlyc3QKICAgIG15IEBTdGFuZGFyZFJlc3BvbnNlQXJyYXlSZXBseUFsbCA9IEBTdGFuZGFyZFJlc3BvbnNlQXJyYXk7CgogICAgbXkgQE1lbnVJdGVtczsKICAgIGlmIChAU3RhbmRhcmRSZXNwb25zZUFycmF5KSB7CgogICAgICAgICMgYnVpbGQgSFRNTCBzdHJpbmcKICAgICAgICBteSAkU3RhbmRhcmRSZXNwb25zZXNTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnUmVzcG9uc2VJRCcsCiAgICAgICAgICAgIElEICAgICAgICAgICA9PiAnUmVzcG9uc2VJRCcgLiAkUGFyYW17QXJ0aWNsZX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZSBTbWFsbCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcQFN0YW5kYXJkUmVzcG9uc2VBcnJheSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQE1lbnVJdGVtcywgewogICAgICAgICAgICBJdGVtVHlwZSAgICAgICAgICAgICAgPT4gJ0Ryb3Bkb3duJywKICAgICAgICAgICAgRHJvcGRvd25UeXBlICAgICAgICAgID0+ICdSZXBseScsCiAgICAgICAgICAgIFN0YW5kYXJkUmVzcG9uc2VzU3RyZyA9PiAkU3RhbmRhcmRSZXNwb25zZXNTdHJnLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdSZXBseScpLAogICAgICAgICAgICBDbGFzcyAgICAgICAgICAgICAgICAgPT4gJ0FzUG9wdXAgUG9wdXBUeXBlX1RpY2tldEFjdGlvbicsCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgICAgICAgICA9PiAnQWdlbnRUaWNrZXRDb21wb3NlJywKICAgICAgICAgICAgRm9ybUlEICAgICAgICAgICAgICAgID0+ICdSZXBseScgLiAkUGFyYW17QXJ0aWNsZX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBSZXNwb25zZUVsZW1lbnRJRCAgICAgPT4gJ1Jlc3BvbnNlSUQnIC4gJFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgID0+ICRQYXJhbXtUeXBlfSwKICAgICAgICB9OwogICAgfQoKICAgICMgY2hlY2sgaWYgcmVwbHkgYWxsIGlzIG5lZWRlZAogICAgbXkgJFJlY2lwaWVudHMgPSAnJzsKICAgIEtFWToKICAgIGZvciBteSAkS2V5IChxdyhGcm9tIFRvIENjKSkgewogICAgICAgIG5leHQgS0VZIGlmICEkUGFyYW17QXJ0aWNsZX0tPnskS2V5fTsKICAgICAgICBpZiAoJFJlY2lwaWVudHMpIHsKICAgICAgICAgICAgJFJlY2lwaWVudHMgLj0gJywgJzsKICAgICAgICB9CiAgICAgICAgJFJlY2lwaWVudHMgLj0gJFBhcmFte0FydGljbGV9LT57JEtleX07CiAgICB9CiAgICBteSAkUmVjaXBpZW50Q291bnQgPSAwOwogICAgaWYgKCRSZWNpcGllbnRzKSB7CiAgICAgICAgbXkgJEVtYWlsUGFyc2VyID0gS2VybmVsOjpTeXN0ZW06OkVtYWlsUGFyc2VyLT5uZXcoCiAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICBNb2RlID0+ICdTdGFuZGFsb25lJywKICAgICAgICApOwogICAgICAgIG15IEBBZGRyZXNzZXMgPSAkRW1haWxQYXJzZXItPlNwbGl0QWRkcmVzc0xpbmUoIExpbmUgPT4gJFJlY2lwaWVudHMgKTsKICAgICAgICBBRERSRVNTOgogICAgICAgIGZvciBteSAkQWRkcmVzcyAoQEFkZHJlc3NlcykgewogICAgICAgICAgICBteSAkRW1haWwgPSAkRW1haWxQYXJzZXItPkdldEVtYWlsQWRkcmVzcyggRW1haWwgPT4gJEFkZHJlc3MgKTsKICAgICAgICAgICAgbmV4dCBBRERSRVNTIGlmICEkRW1haWw7CiAgICAgICAgICAgIG15ICRJc0xvY2FsID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c3RlbUFkZHJlc3MnKS0+U3lzdGVtQWRkcmVzc0lzTG9jYWxBZGRyZXNzKAogICAgICAgICAgICAgICAgQWRkcmVzcyA9PiAkRW1haWwsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG5leHQgQUREUkVTUyBpZiAkSXNMb2NhbDsKICAgICAgICAgICAgJFJlY2lwaWVudENvdW50Kys7CiAgICAgICAgfQogICAgfQogICAgaWYgKCBAU3RhbmRhcmRSZXNwb25zZUFycmF5UmVwbHlBbGwgJiYgJFJlY2lwaWVudENvdW50ID4gMSApIHsKCiAgICAgICAgbXkgJFN0YW5kYXJkUmVzcG9uc2VzU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1Jlc3BvbnNlSUQnLAogICAgICAgICAgICBJRCAgICAgICAgICAgPT4gJ1Jlc3BvbnNlSURBbGwnIC4gJFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUgU21hbGwnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXEBTdGFuZGFyZFJlc3BvbnNlQXJyYXlSZXBseUFsbCwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQE1lbnVJdGVtcywgewogICAgICAgICAgICBJdGVtVHlwZSAgICAgICAgICAgICAgPT4gJ0Ryb3Bkb3duJywKICAgICAgICAgICAgRHJvcGRvd25UeXBlICAgICAgICAgID0+ICdSZXBseScsCiAgICAgICAgICAgIFN0YW5kYXJkUmVzcG9uc2VzU3RyZyA9PiAkU3RhbmRhcmRSZXNwb25zZXNTdHJnLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgPT4gVHJhbnNsYXRhYmxlKCdSZXBseSBBbGwnKSwKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgICAgID0+ICdBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24nLAogICAgICAgICAgICBBY3Rpb24gICAgICAgICAgICAgICAgPT4gJ0FnZW50VGlja2V0Q29tcG9zZScsCiAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICA9PiAnUmVwbHlBbGwnIC4gJFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgUmVwbHlBbGwgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIFJlc3BvbnNlRWxlbWVudElEICAgICA9PiAnUmVzcG9uc2VJREFsbCcgLiAkUGFyYW17QXJ0aWNsZX0tPntBcnRpY2xlSUR9LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIEBNZW51SXRlbXM7Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/System/TemplateGenerator.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA4YzdkZmMyYzc2NDA2OTljOGUwMmMwYmFiNzI4MTNhNGE3YjgzNDVhIC0gS2VybmVsL1N5c3RlbS9UZW1wbGF0ZUdlbmVyYXRvci5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUZW1wbGF0ZUdlbmVyYXRvcjsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkxheW91dE9iamVjdCkKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCnVzZSBVUkk6OkVzY2FwZSBxdyh1cmlfZXNjYXBlX3V0ZjggdXJpX3VuZXNjYXBlKTsgICAgIyMgbm8gcGVybGltcG9ydHMsIG1ldGhvZHMgYXJlIHVzZWQgaW4gYSBzdWJzdGl0dXRpb24KCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpMYW5ndWFnZSAgICAgICAgICAgICAgKCk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6QXV0b1Jlc3BvbnNlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q29tbXVuaWNhdGlvbkNoYW5uZWwnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpFbmNvZGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAojIFJvdGhlciBPU1MgLyBPVE9CTy1BSQogICAgJ0tlcm5lbDo6U3lzdGVtOjpPdG9ib0FJJywKIyBFTyBPVE9CTy1BSQogICAgJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlNhbHV0YXRpb24nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTaWduYXR1cmUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTdGFuZGFyZFRlbXBsYXRlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3lzdGVtQWRkcmVzcycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlVzZXInLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OlRlbXBsYXRlR2VuZXJhdG9yIC0gdGVtcGxhdGUgZ2VuZXJhdG9yIGxpYgoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgdGVtcGxhdGUgZ2VuZXJhdG9yIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCkRvbid0IHVzZSB0aGUgY29uc3RydWN0b3IgZGlyZWN0bHksIHVzZSB0aGUgT2JqZWN0TWFuYWdlciBpbnN0ZWFkOgoKICAgIG15ICRUZW1wbGF0ZUdlbmVyYXRvck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUZW1wbGF0ZUdlbmVyYXRvcicpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSBibGVzcyB7fSwgJFR5cGU7CgogICAgJFNlbGYtPntSaWNoVGV4dH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0Zyb250ZW5kOjpSaWNoVGV4dCcpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFNhbHV0YXRpb24oKQoKZ2VuZXJhdGUgc2FsdXRhdGlvbgoKICAgIG15ICRTYWx1dGF0aW9uID0gJFRlbXBsYXRlR2VuZXJhdG9yT2JqZWN0LT5TYWx1dGF0aW9uKAogICAgICAgIFRpY2tldElEID0+IDEyMywKICAgICAgICBVc2VySUQgICA9PiAxMjMsCiAgICAgICAgRGF0YSAgICAgPT4gJEFydGljbGVIYXNoUmVmLAogICAgKTsKCnJldHVybnMKICAgIFRleHQKICAgIENvbnRlbnRUeXBlCgo9Y3V0CgpzdWIgU2FsdXRhdGlvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgRGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIEdldCB0aWNrZXQuCiAgICBteSAlVGlja2V0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICk7CgogICAgIyBHZXQgcXVldWUuCiAgICBteSAlUXVldWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVHZXQoCiAgICAgICAgSUQgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICk7CgogICAgIyBHZXQgc2FsdXRhdGlvbi4KICAgIG15ICVTYWx1dGF0aW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNhbHV0YXRpb24nKS0+U2FsdXRhdGlvbkdldCgKICAgICAgICBJRCA9PiAkUXVldWV7U2FsdXRhdGlvbklEfSwKICAgICk7CgogICAgIyBkbyB0ZXh0L3BsYWluIHRvIHRleHQvaHRtbCBjb252ZXJ0CiAgICBpZiAoICRTZWxmLT57UmljaFRleHR9ICYmICRTYWx1dGF0aW9ue0NvbnRlbnRUeXBlfSA9fiAvdGV4dFwvcGxhaW4vaSApIHsKICAgICAgICAkU2FsdXRhdGlvbntDb250ZW50VHlwZX0gPSAndGV4dC9odG1sJzsKICAgICAgICAkU2FsdXRhdGlvbntUZXh0fSAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgU3RyaW5nID0+ICRTYWx1dGF0aW9ue1RleHR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBkbyB0ZXh0L2h0bWwgdG8gdGV4dC9wbGFpbiBjb252ZXJ0CiAgICBpZiAoICEkU2VsZi0+e1JpY2hUZXh0fSAmJiAkU2FsdXRhdGlvbntDb250ZW50VHlwZX0gPX4gL3RleHRcL2h0bWwvaSApIHsKICAgICAgICAkU2FsdXRhdGlvbntDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgJFNhbHV0YXRpb257VGV4dH0gICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0FzY2lpKAogICAgICAgICAgICBTdHJpbmcgPT4gJFNhbHV0YXRpb257VGV4dH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBsaXN0IHVuc3VwcG9ydGVkIHRhZ3MgZm9yIHN0YW5kYXJkIHRlbXBsYXRlCiAgICBteSBATGlzdE9mVW5TdXBwb3J0ZWRUYWcgPSBxdyhPVE9CT19BR0VOVF9TVUJKRUNUIE9UT0JPX0FHRU5UX0JPRFkgT1RPQk9fQ1VTVE9NRVJfQk9EWSBPVE9CT19DVVNUT01FUl9TVUJKRUNUKTsKCiAgICBteSAkU2FsdXRhdGlvblRleHQgPSAkU2VsZi0+X1JlbW92ZVVuU3VwcG9ydGVkVGFnKAogICAgICAgIFRleHQgICAgICAgICAgICAgICAgID0+ICRTYWx1dGF0aW9ue1RleHR9IHx8ICcnLAogICAgICAgIExpc3RPZlVuU3VwcG9ydGVkVGFnID0+IFxATGlzdE9mVW5TdXBwb3J0ZWRUYWcsCiAgICApOwoKICAgICMgcmVwbGFjZSBwbGFjZSBob2xkZXIgc3R1ZmYKICAgICRTYWx1dGF0aW9uVGV4dCA9ICRTZWxmLT5fUmVwbGFjZSgKICAgICAgICBSaWNoVGV4dCAgID0+ICRTZWxmLT57UmljaFRleHR9LAogICAgICAgIFRleHQgICAgICAgPT4gJFNhbHV0YXRpb25UZXh0LAogICAgICAgIFRpY2tldERhdGEgPT4gXCVUaWNrZXQsCiAgICAgICAgRGF0YSAgICAgICA9PiAkUGFyYW17RGF0YX0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBhZGQgdXJscwogICAgaWYgKCAkU2VsZi0+e1JpY2hUZXh0fSApIHsKICAgICAgICAkU2FsdXRhdGlvblRleHQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPkxpbmtRdW90ZSgKICAgICAgICAgICAgU3RyaW5nID0+ICRTYWx1dGF0aW9uVGV4dCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkU2FsdXRhdGlvblRleHQ7Cn0KCj1oZWFkMiBTaWduYXR1cmUoKQoKZ2VuZXJhdGUgc2FsdXRhdGlvbgoKICAgIG15ICRTaWduYXR1cmUgPSAkVGVtcGxhdGVHZW5lcmF0b3JPYmplY3QtPlNpZ25hdHVyZSgKICAgICAgICBUaWNrZXRJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgPT4gMTIzLAogICAgICAgIERhdGEgICAgID0+ICRBcnRpY2xlSGFzaFJlZiwKICAgICk7CgpvcgoKICAgIG15ICRTaWduYXR1cmUgPSAkVGVtcGxhdGVHZW5lcmF0b3JPYmplY3QtPlNpZ25hdHVyZSgKICAgICAgICBRdWV1ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgID0+IDEyMywKICAgICAgICBEYXRhICAgID0+ICRBcnRpY2xlSGFzaFJlZiwKICAgICk7CgpyZXR1cm5zCiAgICBUZXh0CiAgICBDb250ZW50VHlwZQoKPWN1dAoKc3ViIFNpZ25hdHVyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBuZWVkIHRpY2tldCBpZCBvciBxdWV1ZSBpZAogICAgaWYgKCAhJFBhcmFte1RpY2tldElEfSAmJiAhJFBhcmFte1F1ZXVlSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBUaWNrZXRJRCBvciBRdWV1ZUlEIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIEdldCB0aWNrZXQgZGF0YS4KICAgIG15ICVUaWNrZXQ7CiAgICBpZiAoICRQYXJhbXtUaWNrZXRJRH0gKSB7CiAgICAgICAgJVRpY2tldCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgR2V0IHF1ZXVlLgogICAgbXkgJVF1ZXVlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlR2V0KAogICAgICAgIElEID0+ICRUaWNrZXR7UXVldWVJRH0gfHwgJFBhcmFte1F1ZXVlSUR9LAogICAgKTsKCiAgICAjIEdldCBzaWduYXR1cmUuCiAgICBteSAlU2lnbmF0dXJlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNpZ25hdHVyZScpLT5TaWduYXR1cmVHZXQoCiAgICAgICAgSUQgPT4gJFF1ZXVle1NpZ25hdHVyZUlEfSwKICAgICk7CgogICAgIyBkbyB0ZXh0L3BsYWluIHRvIHRleHQvaHRtbCBjb252ZXJ0CiAgICBpZiAoICRTZWxmLT57UmljaFRleHR9ICYmICRTaWduYXR1cmV7Q29udGVudFR5cGV9ID1+IC90ZXh0XC9wbGFpbi9pICkgewogICAgICAgICRTaWduYXR1cmV7Q29udGVudFR5cGV9ID0gJ3RleHQvaHRtbCc7CiAgICAgICAgJFNpZ25hdHVyZXtUZXh0fSAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgU3RyaW5nID0+ICRTaWduYXR1cmV7VGV4dH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRvIHRleHQvaHRtbCB0byB0ZXh0L3BsYWluIGNvbnZlcnQKICAgIGlmICggISRTZWxmLT57UmljaFRleHR9ICYmICRTaWduYXR1cmV7Q29udGVudFR5cGV9ID1+IC90ZXh0XC9odG1sL2kgKSB7CiAgICAgICAgJFNpZ25hdHVyZXtDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgJFNpZ25hdHVyZXtUZXh0fSAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvQXNjaWkoCiAgICAgICAgICAgIFN0cmluZyA9PiAkU2lnbmF0dXJle1RleHR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbGlzdCB1bnN1cHBvcnRlZCB0YWdzIGZvciBzdGFuZGFyZCB0ZW1wbGF0ZQogICAgbXkgQExpc3RPZlVuU3VwcG9ydGVkVGFnID0gcXcoT1RPQk9fQUdFTlRfU1VCSkVDVCBPVE9CT19BR0VOVF9CT0RZIE9UT0JPX0NVU1RPTUVSX0JPRFkgT1RPQk9fQ1VTVE9NRVJfU1VCSkVDVCk7CgogICAgbXkgJFNpZ25hdHVyZVRleHQgPSAkU2VsZi0+X1JlbW92ZVVuU3VwcG9ydGVkVGFnKAogICAgICAgIFRleHQgICAgICAgICAgICAgICAgID0+ICRTaWduYXR1cmV7VGV4dH0gfHwgJycsCiAgICAgICAgTGlzdE9mVW5TdXBwb3J0ZWRUYWcgPT4gXEBMaXN0T2ZVblN1cHBvcnRlZFRhZywKICAgICk7CgogICAgIyByZXBsYWNlIHBsYWNlIGhvbGRlciBzdHVmZgogICAgJFNpZ25hdHVyZVRleHQgPSAkU2VsZi0+X1JlcGxhY2UoCiAgICAgICAgUmljaFRleHQgICA9PiAkU2VsZi0+e1JpY2hUZXh0fSwKICAgICAgICBUZXh0ICAgICAgID0+ICRTaWduYXR1cmVUZXh0LAogICAgICAgIFRpY2tldERhdGEgPT4gXCVUaWNrZXQsCiAgICAgICAgRGF0YSAgICAgICA9PiAkUGFyYW17RGF0YX0sCiAgICAgICAgUXVldWVJRCAgICA9PiAkUGFyYW17UXVldWVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBhZGQgdXJscwogICAgaWYgKCAkU2VsZi0+e1JpY2hUZXh0fSApIHsKICAgICAgICAkU2lnbmF0dXJlVGV4dCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+TGlua1F1b3RlKAogICAgICAgICAgICBTdHJpbmcgPT4gJFNpZ25hdHVyZVRleHQsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJFNpZ25hdHVyZVRleHQ7Cn0KCj1oZWFkMiBTZW5kZXIoKQoKZ2VuZXJhdGUgc2VuZGVyIGFkZHJlc3MgKEZST00gc3RyaW5nKSBmb3IgZW1haWxzCgogICAgbXkgJFNlbmRlciA9ICRUZW1wbGF0ZUdlbmVyYXRvck9iamVjdC0+U2VuZGVyKAogICAgICAgIFF1ZXVlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgPT4gMTIzLAogICAgKTsKCnJldHVybnM6CgogICAgSm9obiBEb2UgYXQgU3VwZXIgU3VwcG9ydCA8c2VydmljZUBleGFtcGxlLmNvbT4KCmFuZCBpdCByZXR1cm5zIHRoZSBxdW90ZWQgcmVhbCBuYW1lIGlmIG5lY2Vzc2FyeQoKICAgICJKb2huIERvZSwgU3VwcG9ydCIgPHNlcnZpY2VAZXhhbXBsZS50bGQ+Cgo9Y3V0CgpzdWIgU2VuZGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyggVXNlcklEIFF1ZXVlSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgc2VuZGVyIGF0dHJpYnV0ZXMKICAgIG15ICVBZGRyZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPkdldFN5c3RlbUFkZHJlc3MoCiAgICAgICAgUXVldWVJRCA9PiAkUGFyYW17UXVldWVJRH0sCiAgICApOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgY2hlY2sgY29uZmlnIGZvciBhZ2VudCByZWFsIG5hbWUKICAgIG15ICRVc2VBZ2VudFJlYWxOYW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkRlZmluZUVtYWlsRnJvbScpOwogICAgaWYgKCAkVXNlQWdlbnRSZWFsTmFtZSAmJiAkVXNlQWdlbnRSZWFsTmFtZSA9fiAvXihBZ2VudE5hbWV8QWdlbnROYW1lU3lzdGVtQWRkcmVzc05hbWUpJC8gKSB7CgogICAgICAgICMgZ2V0IGRhdGEgZnJvbSBjdXJyZW50IGFnZW50CiAgICAgICAgbXkgJVVzZXJEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIE5vT3V0T2ZPZmZpY2UgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHNldCByZWFsIG5hbWUgd2l0aCB1c2VyIG5hbWUKICAgICAgICBpZiAoICRVc2VBZ2VudFJlYWxOYW1lIGVxICdBZ2VudE5hbWUnICkgewoKICAgICAgICAgICAgIyBjaGVjayBmb3IgdXNlciBkYXRhCiAgICAgICAgICAgIGlmICggJFVzZXJEYXRhe1VzZXJGdWxsbmFtZX0gKSB7CgogICAgICAgICAgICAgICAgIyByZXdyaXRlIFJlYWxOYW1lCiAgICAgICAgICAgICAgICAkQWRkcmVzc3tSZWFsTmFtZX0gPSAiJFVzZXJEYXRhe1VzZXJGdWxsbmFtZX0iOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNldCByZWFsIG5hbWUgd2l0aCB1c2VyIG5hbWUKICAgICAgICBpZiAoICRVc2VBZ2VudFJlYWxOYW1lIGVxICdBZ2VudE5hbWVTeXN0ZW1BZGRyZXNzTmFtZScgKSB7CgogICAgICAgICAgICAjIGNoZWNrIGZvciB1c2VyIGRhdGEKICAgICAgICAgICAgaWYgKCAkVXNlckRhdGF7VXNlckZ1bGxuYW1lfSApIHsKCiAgICAgICAgICAgICAgICAjIHJld3JpdGUgUmVhbE5hbWUKICAgICAgICAgICAgICAgIG15ICRTZXBhcmF0b3IgPSAnICcgLiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RGVmaW5lRW1haWxGcm9tU2VwYXJhdG9yJykKICAgICAgICAgICAgICAgICAgICB8fCAnJzsKICAgICAgICAgICAgICAgICRBZGRyZXNze1JlYWxOYW1lfSA9ICRVc2VyRGF0YXtVc2VyRnVsbG5hbWV9IC4gJFNlcGFyYXRvciAuICcgJyAuICRBZGRyZXNze1JlYWxOYW1lfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIEZvcm1hdCBzZW5kZXIgcmVhbCBuYW1lIGFuZCBhZGRyZXNzIGNvbXBsaWFudCB0byBSRkMgNTMyMi4gVGhpcyBpcyByZWxldmFudCB3aGVuIHRoZSByZWFsIG5hbWUgY29udGFpbiBjb21tYXMKICAgICMgb3Igb3RoZXIgc3BlY2lhbCBzeW1ib2xzLgogICAgcmV0dXJuIE1haWw6OkFkZHJlc3MtPm5ldyggJEFkZHJlc3N7UmVhbE5hbWV9LCAkQWRkcmVzc3tFbWFpbH0gKS0+Zm9ybWF0KCk7Cn0KCj1oZWFkMiBUZW1wbGF0ZSgpCgpnZW5lcmF0ZSB0ZW1wbGF0ZQoKICAgIG15ICRUZW1wbGF0ZSA9ICRUZW1wbGF0ZUdlbmVyYXRvck9iamVjdC0+VGVtcGxhdGUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVGlja2V0SUQgICA9PiAxMjMsICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbAogICAgICAgIERhdGEgICAgICAgPT4gJEFydGljbGVIYXNoUmVmLCAgICAgICMgT3B0aW9uYWwKICAgICAgICBVc2VySUQgICAgID0+IDEyMywKICAgICk7CgpSZXR1cm5zOgoKICAgICRUZW1wbGF0ZSA9ICdTb21lIHRleHQnOwoKPWN1dAoKc3ViIFRlbXBsYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGFuZGFyZFRlbXBsYXRlJyk7CgogICAgbXkgJVRlbXBsYXRlID0gJFN0YW5kYXJkVGVtcGxhdGVPYmplY3QtPlN0YW5kYXJkVGVtcGxhdGVHZXQoCiAgICAgICAgSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgKTsKCiAgICAjIGRvIHRleHQvcGxhaW4gdG8gdGV4dC9odG1sIGNvbnZlcnQKICAgIGlmICgKICAgICAgICAkU2VsZi0+e1JpY2hUZXh0fQogICAgICAgICYmICRUZW1wbGF0ZXtDb250ZW50VHlwZX0gPX4gL3RleHRcL3BsYWluL2kKICAgICAgICAmJiAkVGVtcGxhdGV7VGVtcGxhdGV9CiAgICAgICAgKQogICAgewogICAgICAgICRUZW1wbGF0ZXtDb250ZW50VHlwZX0gPSAndGV4dC9odG1sJzsKICAgICAgICAkVGVtcGxhdGV7VGVtcGxhdGV9ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgIFN0cmluZyA9PiAkVGVtcGxhdGV7VGVtcGxhdGV9LAogICAgICAgICk7CiAgICB9CgogICAgIyBkbyB0ZXh0L2h0bWwgdG8gdGV4dC9wbGFpbiBjb252ZXJ0CiAgICBpZiAoCiAgICAgICAgISRTZWxmLT57UmljaFRleHR9CiAgICAgICAgJiYgJFRlbXBsYXRle0NvbnRlbnRUeXBlfSA9fiAvdGV4dFwvaHRtbC9pCiAgICAgICAgJiYgJFRlbXBsYXRle1RlbXBsYXRlfQogICAgICAgICkKICAgIHsKICAgICAgICAkVGVtcGxhdGV7Q29udGVudFR5cGV9ID0gJ3RleHQvcGxhaW4nOwogICAgICAgICRUZW1wbGF0ZXtUZW1wbGF0ZX0gICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvQXNjaWkoCiAgICAgICAgICAgIFN0cmluZyA9PiAkVGVtcGxhdGV7VGVtcGxhdGV9LAogICAgICAgICk7CiAgICB9CgogICAgIyBHZXQgdXNlciBsYW5ndWFnZS4KICAgIG15ICRMYW5ndWFnZTsKICAgIG15ICVUaWNrZXQ7CiAgICBpZiAoIGRlZmluZWQgJFBhcmFte1RpY2tldElEfSApIHsKCiAgICAgICAgIyBHZXQgdGlja2V0IGRhdGEuCiAgICAgICAgJVRpY2tldCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIEdldCByZWNpcGllbnQuCiAgICAgICAgbXkgJVVzZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyktPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgIFVzZXIgPT4gJFRpY2tldHtDdXN0b21lclVzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICAkTGFuZ3VhZ2UgPSAkVXNlcntVc2VyTGFuZ3VhZ2V9OwogICAgfQoKICAgICMgSWYgdGVtcGxhdGUgdHlwZSBpcyAnQ3JlYXRlJyBhbmQgdGhlcmUgaXMgY3VzdG9tZXIgdXNlciBpbmZvcm1hdGlvbiwgdHJlYXQgaXQgYXMgYSB0aWNrZXQgcGFyYW0gaW4gb3JkZXIgdG8KICAgICMgY29ycmVjdGx5IHJlcGxhY2UgY3VzdG9tZXIgdXNlciB0YWdzLiBTZWUgYnVnIzE0NDU1LgogICAgaWYgKCAkVGVtcGxhdGV7VGVtcGxhdGVUeXBlfSBlcSAnQ3JlYXRlJyAmJiAkUGFyYW17Q3VzdG9tZXJVc2VySUR9ICkgewogICAgICAgICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9ID0gJFBhcmFte0N1c3RvbWVyVXNlcklEfTsKICAgIH0KCiAgICAjIGlmIGN1c3RvbWVyIGxhbmd1YWdlIGlzIG5vdCBkZWZpbmVkLCBzZXQgZGVmYXVsdCBsYW5ndWFnZQogICAgJExhbmd1YWdlIC8vPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0RlZmF1bHRMYW5ndWFnZScpIHx8ICdlbic7CgogICAgIyBnZXQgbGlzdCB1bnN1cHBvcnRlZCB0YWdzIGZvciBzdGFuZGFyZCB0ZW1wbGF0ZQogICAgbXkgQExpc3RPZlVuU3VwcG9ydGVkVGFnID0gcXcoT1RPQk9fQUdFTlRfU1VCSkVDVCBPVE9CT19BR0VOVF9CT0RZIE9UT0JPX0NVU1RPTUVSX0JPRFkgT1RPQk9fQ1VTVE9NRVJfU1VCSkVDVCk7CgogICAgbXkgJVN1cHBvcnRlZFR5cGVzID0gKAogICAgICAgIEFuc3dlciAgPT4gMSwKICAgICAgICBGb3J3YXJkID0+IDEsCiAgICAgICAgTm90ZSAgICA9PiAxLAogICAgKTsKCiAgICBteSAkVGVtcGxhdGVUZXh0ID0gJFRlbXBsYXRle1RlbXBsYXRlfSB8fCAnJzsKICAgIG15ICRUZW1wbGF0ZVR5cGUgPSAkVGVtcGxhdGV7VGVtcGxhdGVUeXBlfTsKCiAgICAjIFJlbW92ZSB1bnN1cHBvcnRlZCB0YWdzIG9ubHkgZm9yIHNvbWUgdGVtcGxhdGUgdHlwZXMuCiAgICBpZiAoICEkU3VwcG9ydGVkVHlwZXN7ICRUZW1wbGF0ZXtUZW1wbGF0ZVR5cGV9IH0gKSB7CiAgICAgICAgJFRlbXBsYXRlVGV4dCA9ICRTZWxmLT5fUmVtb3ZlVW5TdXBwb3J0ZWRUYWcoCiAgICAgICAgICAgIFRleHQgICAgICAgICAgICAgICAgID0+ICRUZW1wbGF0ZXtUZW1wbGF0ZX0gfHwgJycsCiAgICAgICAgICAgIExpc3RPZlVuU3VwcG9ydGVkVGFnID0+IFxATGlzdE9mVW5TdXBwb3J0ZWRUYWcsCiAgICAgICAgKTsKCiAgICAgICAgIyBSZXNldCB0ZW1wbGF0ZSB0eXBlIGZvciB1bnN1cHBvcnRlZCB0YWcuCiAgICAgICAgJFRlbXBsYXRlVHlwZSA9ICcnOwogICAgfQoKICAgICMgcmVwbGFjZSBwbGFjZSBob2xkZXIgc3R1ZmYKICAgICRUZW1wbGF0ZVRleHQgPSAkU2VsZi0+X1JlcGxhY2UoCiAgICAgICAgUmljaFRleHQgICA9PiAkU2VsZi0+e1JpY2hUZXh0fSwKICAgICAgICBUZXh0ICAgICAgID0+ICRUZW1wbGF0ZVRleHQgfHwgJycsCiAgICAgICAgVGlja2V0RGF0YSA9PiBcJVRpY2tldCwKICAgICAgICBEYXRhICAgICAgID0+ICRQYXJhbXtEYXRhfSB8fCB7fSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIExhbmd1YWdlICAgPT4gJExhbmd1YWdlLAogICAgICAgIFRlbXBsYXRlICAgPT4gJFRlbXBsYXRlVHlwZSwKICAgICk7CgojIFJvdGhlciBPU1MgLyBPVE9CTy1BSQogICAgIyB3aGVuIHRlbXBsYXRlIGlzIG9mIHR5cGUgQW5zd2VyLCByZXBsYWNlIEFJIHRhZwogICAgaWYgKAogICAgICAgICRUZW1wbGF0ZVR5cGUgZXEgJ0Fuc3dlcicKICAgICAgICAmJiAkUGFyYW17VGlja2V0SUR9CiAgICAgICAgJiYgJFBhcmFte0FydGljbGVJRH0KICAgICkgewoKICAgICAgICAjIGNoZWNrIGlmIHRhZyBpcyBwcmVzZW50IGluIHRoZSB0ZW1wbGF0ZSBmaXJzdAogICAgICAgICMgICB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlcXVlc3QgdHJpZ2dlcmluZwogICAgICAgIG15ICRTdGFydCA9ICc8JzsKICAgICAgICBteSAkRW5kICAgPSAnPic7CiAgICAgICAgaWYgKCAkU2VsZi0+e1JpY2hUZXh0fSApIHsKICAgICAgICAgICAgJFN0YXJ0ID0gJyZsdDsnOwogICAgICAgICAgICAkRW5kICAgPSAnJmd0Oyc7CiAgICAgICAgfQogICAgICAgIG15ICRBSVRhZyA9ICRTdGFydCAuICdPVE9CT19BSUFuc3dlcl9PVE9CT0FJJyAuICRFbmQ7CiAgICAgICAgaWYgKCAkVGVtcGxhdGVUZXh0ID1+IC8kQUlUYWcvICkgewogICAgICAgICAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZE5hbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ09UT0JPQUk6OkR5bmFtaWNGaWVsZE9UT0JPQUknKSB8fCAnT1RPQk9BSSc7CiAgICAgICAgICAgIG15ICRPdmVyd3JpdGVGbGFnICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdPVE9CT0FJOjpPdmVyd3JpdGVQcmV2aW91c1Jlc3BvbnNlJykgfHwgMDsKCiAgICAgICAgICAgIG15ICRQbGFjZWhvbGRlciA9ICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6UGxhY2Vob2xkZXInKSB8fCAnPHx3YWl0aW5nIGZvciBBSSBhbnN3ZXJ8Pic7CiAgICAgICAgICAgICRQbGFjZWhvbGRlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkUGxhY2Vob2xkZXIgKTsKCiAgICAgICAgICAgICMgZmV0Y2ggZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgYXJ0aWNsZSBpZAogICAgICAgICAgICBteSAkT1RPQk9BSURGQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgICAgICBOYW1lID0+ICREeW5hbWljRmllbGROYW1lLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkT1RPQk9BSURGQ29uZmlnKSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkR5bmFtaWNGaWVsZCAnJER5bmFtaWNGaWVsZE5hbWUnIG5vdCBmb3VuZCBvbiB0aGUgc3lzdGVtISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15ICRPVE9CT0FJVmFsdWUgPSAnJzsKICAgICAgICAgICAgaWYgKCAhJE92ZXJ3cml0ZUZsYWcgKSB7CiAgICAgICAgICAgICAgICAkT1RPQk9BSVZhbHVlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpLT5WYWx1ZUdldCgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJE9UT0JPQUlERkNvbmZpZywKICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFBhcmFte0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkUmVxdWVzdFR5cGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ09UT0JPQUk6OkFuc3dlclRlbXBsYXRlUmVxdWVzdFR5cGUnKSB8fCAnU3luY2hyb25vdXMnOwogICAgICAgICAgICBpZiAoICRSZXF1ZXN0VHlwZSBlcSAnQXN5bmNocm9ub3VzJyApIHsKICAgICAgICAgICAgICAgICMgc3VyZSB3ZSB3YW50IHRvIHN0YXJ0IGEgbmV3IHJlcXVlc3QgaWYgd2UgaGF2ZSBwbGFjZWhvbGRlcj8KICAgICAgICAgICAgICAgIGlmICggISRPVE9CT0FJVmFsdWUgKSB7ICN8fCAkT1RPQk9BSVZhbHVlIGVxICRQbGFjZWhvbGRlciApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScpLT5HZXRBbnN3ZXJBc3luYygKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgPT4gJFBhcmFte0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJE9UT0JPQUlWYWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpLT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkT1RPQk9BSURGQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRQYXJhbXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRQbGFjZWhvbGRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvV3JpdGUgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkT1RPQk9BSVZhbHVlID0gJFBsYWNlaG9sZGVyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRSZXF1ZXN0VHlwZSBlcSAnU3luY2hyb25vdXMnICkgewogICAgICAgICAgICAgICAgaWYgKCAhJE9UT0JPQUlWYWx1ZSB8fCAkT1RPQk9BSVZhbHVlIGVxICRQbGFjZWhvbGRlciApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJE9UT0JPQUlWYWx1ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpLT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkT1RPQk9BSURGQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRQYXJhbXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRQbGFjZWhvbGRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvV3JpdGUgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBteSAkUmVzdWx0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUknKS0+R2V0QW5zd2VyKAogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiAkUGFyYW17QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmKElzSGFzaFJlZldpdGhEYXRhKCRSZXN1bHQpICYmIElzSGFzaFJlZldpdGhEYXRhKCRSZXN1bHQtPntEYXRhfSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE9UT0JPQUlWYWx1ZSA9ICRSZXN1bHQtPntEYXRhfS0+e0Fuc3dlcn07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGlmIExMTSBvdXRwdXQgaXMgYSB0b2tlbiBpbmRpY2F0aW5nIGFuIGVtcHR5IGFuc3dlciBhcyBzcGVjaWZpZWQgaW4gdGhpcyBzZXR0aW5nCiAgICAgICAgICAgIG15ICRFbXB0eUFuc3dlclRva2VuID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpEeW5hbWljRmllbGRPVE9CT0FJOjpFbXB0eUFuc3dlclRva2VuJyk7CiAgICAgICAgICAgIGlmICggJEVtcHR5QW5zd2VyVG9rZW4gJiYgJE9UT0JPQUlWYWx1ZSBlcSAkRW1wdHlBbnN3ZXJUb2tlbiApIHsKICAgICAgICAgICAgICAgICRPVE9CT0FJVmFsdWUgPSAnJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJEhUTUxWYWx1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9IVE1MKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRPVE9CT0FJVmFsdWUgfHwgJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlcGxhY2UgPE9UT0JPX0FJQW5zd2VyX0RGTmFtZT4gdGFnCiAgICAgICAgICAgICRUZW1wbGF0ZVRleHQgPX4gcy8kQUlUYWcvJEhUTUxWYWx1ZS9nOwogICAgICAgIH0KICAgIH0KIyBFTyBPVE9CTy1BSQoKICAgIGlmICggJFNlbGYtPntSaWNoVGV4dH0gKSB7CiAgICAgICAgJFRlbXBsYXRlVGV4dCA9fiBzLyZsdDsvPC9nOwogICAgICAgICRUZW1wbGF0ZVRleHQgPX4gcy8mZ3Q7Lz4vZzsKICAgICAgICAkVGVtcGxhdGVUZXh0ID1+IHMvJnF1b3Q7LyIvZzsKICAgICAgICAkVGVtcGxhdGVUZXh0ID1+IHMvJmFwb3M7LycvZzsKICAgICAgICAkVGVtcGxhdGVUZXh0ID1+IHMvJm5ic3A7LyAvZzsKICAgIH0KCiAgICByZXR1cm4gJFRlbXBsYXRlVGV4dDsKfQoKPWhlYWQyIEdlbmVyaWNBZ2VudEFydGljbGUoKQoKZ2VuZXJhdGUgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgbm90ZXMKCiAgICBteSAkR2VuZXJpY0FnZW50QXJ0aWNsZSA9ICRUZW1wbGF0ZUdlbmVyYXRvck9iamVjdC0+R2VuZXJpY0FnZW50QXJ0aWNsZSgKICAgICAgICBOb3RpZmljYXRpb24gPT4gJE5vdGlmaWNhdGlvbkRhdGFIYXNoUmVmLAogICAgICAgIFRpY2tldElEICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEyMywKICAgICAgICBEYXRhICAgICAgICAgPT4gJEFydGljbGVIYXNoUmVmLCAgICAgICAgICAgICAjIE9wdGlvbmFsCiAgICApOwoKPWN1dAoKc3ViIEdlbmVyaWNBZ2VudEFydGljbGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldElEIE5vdGlmaWNhdGlvbiBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlVGVtcGxhdGUgPSAleyAkUGFyYW17Tm90aWZpY2F0aW9ufSB9OwoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBHZXQgdGlja2V0IGRhdGEuCiAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICApOwoKICAgICMgZG8gdGV4dC9wbGFpbiB0byB0ZXh0L2h0bWwgY29udmVydAogICAgaWYgKAogICAgICAgICRTZWxmLT57UmljaFRleHR9CiAgICAgICAgJiYgJFRlbXBsYXRle0NvbnRlbnRUeXBlfSA9fiAvdGV4dFwvcGxhaW4vaQogICAgICAgICYmICRUZW1wbGF0ZXtCb2R5fQogICAgICAgICkKICAgIHsKICAgICAgICAkVGVtcGxhdGV7Q29udGVudFR5cGV9ID0gJ3RleHQvaHRtbCc7CiAgICAgICAgJFRlbXBsYXRle0JvZHl9ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9IVE1MKAogICAgICAgICAgICBTdHJpbmcgPT4gJFRlbXBsYXRle0JvZHl9LAogICAgICAgICk7CiAgICB9CgogICAgIyBkbyB0ZXh0L2h0bWwgdG8gdGV4dC9wbGFpbiBjb252ZXJ0CiAgICBpZiAoCiAgICAgICAgISRTZWxmLT57UmljaFRleHR9CiAgICAgICAgJiYgJFRlbXBsYXRle0NvbnRlbnRUeXBlfSA9fiAvdGV4dFwvaHRtbC9pCiAgICAgICAgJiYgJFRlbXBsYXRle0JvZHl9CiAgICAgICAgKQogICAgewogICAgICAgICRUZW1wbGF0ZXtDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgJFRlbXBsYXRle0JvZHl9ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9Bc2NpaSgKICAgICAgICAgICAgU3RyaW5nID0+ICRUZW1wbGF0ZXtCb2R5fSwKICAgICAgICApOwogICAgfQoKICAgICMgcmVwbGFjZSBwbGFjZSBob2xkZXIgc3R1ZmYKICAgICRUZW1wbGF0ZXtCb2R5fSA9ICRTZWxmLT5fUmVwbGFjZSgKICAgICAgICBSaWNoVGV4dCAgID0+ICRTZWxmLT57UmljaFRleHR9LAogICAgICAgIFRleHQgICAgICAgPT4gJFRlbXBsYXRle0JvZHl9LAogICAgICAgIFJlY2lwaWVudCAgPT4gJFBhcmFte1JlY2lwaWVudH0sCiAgICAgICAgRGF0YSAgICAgICA9PiAkUGFyYW17RGF0YX0gfHwge30sCiAgICAgICAgVGlja2V0RGF0YSA9PiBcJVRpY2tldCwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKICAgICRUZW1wbGF0ZXtTdWJqZWN0fSA9ICRTZWxmLT5fUmVwbGFjZSgKICAgICAgICBSaWNoVGV4dCAgID0+IDAsCiAgICAgICAgVGV4dCAgICAgICA9PiAkVGVtcGxhdGV7U3ViamVjdH0sCiAgICAgICAgUmVjaXBpZW50ICA9PiAkUGFyYW17UmVjaXBpZW50fSwKICAgICAgICBEYXRhICAgICAgID0+ICRQYXJhbXtEYXRhfSB8fCB7fSwKICAgICAgICBUaWNrZXREYXRhID0+IFwlVGlja2V0LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICRUZW1wbGF0ZXtTdWJqZWN0fSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN1YmplY3RCdWlsZCgKICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgIFN1YmplY3QgICAgICA9PiAkVGVtcGxhdGV7U3ViamVjdH0gfHwgJycsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOZXcnLAogICAgKTsKCiAgICAjIGFkZCBVUkxzIGFuZCB2ZXJpZnkgdG8gYmUgZnVsbCBIVE1MIGRvY3VtZW50CiAgICBpZiAoICRTZWxmLT57UmljaFRleHR9ICkgewoKICAgICAgICAkVGVtcGxhdGV7Qm9keX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPkxpbmtRdW90ZSgKICAgICAgICAgICAgU3RyaW5nID0+ICRUZW1wbGF0ZXtCb2R5fSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAlVGVtcGxhdGU7Cn0KCj1oZWFkMiBBdHRyaWJ1dGVzKCkKCm1vZGlmaWVzIGlucGxhY2UgdGhlIHBhc3NlZCBpbiBDPERhdGE+IGhhc2ggcmVmZXJlbmNlIGFuZCByZXR1cm5zIHRoZSBlbnJpY2hlZCBkYXRhLgoKICAgIG15ICVEYXRhID0gKAogICAgICAgIFN1YmplY3QgPT4gJ1doYXQgZG8geW91IHdhbnQgdG8gdGFsayBhYm91dD8nCiAgICApOwoKICAgIG15ICVFbnJpY2hlZERhdGEgPSAkVGVtcGxhdGVHZW5lcmF0b09iamVjdC0+QXR0cmlidXRlcygKICAgICAgICBUaWNrZXRJRCAgID0+IDEyMywKICAgICAgICBEYXRhICAgICAgID0+IFwlRGF0YSwgICAgIyAkRGF0YXtTdWJqZWN0fSBpcyB1c2VkIGFzIGlucHV0IGZvciBmaW5kaW5nIHRoZSBuZXcgc3ViamVjdAogICAgICAgIFVzZXJJRCAgICAgPT4gMTIzLAogICAgICAgIEFjdGlvbiAgICAgPT4gJ0ZvcndhcmQnLCAjIFJlbGV2YW50IGZvciB0aGUgc3ViamVjdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQb3NzaWJsZSB2YWx1ZXMgYXJlICdSZXBseScgYW5kICdGb3J3YXJkJywgJ1JlcGx5JyBpcyBldmVudHVhbGx5IHRoZSBkZWZhdWx0LgogICAgKTsKClJldHVybnMgdGhlIG1vZGlmaWVkIGhhc2ggcmVmZXJlbmNlIGFzIGtleSB2YWx1ZSBwYWlycy4gVGhlIHBvdGVudGlhbGx5IGFkZGVkIG9yIGNoYW5nZWQgaXRlbSBhcmU6Cgo9b3ZlciA0Cgo9aXRlbSBTdWJqZWN0Cgo9aXRlbSBGcm9tCgo9YmFjawoKPWN1dAoKc3ViIEF0dHJpYnV0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldElEIERhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBnZXQgdGlja2V0IGRhdGEsIGluY2x1ZGluZyB0aGUgcXVldWUgaWQKICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICk7CgogICAgIyBwcmVwYXJlIHN1YmplY3QgLi4uCiAgICAkUGFyYW17RGF0YX0tPntTdWJqZWN0fSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN1YmplY3RCdWlsZCgKICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgIFN1YmplY3QgICAgICA9PiAkUGFyYW17RGF0YX0tPntTdWJqZWN0fSB8fCAnJywKICAgICAgICBBY3Rpb24gICAgICAgPT4gJFBhcmFte0FjdGlvbn0gICAgICAgICAgfHwgJycsICAgICMgVGlja2V0U3ViamVjdEJ1aWxkKCkgZmFsbHMgYmFjayB0byB0aGUgZGVmYXVsdCAnUmVwbHknCiAgICApOwoKICAgICMgZ2V0IHNlbmRlciBhZGRyZXNzCiAgICAkUGFyYW17RGF0YX0tPntGcm9tfSA9ICRTZWxmLT5TZW5kZXIoCiAgICAgICAgUXVldWVJRCA9PiAkVGlja2V0e1F1ZXVlSUR9LAogICAgICAgIFVzZXJJRCAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkUGFyYW17RGF0YX0tPiUqOwp9Cgo9aGVhZDIgQXV0b1Jlc3BvbnNlKCkKCmdlbmVyYXRlIHJlc3BvbnNlCgpBdXRvUmVzcG9uc2UKICAgIFRpY2tldElECiAgICAgICAgT3duZXIKICAgICAgICBSZXNwb25zaWJsZQogICAgICAgIENVU1RPTUVSX0RBVEEKICAgIEFydGljbGVJRAogICAgICAgIENVU1RPTUVSX1NVQkpFQ1QKICAgICAgICBDVVNUT01FUl9FTUFJTAogICAgVXNlcklECgogICAgVG8KICAgIENjCiAgICBCY2MKICAgIFN1YmplY3QKICAgIEJvZHkKICAgIENvbnRlbnRUeXBlCgogICAgbXkgJUF1dG9SZXNwb25zZSA9ICRUZW1wbGF0ZUdlbmVyYXRvck9iamVjdC0+QXV0b1Jlc3BvbnNlKAogICAgICAgIFRpY2tldElEICAgICAgICAgPT4gMTIzLAogICAgICAgIE9yaWdIZWFkZXIgICAgICAgPT4ge30sCiAgICAgICAgQXV0b1Jlc3BvbnNlVHlwZSA9PiAnYXV0byByZXBseScsCiAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIEF1dG9SZXNwb25zZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXV0b1Jlc3BvbnNlVHlwZSBPcmlnSGVhZGVyIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0aWNrZXQgb2JqZWN0CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICMgR2V0IHRpY2tldCBkYXRhLgogICAgbXkgJVRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgKTsKCiAgICAjIGdldCBhdXRvIGRlZmF1bHQgcmVzcG9uc2VzCiAgICBteSAlQXV0b1Jlc3BvbnNlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dG9SZXNwb25zZScpLT5BdXRvUmVzcG9uc2VHZXRCeVR5cGVRdWV1ZUlEKAogICAgICAgIFF1ZXVlSUQgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICBUeXBlICAgID0+ICRQYXJhbXtBdXRvUmVzcG9uc2VUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIGlmICElQXV0b1Jlc3BvbnNlOwoKICAgICMgZ2V0IG9sZCBhcnRpY2xlIGZvciBxdW90aW5nCiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgIG15IEBBcnRpY2xlTGlzdCAgID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgIFRpY2tldElEICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICBTZW5kZXJUeXBlID0+ICdjdXN0b21lcicsCiAgICAgICAgT25seUxhc3QgICA9PiAxLAogICAgKTsKCiAgICBpZiAoICFAQXJ0aWNsZUxpc3QgKSB7CiAgICAgICAgQEFydGljbGVMaXN0ID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgICAgICAgICBPbmx5TGFzdCAgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKEBBcnRpY2xlTGlzdCkgewogICAgICAgIG15ICVBcnRpY2xlID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKCAleyAkQXJ0aWNsZUxpc3RbMF0gfSApLT5BcnRpY2xlR2V0KCAleyAkQXJ0aWNsZUxpc3RbMF0gfSApOwoKICAgICAgICBmb3IgbXkgJEtleSAocXcoRnJvbSBUbyBDYyBTdWJqZWN0IEJvZHkpKSB7CiAgICAgICAgICAgIGlmICggISRQYXJhbXtPcmlnSGVhZGVyfS0+eyRLZXl9ICkgewogICAgICAgICAgICAgICAgJFBhcmFte09yaWdIZWFkZXJ9LT57JEtleX0gPSAkQXJ0aWNsZXskS2V5fSB8fCAnJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBjaG9tcCAkUGFyYW17T3JpZ0hlYWRlcn0tPnskS2V5fTsKICAgICAgICB9CiAgICB9CgogICAgIyBmb3JtYXQgYm9keSAob25seSBpZiBsb25nZXIgdGhhbiA4NiBjaGFycykKICAgIGlmICggJFBhcmFte09yaWdIZWFkZXJ9LT57Qm9keX0gKSB7CiAgICAgICAgaWYgKCBsZW5ndGggJFBhcmFte09yaWdIZWFkZXJ9LT57Qm9keX0gPiA4NiApIHsKICAgICAgICAgICAgbXkgQExpbmVzID0gc3BsaXQgL1xuLywgJFBhcmFte09yaWdIZWFkZXJ9LT57Qm9keX07CiAgICAgICAgICAgIExJTkU6CiAgICAgICAgICAgIGZvciBteSAkTGluZSAoQExpbmVzKSB7CiAgICAgICAgICAgICAgICBteSAkTGluZVdyYXBwZWQgPSAkTGluZSA9fiBzLyhePi4rfC57NCw4Nn0pKD86XHN8XHopLyQxXG4vZ207CgogICAgICAgICAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lV3JhcHBlZDsKCiAgICAgICAgICAgICAgICAjIGlmIHRoZSByZWdleCBkb2VzIG5vdCBtYXRjaCB0aGVuIHdlIG5lZWQKICAgICAgICAgICAgICAgICMgdG8gYWRkIHRoZSBtaXNzaW5nIG5ldyBsaW5lIG9mIHRoZSBzcGxpdAogICAgICAgICAgICAgICAgIyBlbHNlIHdlIHdpbGwgbG9zZSBlLmcuIGVtcHR5IGxpbmVzIG9mIHRoZSBib2R5LgogICAgICAgICAgICAgICAgIyAoYnVnIzEwNjc5KQogICAgICAgICAgICAgICAgJExpbmUgLj0gIlxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkUGFyYW17T3JpZ0hlYWRlcn0tPntCb2R5fSA9IGpvaW4gJycsIEBMaW5lczsKICAgICAgICB9CiAgICB9CgogICAgIyBmaWxsIHVwIHJlcXVpcmVkIGF0dHJpYnV0ZXMKICAgIGZvciBteSAkS2V5IChxdyhTdWJqZWN0IEJvZHkpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte09yaWdIZWFkZXJ9LT57JEtleX0gKSB7CiAgICAgICAgICAgICRQYXJhbXtPcmlnSGVhZGVyfS0+eyRLZXl9ID0gIk5vICRLZXkiOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCByZWNpcGllbnQKICAgIG15ICVVc2VyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgIFVzZXIgPT4gJFRpY2tldHtDdXN0b21lclVzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHVzZXIgbGFuZ3VhZ2UKICAgIG15ICRMYW5ndWFnZSA9ICRVc2Vye1VzZXJMYW5ndWFnZX0gfHwgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdEZWZhdWx0TGFuZ3VhZ2UnKSB8fCAnZW4nOwoKICAgICMgZG8gdGV4dC9wbGFpbiB0byB0ZXh0L2h0bWwgY29udmVydAogICAgaWYgKCAkU2VsZi0+e1JpY2hUZXh0fSAmJiAkQXV0b1Jlc3BvbnNle0NvbnRlbnRUeXBlfSA9fiAvdGV4dFwvcGxhaW4vaSApIHsKICAgICAgICAkQXV0b1Jlc3BvbnNle0NvbnRlbnRUeXBlfSA9ICd0ZXh0L2h0bWwnOwogICAgICAgICRBdXRvUmVzcG9uc2V7VGV4dH0gICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgIFN0cmluZyA9PiAkQXV0b1Jlc3BvbnNle1RleHR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBkbyB0ZXh0L2h0bWwgdG8gdGV4dC9wbGFpbiBjb252ZXJ0CiAgICBpZiAoICEkU2VsZi0+e1JpY2hUZXh0fSAmJiAkQXV0b1Jlc3BvbnNle0NvbnRlbnRUeXBlfSA9fiAvdGV4dFwvaHRtbC9pICkgewogICAgICAgICRBdXRvUmVzcG9uc2V7Q29udGVudFR5cGV9ID0gJ3RleHQvcGxhaW4nOwogICAgICAgICRBdXRvUmVzcG9uc2V7VGV4dH0gICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0FzY2lpKAogICAgICAgICAgICBTdHJpbmcgPT4gJEF1dG9SZXNwb25zZXtUZXh0fSwKICAgICAgICApOwogICAgfQoKICAgICMgcmVwbGFjZSBwbGFjZSBob2xkZXIgc3R1ZmYKICAgICRBdXRvUmVzcG9uc2V7VGV4dH0gPSAkU2VsZi0+X1JlcGxhY2UoCiAgICAgICAgUmljaFRleHQgPT4gJFNlbGYtPntSaWNoVGV4dH0sCiAgICAgICAgVGV4dCAgICAgPT4gJEF1dG9SZXNwb25zZXtUZXh0fSwKICAgICAgICBEYXRhICAgICA9PiB7CiAgICAgICAgICAgICV7ICRQYXJhbXtPcmlnSGVhZGVyfSB9LAogICAgICAgICAgICBGcm9tID0+ICRQYXJhbXtPcmlnSGVhZGVyfS0+e1RvfSwKICAgICAgICAgICAgVG8gICA9PiAkUGFyYW17T3JpZ0hlYWRlcn0tPntGcm9tfSwKICAgICAgICB9LAogICAgICAgIFRpY2tldERhdGEgICAgICA9PiBcJVRpY2tldCwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgTGFuZ3VhZ2UgICAgICAgID0+ICRMYW5ndWFnZSwKICAgICAgICBBZGRUaW1lem9uZUluZm8gPT4gewogICAgICAgICAgICBBdXRvUmVzcG9uc2UgPT4gMSwKICAgICAgICB9LAogICAgKTsKICAgICRBdXRvUmVzcG9uc2V7U3ViamVjdH0gPSAkU2VsZi0+X1JlcGxhY2UoCiAgICAgICAgUmljaFRleHQgPT4gMCwKICAgICAgICBUZXh0ICAgICA9PiAkQXV0b1Jlc3BvbnNle1N1YmplY3R9LAogICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgJXsgJFBhcmFte09yaWdIZWFkZXJ9IH0sCiAgICAgICAgICAgIEZyb20gPT4gJFBhcmFte09yaWdIZWFkZXJ9LT57VG99LAogICAgICAgICAgICBUbyAgID0+ICRQYXJhbXtPcmlnSGVhZGVyfS0+e0Zyb219LAogICAgICAgIH0sCiAgICAgICAgVGlja2V0RGF0YSAgICAgID0+IFwlVGlja2V0LAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBMYW5ndWFnZSAgICAgICAgPT4gJExhbmd1YWdlLAogICAgICAgIEFkZFRpbWV6b25lSW5mbyA9PiB7CiAgICAgICAgICAgIEF1dG9SZXNwb25zZSA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICRBdXRvUmVzcG9uc2V7U3ViamVjdH0gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdWJqZWN0QnVpbGQoCiAgICAgICAgVGlja2V0TnVtYmVyID0+ICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICBTdWJqZWN0ICAgICAgPT4gJEF1dG9SZXNwb25zZXtTdWJqZWN0fSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05ldycsCiAgICAgICAgTm9DbGVhbnVwICAgID0+IDEsCiAgICApOwoKICAgICMgZ2V0IHNlbmRlciBhdHRyaWJ1dGVzIGJhc2VkIG9uIGF1dG8gcmVzcG9uc2UgdHlwZQogICAgaWYgKCAkQXV0b1Jlc3BvbnNle1N5c3RlbUFkZHJlc3NJRH0gKSB7CgogICAgICAgIG15ICVBZGRyZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c3RlbUFkZHJlc3MnKS0+U3lzdGVtQWRkcmVzc0dldCgKICAgICAgICAgICAgSUQgPT4gJEF1dG9SZXNwb25zZXtTeXN0ZW1BZGRyZXNzSUR9LAogICAgICAgICk7CgogICAgICAgICRBdXRvUmVzcG9uc2V7U2VuZGVyQWRkcmVzc30gID0gJEFkZHJlc3N7TmFtZX07CiAgICAgICAgJEF1dG9SZXNwb25zZXtTZW5kZXJSZWFsbmFtZX0gPSAkQWRkcmVzc3tSZWFsbmFtZX07ICAgICMgbm90ZSB0aGF0IFN5c3RlbUFkZHJlc3MoKSBkb2VzIG5vdCBjYXBpdGFsaXplIHRoZSAnbicKICAgIH0KCiAgICAjIGdldCBzZW5kZXIgYXR0cmlidXRlcyBiYXNlZCBvbiBxdWV1ZQogICAgZWxzZSB7CgogICAgICAgIG15ICVBZGRyZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPkdldFN5c3RlbUFkZHJlc3MoCiAgICAgICAgICAgIFF1ZXVlSUQgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICApOwoKICAgICAgICAkQXV0b1Jlc3BvbnNle1NlbmRlckFkZHJlc3N9ICA9ICRBZGRyZXNze0VtYWlsfTsKICAgICAgICAkQXV0b1Jlc3BvbnNle1NlbmRlclJlYWxuYW1lfSA9ICRBZGRyZXNze1JlYWxOYW1lfTsKICAgIH0KCiAgICAjIGFkZCB1cmxzIGFuZCB2ZXJpZnkgdG8gYmUgZnVsbCBodG1sIGRvY3VtZW50CiAgICBpZiAoICRTZWxmLT57UmljaFRleHR9ICkgewoKICAgICAgICAkQXV0b1Jlc3BvbnNle1RleHR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5MaW5rUXVvdGUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkQXV0b1Jlc3BvbnNle1RleHR9LAogICAgICAgICk7CgogICAgICAgICRBdXRvUmVzcG9uc2V7VGV4dH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkQXV0b1Jlc3BvbnNle1RleHR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICVBdXRvUmVzcG9uc2U7Cn0KCj1oZWFkMiBOb3RpZmljYXRpb25FdmVudCgpCgpyZXBsYWNlIGFsbCBPVE9CTyBzbWFydCB0YWdzIGluIHRoZSBub3RpZmljYXRpb24gYm9keSBhbmQgc3ViamVjdAoKICAgIG15ICVOb3RpZmljYXRpb25FdmVudCA9ICRUZW1wbGF0ZUdlbmVyYXRvck9iamVjdC0+Tm90aWZpY2F0aW9uRXZlbnQoCiAgICAgICAgVGlja2V0RGF0YSAgICAgICAgICAgID0+ICRUaWNrZXREYXRhSGFzaFJlZiwKICAgICAgICBSZWNpcGllbnQgICAgICAgICAgICAgPT4gJFVzZXJEYXRhSGFzaFJlZiwgICAgICAgICAgIyBBZ2VudCBvciBDdXN0b21lciBkYXRhIGdldCByZXN1bHQKICAgICAgICBOb3RpZmljYXRpb24gICAgICAgICAgPT4gJE5vdGlmaWNhdGlvbkRhdGFIYXNoUmVmLAogICAgICAgIEN1c3RvbWVyTWVzc2FnZVBhcmFtcyA9PiAkQXJ0aWNsZUhhc2hSZWYsICAgICAgICAgICAjIG9wdGlvbmFsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgTm90aWZpY2F0aW9uRXZlbnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldERhdGEgTm90aWZpY2F0aW9uIFJlY2lwaWVudCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtOb3RpZmljYXRpb259ICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOb3RpZmljYXRpb24gaXMgaW52YWxpZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICVOb3RpZmljYXRpb24gPSAleyAkUGFyYW17Tm90aWZpY2F0aW9ufSB9OwoKICAgICMgZXhjaGFuZ2luZyBvcmlnaW5hbCByZWZlcmVuY2UgcHJldmVudCBpdCB0byBncm93IHVwCiAgICBpZiAoIHJlZiAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfSAmJiByZWYgJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30gZXEgJ0hBU0gnICkgewogICAgICAgIG15ICVMb2NhbEN1c3RvbWVyTWVzc2FnZVBhcmFtcyA9ICV7ICRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9IH07CiAgICAgICAgJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30gPSBcJUxvY2FsQ3VzdG9tZXJNZXNzYWdlUGFyYW1zOwogICAgfQoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICMgR2V0IGxhc3QgYXJ0aWNsZSBmcm9tIGN1c3RvbWVyLgogICAgbXkgQEN1c3RvbWVyQXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgVGlja2V0SUQgICA9PiAkUGFyYW17VGlja2V0RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgU2VuZGVyVHlwZSA9PiAnY3VzdG9tZXInLAogICAgICAgIE9ubHlMYXN0ICAgPT4gMSwKICAgICk7CgogICAgbXkgJUN1c3RvbWVyQXJ0aWNsZTsKCiAgICBBUlRJQ0xFOgogICAgZm9yIG15ICRBcnRpY2xlIChAQ3VzdG9tZXJBcnRpY2xlcykgewogICAgICAgIG5leHQgQVJUSUNMRSBpZiAhJEFydGljbGUtPntBcnRpY2xlSUR9OwoKICAgICAgICAlQ3VzdG9tZXJBcnRpY2xlID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKCAleyRBcnRpY2xlfSApLT5BcnRpY2xlR2V0KAogICAgICAgICAgICAleyRBcnRpY2xlfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICk7CiAgICB9CgogICAgIyBHZXQgbGFzdCBhcnRpY2xlIGZyb20gYWdlbnQuCiAgICBteSBAQWdlbnRBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICBUaWNrZXRJRCAgID0+ICRQYXJhbXtUaWNrZXREYXRhfS0+e1RpY2tldElEfSwKICAgICAgICBTZW5kZXJUeXBlID0+ICdhZ2VudCcsCiAgICAgICAgT25seUxhc3QgICA9PiAxLAogICAgKTsKCiAgICBteSAlQWdlbnRBcnRpY2xlOwoKICAgIEFHRU5UQVJUSUNMRToKICAgIGZvciBteSAkQXJ0aWNsZSAoQEFnZW50QXJ0aWNsZXMpIHsKICAgICAgICBuZXh0IEFHRU5UQVJUSUNMRSBpZiAhJEFydGljbGUtPntBcnRpY2xlSUR9OwoKICAgICAgICAlQWdlbnRBcnRpY2xlID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKCAleyRBcnRpY2xlfSApLT5BcnRpY2xlR2V0KAogICAgICAgICAgICAleyRBcnRpY2xlfSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgSW5jbHVkZSB0aGUgdHJhbnNtaXNzaW9uIHN0YXR1cywgaWYgYXJ0aWNsZSBpcyBhbiBlbWFpbC4KICAgICAgICBteSAlQ29tbXVuaWNhdGlvbkNoYW5uZWwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29tbXVuaWNhdGlvbkNoYW5uZWwnKS0+Q2hhbm5lbEdldCgKICAgICAgICAgICAgQ2hhbm5lbElEID0+ICRBcnRpY2xlLT57Q29tbXVuaWNhdGlvbkNoYW5uZWxJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICRDb21tdW5pY2F0aW9uQ2hhbm5lbHtDaGFubmVsTmFtZX0gZXEgJ0VtYWlsJyApIHsKICAgICAgICAgICAgbXkgJFRyYW5zbWlzc2lvblN0YXR1cyA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSggJXskQXJ0aWNsZX0gKS0+QXJ0aWNsZVRyYW5zbWlzc2lvblN0YXR1cygKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggJFRyYW5zbWlzc2lvblN0YXR1cyAmJiAkVHJhbnNtaXNzaW9uU3RhdHVzLT57TWVzc2FnZX0gKSB7CiAgICAgICAgICAgICAgICAkQWdlbnRBcnRpY2xle1RyYW5zbWlzc2lvblN0YXR1c01lc3NhZ2V9ID0gJFRyYW5zbWlzc2lvblN0YXR1cy0+e01lc3NhZ2V9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgQVJUSUNMRToKICAgIGZvciBteSAkQXJ0aWNsZURhdGEgKCBcJUN1c3RvbWVyQXJ0aWNsZSwgXCVBZ2VudEFydGljbGUgKSB7CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICEkQXJ0aWNsZURhdGEtPntUaWNrZXRJRH07CiAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICEkQXJ0aWNsZURhdGEtPntBcnRpY2xlSUR9OwoKICAgICAgICAjIEdldCBhcnRpY2xlIHByZXZpZXcgaW4gcGxhaW4gdGV4dCBhbmQgc3RvcmUgaXQgYXMgQm9keSBrZXkuCiAgICAgICAgJEFydGljbGVEYXRhLT57Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5BcnRpY2xlUHJldmlldygKICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkQXJ0aWNsZURhdGEtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgPT4gJEFydGljbGVEYXRhLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgUmVzdWx0VHlwZSA9PiAncGxhaW4nLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGFjY291bnRlZCB0aW1lCiAgICAgICAgbXkgJEFjY291bnRlZFRpbWUgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZURhdGEtPntBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgICMgc2V0IHRoZSBhY2NvdW50ZWQgdGltZSBhcyBwYXJ0IG9mIHRoZSBhcnRpY2xlcyBpbmZvcm1hdGlvbgogICAgICAgICRBcnRpY2xlRGF0YS0+e1RpbWVVbml0fSA9ICRBY2NvdW50ZWRUaW1lOwogICAgfQoKICAgICMgUG9wdWxhdGUgdGhlIGhhc2ggJ0N1c3RvbWVyTWVzc2FnZVBhcmFtcycgd2l0aCBhbGwgdGhlIGN1c3RvbWVyLWFydGljbGUgZGF0YQogICAgIyBhbmQgb3ZlcndyaXRlIGl0IHdpdGggJ0N1c3RvbWVyTWVzc2FnZVBhcmFtcycgcGFzc2VkIGluIHRoZSBQYXJhbXMgKGJ1ZyAjMTMzMjUpLgogICAgJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30gPSB7CiAgICAgICAgJUN1c3RvbWVyQXJ0aWNsZSwKICAgICAgICAleyAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfSB8fCB7fSB9LAogICAgfTsKCiAgICAjIGdldCBzeXN0ZW0gZGVmYXVsdCBsYW5ndWFnZQogICAgbXkgJERlZmF1bHRMYW5ndWFnZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRGVmYXVsdExhbmd1YWdlJykgfHwgJ2VuJzsKCiAgICBteSAkTGFuZ3VhZ2VzID0gWyAkUGFyYW17UmVjaXBpZW50fS0+e1VzZXJMYW5ndWFnZX0sICREZWZhdWx0TGFuZ3VhZ2UsICdlbicgXTsKCiAgICBteSAkTGFuZ3VhZ2U7CiAgICBMQU5HVUFHRToKICAgIGZvciBteSAkSXRlbSAoIEB7JExhbmd1YWdlc30gKSB7CiAgICAgICAgbmV4dCBMQU5HVUFHRSBpZiAhJEl0ZW07CiAgICAgICAgbmV4dCBMQU5HVUFHRSBpZiAhJE5vdGlmaWNhdGlvbntNZXNzYWdlfS0+eyRJdGVtfTsKCiAgICAgICAgIyBzZXQgbGFuZ3VhZ2UKICAgICAgICAkTGFuZ3VhZ2UgPSAkSXRlbTsKICAgICAgICBsYXN0IExBTkdVQUdFOwogICAgfQoKICAgICMgaWYgbm8gbGFuZ3VhZ2UsIHRoZW4gdGFrZSB0aGUgZmlyc3Qgb25lIGF2YWlsYWJsZQogICAgaWYgKCAhJExhbmd1YWdlICkgewogICAgICAgIG15IEBOb3RpZmljYXRpb25MYW5ndWFnZXMgPSBzb3J0IGtleXMgJXsgJE5vdGlmaWNhdGlvbntNZXNzYWdlfSB9OwogICAgICAgICRMYW5ndWFnZSA9ICROb3RpZmljYXRpb25MYW5ndWFnZXNbMF07CiAgICB9CgogICAgIyBjb3B5IHRoZSBjb3JyZWN0IGxhbmd1YWdlIG1lc3NhZ2UgYXR0cmlidXRlcyB0byBhIGZsYXQgc3RydWN0dXJlCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoU3ViamVjdCBCb2R5IENvbnRlbnRUeXBlKSkgewogICAgICAgICROb3RpZmljYXRpb257JEF0dHJpYnV0ZX0gPSAkTm90aWZpY2F0aW9ue01lc3NhZ2V9LT57JExhbmd1YWdlfS0+eyRBdHRyaWJ1dGV9OwogICAgfQoKICAgICMgR2V0IGN1c3RvbWVyIGFydGljbGUgZmllbGRzLgogICAgbXkgJUN1c3RvbWVyQXJ0aWNsZUZpZWxkczsKCiAgICBpZiAoJUN1c3RvbWVyQXJ0aWNsZSkgewogICAgICAgICVDdXN0b21lckFydGljbGVGaWVsZHMgPSAkTGF5b3V0T2JqZWN0LT5BcnRpY2xlRmllbGRzKAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJEN1c3RvbWVyQXJ0aWNsZXtUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQ3VzdG9tZXJBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgIEFSVElDTEVfRklFTEQ6CiAgICBmb3IgbXkgJEFydGljbGVGaWVsZCAoIHNvcnQga2V5cyAlQ3VzdG9tZXJBcnRpY2xlRmllbGRzICkgewogICAgICAgIG5leHQgQVJUSUNMRV9GSUVMRCBpZiAhZGVmaW5lZCAkQ3VzdG9tZXJBcnRpY2xlRmllbGRzeyRBcnRpY2xlRmllbGR9LT57VmFsdWV9OwoKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57JEFydGljbGVGaWVsZH0gKSB7CiAgICAgICAgICAgICRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57JEFydGljbGVGaWVsZH0gPSAkQ3VzdG9tZXJBcnRpY2xlRmllbGRzeyRBcnRpY2xlRmllbGR9LT57VmFsdWV9OwogICAgICAgIH0KICAgICAgICBjaG9tcCAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfS0+eyRBcnRpY2xlRmllbGR9OwogICAgfQoKICAgICMgZm9ybWF0IGJvZHkgKG9ubHkgaWYgbG9uZ2VyIHRoZSA4NiBjaGFycykKICAgIGlmICggJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30tPntCb2R5fSApIHsKICAgICAgICBpZiAoIGxlbmd0aCAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfS0+e0JvZHl9ID4gODYgKSB7CiAgICAgICAgICAgIG15IEBMaW5lcyA9IHNwbGl0IC9cbi8sICRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57Qm9keX07CiAgICAgICAgICAgIExJTkU6CiAgICAgICAgICAgIGZvciBteSAkTGluZSAoQExpbmVzKSB7CiAgICAgICAgICAgICAgICBteSAkTGluZVdyYXBwZWQgPSAkTGluZSA9fiBzLyhePi4rfC57NCw4Nn0pKD86XHN8XHopLyQxXG4vZ207CgogICAgICAgICAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lV3JhcHBlZDsKCiAgICAgICAgICAgICAgICAjIGlmIHRoZSByZWdleCBkb2VzIG5vdCBtYXRjaCB0aGVuIHdlIG5lZWQKICAgICAgICAgICAgICAgICMgdG8gYWRkIHRoZSBtaXNzaW5nIG5ldyBsaW5lIG9mIHRoZSBzcGxpdAogICAgICAgICAgICAgICAgIyBlbHNlIHdlIHdpbGwgbG9zZSBlLmcuIGVtcHR5IGxpbmVzIG9mIHRoZSBib2R5LgogICAgICAgICAgICAgICAgIyAoYnVnIzEwNjc5KQogICAgICAgICAgICAgICAgJExpbmUgLj0gIlxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfS0+e0JvZHl9ID0gam9pbiAnJywgQExpbmVzOwogICAgICAgIH0KICAgIH0KCiAgICAjIGZpbGwgdXAgcmVxdWlyZWQgYXR0cmlidXRlcwogICAgZm9yIG15ICRUZXh0IChxdyhTdWJqZWN0IEJvZHkpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30tPnskVGV4dH0gKSB7CgogICAgICAgICAgICAjIFNldCB0byBsYXN0IGN1c3RvbWVyIGFydGljbGUgYXR0cmlidXRlIGlmIGl0IGlzIGVtcHR5IHN0cmluZy4KICAgICAgICAgICAgIyBGb3IgZXhhbXBsZSwgaWYgQm9keSBpcyBlbXB0eSBzdHJpbmcgKG5vdCB1bmRlZiEpLCBpdCBpcyBtYXliZSBzZW50IGZyb20gTm90aWZpY2F0aW9uT3duZXJVcGRhdGUgZXZlbnQKICAgICAgICAgICAgIyBhbmQgb3ZlcnJpZGVzIGxhc3QgY3VzdG9tZXIgYXJ0aWNsZSBib2R5IChpbiAlQ3VzdG9tZXJBcnRpY2xlKSBhYm92ZSAtIHNlZSBidWcjMTQ2NzguCiAgICAgICAgICAgICRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57JFRleHR9ID0gJEN1c3RvbWVyQXJ0aWNsZXskVGV4dH0gfHwgIk5vICRUZXh0IjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFN0YXJ0ID0gJzwnOwogICAgbXkgJEVuZCAgID0gJz4nOwogICAgaWYgKCAkTm90aWZpY2F0aW9ue0NvbnRlbnRUeXBlfSA9fiBte3RleHRcL2h0bWx9ICkgewogICAgICAgICRTdGFydCA9ICcmbHQ7JzsKICAgICAgICAkRW5kICAgPSAnJmd0Oyc7CiAgICB9CgogICAgIyByZXBsYWNlIDxPVE9CT19DVVNUT01FUl9EQVRBXyo+IHRhZ3MgZWFybHkgZnJvbSBDdXN0b21lck1lc3NhZ2VQYXJhbXMsIHRoZSByZXN0cyB3aWxsIGJlIHJlcGxhY2VkCiAgICAjIGJ5IHRpY2tldCBjdXN0b21lciB1c2VyCiAgICBLRVk6CiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfSB8fCB7fSB9ICkgewoKICAgICAgICBuZXh0IEtFWSBpZiAhJFBhcmFte0N1c3RvbWVyTWVzc2FnZVBhcmFtc30tPnskS2V5fTsKCiAgICAgICAgJE5vdGlmaWNhdGlvbntCb2R5fSAgICA9fiBzLyR7U3RhcnR9T1RPQk9fQ1VTVE9NRVJfREFUQV8kS2V5JHtFbmR9LyRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57JEtleX0vZ2k7CiAgICAgICAgJE5vdGlmaWNhdGlvbntTdWJqZWN0fSA9fiBzLzxPVE9CT19DVVNUT01FUl9EQVRBXyRLZXk+LyRQYXJhbXtDdXN0b21lck1lc3NhZ2VQYXJhbXN9LT57JEtleX17JEtleX0vZ2k7CiAgICB9CgogICAgIyBkbyB0ZXh0L3BsYWluIHRvIHRleHQvaHRtbCBjb252ZXJ0CiAgICBpZiAoICRTZWxmLT57UmljaFRleHR9ICYmICROb3RpZmljYXRpb257Q29udGVudFR5cGV9ID1+IC90ZXh0XC9wbGFpbi9pICkgewogICAgICAgICROb3RpZmljYXRpb257Q29udGVudFR5cGV9ID0gJ3RleHQvaHRtbCc7CiAgICAgICAgJE5vdGlmaWNhdGlvbntCb2R5fSAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgU3RyaW5nID0+ICROb3RpZmljYXRpb257Qm9keX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRvIHRleHQvaHRtbCB0byB0ZXh0L3BsYWluIGNvbnZlcnQKICAgIGlmICggISRTZWxmLT57UmljaFRleHR9ICYmICROb3RpZmljYXRpb257Q29udGVudFR5cGV9ID1+IC90ZXh0XC9odG1sL2kgKSB7CiAgICAgICAgJE5vdGlmaWNhdGlvbntDb250ZW50VHlwZX0gPSAndGV4dC9wbGFpbic7CiAgICAgICAgJE5vdGlmaWNhdGlvbntCb2R5fSAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvQXNjaWkoCiAgICAgICAgICAgIFN0cmluZyA9PiAkTm90aWZpY2F0aW9ue0JvZHl9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbm90aWZ5IHRleHRzCiAgICBmb3IgbXkgJFRleHQgKHF3KFN1YmplY3QgQm9keSkpIHsKICAgICAgICBpZiAoICEkTm90aWZpY2F0aW9ueyRUZXh0fSApIHsKICAgICAgICAgICAgJE5vdGlmaWNhdGlvbnskVGV4dH0gPSAiTm8gTm90aWZpY2F0aW9uICRUZXh0IGZvciAkUGFyYW17VHlwZX0gZm91bmQhIjsKICAgICAgICB9CiAgICB9CgogICAgIyByZXBsYWNlIHBsYWNlIGhvbGRlciBzdHVmZgogICAgJE5vdGlmaWNhdGlvbntCb2R5fSA9ICRTZWxmLT5fUmVwbGFjZSgKICAgICAgICBSaWNoVGV4dCAgICAgICAgPT4gJFNlbGYtPntSaWNoVGV4dH0sCiAgICAgICAgVGV4dCAgICAgICAgICAgID0+ICROb3RpZmljYXRpb257Qm9keX0sCiAgICAgICAgUmVjaXBpZW50ICAgICAgID0+ICRQYXJhbXtSZWNpcGllbnR9LAogICAgICAgIERhdGEgICAgICAgICAgICA9PiAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfSwKICAgICAgICBEYXRhQWdlbnQgICAgICAgPT4gXCVBZ2VudEFydGljbGUsCiAgICAgICAgVGlja2V0RGF0YSAgICAgID0+ICRQYXJhbXtUaWNrZXREYXRhfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgTGFuZ3VhZ2UgICAgICAgID0+ICRMYW5ndWFnZSwKICAgICAgICBBZGRUaW1lem9uZUluZm8gPT4gewogICAgICAgICAgICBOb3RpZmljYXRpb25FdmVudCA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICROb3RpZmljYXRpb257U3ViamVjdH0gPSAkU2VsZi0+X1JlcGxhY2UoCiAgICAgICAgUmljaFRleHQgICAgICAgID0+IDAsCiAgICAgICAgVGV4dCAgICAgICAgICAgID0+ICROb3RpZmljYXRpb257U3ViamVjdH0sCiAgICAgICAgUmVjaXBpZW50ICAgICAgID0+ICRQYXJhbXtSZWNpcGllbnR9LAogICAgICAgIERhdGEgICAgICAgICAgICA9PiAkUGFyYW17Q3VzdG9tZXJNZXNzYWdlUGFyYW1zfSwKICAgICAgICBEYXRhQWdlbnQgICAgICAgPT4gXCVBZ2VudEFydGljbGUsCiAgICAgICAgVGlja2V0RGF0YSAgICAgID0+ICRQYXJhbXtUaWNrZXREYXRhfSwKICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgTGFuZ3VhZ2UgICAgICAgID0+ICRMYW5ndWFnZSwKICAgICAgICBBZGRUaW1lem9uZUluZm8gPT4gewogICAgICAgICAgICBOb3RpZmljYXRpb25FdmVudCA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgS2VlcCB0aGUgIm9yaWdpbmFsIiAodW5tb2RpZmllZCkgc3ViamVjdCBhbmQgYm9keSBmb3IgbGF0ZXIgdXNlLgogICAgJE5vdGlmaWNhdGlvbntPcmlnaW5hbFN1YmplY3R9ID0gJE5vdGlmaWNhdGlvbntTdWJqZWN0fTsKICAgICROb3RpZmljYXRpb257T3JpZ2luYWxCb2R5fSAgICA9ICROb3RpZmljYXRpb257Qm9keX07CgogICAgJE5vdGlmaWNhdGlvbntTdWJqZWN0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U3ViamVjdEJ1aWxkKAogICAgICAgIFRpY2tldE51bWJlciA9PiAkUGFyYW17VGlja2V0RGF0YX0tPntUaWNrZXROdW1iZXJ9LAogICAgICAgIFN1YmplY3QgICAgICA9PiAkTm90aWZpY2F0aW9ue1N1YmplY3R9IHx8ICcnLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTmV3JywKICAgICk7CgogICAgIyBhZGQgVVJMcyBhbmQgdmVyaWZ5IHRvIGJlIGZ1bGwgSFRNTCBkb2N1bWVudAogICAgaWYgKCAkU2VsZi0+e1JpY2hUZXh0fSApIHsKCiAgICAgICAgJE5vdGlmaWNhdGlvbntCb2R5fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+TGlua1F1b3RlKAogICAgICAgICAgICBTdHJpbmcgPT4gJE5vdGlmaWNhdGlvbntCb2R5fSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAlTm90aWZpY2F0aW9uOwp9Cgo9YmVnaW4gSW50ZXJuYWw6Cgo9aGVhZDIgX1JlcGxhY2UoKQoKcmVwbGFjZSB0aGUgcGxhY2Vob2xkZXJzIGluIHRoZSB0ZXh0Cgo9Y3V0CgpzdWIgX1JlcGxhY2UgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIChxdyhUZXh0IFJpY2hUZXh0IERhdGEgVXNlcklEKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRffSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJF8hIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGZvciBtYWlsdG8gbGlua3MKICAgICMgc2luY2UgdGhlIHN1YmplY3QgYW5kIGJvZHkgb2YgdGhvc2UgbWFpbHRvIGxpbmtzIGFyZQogICAgIyB1cmkgZXNjYXBlZCB3ZSBoYXZlIHRvIHVyaSB1bmVzY2FwZSB0aGVtLCByZXBsYWNlCiAgICAjIHBvc3NpYmxlIHBsYWNlaG9sZGVycyBhbmQgdGhlbiByZS11cmkgZXNjYXBlIHRoZW0KICAgICRQYXJhbXtUZXh0fSA9fiBzewogICAgICAgIChocmVmPSJtYWlsdG86W15cP10rXD8pKFteIl0rIikKICAgIH0KICAgIHsKICAgICAgICBteSAkTWFpbFRvSHJlZiAgICAgICAgPSAkMTsKICAgICAgICBteSAkTWFpbFRvSHJlZkNvbnRlbnQgPSAkMjsKCiAgICAgICAgIyBOZXN0ZWQgcy8vL2VneCEKICAgICAgICAkTWFpbFRvSHJlZkNvbnRlbnQgPX4gc3sKICAgICAgICAgICAgKCg/OnN1YmplY3R8Ym9keSk9KSguKz8pKCJ8JikKICAgICAgICB9CiAgICAgICAgewogICAgICAgICAgICBteSAkU3ViamVjdE9yQm9keVByZWZpeCAgPSAkMTsKICAgICAgICAgICAgbXkgJFN1YmplY3RPckJvZHlDb250ZW50ID0gJDI7CiAgICAgICAgICAgIG15ICRTdWJqZWN0T3JCb2R5U3VmZml4ICA9ICQzOwoKICAgICAgICAgICAgbXkgJFN1YmplY3RPckJvZHlDb250ZW50VW5lc2NhcGVkID0gdXJpX3VuZXNjYXBlKCRTdWJqZWN0T3JCb2R5Q29udGVudCk7CgogICAgICAgICAgICBteSAkU3ViamVjdE9yQm9keUNvbnRlbnRSZXBsYWNlZCA9ICRTZWxmLT5fUmVwbGFjZSgKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIFRleHQgICAgID0+ICRTdWJqZWN0T3JCb2R5Q29udGVudFVuZXNjYXBlZCwKICAgICAgICAgICAgICAgIFJpY2hUZXh0ID0+IDAsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkU3ViamVjdE9yQm9keUNvbnRlbnRFc2NhcGVkID0gdXJpX2VzY2FwZV91dGY4KCRTdWJqZWN0T3JCb2R5Q29udGVudFJlcGxhY2VkKTsKCiAgICAgICAgICAgICRTdWJqZWN0T3JCb2R5UHJlZml4IC4gJFN1YmplY3RPckJvZHlDb250ZW50RXNjYXBlZCAuICRTdWJqZWN0T3JCb2R5U3VmZml4OwogICAgICAgIH1lZ3g7CgogICAgICAgICRNYWlsVG9IcmVmIC4gJE1haWxUb0hyZWZDb250ZW50OwogICAgfWVneDsKCiAgICBteSAoICRTdGFydCwgJEVuZCApID0gKCAnPCcsICc+JyApOwogICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewogICAgICAgICggJFN0YXJ0LCAkRW5kICkgPSAoICcmbHQ7JywgJyZndDsnICk7CiAgICAgICAgJFBhcmFte1RleHR9ID1+IHMvKFxufFxyKS8vZzsKICAgIH0KCiAgICBteSAlVGlja2V0OwogICAgaWYgKCAkUGFyYW17VGlja2V0RGF0YX0gKSB7CiAgICAgICAgJVRpY2tldCA9ICRQYXJhbXtUaWNrZXREYXRhfS0+JSo7CiAgICB9CgogICAgbXkgJEN1c3RvbWVyVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKTsKCiAgICAjIERldGVybWluZSByZWNpcGllbnQncyB0aW1lem9uZSBpZiBuZWVkZWQuCiAgICBteSAkUmVjaXBpZW50VGltZVpvbmU7CiAgICBpZiAoICRQYXJhbXtBZGRUaW1lem9uZUluZm99ICkgewogICAgICAgICRSZWNpcGllbnRUaW1lWm9uZSA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5PVE9CT1RpbWVab25lR2V0KCk7CgogICAgICAgIG15ICVDdXN0b21lclVzZXI7CiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXQgKSAmJiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAgICAgJUN1c3RvbWVyVXNlciA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoIFVzZXIgPT4gJFRpY2tldHtDdXN0b21lclVzZXJJRH0gKTsKICAgICAgICB9CgogICAgICAgIG15ICVVc2VyUHJlZmVyZW5jZXM7CgogICAgICAgIGlmICggJFBhcmFte0FkZFRpbWV6b25lSW5mb30tPntOb3RpZmljYXRpb25FdmVudH0gJiYgJFBhcmFte1JlY2lwaWVudH0tPntUeXBlfSBlcSAnQWdlbnQnICkgewogICAgICAgICAgICAlVXNlclByZWZlcmVuY2VzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0UHJlZmVyZW5jZXMoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1JlY2lwaWVudH0tPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICRQYXJhbXtBZGRUaW1lem9uZUluZm99LT57Tm90aWZpY2F0aW9uRXZlbnR9CiAgICAgICAgICAgICYmICRQYXJhbXtSZWNpcGllbnR9LT57VHlwZX0gZXEgJ0N1c3RvbWVyJwogICAgICAgICAgICAmJiAkUGFyYW17UmVjaXBpZW50fS0+e1VzZXJJRH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJVVzZXJQcmVmZXJlbmNlcyA9ICRDdXN0b21lclVzZXJPYmplY3QtPkdldFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtSZWNpcGllbnR9LT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAkUGFyYW17QWRkVGltZXpvbmVJbmZvfS0+e0F1dG9SZXNwb25zZX0KICAgICAgICAgICAgJiYgJFRpY2tldHtDdXN0b21lclVzZXJJRH0KICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoIFwlQ3VzdG9tZXJVc2VyICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJVVzZXJQcmVmZXJlbmNlcyA9ICRDdXN0b21lclVzZXJPYmplY3QtPkdldFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkVXNlclByZWZlcmVuY2Vze1VzZXJUaW1lWm9uZX0gKSB7CiAgICAgICAgICAgICRSZWNpcGllbnRUaW1lWm9uZSA9ICRVc2VyUHJlZmVyZW5jZXN7VXNlclRpbWVab25lfTsKICAgICAgICB9CiAgICB9CgogICAgIyBSZXBsYWNlIFVuaXggdGltZSBmb3JtYXQgdGFncy4KICAgICMgSWYgbGFuZ3VhZ2UgaXMgZGVmaW5lZCwgdGhleSB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGEgY29ycmVjdCBmb3JtYXQgaW4gYmVsb3cgSUYgc3RhdGVtZW50LgogICAgZm9yIG15ICRVbml4Rm9ybWF0VGltZSAoCiAgICAgICAgcXcoUmVhbFRpbGxUaW1lTm90VXNlZCBFc2NhbGF0aW9uUmVzcG9uc2VUaW1lIEVzY2FsYXRpb25VcGRhdGVUaW1lIEVzY2FsYXRpb25Tb2x1dGlvblRpbWUpCiAgICAgICAgKQogICAgewogICAgICAgIGlmICggJFRpY2tldHskVW5peEZvcm1hdFRpbWV9ICkgewogICAgICAgICAgICAkVGlja2V0eyRVbml4Rm9ybWF0VGltZX0gPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScsCiAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgIEVwb2NoID0+ICRUaWNrZXR7JFVuaXhGb3JtYXRUaW1lfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICktPlRvU3RyaW5nKCk7CiAgICAgICAgfQogICAgfQoKICAgICMgdHJhbnNsYXRlIHRpY2tldCB2YWx1ZXMgaWYgbmVlZGVkCiAgICBpZiAoICRQYXJhbXtMYW5ndWFnZX0gKSB7CgogICAgICAgIG15ICRMYW5ndWFnZU9iamVjdCA9IEtlcm5lbDo6TGFuZ3VhZ2UtPm5ldygKICAgICAgICAgICAgVXNlckxhbmd1YWdlID0+ICRQYXJhbXtMYW5ndWFnZX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBUcmFuc2xhdGUgdGhlIGRpZmZlcmVudCB2YWx1ZXMuCiAgICAgICAgZm9yIG15ICRGaWVsZCAocXcoVHlwZSBTdGF0ZSBTdGF0ZVR5cGUgTG9jayBQcmlvcml0eSkpIHsKICAgICAgICAgICAgJFRpY2tldHskRmllbGR9ID0gJExhbmd1YWdlT2JqZWN0LT5UcmFuc2xhdGUoICRUaWNrZXR7JEZpZWxkfSApOwogICAgICAgIH0KCiAgICAgICAgIyBUcmFuc2Zvcm0gdGhlIGRhdGUgdmFsdWVzIGZyb20gdGhlIHRpY2tldCBkYXRhIChidXQgbm90IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlcykuCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICVUaWNrZXQgKSB7CiAgICAgICAgICAgIG5leHQgQVRUUklCVVRFIGlmICRBdHRyaWJ1dGUgPX4gbXsgXEEgRHluYW1pY0ZpZWxkXyB9eG1zOwogICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJFRpY2tldHskQXR0cmlidXRlfTsKCiAgICAgICAgICAgIGlmICggJFRpY2tldHskQXR0cmlidXRlfSA9fiBte1xBKFxkXGRcZFxkKS0oXGRcZCktKFxkXGQpXHMoXGRcZCk6KFxkXGQpOihcZFxkKVx6fXhpICkgewoKICAgICAgICAgICAgICAgICMgQ2hhbmdlIHRpbWUgdG8gcmVjaXBpZW50J3MgdGltZXpvbmUgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICAjIGFuZCBsYXRlciBhcHBlbmQgdGltZXpvbmUgaW5mb3JtYXRpb24uCiAgICAgICAgICAgICAgICAjIEZvciBtb3JlIGluZm9ybWF0aW9uLAogICAgICAgICAgICAgICAgIyBzZWUgYnVnIzEzODY1IChodHRwczovL2J1Z3Mub3Rycy5vcmcvc2hvd19idWcuY2dpP2lkPTEzODY1KQogICAgICAgICAgICAgICAgIyBhbmQgYnVnIzE0MjcwIChodHRwczovL2J1Z3Mub3Rycy5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjcwKS4KICAgICAgICAgICAgICAgIGlmICgkUmVjaXBpZW50VGltZVpvbmUpIHsKICAgICAgICAgICAgICAgICAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkVGlja2V0eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJERhdGVUaW1lT2JqZWN0LT5Ub1RpbWVab25lKCBUaW1lWm9uZSA9PiAkUmVjaXBpZW50VGltZVpvbmUgKTsKICAgICAgICAgICAgICAgICAgICAkVGlja2V0eyRBdHRyaWJ1dGV9ID0gJERhdGVUaW1lT2JqZWN0LT5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRUaWNrZXR7JEF0dHJpYnV0ZX0gPSAkTGFuZ3VhZ2VPYmplY3QtPkZvcm1hdFRpbWVTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgJFRpY2tldHskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICAgICAnRGF0ZUZvcm1hdCcsCiAgICAgICAgICAgICAgICAgICAgJ05vU2Vjb25kcycsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgQXBwZW5kIHRpbWV6b25lIGluZm9ybWF0aW9uIGlmIG5lZWRlZC4KICAgICAgICAgICAgICAgIGlmICgkUmVjaXBpZW50VGltZVpvbmUpIHsKICAgICAgICAgICAgICAgICAgICAkVGlja2V0eyRBdHRyaWJ1dGV9IC49ICIgKCRSZWNpcGllbnRUaW1lWm9uZSkiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkTG9jYWxMYXlvdXRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0LT5uZXcoCiAgICAgICAgICAgIExhbmcgPT4gJFBhcmFte0xhbmd1YWdlfSwKICAgICAgICApOwoKICAgICAgICAjIENvbnZlcnQgdGFncyBpbiBzZWNvbmRzIHRvIG1vcmUgcmVhZGFibGUgYXBwcm9wcmlhdGUgZm9ybWF0IGlmIGxhbmd1YWdlIGlzIGRlZmluZWQuCiAgICAgICAgZm9yIG15ICRUaW1lSW5TZWNvbmRzICgKICAgICAgICAgICAgcXcoVW50aWxUaW1lIEVzY2FsYXRpb25UaW1lV29ya2luZ1RpbWUgRXNjYWxhdGlvblRpbWUgRmlyc3RSZXNwb25zZVRpbWVXb3JraW5nVGltZSBGaXJzdFJlc3BvbnNlVGltZSBVcGRhdGVUaW1lV29ya2luZ1RpbWUKICAgICAgICAgICAgVXBkYXRlVGltZSBTb2x1dGlvblRpbWVXb3JraW5nVGltZSBTb2x1dGlvblRpbWUpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIGlmICggJFRpY2tldHskVGltZUluU2Vjb25kc30gKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0eyRUaW1lSW5TZWNvbmRzfSA9ICRMb2NhbExheW91dE9iamVjdC0+Q3VzdG9tZXJBZ2UoCiAgICAgICAgICAgICAgICAgICAgQWdlICAgPT4gJFRpY2tldHskVGltZUluU2Vjb25kc30sCiAgICAgICAgICAgICAgICAgICAgU3BhY2UgPT4gJyAnCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG15ICVRdWV1ZTsKICAgIGlmICggJFBhcmFte1F1ZXVlSUR9ICkgewogICAgICAgICVRdWV1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUdldCgKICAgICAgICAgICAgSUQgPT4gJFBhcmFte1F1ZXVlSUR9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBSZXBsYWNlIGNvbmZpZyBvcHRpb25zLgogICAgbXkgJFRhZyA9ICRTdGFydCAuICdPVE9CT19DT05GSUdfJzsKICAgICRQYXJhbXtUZXh0fSA9fiBzewogICAgICAgICRUYWcKICAgICAgICAgICAgIyB0aGUga2V5IGZvciB0aGUgY29uZmlnCiAgICAgICAgICAgICg/PGtleT4uKz8pCiAgICAgICAgJEVuZAogICAgfQogICAgewogICAgICAgIG15ICRLZXkgICA9ICQre2tleX07CiAgICAgICAgbXkgJFZhbHVlID0gJENvbmZpZ09iamVjdC0+R2V0KCRLZXkpIC8vICcnOwoKICAgICAgICAjIE1hc2sgc2Vuc2l0aXZlIGNvbmZpZyBvcHRpb25zLgogICAgICAgIG15ICRSZXBsYWNlID0gJFNlbGYtPl9NYXNrU2Vuc2l0aXZlVmFsdWUoCiAgICAgICAgICAgIEtleSAgICAgID0+ICRLZXksCiAgICAgICAgICAgIFZhbHVlICAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgSXNDb25maWcgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkUmVwbGFjZTsKICAgIH1lZ3g7CgogICAgIyBjbGVhbnVwCiAgICAkUGFyYW17VGV4dH0gPX4gcy8kVGFnLis/JEVuZC8tL2dpOwoKICAgIG15ICVSZWNpcGllbnQgPSAleyAkUGFyYW17UmVjaXBpZW50fSB8fCB7fSB9OwoKICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgaWYgKCAhJVJlY2lwaWVudCAmJiAkUGFyYW17UmVjaXBpZW50SUR9ICkgewoKICAgICAgICAlUmVjaXBpZW50ID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtSZWNpcGllbnRJRH0sCiAgICAgICAgICAgIE5vT3V0T2ZPZmZpY2UgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgbW9kaWZ5ICRQYXJhbXtUZXh0fQogICAgbXkgJEhhc2hHbG9iYWxSZXBsYWNlID0gc3ViIHsKICAgICAgICBteSAoICRUYWcsICVIICkgPSBAXzsKCiAgICAgICAgIyBHZW5lcmF0ZSBvbmUgc2luZ2xlIG1hdGNoaW5nIHN0cmluZyBmb3IgYWxsIGtleXMgdG8gc2F2ZSBwZXJmb3JtYW5jZS4KICAgICAgICBteSAkS2V5cyA9IGpvaW4gJ3wnLCBtYXAge3F1b3RlbWV0YX0gZ3JlcCB7IGRlZmluZWQgJEh7JF99IH0ga2V5cyAlSDsKCiAgICAgICAgIyBTZXQgYWxsIGtleXMgYXMgbG93ZXJjYXNlIHRvIGJlIGFibGUgdG8gbWF0Y2ggY2FzZSBpbnNlbnNpdGl2ZSwKICAgICAgICAjICAgZS4gZy4gPE9UT0JPX0NVU1RPTUVSX0Zyb20+IGFuZCA8T1RPQk9fQ1VTVE9NRVJfRlJPTT4uCiAgICAgICAgIyAgIEFsc28gbWFzayBhbnkgdmFsdWVzIGNvbnRhaW5pbmcgc2Vuc2l0aXZlIGRhdGEuCiAgICAgICAgJUggPSBtYXAgewogICAgICAgICAgICBsYyAkXyA9PiAkU2VsZi0+X01hc2tTZW5zaXRpdmVWYWx1ZSgKICAgICAgICAgICAgICAgIEtleSAgID0+ICRfLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJEh7JF99LAogICAgICAgICAgICApCiAgICAgICAgfSBzb3J0IGtleXMgJUg7CgogICAgICAgICMgSWYgdGFnIGlzICdPVE9CT19DVVNUT01FUl8nIGFkZCB0aGUgYm9keSBhbGlhcyAnZW1haWwvbm90ZScgdG8gYmUgcmVwbGFjZWQuCiAgICAgICAgaWYgKCAkVGFnID1+IG0vT1RPQk9fKENVU1RPTUVSfEFHRU5UKV8vICkgewogICAgICAgICAgICBLRVk6CiAgICAgICAgICAgIGZvciBteSAkS2V5IChxdyggZW1haWwgbm90ZSApKSB7CiAgICAgICAgICAgICAgICBteSAkVmFsdWUgPSAkSHskS2V5fTsKCiAgICAgICAgICAgICAgICBuZXh0IEtFWSBpZiBkZWZpbmVkKCRWYWx1ZSk7CgogICAgICAgICAgICAgICAgJEh7JEtleX0gPSAkSHsnYm9keSd9OwogICAgICAgICAgICAgICAgJEtleXMgLj0gJ3wnIC4gdWNmaXJzdCAkS2V5OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkUGFyYW17VGV4dH0gPX4gc3sKICAgICAgICAgICAgIyBncm91cGluZyByZXF1aXJlZCBoZXJlLCBhcyB3ZSBtaWdodCBoYXZlIGFsdGVybmF0aW9ucwogICAgICAgICAgICAoPzokVGFnKQogICAgICAgICAgICAgICAgIyBjYXNlIGluc2Vuc2l0aXYga2V5cwogICAgICAgICAgICAgICAgKD88a2V5PiRLZXlzKQogICAgICAgICAgICAkRW5kCiAgICAgICAgfQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEtleSA9ICQre2tleX07CiAgICAgICAgICAgICRIeyBsYyAkS2V5IH0KICAgICAgICB9eGllZzsKICAgIH07CgogICAgIyBnZXQgcmVjaXBpZW50IGRhdGEgYW5kIHJlcGxhY2UgaXQgd2l0aCA8T1RPQk9fLi4uCiAgICAkVGFnID0gJFN0YXJ0IC4gJ09UT0JPXyc7CgogICAgIyBpbmNsdWRlIG1vcmUgcmVhZGFibGUgdGFnIDxPVE9CT19OT1RJRklDQVRJT05fUkVDSVBJRU5UCiAgICBteSAkUmVjaXBpZW50VGFnID0gJFN0YXJ0IC4gJ09UT0JPX05PVElGSUNBVElPTl9SRUNJUElFTlRfJzsKCiAgICBpZiAoJVJlY2lwaWVudCkgewoKICAgICAgICAjIEhUTUwgcXVvdGluZyBvZiBjb250ZW50CiAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewogICAgICAgICAgICBBVFRSSUJVVEU6CiAgICAgICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICVSZWNpcGllbnQgKSB7CiAgICAgICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJFJlY2lwaWVudHskQXR0cmlidXRlfTsKICAgICAgICAgICAgICAgICRSZWNpcGllbnR7JEF0dHJpYnV0ZX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFJlY2lwaWVudHskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRIYXNoR2xvYmFsUmVwbGFjZS0+KCAiJFRhZ3wkUmVjaXBpZW50VGFnIiwgJVJlY2lwaWVudCApOwogICAgfQoKICAgICMgY2xlYW51cAogICAgJFBhcmFte1RleHR9ID1+IHMvJFJlY2lwaWVudFRhZy4rPyRFbmQvLS9naTsKCiAgICAjIGdldCBvd25lciBkYXRhIGFuZCByZXBsYWNlIGl0IHdpdGggPE9UT0JPX09XTkVSXy4uLgogICAgJFRhZyA9ICRTdGFydCAuICdPVE9CT19PV05FUl8nOwoKICAgICMgaW5jbHVkZSBtb3JlIHJlYWRhYmxlIHZlcnNpb24gPE9UT0JPX1RJQ0tFVF9PV05FUgogICAgbXkgJE93bmVyVGFnID0gJFN0YXJ0IC4gJ09UT0JPX1RJQ0tFVF9PV05FUl8nOwoKICAgIGlmICggJFRpY2tldHtPd25lcklEfSApIHsKCiAgICAgICAgbXkgJU93bmVyID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRUaWNrZXR7T3duZXJJRH0sCiAgICAgICAgICAgIE5vT3V0T2ZPZmZpY2UgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGh0bWwgcXVvdGluZyBvZiBjb250ZW50CiAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewoKICAgICAgICAgICAgQVRUUklCVVRFOgogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlT3duZXIgKSB7CiAgICAgICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJE93bmVyeyRBdHRyaWJ1dGV9OwogICAgICAgICAgICAgICAgJE93bmVyeyRBdHRyaWJ1dGV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRPd25lcnskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRIYXNoR2xvYmFsUmVwbGFjZS0+KCAiJFRhZ3wkT3duZXJUYWciLCAlT3duZXIgKTsKICAgIH0KCiAgICAjIGNsZWFudXAKICAgICRQYXJhbXtUZXh0fSA9fiBzLyRUYWcuKz8kRW5kLy0vZ2k7CiAgICAkUGFyYW17VGV4dH0gPX4gcy8kT3duZXJUYWcuKz8kRW5kLy0vZ2k7CgogICAgIyBnZXQgb3duZXIgZGF0YSBhbmQgcmVwbGFjZSBpdCB3aXRoIDxPVE9CT19SRVNQT05TSUJMRV8uLi4KICAgICRUYWcgPSAkU3RhcnQgLiAnT1RPQk9fUkVTUE9OU0lCTEVfJzsKCiAgICAjIGluY2x1ZGUgbW9yZSByZWFkYWJsZSB2ZXJzaW9uIDxPVE9CT19USUNLRVRfUkVTUE9OU0lCTEUKICAgIG15ICRSZXNwb25zaWJsZVRhZyA9ICRTdGFydCAuICdPVE9CT19USUNLRVRfUkVTUE9OU0lCTEVfJzsKCiAgICBpZiAoICRUaWNrZXR7UmVzcG9uc2libGVJRH0gKSB7CiAgICAgICAgbXkgJVJlc3BvbnNpYmxlID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRUaWNrZXR7UmVzcG9uc2libGVJRH0sCiAgICAgICAgICAgIE5vT3V0T2ZPZmZpY2UgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIEhUTUwgcXVvdGluZyBvZiBjb250ZW50CiAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewoKICAgICAgICAgICAgQVRUUklCVVRFOgogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlUmVzcG9uc2libGUgKSB7CiAgICAgICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJFJlc3BvbnNpYmxleyRBdHRyaWJ1dGV9OwogICAgICAgICAgICAgICAgJFJlc3BvbnNpYmxleyRBdHRyaWJ1dGV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRSZXNwb25zaWJsZXskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRIYXNoR2xvYmFsUmVwbGFjZS0+KCAiJFRhZ3wkUmVzcG9uc2libGVUYWciLCAlUmVzcG9uc2libGUgKTsKICAgIH0KCiAgICAjIGNsZWFudXAKICAgICRQYXJhbXtUZXh0fSA9fiBzLyRUYWcuKz8kRW5kLy0vZ2k7CiAgICAkUGFyYW17VGV4dH0gPX4gcy8kUmVzcG9uc2libGVUYWcuKz8kRW5kLy0vZ2k7CgogICAgJFRhZyA9ICRTdGFydCAuICdPVE9CT19BZ2VudF8nOwogICAgbXkgJFRhZzIgICAgICAgID0gJFN0YXJ0IC4gJ09UT0JPX0NVUlJFTlRfJzsKICAgIG15ICVDdXJyZW50VXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIE5vT3V0T2ZPZmZpY2UgPT4gMSwKICAgICk7CgogICAgIyBIVE1MIHF1b3Rpbmcgb2YgY29udGVudAogICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewoKICAgICAgICBBVFRSSUJVVEU6CiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJUN1cnJlbnRVc2VyICkgewogICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJEN1cnJlbnRVc2VyeyRBdHRyaWJ1dGV9OwogICAgICAgICAgICAkQ3VycmVudFVzZXJ7JEF0dHJpYnV0ZX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkQ3VycmVudFVzZXJ7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICRIYXNoR2xvYmFsUmVwbGFjZS0+KCAiJFRhZ3wkVGFnMiIsICVDdXJyZW50VXNlciApOwoKICAgICMgcmVwbGFjZSBvdGhlciBuZWVkZWQgc3R1ZmYKICAgICRQYXJhbXtUZXh0fSA9fiBzLyRTdGFydCBPVE9CT19GSVJTVF9OQU1FICRFbmQvJEN1cnJlbnRVc2Vye1VzZXJGaXJzdG5hbWV9L2d4bXM7CiAgICAkUGFyYW17VGV4dH0gPX4gcy8kU3RhcnQgT1RPQk9fTEFTVF9OQU1FICRFbmQvJEN1cnJlbnRVc2Vye1VzZXJMYXN0bmFtZX0vZ3htczsKCiAgICAjIGNsZWFudXAKICAgICRQYXJhbXtUZXh0fSA9fiBzLyRUYWcyLis/JEVuZC8tL2dpOwoKICAgICMgdGlja2V0IGRhdGEKICAgICRUYWcgPSAkU3RhcnQgLiAnT1RPQk9fVElDS0VUXyc7CgogICAgIyBodG1sIHF1b3Rpbmcgb2YgY29udGVudAogICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewoKICAgICAgICBBVFRSSUJVVEU6CiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJVRpY2tldCApIHsKICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRUaWNrZXR7JEF0dHJpYnV0ZX07CiAgICAgICAgICAgICRUaWNrZXR7JEF0dHJpYnV0ZX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkVGlja2V0eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIERyb3Bkb3duLCBDaGVja2JveCBhbmQgTXVsdGlTZWxlY3QgRHluYW1pY0ZpZWxkcywgY2FuIHN0b3JlIHZhbHVlcyAoa2V5cykgdGhhdCBhcmUKICAgICMgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlcyB0byBkaXNwbGF5CiAgICAjIDxPVE9CT19USUNLRVRfRHluYW1pY0ZpZWxkX05hbWVYPiByZXR1cm5zIHRoZSBzdG9yZWQga2V5CiAgICAjIDxPVE9CT19USUNLRVRfRHluYW1pY0ZpZWxkX05hbWVYX1ZhbHVlPiByZXR1cm5zIHRoZSBkaXNwbGF5IHZhbHVlCgogICAgbXkgJUR5bmFtaWNGaWVsZHM7CgogICAgIyBGb3Igc3lzdGVtcyB3aXRoIG1hbnkgRHluYW1pYyBmaWVsZHMgd2UgZG8gbm90IHdhbnQgdG8gbG9hZCB0aGVtIGFsbCB1bmxlc3MgbmVlZGVkCiAgICAjIEZpbmQgd2hhdCBEeW5hbWljIEZpZWxkIFZhbHVlcyBhcmUgcmVxdWVzdGVkCiAgICB3aGlsZSAoICRQYXJhbXtUZXh0fSA9fiBtLyRUYWcgRHluYW1pY0ZpZWxkXyhcUys/KShfVmFsdWUpPyAkRW5kL2dpeG1zICkgewogICAgICAgICREeW5hbWljRmllbGRzeyQxfSA9IDE7CiAgICB9CgogICAgIyB0byBzdG9yZSBhbGwgdGhlIHJlcXVpcmVkIER5bmFtaWNGaWVsZCBkaXNwbGF5IHZhbHVlcwogICAgbXkgJUR5bmFtaWNGaWVsZERpc3BsYXlWYWx1ZXM7CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBvYmplY3RzCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGlja2V0IG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZExpc3QgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlID0+IFsnVGlja2V0J10sCiAgICApIHx8IFtdOwoKICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIHdlIG9ubHkgbG9hZCB0aGUgb25lcyByZXF1ZXN0ZWQKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZHN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9OwoKICAgICAgICBteSAkTGFuZ3VhZ2VPYmplY3Q7CgogICAgICAgICMgdHJhbnNsYXRlIHZhbHVlcyBpZiBuZWVkZWQKICAgICAgICBpZiAoICRQYXJhbXtMYW5ndWFnZX0gKSB7CiAgICAgICAgICAgICRMYW5ndWFnZU9iamVjdCA9IEtlcm5lbDo6TGFuZ3VhZ2UtPm5ldygKICAgICAgICAgICAgICAgIFVzZXJMYW5ndWFnZSA9PiAkUGFyYW17TGFuZ3VhZ2V9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJERhdGVUaW1lT2JqZWN0OwoKICAgICAgICAjIENoYW5nZSBEYXRlVGltZSBERiB2YWx1ZSBmb3IgdGlja2V0IGlmIG5lZWRlZC4KICAgICAgICBpZiAoCiAgICAgICAgICAgIGRlZmluZWQgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0KICAgICAgICAgICAgJiYgJER5bmFtaWNGaWVsZENvbmZpZy0+e0ZpZWxkVHlwZX0gZXEgJ0RhdGVUaW1lJwogICAgICAgICAgICAmJiAkUmVjaXBpZW50VGltZVpvbmUKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkRGF0ZVRpbWVPYmplY3QtPlRvVGltZVpvbmUoIFRpbWVab25lID0+ICRSZWNpcGllbnRUaW1lWm9uZSApOwogICAgICAgICAgICAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREYXRlVGltZU9iamVjdC0+VG9TdHJpbmcoKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBkaXNwbGF5IHZhbHVlIGZvciBlYWNoIGR5bmFtaWMgZmllbGQKICAgICAgICBteSAkRGlzcGxheVZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlTG9va3VwKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICAgID0+ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICBMYW5ndWFnZU9iamVjdCAgICAgPT4gJExhbmd1YWdlT2JqZWN0LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRoZSByZWFkYWJsZSB2YWx1ZSAodmFsdWUpIGZvciBlYWNoIGR5bmFtaWMgZmllbGQKICAgICAgICBteSAkRGlzcGxheVZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5SZWFkYWJsZVZhbHVlUmVuZGVyKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICREaXNwbGF5VmFsdWUsCiAgICAgICAgKTsKCiAgICAgICAgIyBmaWxsIHRoZSBEeW5hbWljRmllbGREaXNwbGF5VmFsdWVzCiAgICAgICAgaWYgKCREaXNwbGF5VmFsdWVTdHJnKSB7CiAgICAgICAgICAgICREeW5hbWljRmllbGREaXNwbGF5VmFsdWVzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAnX1ZhbHVlJyB9ID0gJERpc3BsYXlWYWx1ZVN0cmctPntWYWx1ZX07CgogICAgICAgICAgICAjIEFkZCB0aW1lem9uZSBpbmZvIGlmIG5lZWRlZC4KICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICAgICAgICAgJiYgbGVuZ3RoICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgICAgICAmJiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57RmllbGRUeXBlfSBlcSAnRGF0ZVRpbWUnCiAgICAgICAgICAgICAgICAmJiAkUmVjaXBpZW50VGltZVpvbmUKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZERpc3BsYXlWYWx1ZXN7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICdfVmFsdWUnIH0KICAgICAgICAgICAgICAgICAgICAuPSAiICgkUmVjaXBpZW50VGltZVpvbmUpIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGhlIHJlYWRhYmxlIHZhbHVlIChrZXkpIGZvciBlYWNoIGR5bmFtaWMgZmllbGQKICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlJlYWRhYmxlVmFsdWVSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZXBsYWNlIHRpY2tldCBjb250ZW50IHdpdGggdGhlIHZhbHVlIGZyb20gUmVhZGFibGVWYWx1ZVJlbmRlciAoaWYgYW55KQogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJFZhbHVlU3RyZykgKSB7CiAgICAgICAgICAgICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJFZhbHVlU3RyZy0+e1ZhbHVlfTsKCiAgICAgICAgICAgICMgQWRkIHRpbWV6b25lIGluZm8gaWYgbmVlZGVkLgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBkZWZpbmVkICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgICAgICAmJiBsZW5ndGggJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0KICAgICAgICAgICAgICAgICYmICREeW5hbWljRmllbGRDb25maWctPntGaWVsZFR5cGV9IGVxICdEYXRlVGltZScKICAgICAgICAgICAgICAgICYmICRSZWNpcGllbnRUaW1lWm9uZQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSAuPSAiICgkUmVjaXBpZW50VGltZVpvbmUpIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHJlcGxhY2UgaXQKICAgICRIYXNoR2xvYmFsUmVwbGFjZS0+KCAkVGFnLCAlVGlja2V0LCAlRHluYW1pY0ZpZWxkRGlzcGxheVZhbHVlcyApOwoKICAgICMgQ09NUEFUCiAgICAkUGFyYW17VGV4dH0gPX4gcy8kU3RhcnQgT1RPQk9fVElDS0VUX0lEICRFbmQvJFRpY2tldHtUaWNrZXRJRH0vZ2l4bXM7CiAgICAkUGFyYW17VGV4dH0gPX4gcy8kU3RhcnQgT1RPQk9fVElDS0VUX05VTUJFUiAkRW5kLyRUaWNrZXR7VGlja2V0TnVtYmVyfS9naXhtczsKICAgIGlmICggJFRpY2tldHtUaWNrZXRJRH0gKSB7CiAgICAgICAgJFBhcmFte1RleHR9ID1+IHMvJFN0YXJ0IE9UT0JPX1FVRVVFICRFbmQvJFRpY2tldHtRdWV1ZX0vZ2l4bXM7CiAgICB9CiAgICBpZiAoICRQYXJhbXtRdWV1ZUlEfSApIHsKICAgICAgICAkUGFyYW17VGV4dH0gPX4gcy8kU3RhcnQgT1RPQk9fVElDS0VUX1FVRVVFICRFbmQvJFF1ZXVle05hbWV9L2dpeG1zOwogICAgfQoKICAgICMgY2xlYW51cAogICAgJFBhcmFte1RleHR9ID1+IHMvJFRhZy4rPyRFbmQvLS9naTsKCiAgICAjIEZvbGxvdy11cCBmb3IgYnVnIzEwODI1LgogICAgIyBTZXQgZGF0YSBmb3IgcmVwbGFjaW5nIG9mIHNwZWNpZmljIHRhZ3MgaW4gVGVtcGxhdGVzOgogICAgIyAtIE9UT0JPX0FHRU5UX1NVQkpFQ1QsIE9UT0JPX0FHRU5UX0JPRFkgLSBzdWJqZWN0L2JvZHkgb2YgdGhlIENVUlJFTlQvTEFURVNUIGFnZW50IGFydGljbGUKICAgICMgLSBPVE9CT19DVVNUT01FUl9TVUJKRUNULCBPVE9CT19DVVNUT01FUl9CT0RZIC0gc3ViamVjdC9ib2R5IG9mIHRoZSBDVVJSRU5UL0xBVEVTVCBjdXN0b21lciBhcnRpY2xlCiAgICAjIC0gT1RPQk9fQUdFTlRfU1VCSkVDVFtuXSAgICAtIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgc3ViamVjdCBvZiB0aGUgQ1VSUkVOVC9MQVRFU1QgYWdlbnQgYXJ0aWNsZQogICAgIyAtIE9UT0JPX0FHRU5UX0JPRFlbbl0gICAgICAgLSBmaXJzdCBuIGxpbmVzIG9mIHRoZSBib2R5IG9mIHRoZSBDVVJSRU5UL0xBVEVTVCBhZ2VudCBhcnRpY2xlCiAgICAjIC0gT1RPQk9fQ1VTVE9NRVJfU1VCSkVDVFtuXSAtIGZpcnN0IG4gY2hhcmFjdGVycyBvZiB0aGUgc3ViamVjdCBvZiB0aGUgQ1VSUkVOVC9MQVRFU1QgY3VzdG9tZXIgYXJ0aWNsZQogICAgIyAtIE9UT0JPX0NVU1RPTUVSX0JPRFlbbl0gICAgLSBmaXJzdCBuIGxpbmVzIG9mIHRoZSBib2R5IG9mIHRoZSBDVVJSRU5UL0xBVEVTVCBjdXN0b21lciBhcnRpY2xlCiAgICAjCiAgICAjIEZvciBOb3RlIHRlbXBsYXRlIHdlIG5lZWQgdGhlIGxhc3QgYXJ0aWNsZS4KICAgICMgRm9yIEFuc3dlciwgJFBhcmFte0RhdGF9IGhhcyBzZWxlY3RlZCBvciBsYXN0IGFydGljbGUgZGF0YSwgZGVwZW5kcyB3aGV0aGVyIEFydGljbGVJRCBpcyBzZW50IG9yIG5vdC4KICAgICMgRm9yIEZvcndhcmQsICRQYXJhbXtEYXRhfSBoYXMgdGhlIGZvbGxvd2luZyBhcnRpY2xlIGRhdGE6CiAgICAjIC0gaWYgQXJ0aWNsZUlEIGlzIHNlbnQsIGRhdGEgaXMgZnJvbSBzZWxlY3RlZCBhcnRpY2xlLgogICAgIyAtIGlmIEFydGljbGVJRCBpcyBub3Qgc2VudCwgZGF0YSBpcyBmcm9tIGxhc3QgY3VzdG9tZXIvYWdlbnQvYW55IGFydGljbGUuCiAgICBpZiAoICRQYXJhbXtUZW1wbGF0ZX0gJiYgJFRpY2tldHtUaWNrZXRJRH0gKSB7CiAgICAgICAgbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CgogICAgICAgIGlmICggJFBhcmFte1RlbXBsYXRlfSBlcSAnTm90ZScgKSB7CgogICAgICAgICAgICAjIEdldCBsYXN0IGFydGljbGUgZnJvbSBhZ2VudC4KICAgICAgICAgICAgbXkgQEFnZW50QXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgID0+ICRQYXJhbXtUaWNrZXREYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgPT4gJ2FnZW50JywKICAgICAgICAgICAgICAgIE9ubHlMYXN0ICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmIChAQWdlbnRBcnRpY2xlcykgewogICAgICAgICAgICAgICAgbXkgJUFnZW50QXJ0aWNsZSA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSggJXsgJEFnZW50QXJ0aWNsZXNbMF0gfSApLT5BcnRpY2xlR2V0KAogICAgICAgICAgICAgICAgICAgICV7ICRBZ2VudEFydGljbGVzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkUGFyYW17RGF0YUFnZW50fS0+e1N1YmplY3R9ID0gJEFnZW50QXJ0aWNsZXtTdWJqZWN0fTsKICAgICAgICAgICAgICAgICRQYXJhbXtEYXRhQWdlbnR9LT57Qm9keX0gICAgPSAkQWdlbnRBcnRpY2xle0JvZHl9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIEdldCBsYXN0IGFydGljbGUgZnJvbSBjdXN0b21lci4KICAgICAgICAgICAgbXkgQEN1c3RvbWVyQXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgID0+ICRQYXJhbXtUaWNrZXREYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgICAgIE9ubHlMYXN0ICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmIChAQ3VzdG9tZXJBcnRpY2xlcykgewogICAgICAgICAgICAgICAgbXkgJUN1c3RvbWVyQXJ0aWNsZSA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSggJXsgJEN1c3RvbWVyQXJ0aWNsZXNbMF0gfSApLT5BcnRpY2xlR2V0KAogICAgICAgICAgICAgICAgICAgICV7ICRDdXN0b21lckFydGljbGVzWzBdIH0sCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkUGFyYW17RGF0YX0tPntTdWJqZWN0fSA9ICRDdXN0b21lckFydGljbGV7U3ViamVjdH07CiAgICAgICAgICAgICAgICAkUGFyYW17RGF0YX0tPntCb2R5fSAgICA9ICRDdXN0b21lckFydGljbGV7Qm9keX07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUGFyYW17VGVtcGxhdGV9IGVxICdBbnN3ZXInIHx8ICRQYXJhbXtUZW1wbGF0ZX0gZXEgJ0ZvcndhcmQnICkgewoKICAgICAgICAgICAgIyBJZiAkUGFyYW17RGF0YX0gaGFzIGFnZW50IGFydGljbGUgZGF0YSwgd2Ugd2lsbCBzZXQgc3ViamVjdCBhbmQgYm9keSBpbiAkUGFyYW17RGF0YUFnZW50fQogICAgICAgICAgICAjIHRvIHZhbHVlcyBmcm9tICRQYXJhbXtEYXRhfSBpbiBvcmRlciB0byByaWdodCByZXBsYWNpbmcgb2YgT1RPQk9fQUdFTlRfU1VCSkVDVC9CT0RZIHRhZ3MuCiAgICAgICAgICAgIGlmICggJFBhcmFte0RhdGF9LT57U2VuZGVyVHlwZX0gJiYgJFBhcmFte0RhdGF9LT57U2VuZGVyVHlwZX0gZXEgJ2FnZW50JyApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtEYXRhQWdlbnR9LT57U3ViamVjdH0gPSAkUGFyYW17RGF0YX0tPntTdWJqZWN0fTsKICAgICAgICAgICAgICAgICRQYXJhbXtEYXRhQWdlbnR9LT57Qm9keX0gICAgPSAkUGFyYW17RGF0YX0tPntCb2R5fTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjdXN0b21lciBhbmQgYWdlbnQgcGFyYW1zIGFuZCByZXBsYWNlIGl0IHdpdGggPE9UT0JPX0NVU1RPTUVSXy4uLiBvciA8T1RPQk9fQUdFTlRfLi4uCiAgICBteSAlQXJ0aWNsZURhdGEgPSAoCiAgICAgICAgJ09UT0JPX0NVU1RPTUVSXycgPT4gJFBhcmFte0RhdGF9ICAgICAgfHwge30sCiAgICAgICAgJ09UT0JPX0FHRU5UXycgICAgPT4gJFBhcmFte0RhdGFBZ2VudH0gfHwge30sCiAgICApOwoKICAgICMgdXNlIGEgbGlzdCB0byBnZXQgY3VzdG9tZXIgZmlyc3QKICAgIGZvciBteSAkRGF0YVR5cGUgKHF3KE9UT0JPX0NVU1RPTUVSXyBPVE9CT19BR0VOVF8pKSB7CiAgICAgICAgbXkgJURhdGEgPSAleyAkQXJ0aWNsZURhdGF7JERhdGFUeXBlfSB9OwoKICAgICAgICAjIEhUTUwgcXVvdGluZyBvZiBjb250ZW50CiAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewoKICAgICAgICAgICAgQVRUUklCVVRFOgogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlRGF0YSApIHsKICAgICAgICAgICAgICAgIG5leHQgQVRUUklCVVRFIHVubGVzcyAkRGF0YXskQXR0cmlidXRlfTsKCiAgICAgICAgICAgICAgICAkRGF0YXskQXR0cmlidXRlfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9IVE1MKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkRGF0YXskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICglRGF0YSkgewoKICAgICAgICAgICAgIyByZXBsYWNlIDxPVE9CT19DVVNUT01FUl8qPiBhbmQgPE9UT0JPX0FHRU5UXyo+IHRhZ3MKICAgICAgICAgICAgJFRhZyA9ICRTdGFydCAuICREYXRhVHlwZTsKICAgICAgICAgICAgJEhhc2hHbG9iYWxSZXBsYWNlLT4oICRUYWcsICVEYXRhICk7CgogICAgICAgICAgICAjIHByZXBhcmUgYm9keSAoaW5zZXJ0IG9sZCBlbWFpbCkgPE9UT0JPX0NVU1RPTUVSX0VNQUlMW25dPiwgPE9UT0JPX0NVU1RPTUVSX05PVEVbbl0+CiAgICAgICAgICAgICMgICA8T1RPQk9fQ1VTVE9NRVJfQk9EWVtuXT4sIDxPVE9CT19BR0VOVF9FTUFJTFtuXT4uLi4sIDxPVE9CT19DT01NRU5UPgoKICAgICAgICAgICAgIyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIG51bWJlciBvZiBpbmNsdWRlZCBsaW5lcyBjYW4gYmUgc3BlY2lmaWVkLgogICAgICAgICAgICAjIFRoZSBzYW1lIGtleSBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXMsIHBvc3NpYmx5IHdpdGggYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGxpbmVzLgogICAgICAgICAgICAjIFRoZSBsYXN0IGN1c3RvbWVyIG1haWwgaXMgdXNlZCBmb3IgPE9UT0JPX0NPTU1FTlQ+IG9yIDxPVE9CT19DT01NRU5UWzEyM10+CiAgICAgICAgICAgICMgYXMgdGhlIGxvb3AgcmVwbGFjZXMgdGhlIGN1c3RvbWVyIG1haWwgZmlyc3QuCiAgICAgICAgICAgICRQYXJhbXtUZXh0fSA9fiBzewogICAgICAgICAgICAgICAgJFN0YXJ0CiAgICAgICAgICAgICAgICAgICAgKD86CiAgICAgICAgICAgICAgICAgICAgICAgICMgZS5nLiBPVE9CT19DT01NRU5UWzEzXSwgT1RPQk9fQUdFTlRfQk9EWVszXSwgT1RPQk9fQ1VTVE9NRVJfQk9EWVswXQogICAgICAgICAgICAgICAgICAgICAgICAoPzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICg/OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9UT0JPX0NPTU1FTlQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtEYXRhVHlwZX0oPzpFTUFJTHxOT1RFfEJPRFkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcWyg/PGNudD4uKz8pXF0KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICMgYSBzcGVjaWFsIGNhc2UgYXMgT1RPQk9fQ09NTUVOVCB3aXRob3V0IHF1YW50aWZpZXIgaXMgaGFuZGxlZCBub3doZXJlIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgT1RPQk9fQ09NTUVOVAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICRFbmQKICAgICAgICAgICAgfQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIGZvciA8T1RPQk9fQ09NTUVOVD4gdHJ1bmNhdGUgcGVyIGRlZmF1bHQgYSBsb25nIG1haWwgYXQgMjUwMAogICAgICAgICAgICAgICAgIyA8T1RPQk9fQ1VTVE9NRVJfQk9EWVswXSB3b3VsZCBhbHNvIHlpZWxkIDI1MDAgbGluZXMKICAgICAgICAgICAgICAgIG15ICROdW1IZWFkTGluZXMgPSAkK3tjbnR9IHx8IDI1MDA7CgogICAgICAgICAgICAgICAgbXkgJE5ld09sZEJvZHkgICA9ICcnOwogICAgICAgICAgICAgICAgbXkgQEJvZHkgICAgICAgICA9IHNwbGl0IC9cbi8sICREYXRhe0JvZHl9OwogICAgICAgICAgICAgICAgbXkgJE51bUJvZHlMaW5lcyA9IHNjYWxhciBAQm9keTsKCiAgICAgICAgICAgICAgICBDT1VOVEVSOgogICAgICAgICAgICAgICAgZm9yIG15ICRDb3VudGVyICggMCAuLiAkTnVtSGVhZExpbmVzIC0gMSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBkbyBub3QgZ28gYmV5b25kIHRoZSBjb21wbGV0ZSBib2R5CiAgICAgICAgICAgICAgICAgICAgbGFzdCBDT1VOVEVSIGlmICRDb3VudGVyID49ICROdW1Cb2R5TGluZXM7CgogICAgICAgICAgICAgICAgICAgICMgYWRkIG5vIHF1b3RlIGNoYXIsIGRvIGl0IGxhdGVyIGJ5IHVzaW5nIERvY3VtZW50Q2xlYW51cCgpCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTmV3T2xkQm9keSAuPSAkQm9keVskQ291bnRlcl07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGFkZCAiPiAiIGFzIHF1b3RlIGNoYXIKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE5ld09sZEJvZHkgLj0gIj4gJEJvZHlbJENvdW50ZXJdIjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgYWRkIG5ldyBsaW5lLCB1bmxlc3Mgd2UgYXJlIGF0IHRoZSBsYXN0IGluY2x1ZGVkIGxpbmUKICAgICAgICAgICAgICAgICAgICAjIG5vdCBzdXJlIHdoeSB0aGUgbGFzdCBsaW5lIGhhcyBhIG5ld2xpbmUgd2hlbiB0aGUKICAgICAgICAgICAgICAgICAgICAjIHRoZSBib2R5IGhhcyBsZXNzIGxpbmVzIHRoYW4gdGhlIHNwZWNpZmllZCBsaW5lIGNvdW50CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ291bnRlciA8ICggJE51bUhlYWRMaW5lcyAtIDEgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE5ld09sZEJvZHkgLj0gIlxuIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY2hvbXAgJE5ld09sZEJvZHk7CgogICAgICAgICAgICAgICAgIyBIVE1MIHF1b3Rpbmcgb2YgY29udGVudAogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICYmICROZXdPbGRCb2R5ICkgewoKICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSB0cmFpbGluZyBuZXcgbGluZXMKICAgICAgICAgICAgICAgICAgICBmb3IgKCAxIC4uIDEwICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTmV3T2xkQm9keSA9fiBzLyg8YnJcLz4pXHN7MCwyMH0kLy9nczsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgYWRkIHF1b3RlCiAgICAgICAgICAgICAgICAgICAgJE5ld09sZEJvZHkgPSAiPGJsb2NrcXVvdGUgdHlwZT1cImNpdGVcIj4kTmV3T2xkQm9keTwvYmxvY2txdW90ZT4iOwogICAgICAgICAgICAgICAgICAgICROZXdPbGRCb2R5ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Eb2N1bWVudENsZWFudXAoCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkTmV3T2xkQm9keSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgdGhlIHJlcGxhY2VtZW50CiAgICAgICAgICAgICAgICAkTmV3T2xkQm9keQogICAgICAgICAgICB9eGVnOyAgICAjIGEgc2luZ2xlIHBhc3Mgb3ZlciB0aGUgbWFjcm9zIGluICRQYXJhbXtUZXh0fQoKICAgICAgICAgICAgIyByZXBsYWNlIDxPVE9CT19DVVNUT01FUl9TVUJKRUNUW10+ICBhbmQgIDxPVE9CT19BR0VOVF9TVUJKRUNUW10+IHRhZ3MKICAgICAgICAgICAgJFRhZyA9ICIkU3RhcnQkRGF0YVR5cGUiIC4gJ1NVQkpFQ1QnOwogICAgICAgICAgICBpZiAoICRQYXJhbXtUZXh0fSA9fiAvJFRhZ1xbKC4rPylcXSRFbmQvZyApIHsKCiAgICAgICAgICAgICAgICBteSAkU3ViamVjdENoYXIgPSAkMTsKICAgICAgICAgICAgICAgIG15ICRTdWJqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U3ViamVjdENsZWFuKAogICAgICAgICAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgID0+ICREYXRhe1N1YmplY3R9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU3ViamVjdCA9fiBzL14oLnskU3ViamVjdENoYXJ9KS4qJC8kMSBbLi4uXS87CiAgICAgICAgICAgICAgICAkUGFyYW17VGV4dH0gPX4gcy8kVGFnXFsuKz9cXSRFbmQvJFN1YmplY3QvZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkRGF0YVR5cGUgZXEgJ09UT0JPX0NVU1RPTUVSXycgKSB7CgogICAgICAgICAgICAgICAgIyBHZXQgPE9UT0JPX0VNQUlMX0RBVEVbXT4gZnJvbSBib2R5IGFuZCByZXBsYWNlIHdpdGggcmVjZWl2ZWQgZGF0ZS4KICAgICAgICAgICAgICAgICMgVE9ETzogQ2xhcmlmeSwgYXMgaXQgcmF0aGVyIGxvb2tzIGxpa2UgdGhlIGN1cnJlbnQgZGF0ZSBpcyB1c2VkLgogICAgICAgICAgICAgICAgIyBUaGlzIHRhZyB3aWxsIGJlIGFibGUgdG8gdXNlIHdpdGggc3VwcG9ydGVkIE9UT0JPIHRpbWUgem9uZXMKICAgICAgICAgICAgICAgICMgICAoIGUuZy4gPE9UT0JPX0VNQUlMX0RBVEVbRXVyb3BlL0Jlcmxpbl0+LCA8T1RPQk9fRU1BSUxfREFURVtBc2lhL1Rva3lvXT4sCiAgICAgICAgICAgICAgICAjICAgPE9UT0JPX0VNQUlMX0RBVEVbQW1lcmljYS9EZW52ZXJdPiAsIC4uLikuCiAgICAgICAgICAgICAgICAjIElmIHlvdSB1c2UgdGFnIHdpdGhvdXQgdGltZSBpbiBzaW1wbGUgZm9ybWF0IGFzIDxPVE9CT19FTUFJTF9EQVRFPiwKICAgICAgICAgICAgICAgICMgIHRpbWUgd2lsbCBiZSB0cmFuc2Zvcm1lZCBpbnRvIE9UT0JPIFN5c3RlbVRpbWVab25lLgogICAgICAgICAgICAgICAgJFRhZyA9ICRTdGFydCAuICdPVE9CT19FTUFJTF9EQVRFJzsKCiAgICAgICAgICAgICAgICBteSAkRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKTsKICAgICAgICAgICAgICAgIG15ICRTeXN0ZW1UaW1lWm9uZSA9ICREYXRlVGltZU9iamVjdC0+T1RPQk9UaW1lWm9uZUdldCgpOwoKICAgICAgICAgICAgICAgICRQYXJhbXtUZXh0fSA9fiBzewogICAgICAgICAgICAgICAgICAgICRTdGFydAogICAgICAgICAgICAgICAgICAgICAgICBPVE9CT19FTUFJTF9EQVRFCiAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHRpbWUgem9uZSBpcyBvcHRpb25hbAogICAgICAgICAgICAgICAgICAgICAgICAoPzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxbKD88dHo+Lis/KVxdCiAgICAgICAgICAgICAgICAgICAgICAgICk/CiAgICAgICAgICAgICAgICAgICAgJEVuZAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRUaW1lWm9uZSA9ICQre3R6fTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkVGltZVpvbmUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRUaW1lWm9uZVZhbGlkID0gJERhdGVUaW1lT2JqZWN0LT5Jc1RpbWVab25lVmFsaWQoIFRpbWVab25lID0+ICRUaW1lWm9uZSApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFRpbWVab25lVmFsaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRlVGltZU9iamVjdC0+VG9UaW1lWm9uZSggVGltZVpvbmUgPT4gJFRpbWVab25lICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGF5IGF0IHRoZSBzeXN0ZW0gdGltZSB6b25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGltZVpvbmUgPSAkU3lzdGVtVGltZVpvbmU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkVGltZVpvbmUgPSAkU3lzdGVtVGltZVpvbmU7CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRlVGltZU9iamVjdC0+VG9UaW1lWm9uZSggVGltZVpvbmUgPT4gJFRpbWVab25lICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGNvbnN0cnVjdCB0aGUgcmVwbGFjZW1lbnQKICAgICAgICAgICAgICAgICAgICBteSAkRW1haWxEYXRlID0gJERhdGVUaW1lT2JqZWN0LT5Gb3JtYXQoIEZvcm1hdCA9PiAnJUEsICVCICVlLCAlWSBhdCAlVCAnICk7CiAgICAgICAgICAgICAgICAgICAgJEVtYWlsRGF0ZSAuPSAiKCRUaW1lWm9uZSkiOwoKICAgICAgICAgICAgICAgICAgICAjIHRoZSByZXBsYWNlbWVudAogICAgICAgICAgICAgICAgICAgICRFbWFpbERhdGU7CiAgICAgICAgICAgICAgICB9eGVnOyAgICAjIGEgc2luZ2xlIHBhc3Mgb3ZlciB0aGUgbWFjcm9zIGluICRQYXJhbXtUZXh0fQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICREYXRhVHlwZSBlcSAnT1RPQk9fQ1VTVE9NRVJfJyApIHsKCiAgICAgICAgICAgICMgZ2V0IGFuZCBwcmVwYXJlIHJlYWwgbmFtZQogICAgICAgICAgICAkVGFnID0gJFN0YXJ0IC4gJ09UT0JPX0NVU1RPTUVSX1JFQUxOQU1FJzsKICAgICAgICAgICAgaWYgKCAkUGFyYW17VGV4dH0gPX4gLyRUYWckRW5kL2kgKSB7CgogICAgICAgICAgICAgICAgbXkgJEZyb207CgogICAgICAgICAgICAgICAgaWYgKCAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSApIHsKCiAgICAgICAgICAgICAgICAgICAgJEZyb20gPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lck5hbWUoCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyB0cnkgdG8gZ2V0IHRoZSByZWFsIG5hbWUgZGlyZWN0bHkgZnJvbSB0aGUgZGF0YQogICAgICAgICAgICAgICAgJEZyb20gLy89ICRSZWNpcGllbnR7UmVhbG5hbWV9OwoKICAgICAgICAgICAgICAgICMgZ2V0IHJlYWwgbmFtZSBiYXNlZCBvbiByZXBseS10bwogICAgICAgICAgICAgICAgaWYgKCAhJEZyb20gJiYgJERhdGF7UmVwbHlUb30gKSB7CgogICAgICAgICAgICAgICAgICAgICRGcm9tID0gJERhdGF7UmVwbHlUb307CgogICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIGVtYWlsIGFkZHJlc3NlcwogICAgICAgICAgICAgICAgICAgICRGcm9tID1+IHMvJmx0Oy4qJmd0O3w8Lio+fFwoLipcKXxcInwmcXVvdDt8O3wsLy9nOwoKICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIHNwYWNlcwogICAgICAgICAgICAgICAgICAgICRGcm9tID1+IHMvXlxzKy8vZzsKICAgICAgICAgICAgICAgICAgICAkRnJvbSA9fiBzL1xzKyQvL2c7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBnZW5lcmF0ZSByZWFsIG5hbWUgYmFzZWQgb24gc2VuZGVyIGxpbmUKICAgICAgICAgICAgICAgIGlmICggISRGcm9tICkgewogICAgICAgICAgICAgICAgICAgICRGcm9tID0gJERhdGF7VG99IHx8ICcnOwoKICAgICAgICAgICAgICAgICAgICAjIHJlbW92ZSBlbWFpbCBhZGRyZXNzZXMKICAgICAgICAgICAgICAgICAgICAkRnJvbSA9fiBzLyZsdDsuKiZndDt8PC4qPnxcKC4qXCl8XCJ8JnF1b3Q7fDt8LC8vZzsKCiAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgbGVhZGluZy90cmFpbGluZyBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAkRnJvbSA9fiBzL15ccysvL2c7CiAgICAgICAgICAgICAgICAgICAgJEZyb20gPX4gcy9ccyskLy9nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcmVwbGFjZSA8T1RPQk9fQ1VTVE9NRVJfUkVBTE5BTUU+IHdpdGggZnJvbQogICAgICAgICAgICAgICAgJFBhcmFte1RleHR9ID1+IHMvJFRhZyRFbmQvJEZyb20vZzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjdXN0b21lciBkYXRhIGFuZCByZXBsYWNlIGl0IHdpdGggPE9UT0JPX0NVU1RPTUVSX0RBVEFfLi4uCiAgICAkVGFnICA9ICRTdGFydCAuICdPVE9CT19DVVNUT01FUl8nOwogICAgJFRhZzIgPSAkU3RhcnQgLiAnT1RPQk9fQ1VTVE9NRVJfREFUQV8nOwoKICAgIGlmICggJFRpY2tldHtDdXN0b21lclVzZXJJRH0gfHwgJFBhcmFte0RhdGF9LT57Q3VzdG9tZXJVc2VySUR9ICkgewoKICAgICAgICBteSAkQ3VzdG9tZXJVc2VySUQgPSAkUGFyYW17RGF0YX0tPntDdXN0b21lclVzZXJJRH0gfHwgJFRpY2tldHtDdXN0b21lclVzZXJJRH07CgogICAgICAgIG15ICVDdXN0b21lclVzZXIgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICBVc2VyID0+ICRDdXN0b21lclVzZXJJRCwKICAgICAgICApOwoKICAgICAgICAjIEhUTUwgcXVvdGluZyBvZiBjb250ZW50CiAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewoKICAgICAgICAgICAgQVRUUklCVVRFOgogICAgICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlQ3VzdG9tZXJVc2VyICkgewogICAgICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRDdXN0b21lclVzZXJ7JEF0dHJpYnV0ZX07CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VyeyRBdHRyaWJ1dGV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRDdXN0b21lclVzZXJ7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHJlcGxhY2UgaXQKICAgICAgICAkSGFzaEdsb2JhbFJlcGxhY2UtPiggIiRUYWd8JFRhZzIiLCAlQ3VzdG9tZXJVc2VyICk7CiAgICB9CgogICAgIyBDbGVhbiB1cCBhbGwgbm90IG5lZWRlZCAnPE9UT0JPX0NVU1RPTUVSXycgYW5kICc8T1RPQk9fQ1VTVE9NRVJfREFUQV8nIHRhZ3MuCiAgICAjIE5vdGUgdGhhdCB0aGlzIGluY2x1ZGVzIHRoZSB0YWdzIHdoaWNoIGJlY2FtZSBwYXJ0IG9mIHRoZSByZXBsYWNlIHRleHQKICAgICMgYmVjYXVzZSB0aGV5IHdlcmUgcHJlc2VudCBpbiB0aGUgbWFjcm8gdmFsdWVzLgogICAgJFBhcmFte1RleHR9ID1+IHMvKD86JFRhZ3wkVGFnMikuKz8kRW5kLy0vZ2k7CgogICAgIyBjbGVhbnVwIGFsbCBub3QgbmVlZGVkIDxPVE9CT19BR0VOVF8gdGFncwogICAgJFRhZyA9ICRTdGFydCAuICdPVE9CT19BR0VOVF8nOwogICAgJFBhcmFte1RleHR9ID1+IHMvJFRhZy4rPyRFbmQvLS9naTsKCiAgICByZXR1cm4gJFBhcmFte1RleHR9Owp9Cgo9aGVhZDIgX1JlbW92ZVVuU3VwcG9ydGVkVGFnKCkKCmNsZWFuIHVwIGFsbCBub3Qgc3VwcG9ydGVkIHRhZ3MuIFRoZSBub3Qgc3VwcG9ydGVkIHRhZ3MgYXJlIHJlcGxhY2VkCndpdGggdGhlIG1pbnVzIGNoYXJhY3RlciAnLScuCgogICAgbXkgJFRleHQgPSAkVGVtcGxhdGVHZW5lcmF0b3JPYmplY3QtPl9SZW1vdmVVblN1cHBvcnRlZFRhZygKICAgICAgICBUZXh0ICAgICAgICAgICAgICAgICA9PiAkU29tZVRleHRXaXRoVGFncywKICAgICAgICBMaXN0T2ZVblN1cHBvcnRlZFRhZyA9PiBcQExpc3RPZlVuU3VwcG9ydGVkVGFnLAogICAgKTsKCj1jdXQKCnN1YiBfUmVtb3ZlVW5TdXBwb3J0ZWRUYWcgewoKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkSXRlbSAocXcoVGV4dCBMaXN0T2ZVblN1cHBvcnRlZFRhZykpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskSXRlbX0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRJdGVtISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkU3RhcnQgPSAnPCc7CiAgICBteSAkRW5kICAgPSAnPic7CiAgICBpZiAoICRTZWxmLT57UmljaFRleHR9ICkgewogICAgICAgICRTdGFydCA9ICcmbHQ7JzsKICAgICAgICAkRW5kICAgPSAnJmd0Oyc7CiAgICAgICAgJFBhcmFte1RleHR9ID1+IHMvKFxufFxyKS8vZzsKICAgIH0KCiAgICAjIENsZWFudXAgYWxsIG5vdCBzdXBwb3J0ZWQgdGFncyB3aXRoIGFuZCB3aXRob3V0IG51bWJlciwgZS5nLiBPVE9CT19DVVNUT01FUl9CT0RZIGFuZCBPVE9CT19DVVNUT01FUl9CT0RZW25dLgogICAgIyBTZWUgaHR0cHM6Ly9idWdzLm90cnMub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM2OSBhbmQgaHR0cHM6Ly9idWdzLm90cnMub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDgyNS4KICAgIG15ICROb3RTdXBwb3J0ZWRUYWcgPSAkU3RhcnQgLiAiKD86IiAuIGpvaW4oICJ8IiwgQHsgJFBhcmFte0xpc3RPZlVuU3VwcG9ydGVkVGFnfSB9ICkgLiAiKShcXFsuKj9cXF0pPyIgLiAkRW5kOwogICAgJFBhcmFte1RleHR9ID1+IHMvJE5vdFN1cHBvcnRlZFRhZy8tL2dpOwoKICAgIHJldHVybiAkUGFyYW17VGV4dH07Cn0KCj1oZWFkMiBfTWFza1NlbnNpdGl2ZVZhbHVlKCkKCk1hc2sgc2Vuc2l0aXZlIHZhbHVlLCBpLmUuIGEgcGFzc3dvcmQsIGEgc2VjdXJpdHkgdG9rZW4sIGV0Yy4KCiAgICBteSAkTWFza2VkVmFsdWUgPSAkU2VsZi0+X01hc2tTZW5zaXRpdmVWYWx1ZSgKICAgICAgICBLZXkgICAgICA9PiAnRGF0YWJhc2VQYXNzd29yZCcsICMgKHJlcXVpcmVkKSBOYW1lIG9mIHRoZSBmaWVsZC9rZXkuCiAgICAgICAgVmFsdWUgICAgPT4gJ3NlY3JldHZhbHVlJywgICAgICAjIChvcHRpb25hbCkgVmFsdWUgdG8gcG90ZW50aWFsbHkgbWFzay4KICAgICAgICBJc0NvbmZpZyA9PiAxLCAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBhIGNvbmZpZyBvcHRpb24sIGRlZmF1bHQ6IDAuCiAgICApOwoKUmV0dXJucyBtYXNrZWQgdmFsdWUgaW4gY2FzZSB0aGUga2V5IGlzIG1hdGNoZWQ6CgogICAkTWFza2VkVmFsdWUgPSAneHh4JzsKCj1jdXQKCnN1YiBfTWFza1NlbnNpdGl2ZVZhbHVlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICcnIGlmICEkUGFyYW17S2V5fSB8fCAhZGVmaW5lZCAkUGFyYW17VmFsdWV9OwoKICAgICMgU2tpcCBtYXNraW5nIHNlbnNpdGl2ZSB2YWx1ZXMgZm9yIER5bmFtaWMgRmllbGRzLgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX0gaWYgJFBhcmFte0tleX0gPX4gcXJ7IGR5bmFtaWNmaWVsZCB9eGk7CgogICAgIyBNYXRjaCBnZW5lcmFsIGtleSBuYW1lcywgaS5lLiBmcm9tIHRoZSB1c2VyIHByZWZlcmVuY2VzLgogICAgbXkgJE1hdGNoID0gcXJ7IGNvbmZpZ3xzZWNyZXR8cGFzc3d8dXNlcnB3fGF1dGh8dG9rZW4gfXhpOwoKICAgICMgTWF0Y2ggZm9yYmlkZGVuIGNvbmZpZyBrZXlzLgogICAgaWYgKCAkUGFyYW17SXNDb25maWd9ICkgewogICAgICAgICRNYXRjaCA9IHFyeyAoPzpwYXNzd29yZHxwdykgXGQqICQgfXNteGk7CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtWYWx1ZX0gaWYgJFBhcmFte0tleX0gIX4gJE1hdGNoOwoKICAgIHJldHVybiAneHh4JzsKfQoKPWVuZCBJbnRlcm5hbDoKCj1jdXQKCjE7Cg==</File>
        <File Location="Custom/Kernel/System/AuthSession/FS.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL1N5c3RlbS9BdXRoU2Vzc2lvbi9GUy5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbjo6RlM7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQYXJhbU9iamVjdCkKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgbW9yZSBjb21tb24gcGFyYW1zCiAgICAkU2VsZi0+e1Nlc3Npb25TcG9vbH0gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25EaXInKTsKICAgICRTZWxmLT57U3lzdGVtSUR9ICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnU3lzdGVtSUQnKTsKCiAgICBpZiAoICEtZSAkU2VsZi0+e1Nlc3Npb25TcG9vbH0gKSB7CiAgICAgICAgaWYgKCAhbWtkaXIoICRTZWxmLT57U2Vzc2lvblNwb29sfSwgMDc3MCApICkgeyAgICAjIyBubyBjcml0aWMgcXcoVmFsdWVzQW5kRXhwcmVzc2lvbnM6OlByb2hpYml0TGVhZGluZ1plcm9zKQogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgY3JlYXRlIGRpcmVjdG9yeSAnJFNlbGYtPntTZXNzaW9uU3Bvb2x9JzogJCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBDaGVja1Nlc3Npb25JRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgc2Vzc2lvbiBpZAogICAgaWYgKCAhJFBhcmFte1Nlc3Npb25JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdHb3Qgbm8gU2Vzc2lvbklEISEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFJlbW90ZUFkZHIgID0gJFBhcmFte1JlbW90ZUFkZHJ9IHx8ICRQYXJhbU9iamVjdC0+UmVtb3RlQWRkcigpIHx8ICdub25lJzsKCiAgICAjIHNldCBkZWZhdWx0IG1lc3NhZ2UKICAgICRTZWxmLT57U2Vzc2lvbklERXJyb3JNZXNzYWdlfSA9IFRyYW5zbGF0YWJsZSgnU2Vzc2lvbiBpbnZhbGlkLiBQbGVhc2UgbG9nIGluIGFnYWluLicpOwoKICAgICMgc2Vzc2lvbiBpZCBjaGVjawogICAgbXkgJURhdGEgPSAkU2VsZi0+R2V0U2Vzc2lvbklERGF0YSggU2Vzc2lvbklEID0+ICRQYXJhbXtTZXNzaW9uSUR9ICk7CgogICAgaWYgKCAhJERhdGF7VXNlcklEfSB8fCAhJERhdGF7VXNlckxvZ2lufSApIHsKICAgICAgICAkU2VsZi0+e1Nlc3Npb25JREVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1Nlc3Npb24gaW52YWxpZC4gUGxlYXNlIGxvZyBpbiBhZ2Fpbi4nKTsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJTZXNzaW9uSUQ6ICckUGFyYW17U2Vzc2lvbklEfScgaXMgaW52YWxpZCEhISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyByZW1vdGUgaXAgY2hlY2sKICAgIGlmICgKICAgICAgICAkRGF0YXtVc2VyUmVtb3RlQWRkcn0gbmUgJFJlbW90ZUFkZHIKICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25DaGVja1JlbW90ZUlQJykKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiUmVtb3RlSVAgb2YgJyRQYXJhbXtTZXNzaW9uSUR9JyAoJERhdGF7VXNlclJlbW90ZUFkZHJ9KSBpcyAiCiAgICAgICAgICAgICAgICAuICJkaWZmZXJlbnQgZnJvbSByZWdpc3RlcmVkIElQICgkUmVtb3RlQWRkcikuIEludmFsaWRhdGluZyBzZXNzaW9uISIKICAgICAgICAgICAgICAgIC4gIiBEaXNhYmxlIGNvbmZpZyAnU2Vzc2lvbkNoZWNrUmVtb3RlSVAnIGlmIHlvdSBkb24ndCB3YW50IHRoaXMhIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBzZXNzaW9uIGlkIGlmIGl0IGlzbid0IHRoZSBzYW1lIHJlbW90ZSBpcD8KICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbkRlbGV0ZUlmTm90UmVtb3RlSUQnKSApIHsKICAgICAgICAgICAgJFNlbGYtPlJlbW92ZVNlc3Npb25JRCggU2Vzc2lvbklEID0+ICRQYXJhbXtTZXNzaW9uSUR9ICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBzZXNzaW9uIGlkbGUgdGltZQogICAgbXkgJFRpbWVOb3cgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCk7CiAgICBteSAkTWF4U2Vzc2lvbklkbGVUaW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uTWF4SWRsZVRpbWUnKTsKCiAgICBpZiAoICggJFRpbWVOb3cgLSAkTWF4U2Vzc2lvbklkbGVUaW1lICkgPj0gJERhdGF7VXNlckxhc3RSZXF1ZXN0fSApIHsKCiAgICAgICAgJFNlbGYtPntTZXNzaW9uSURFcnJvck1lc3NhZ2V9ID0gVHJhbnNsYXRhYmxlKCdTZXNzaW9uIGhhcyB0aW1lZCBvdXQuIFBsZWFzZSBsb2cgaW4gYWdhaW4uJyk7CgogICAgICAgIG15ICRUaW1lb3V0ID0gaW50KCAoICRUaW1lTm93IC0gJERhdGF7VXNlckxhc3RSZXF1ZXN0fSApIC8gKCA2MCAqIDYwICkgKTsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PgogICAgICAgICAgICAgICAgIlNlc3Npb25JRCAoJFBhcmFte1Nlc3Npb25JRH0pIGlkbGUgdGltZW91dCAoJFRpbWVvdXQgaCkhIERvbid0IGdyYW50IGFjY2VzcyEhISIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgc2Vzc2lvbiBpZCBpZiB0b28gb2xkPwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uRGVsZXRlSWZUaW1lVG9PbGQnKSApIHsKICAgICAgICAgICAgJFNlbGYtPlJlbW92ZVNlc3Npb25JRCggU2Vzc2lvbklEID0+ICRQYXJhbXtTZXNzaW9uSUR9ICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBzZXNzaW9uIHRpbWUKICAgIG15ICRNYXhTZXNzaW9uVGltZSA9ICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbk1heFRpbWUnKTsKCiAgICBpZiAoICggJFRpbWVOb3cgLSAkTWF4U2Vzc2lvblRpbWUgKSA+PSAkRGF0YXtVc2VyU2Vzc2lvblN0YXJ0fSApIHsKCiAgICAgICAgJFNlbGYtPntTZXNzaW9uSURFcnJvck1lc3NhZ2V9ID0gVHJhbnNsYXRhYmxlKCdTZXNzaW9uIGhhcyB0aW1lZCBvdXQuIFBsZWFzZSBsb2cgaW4gYWdhaW4uJyk7CgogICAgICAgIG15ICRUaW1lb3V0ID0gaW50KCAoICRUaW1lTm93IC0gJERhdGF7VXNlclNlc3Npb25TdGFydH0gKSAvICggNjAgKiA2MCApICk7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlNlc3Npb25JRCAoJFBhcmFte1Nlc3Npb25JRH0pIHRvbyBvbGQgKCRUaW1lb3V0IGgpISBEb24ndCBncmFudCBhY2Nlc3MhISEiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHNlc3Npb24gaWQgaWYgdG9vIG9sZD8KICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbkRlbGV0ZUlmVGltZVRvT2xkJykgKSB7CiAgICAgICAgICAgICRTZWxmLT5SZW1vdmVTZXNzaW9uSUQoIFNlc3Npb25JRCA9PiAkUGFyYW17U2Vzc2lvbklEfSApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgU2Vzc2lvbklERXJyb3JNZXNzYWdlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRTZWxmLT57U2Vzc2lvbklERXJyb3JNZXNzYWdlfSB8fCAnJzsKfQoKc3ViIEdldFNlc3Npb25JRERhdGEgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHNlc3Npb24gaWQKICAgIGlmICggISRQYXJhbXtTZXNzaW9uSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnR290IG5vIFNlc3Npb25JRCEhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIHJldHVybiAleyAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9IH0KICAgICAgICBpZiAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9OwoKICAgICMgcmVhZCBkYXRhCiAgICBteSAkQ29udGVudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPkZpbGVSZWFkKAogICAgICAgIERpcmVjdG9yeSAgICAgICA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgRmlsZW5hbWUgICAgICAgID0+ICdEYXRhLScgLiAkUGFyYW17U2Vzc2lvbklEfSwKICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJ0xvY2FsJywKICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ2Jpbm1vZGUnLAogICAgICAgIERpc2FibGVXYXJuaW5ncyA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gaWYgISRDb250ZW50OwogICAgcmV0dXJuIGlmIHJlZiAkQ29udGVudCBuZSAnU0NBTEFSJzsKCiAgICAjIHJlYWQgZGF0YSBzdHJ1Y3R1cmUgYmFjayBmcm9tIGZpbGUgZHVtcCwgdXNlIGJsb2NrIGV2YWwgZm9yIHNhZmV0eSByZWFzb25zCiAgICBteSAkU2Vzc2lvbiA9IGV2YWwgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdG9yYWJsZScpLT5EZXNlcmlhbGl6ZSggRGF0YSA9PiAkeyRDb250ZW50fSApOwogICAgfTsKCiAgICBpZiAoICEkU2Vzc2lvbiB8fCByZWYgJFNlc3Npb24gbmUgJ0hBU0gnICkgewogICAgICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNhY2hlIHJlc3VsdAogICAgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfSA9ICRTZXNzaW9uOwoKICAgIHJldHVybiAleyRTZXNzaW9ufTsKfQoKc3ViIENyZWF0ZVNlc3Npb25JRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHN5c3RlbSB0aW1lCiAgICBteSAkVGltZU5vdyA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCk7CgogICAgIyBnZXQgcmVtb3RlIGFkZHJlc3MgYW5kIHRoZSBodHRwIHVzZXIgYWdlbnQKICAgIG15ICRQYXJhbU9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkUmVtb3RlQWRkciAgICAgID0gJFBhcmFtT2JqZWN0LT5SZW1vdGVBZGRyKCkgICAgICAgICB8fCAnbm9uZSc7CiAgICBteSAkUmVtb3RlVXNlckFnZW50ID0gJFBhcmFtT2JqZWN0LT5IZWFkZXIoJ1VzZXItQWdlbnQnKSB8fCAnbm9uZSc7CgogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgICMgY3JlYXRlIHNlc3Npb24gaWQKICAgIG15ICRTZXNzaW9uSUQgPSAkU2VsZi0+e1N5c3RlbUlEfSAuICRNYWluT2JqZWN0LT5HZW5lcmF0ZVJhbmRvbVN0cmluZygKICAgICAgICBMZW5ndGggPT4gMzIsCiAgICApOwoKICAgICMgY3JlYXRlIGNoYWxsZW5nZSB0b2tlbgogICAgbXkgJENoYWxsZW5nZVRva2VuID0gJE1haW5PYmplY3QtPkdlbmVyYXRlUmFuZG9tU3RyaW5nKAogICAgICAgIExlbmd0aCA9PiAzMiwKICAgICk7CgogICAgbXkgJURhdGE7CiAgICBLRVk6CiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlUGFyYW0gKSB7CgogICAgICAgIG5leHQgS0VZIGlmICEkS2V5OwoKICAgICAgICAkRGF0YXskS2V5fSA9ICRQYXJhbXskS2V5fTsKICAgIH0KCiAgICAkRGF0YXtVc2VyU2Vzc2lvblN0YXJ0fSAgICA9ICRUaW1lTm93OwogICAgJERhdGF7VXNlclJlbW90ZUFkZHJ9ICAgICAgPSAkUmVtb3RlQWRkcjsKICAgICREYXRhe1VzZXJSZW1vdGVVc2VyQWdlbnR9ID0gJFJlbW90ZVVzZXJBZ2VudDsKICAgICREYXRhe1VzZXJDaGFsbGVuZ2VUb2tlbn0gID0gJENoYWxsZW5nZVRva2VuOwoKICAgICMgZHVtcCB0aGUgZGF0YQogICAgbXkgJERhdGFDb250ZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJyktPlNlcmlhbGl6ZSggRGF0YSA9PiBcJURhdGEgKTsKCiAgICAjIHdyaXRlIGRhdGEgZmlsZQogICAgbXkgJEZpbGVMb2NhdGlvbiA9ICRNYWluT2JqZWN0LT5GaWxlV3JpdGUoCiAgICAgICAgRGlyZWN0b3J5ICAgICAgID0+ICRTZWxmLT57U2Vzc2lvblNwb29sfSwKICAgICAgICBGaWxlbmFtZSAgICAgICAgPT4gJ0RhdGEtJyAuICRTZXNzaW9uSUQsCiAgICAgICAgQ29udGVudCAgICAgICAgID0+IFwkRGF0YUNvbnRlbnQsCiAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICdMb2NhbCcsCiAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdiaW5tb2RlJywKICAgICAgICBQZXJtaXNzaW9uICAgICAgPT4gJzY2MCcsCiAgICAgICAgRGlzYWJsZVdhcm5pbmdzID0+IDEsCiAgICApOwoKICAgIHJldHVybiBpZiAhJEZpbGVMb2NhdGlvbjsKCiAgICAjIHNldCBjYWNoZQogICAgJFNlbGYtPntDYWNoZX0tPnskU2Vzc2lvbklEfSA9IFwlRGF0YTsKCiAgICAjIGNyZWF0ZSBuZWVkZWQgc3RhdGUgY29udGVudAogICAgbXkgJFVzZXJUeXBlICAgICAgICAgPSAkU2VsZi0+e0NhY2hlfS0+eyRTZXNzaW9uSUR9LT57VXNlclR5cGV9ICAgICAgICAgfHwgJyc7CiAgICBteSAkVXNlckxvZ2luICAgICAgICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntVc2VyTG9naW59ICAgICAgICB8fCAnJzsKICAgIG15ICRVc2VyU2Vzc2lvblN0YXJ0ID0gJFNlbGYtPntDYWNoZX0tPnskU2Vzc2lvbklEfS0+e1VzZXJTZXNzaW9uU3RhcnR9IHx8ICcnOwogICAgbXkgJFVzZXJMYXN0UmVxdWVzdCAgPSAkU2VsZi0+e0NhY2hlfS0+eyRTZXNzaW9uSUR9LT57VXNlckxhc3RSZXF1ZXN0fSAgfHwgJyc7CiAgICBteSAkU2Vzc2lvblNvdXJjZSAgICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntTZXNzaW9uU291cmNlfSAgICB8fCAnJzsKCiAgICBteSAkU3RhdGVDb250ZW50ID0gJFVzZXJUeXBlIC4gJyMjIyMnIC4gJFVzZXJMb2dpbiAuICcjIyMjJyAuICRVc2VyU2Vzc2lvblN0YXJ0IC4gJyMjIyMnIC4gJFVzZXJMYXN0UmVxdWVzdDsKCiAgICBpZiAoJFNlc3Npb25Tb3VyY2UpIHsKICAgICAgICAkU3RhdGVDb250ZW50IC49ICcjIyMjJyAuICRTZXNzaW9uU291cmNlOwogICAgfQoKICAgICMgd3JpdGUgc3RhdGUgZmlsZQogICAgJE1haW5PYmplY3QtPkZpbGVXcml0ZSgKICAgICAgICBEaXJlY3RvcnkgICAgICAgPT4gJFNlbGYtPntTZXNzaW9uU3Bvb2x9LAogICAgICAgIEZpbGVuYW1lICAgICAgICA9PiAnU3RhdGUtJyAuICRTZXNzaW9uSUQsCiAgICAgICAgQ29udGVudCAgICAgICAgID0+IFwkU3RhdGVDb250ZW50LAogICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnTG9jYWwnLAogICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnYmlubW9kZScsCiAgICAgICAgUGVybWlzc2lvbiAgICAgID0+ICc2NjAnLAogICAgICAgIERpc2FibGVXYXJuaW5ncyA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gJFNlc3Npb25JRDsKfQoKc3ViIFJlbW92ZVNlc3Npb25JRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgc2Vzc2lvbiBpZAogICAgaWYgKCAhJFBhcmFte1Nlc3Npb25JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdHb3Qgbm8gU2Vzc2lvbklEISEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgICMgZGVsZXRlIGZpbGUKICAgIG15ICREZWxldGVEYXRhID0gJE1haW5PYmplY3QtPkZpbGVEZWxldGUoCiAgICAgICAgRGlyZWN0b3J5ICAgICAgID0+ICRTZWxmLT57U2Vzc2lvblNwb29sfSwKICAgICAgICBGaWxlbmFtZSAgICAgICAgPT4gJ0RhdGEtJyAuICRQYXJhbXtTZXNzaW9uSUR9LAogICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnTG9jYWwnLAogICAgICAgIERpc2FibGVXYXJuaW5ncyA9PiAxLAogICAgKTsKICAgIG15ICREZWxldGVTdGF0ZSA9ICRNYWluT2JqZWN0LT5GaWxlRGVsZXRlKAogICAgICAgIERpcmVjdG9yeSAgICAgICA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgRmlsZW5hbWUgICAgICAgID0+ICdTdGF0ZS0nIC4gJFBhcmFte1Nlc3Npb25JRH0sCiAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICdMb2NhbCcsCiAgICAgICAgRGlzYWJsZVdhcm5pbmdzID0+IDEsCiAgICApOwoKICAgIHJldHVybiBpZiAhJERlbGV0ZURhdGE7CiAgICByZXR1cm4gaWYgISREZWxldGVTdGF0ZTsKCiAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICBNZXNzYWdlICA9PiAiUmVtb3ZlZCBTZXNzaW9uSUQgJFBhcmFte1Nlc3Npb25JRH0uIgogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIFVwZGF0ZVNlc3Npb25JRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgKHF3KFNlc3Npb25JRCBLZXkpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRffSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJF8hIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIGlmICggISRTZWxmLT57Q2FjaGV9LT57ICRQYXJhbXtTZXNzaW9uSUR9IH0gKSB7CiAgICAgICAgbXkgJVNlc3Npb25EYXRhID0gJFNlbGYtPkdldFNlc3Npb25JRERhdGEoIFNlc3Npb25JRCA9PiAkUGFyYW17U2Vzc2lvbklEfSApOwoKICAgICAgICAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9ID0gXCVTZXNzaW9uRGF0YTsKICAgIH0KCiAgICAjIHVwZGF0ZSB0aGUgdmFsdWUsIHNldCBjYWNoZQogICAgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfS0+eyAkUGFyYW17S2V5fSB9ID0gJFBhcmFte1ZhbHVlfTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIEdldEFsbFNlc3Npb25JRHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHJlYWQgZGF0YQogICAgbXkgQExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgRmlsdGVyICAgID0+ICdEYXRhLScgLiAkU2VsZi0+e1N5c3RlbUlEfSAuICcqJywKICAgICk7CgogICAgbXkgQFNlc3Npb25JRHM7CiAgICBmb3IgbXkgJFNlc3Npb25JRCAoQExpc3QpIHsKICAgICAgICAkU2Vzc2lvbklEID1+IHMhXi4qLyEhOwogICAgICAgICRTZXNzaW9uSUQgPX4gc3sgRGF0YS0gfSB7fXhtczsKICAgICAgICBwdXNoIEBTZXNzaW9uSURzLCAkU2Vzc2lvbklEOwogICAgfQoKICAgIHJldHVybiBAU2Vzc2lvbklEczsKfQoKc3ViIEdldEFjdGl2ZVNlc3Npb25zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE1heFNlc3Npb25JZGxlVGltZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2Vzc2lvbk1heElkbGVUaW1lJyk7CgogICAgbXkgJFRpbWVOb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKS0+VG9FcG9jaCgpOwoKICAgIG15ICRNYWluT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKCiAgICBteSBATGlzdCA9ICRNYWluT2JqZWN0LT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgRmlsdGVyICAgID0+ICdTdGF0ZS0nIC4gJFNlbGYtPntTeXN0ZW1JRH0gLiAnKicsCiAgICApOwoKICAgIG15ICRBY3RpdmVTZXNzaW9uQ291bnQgPSAwOwogICAgbXkgJUFjdGl2ZVNlc3Npb25QZXJVc2VyQ291bnQ7CiAgICBTRVNTSU9OSUQ6CiAgICBmb3IgbXkgJFNlc3Npb25JRCAoQExpc3QpIHsKCiAgICAgICAgJFNlc3Npb25JRCA9fiBzIV4uKi8hITsKICAgICAgICAkU2Vzc2lvbklEID1+IHN7IFN0YXRlLSB9IHt9eG1zOwoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhJFNlc3Npb25JRDsKCiAgICAgICAgIyByZWFkIHN0YXRlIGRhdGEKICAgICAgICBteSAkU3RhdGVEYXRhID0gJE1haW5PYmplY3QtPkZpbGVSZWFkKAogICAgICAgICAgICBEaXJlY3RvcnkgICAgICAgPT4gJFNlbGYtPntTZXNzaW9uU3Bvb2x9LAogICAgICAgICAgICBGaWxlbmFtZSAgICAgICAgPT4gJ1N0YXRlLScgLiAkU2Vzc2lvbklELAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJ0xvY2FsJywKICAgICAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdiaW5tb2RlJywKICAgICAgICAgICAgRGlzYWJsZVdhcm5pbmdzID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgISRTdGF0ZURhdGE7CiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgcmVmICRTdGF0ZURhdGEgbmUgJ1NDQUxBUic7CgogICAgICAgIG15IEBTZXNzaW9uRGF0YSA9IHNwbGl0IC8jIyMjLywgJHskU3RhdGVEYXRhfTsKCiAgICAgICAgIyBnZXQgbmVlZGVkIGRhdGEKICAgICAgICBteSAkVXNlclR5cGUgICAgICAgID0gJFNlc3Npb25EYXRhWzBdIHx8ICcnOwogICAgICAgIG15ICRVc2VyTG9naW4gICAgICAgPSAkU2Vzc2lvbkRhdGFbMV0gfHwgJyc7CiAgICAgICAgbXkgJFVzZXJMYXN0UmVxdWVzdCA9ICRTZXNzaW9uRGF0YVszXSB8fCAkVGltZU5vdzsKICAgICAgICBteSAkU2Vzc2lvblNvdXJjZSAgID0gJFNlc3Npb25EYXRhWzRdIHx8ICcnOwoKICAgICAgICAjIERvbid0IGNvdW50IHNlc3Npb25zIGZyb20gc291cmNlICdHZW5lcmljSW50ZXJmYWNlJy4KICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAkU2Vzc2lvblNvdXJjZSBlcSAnR2VuZXJpY0ludGVyZmFjZSc7CgogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICRVc2VyVHlwZSBuZSAkUGFyYW17VXNlclR5cGV9OwoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAoICRVc2VyTGFzdFJlcXVlc3QgKyAkTWF4U2Vzc2lvbklkbGVUaW1lICkgPCAkVGltZU5vdzsKCiAgICAgICAgJEFjdGl2ZVNlc3Npb25Db3VudCsrOwoKICAgICAgICAkQWN0aXZlU2Vzc2lvblBlclVzZXJDb3VudHskVXNlckxvZ2lufSB8fCAwOwogICAgICAgICRBY3RpdmVTZXNzaW9uUGVyVXNlckNvdW50eyRVc2VyTG9naW59Kys7CiAgICB9CgogICAgbXkgJVJlc3VsdCA9ICgKICAgICAgICBUb3RhbCAgID0+ICRBY3RpdmVTZXNzaW9uQ291bnQsCiAgICAgICAgUGVyVXNlciA9PiBcJUFjdGl2ZVNlc3Npb25QZXJVc2VyQ291bnQsCiAgICApOwoKICAgIHJldHVybiAlUmVzdWx0Owp9CgpzdWIgR2V0RXhwaXJlZFNlc3Npb25JRHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBjb25maWcKICAgIG15ICRNYXhTZXNzaW9uVGltZSAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25NYXhUaW1lJyk7CiAgICBteSAkTWF4U2Vzc2lvbklkbGVUaW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uTWF4SWRsZVRpbWUnKTsKCiAgICAjIGdldCBjdXJyZW50IHRpbWUKICAgIG15ICRUaW1lTm93ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvRXBvY2goKTsKCiAgICAjIGdldCBtYWluIG9iamVjdAogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgICMgcmVhZCBkYXRhCiAgICBteSBATGlzdCA9ICRNYWluT2JqZWN0LT5EaXJlY3RvcnlSZWFkKAogICAgICAgIERpcmVjdG9yeSA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgRmlsdGVyICAgID0+ICdTdGF0ZS0nIC4gJFNlbGYtPntTeXN0ZW1JRH0gLiAnKicsCiAgICApOwoKICAgIG15IEBFeHBpcmVkU2Vzc2lvbjsKICAgIG15IEBFeHBpcmVkSWRsZTsKICAgIFNFU1NJT05JRDoKICAgIGZvciBteSAkU2Vzc2lvbklEIChATGlzdCkgewoKICAgICAgICAkU2Vzc2lvbklEID1+IHMhXi4qLyEhOwogICAgICAgICRTZXNzaW9uSUQgPX4gc3sgU3RhdGUtIH0ge314bXM7CgogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICEkU2Vzc2lvbklEOwoKICAgICAgICAjIHJlYWQgc3RhdGUgZGF0YQogICAgICAgIG15ICRTdGF0ZURhdGEgPSAkTWFpbk9iamVjdC0+RmlsZVJlYWQoCiAgICAgICAgICAgIERpcmVjdG9yeSAgICAgICA9PiAkU2VsZi0+e1Nlc3Npb25TcG9vbH0sCiAgICAgICAgICAgIEZpbGVuYW1lICAgICAgICA9PiAnU3RhdGUtJyAuICRTZXNzaW9uSUQsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgICA9PiAnTG9jYWwnLAogICAgICAgICAgICBNb2RlICAgICAgICAgICAgPT4gJ2Jpbm1vZGUnLAogICAgICAgICAgICBEaXNhYmxlV2FybmluZ3MgPT4gMSwKICAgICAgICApOwoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhJFN0YXRlRGF0YTsKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiByZWYgJFN0YXRlRGF0YSBuZSAnU0NBTEFSJzsKCiAgICAgICAgbXkgQFNlc3Npb25EYXRhID0gc3BsaXQgLyMjIyMvLCAkeyRTdGF0ZURhdGF9OwoKICAgICAgICAjIGdldCBuZWVkZWQgZGF0YQogICAgICAgIG15ICRVc2VyU2Vzc2lvblN0YXJ0ID0gJFNlc3Npb25EYXRhWzJdIHx8ICRUaW1lTm93OwogICAgICAgIG15ICRVc2VyTGFzdFJlcXVlc3QgID0gJFNlc3Npb25EYXRhWzNdIHx8ICRUaW1lTm93OwoKICAgICAgICAjIHRpbWUgY2FsY3VsYXRpb24KICAgICAgICBteSAkVmFsaWRUaW1lICAgICA9ICRVc2VyU2Vzc2lvblN0YXJ0ICsgJE1heFNlc3Npb25UaW1lIC0gJFRpbWVOb3c7CiAgICAgICAgbXkgJFZhbGlkSWRsZVRpbWUgPSAkVXNlckxhc3RSZXF1ZXN0ICsgJE1heFNlc3Npb25JZGxlVGltZSAtICRUaW1lTm93OwoKICAgICAgICAjIGRlbGV0ZSBpbnZhbGlkIHNlc3Npb24gdGltZQogICAgICAgIGlmICggJFZhbGlkVGltZSA8PSAwICkgewogICAgICAgICAgICBwdXNoIEBFeHBpcmVkU2Vzc2lvbiwgJFNlc3Npb25JRDsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIGludmFsaWQgaWRsZSBzZXNzaW9uIHRpbWUKICAgICAgICBlbHNpZiAoICRWYWxpZElkbGVUaW1lIDw9IDAgKSB7CiAgICAgICAgICAgIHB1c2ggQEV4cGlyZWRJZGxlLCAkU2Vzc2lvbklEOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gKCBcQEV4cGlyZWRTZXNzaW9uLCBcQEV4cGlyZWRJZGxlICk7Cn0KCnN1YiBDbGVhblVwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWxldGUgZnMgZmlsZXMKICAgIG15IEBTZXNzaW9uSURzID0gJFNlbGYtPkdldEFsbFNlc3Npb25JRHMoKTsKCiAgICByZXR1cm4gMSBpZiAhQFNlc3Npb25JRHM7CgogICAgU0VTU0lPTklEOgogICAgZm9yIG15ICRTZXNzaW9uSUQgKEBTZXNzaW9uSURzKSB7CgogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICEkU2Vzc2lvbklEOwoKICAgICAgICAkU2VsZi0+UmVtb3ZlU2Vzc2lvbklEKCBTZXNzaW9uSUQgPT4gJFNlc3Npb25JRCApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgREVTVFJPWSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAxIGlmICEkU2VsZi0+e0NhY2hlfTsKCiAgICAjIGdldCBtYWluIG9iamVjdAogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIFNFU1NJT05JRDoKICAgIGZvciBteSAkU2Vzc2lvbklEICggc29ydCBrZXlzICV7ICRTZWxmLT57Q2FjaGV9IH0gKSB7CgogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICEkU2Vzc2lvbklEOwoKICAgICAgICBteSAlU2Vzc2lvbkRhdGE7CiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0gfSApIHsKCiAgICAgICAgICAgIG5leHQgS0VZIGlmICEkS2V5OwoKICAgICAgICAgICAgJFNlc3Npb25EYXRheyRLZXl9ID0gJFNlbGYtPntDYWNoZX0tPnskU2Vzc2lvbklEfS0+eyRLZXl9OwogICAgICAgIH0KCiAgICAgICAgIyBkdW1wIHRoZSBkYXRhCiAgICAgICAgbXkgJERhdGFDb250ZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJyktPlNlcmlhbGl6ZSgKICAgICAgICAgICAgRGF0YSA9PiBcJVNlc3Npb25EYXRhLAogICAgICAgICk7CgogICAgICAgICMgd3JpdGUgZGF0YSBmaWxlCiAgICAgICAgJE1haW5PYmplY3QtPkZpbGVXcml0ZSgKICAgICAgICAgICAgRGlyZWN0b3J5ICAgICAgID0+ICRTZWxmLT57U2Vzc2lvblNwb29sfSwKICAgICAgICAgICAgRmlsZW5hbWUgICAgICAgID0+ICdEYXRhLScgLiAkU2Vzc2lvbklELAogICAgICAgICAgICBDb250ZW50ICAgICAgICAgPT4gXCREYXRhQ29udGVudCwKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICdMb2NhbCcsCiAgICAgICAgICAgIE1vZGUgICAgICAgICAgICA9PiAnYmlubW9kZScsCiAgICAgICAgICAgIFBlcm1pc3Npb24gICAgICA9PiAnNjYwJywKICAgICAgICAgICAgRGlzYWJsZVdhcm5pbmdzID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgbmVlZGVkIHN0YXRlIGNvbnRlbnQKICAgICAgICBteSAkVXNlclR5cGUgICAgICAgICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntVc2VyVHlwZX0gICAgICAgICB8fCAnJzsKICAgICAgICBteSAkVXNlckxvZ2luICAgICAgICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntVc2VyTG9naW59ICAgICAgICB8fCAnJzsKICAgICAgICBteSAkVXNlclNlc3Npb25TdGFydCA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntVc2VyU2Vzc2lvblN0YXJ0fSB8fCAnJzsKICAgICAgICBteSAkVXNlckxhc3RSZXF1ZXN0ICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntVc2VyTGFzdFJlcXVlc3R9ICB8fCAnJzsKICAgICAgICBteSAkU2Vzc2lvblNvdXJjZSAgICA9ICRTZWxmLT57Q2FjaGV9LT57JFNlc3Npb25JRH0tPntTZXNzaW9uU291cmNlfSAgICB8fCAnJzsKCiAgICAgICAgbXkgJFN0YXRlQ29udGVudCA9ICRVc2VyVHlwZSAuICcjIyMjJwogICAgICAgICAgICAuICRVc2VyTG9naW4gLiAnIyMjIycKICAgICAgICAgICAgLiAkVXNlclNlc3Npb25TdGFydCAuICcjIyMjJwogICAgICAgICAgICAuICRVc2VyTGFzdFJlcXVlc3Q7CgogICAgICAgIGlmICgkU2Vzc2lvblNvdXJjZSkgewogICAgICAgICAgICAkU3RhdGVDb250ZW50IC49ICcjIyMjJyAuICRTZXNzaW9uU291cmNlOwogICAgICAgIH0KCiAgICAgICAgIyB3cml0ZSBzdGF0ZSBmaWxlCiAgICAgICAgJE1haW5PYmplY3QtPkZpbGVXcml0ZSgKICAgICAgICAgICAgRGlyZWN0b3J5ICAgICAgID0+ICRTZWxmLT57U2Vzc2lvblNwb29sfSwKICAgICAgICAgICAgRmlsZW5hbWUgICAgICAgID0+ICdTdGF0ZS0nIC4gJFNlc3Npb25JRCwKICAgICAgICAgICAgQ29udGVudCAgICAgICAgID0+IFwkU3RhdGVDb250ZW50LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgPT4gJ0xvY2FsJywKICAgICAgICAgICAgTW9kZSAgICAgICAgICAgID0+ICdiaW5tb2RlJywKICAgICAgICAgICAgUGVybWlzc2lvbiAgICAgID0+ICc2NjAnLAogICAgICAgICAgICBEaXNhYmxlV2FybmluZ3MgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgcmVtb3ZlIGNhY2hlZCBkYXRhCiAgICBkZWxldGUgJFNlbGYtPntDYWNoZX07CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Custom/Kernel/System/AuthSession/DB.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgJG9yaWdpbjogb3RvYm8gLSA2ZWZkYzdiZjJhMzMyNTI3N2NkNzlhNjBmMGYyNDA3ZjhhZDU5ZTg3IC0gS2VybmVsL1N5c3RlbS9BdXRoU2Vzc2lvbi9EQi5wbQojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbjo6REI7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpQYXJhbU9iamVjdCkKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwp1c2UgTUlNRTo6QmFzZTY0IHF3KGRlY29kZV9iYXNlNjQgZW5jb2RlX2Jhc2U2NCk7CgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpFbmNvZGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3RvcmFibGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e1Nlc3Npb25UYWJsZX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1Nlc3Npb25UYWJsZScpIHx8ICdzZXNzaW9ucyc7CgogICAgIyBnZXQgZGF0YWJhc2UgdHlwZQogICAgJFNlbGYtPntEQlR5cGV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPnsnREI6OlR5cGUnfSB8fCAnJzsKICAgICRTZWxmLT57REJUeXBlfSA9IGxjICRTZWxmLT57REJUeXBlfTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBDaGVja1Nlc3Npb25JRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgc2Vzc2lvbiBpZAogICAgaWYgKCAhJFBhcmFte1Nlc3Npb25JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdHb3Qgbm8gU2Vzc2lvbklEISEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFJlbW90ZUFkZHIgID0gJFBhcmFtT2JqZWN0LT5SZW1vdGVBZGRyKCkgfHwgJ25vbmUnOwoKICAgICMgc2V0IGRlZmF1bHQgbWVzc2FnZQogICAgJFNlbGYtPntTZXNzaW9uSURFcnJvck1lc3NhZ2V9ID0gVHJhbnNsYXRhYmxlKCdTZXNzaW9uIGludmFsaWQuIFBsZWFzZSBsb2cgaW4gYWdhaW4uJyk7CgogICAgIyBnZXQgc2Vzc2lvbiBkYXRhCiAgICBteSAlRGF0YSA9ICRTZWxmLT5HZXRTZXNzaW9uSUREYXRhKCBTZXNzaW9uSUQgPT4gJFBhcmFte1Nlc3Npb25JRH0gKTsKCiAgICBpZiAoICEkRGF0YXtVc2VySUR9IHx8ICEkRGF0YXtVc2VyTG9naW59ICkgewogICAgICAgICRTZWxmLT57U2Vzc2lvbklERXJyb3JNZXNzYWdlfSA9IFRyYW5zbGF0YWJsZSgnU2Vzc2lvbiBpbnZhbGlkLiBQbGVhc2UgbG9nIGluIGFnYWluLicpOwogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlNlc3Npb25JRDogJyRQYXJhbXtTZXNzaW9uSUR9JyBpcyBpbnZhbGlkISEhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIHJlbW90ZSBpcCBjaGVjawogICAgaWYgKAogICAgICAgICREYXRhe1VzZXJSZW1vdGVBZGRyfSBuZSAkUmVtb3RlQWRkcgogICAgICAgICYmICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbkNoZWNrUmVtb3RlSVAnKQogICAgICAgICkKICAgIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJSZW1vdGVJUCBvZiAnJFBhcmFte1Nlc3Npb25JRH0nICgkRGF0YXtVc2VyUmVtb3RlQWRkcn0pIGlzICIKICAgICAgICAgICAgICAgIC4gImRpZmZlcmVudCBmcm9tIHJlZ2lzdGVyZWQgSVAgKCRSZW1vdGVBZGRyKS4gSW52YWxpZGF0aW5nIHNlc3Npb24hICIKICAgICAgICAgICAgICAgIC4gIkRpc2FibGUgY29uZmlnICdTZXNzaW9uQ2hlY2tSZW1vdGVJUCcgaWYgeW91IGRvbid0IHdhbnQgdGhpcyEiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHNlc3Npb24gaWQgaWYgaXQgaXNuJ3QgdGhlIHNhbWUgcmVtb3RlIGlwPwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uRGVsZXRlSWZOb3RSZW1vdGVJRCcpICkgewogICAgICAgICAgICAkU2VsZi0+UmVtb3ZlU2Vzc2lvbklEKCBTZXNzaW9uSUQgPT4gJFBhcmFte1Nlc3Npb25JRH0gKTsKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHNlc3Npb24gaWRsZSB0aW1lCiAgICBteSAkVGltZU5vdyAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvRXBvY2goKTsKICAgIG15ICRNYXhTZXNzaW9uSWRsZVRpbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25NYXhJZGxlVGltZScpOwoKICAgIGlmICggKCAkVGltZU5vdyAtICRNYXhTZXNzaW9uSWRsZVRpbWUgKSA+PSAkRGF0YXtVc2VyTGFzdFJlcXVlc3R9ICkgewoKICAgICAgICAkU2VsZi0+e1Nlc3Npb25JREVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1Nlc3Npb24gaGFzIHRpbWVkIG91dC4gUGxlYXNlIGxvZyBpbiBhZ2Fpbi4nKTsKCiAgICAgICAgbXkgJFRpbWVvdXQgPSBpbnQoICggJFRpbWVOb3cgLSAkRGF0YXtVc2VyTGFzdFJlcXVlc3R9ICkgLyAoIDYwICogNjAgKSApOwoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAiU2Vzc2lvbklEICgkUGFyYW17U2Vzc2lvbklEfSkgaWRsZSB0aW1lb3V0ICgkVGltZW91dCBoKSEgRG9uJ3QgZ3JhbnQgYWNjZXNzISEhIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBzZXNzaW9uIGlkIGlmIHRvbyBvbGQ/CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25EZWxldGVJZlRpbWVUb09sZCcpICkgewogICAgICAgICAgICAkU2VsZi0+UmVtb3ZlU2Vzc2lvbklEKCBTZXNzaW9uSUQgPT4gJFBhcmFte1Nlc3Npb25JRH0gKTsKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHNlc3Npb24gdGltZQogICAgbXkgJE1heFNlc3Npb25UaW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uTWF4VGltZScpOwoKICAgIGlmICggKCAkVGltZU5vdyAtICRNYXhTZXNzaW9uVGltZSApID49ICREYXRhe1VzZXJTZXNzaW9uU3RhcnR9ICkgewoKICAgICAgICAkU2VsZi0+e1Nlc3Npb25JREVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1Nlc3Npb24gaGFzIHRpbWVkIG91dC4gUGxlYXNlIGxvZyBpbiBhZ2Fpbi4nKTsKCiAgICAgICAgbXkgJFRpbWVvdXQgPSBpbnQoICggJFRpbWVOb3cgLSAkRGF0YXtVc2VyU2Vzc2lvblN0YXJ0fSApIC8gKCA2MCAqIDYwICkgKTsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiU2Vzc2lvbklEICgkUGFyYW17U2Vzc2lvbklEfSkgdG9vIG9sZCAoJFRpbWVvdXQgaCkhIERvbid0IGdyYW50IGFjY2VzcyEhISIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgc2Vzc2lvbiBpZCBpZiB0b28gb2xkCiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1Nlc3Npb25EZWxldGVJZlRpbWVUb09sZCcpICkgewogICAgICAgICAgICAkU2VsZi0+UmVtb3ZlU2Vzc2lvbklEKCBTZXNzaW9uSUQgPT4gJFBhcmFte1Nlc3Npb25JRH0gKTsKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIFNlc3Npb25JREVycm9yTWVzc2FnZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAkU2VsZi0+e1Nlc3Npb25JREVycm9yTWVzc2FnZX0gfHwgJyc7Cn0KCnN1YiBHZXRTZXNzaW9uSUREYXRhIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBzZXNzaW9uIGlkCiAgICBpZiAoICEkUGFyYW17U2Vzc2lvbklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0dvdCBubyBTZXNzaW9uSUQhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAleyAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9IH0gaWYgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfTsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgcmVhZCBkYXRhCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICIKICAgICAgICAgICAgU0VMRUNUIGlkLCBkYXRhX2tleSwgZGF0YV92YWx1ZSwgc2VyaWFsaXplZAogICAgICAgICAgICBGUk9NICRTZWxmLT57U2Vzc2lvblRhYmxlfQogICAgICAgICAgICBXSEVSRSBzZXNzaW9uX2lkID0gPwogICAgICAgICAgICBPUkRFUiBCWSBpZCBBU0MiLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1Nlc3Npb25JRH0gXSwKICAgICk7CgogICAgIyBnZXQgZW5jb2RlIG9iamVjdAogICAgbXkgJEVuY29kZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbmNvZGUnKTsKCiAgICAjIGdldCBzdG9yYWJsZSBvYmplY3QKICAgIG15ICRTdG9yYWJsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdG9yYWJsZScpOwoKICAgIG15ICVTZXNzaW9uOwogICAgbXkgJVNlc3Npb25JRDsKICAgIFJPVzoKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICAjIGRlc2VyaWFsaXplIGRhdGEgaWYgbmVlZGVkCiAgICAgICAgaWYgKCAkUm93WzNdICkgewogICAgICAgICAgICBteSAkVmFsdWUgPSBldmFsIHsKICAgICAgICAgICAgICAgICRTdG9yYWJsZU9iamVjdC0+RGVzZXJpYWxpemUoIERhdGEgPT4gZGVjb2RlX2Jhc2U2NCggJFJvd1syXSApICk7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICAjIHdvcmthcm91bmQgZm9yIHRoZSBvcmFjbGUgcHJvYmxlbSB3aXRoIGVtcHR5CiAgICAgICAgICAgICMgc3RyaW5ncyBhbmQgTlVMTCB2YWx1ZXMgaW4gVkFSQ0hBUiBjb2x1bW5zCiAgICAgICAgICAgIGlmICggJFZhbHVlICYmIHJlZiAkVmFsdWUgZXEgJ1NDQUxBUicgKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgPSAkeyRWYWx1ZX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRFbmNvZGVPYmplY3QtPkVuY29kZU91dHB1dCggXCRWYWx1ZSApOwoKICAgICAgICAgICAgJFNlc3Npb257ICRSb3dbMV0gfSA9ICRWYWx1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZXNzaW9ueyAkUm93WzFdIH0gPSAkUm93WzJdOwogICAgICAgIH0KCiAgICAgICAgJFNlc3Npb25JRHsgJFJvd1sxXSB9ID0gJFJvd1swXTsKICAgIH0KCiAgICBpZiAoICElU2Vzc2lvbiApIHsKICAgICAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfTsKICAgICAgICBkZWxldGUgJFNlbGYtPntDYWNoZUlEfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9OwogICAgICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlVXBkYXRlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNhY2hlIHJlc3VsdAogICAgJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfSAgID0gXCVTZXNzaW9uOwogICAgJFNlbGYtPntDYWNoZUlEfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9ID0gXCVTZXNzaW9uSUQ7CgogICAgcmV0dXJuICVTZXNzaW9uOwp9CgpzdWIgQ3JlYXRlU2Vzc2lvbklEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFRpbWVOb3cgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKCdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnKS0+VG9FcG9jaCgpOwoKICAgICMgZ2V0IHJlbW90ZSBhZGRyZXNzIGFuZCB0aGUgaHR0cCB1c2VyIGFnZW50CiAgICBteSAkUGFyYW1PYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJFJlbW90ZUFkZHIgICAgICA9ICRQYXJhbXtSZW1vdGVBZGRyfSB8fCAkUGFyYW1PYmplY3QtPlJlbW90ZUFkZHIoKSB8fCAnbm9uZSc7CiAgICBteSAkUmVtb3RlVXNlckFnZW50ID0gJFBhcmFtT2JqZWN0LT5IZWFkZXIoJ1VzZXItQWdlbnQnKSB8fCAnbm9uZSc7CgogICAgIyBnZXQgbWFpbiBvYmplY3QKICAgIG15ICRNYWluT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKCiAgICAjIGNyZWF0ZSBzZXNzaW9uIGlkCiAgICBteSAkU2Vzc2lvbklEID0gJE1haW5PYmplY3QtPkdlbmVyYXRlUmFuZG9tU3RyaW5nKAogICAgICAgIExlbmd0aCA9PiAzMiwKICAgICk7CgogICAgIyBjcmVhdGUgY2hhbGxlbmdlIHRva2VuCiAgICBteSAkQ2hhbGxlbmdlVG9rZW4gPSAkTWFpbk9iamVjdC0+R2VuZXJhdGVSYW5kb21TdHJpbmcoCiAgICAgICAgTGVuZ3RoID0+IDMyLAogICAgKTsKCiAgICBteSAlRGF0YTsKICAgIEtFWToKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVQYXJhbSApIHsKCiAgICAgICAgbmV4dCBLRVkgaWYgISRLZXk7CgogICAgICAgICREYXRheyRLZXl9ID0gJFBhcmFteyRLZXl9OwogICAgfQoKICAgICREYXRhe1VzZXJTZXNzaW9uU3RhcnR9ICAgID0gJFRpbWVOb3c7CiAgICAkRGF0YXtVc2VyUmVtb3RlQWRkcn0gICAgICA9ICRSZW1vdGVBZGRyOwogICAgJERhdGF7VXNlclJlbW90ZVVzZXJBZ2VudH0gPSAkUmVtb3RlVXNlckFnZW50OwogICAgJERhdGF7VXNlckNoYWxsZW5nZVRva2VufSAgPSAkQ2hhbGxlbmdlVG9rZW47CgogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBjcmVhdGUgc3FsIGRhdGEKICAgIG15IEBTUUxzOwogICAgJFNlbGYtPl9TUUxDcmVhdGUoCiAgICAgICAgRGF0YSAgICAgID0+IFwlRGF0YSwKICAgICAgICBTUUxzICAgICAgPT4gXEBTUUxzLAogICAgICAgIFNlc3Npb25JRCA9PiAkU2Vzc2lvbklELAogICAgKTsKCiAgICByZXR1cm4gaWYgIUBTUUxzOwoKICAgICMgZGVsZXRlIG9sZCBzZXNzaW9uIGRhdGEgd2l0aCB0aGUgc2FtZSBzZXNzaW9uIGlkCiAgICAkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAiCiAgICAgICAgICAgIERFTEVURSBGUk9NICRTZWxmLT57U2Vzc2lvblRhYmxlfQogICAgICAgICAgICBXSEVSRSBzZXNzaW9uX2lkID0gPyIsCiAgICAgICAgQmluZCA9PiBbIFwkU2Vzc2lvbklELCBdLAogICAgKTsKCiAgICAjIHN0b3JlIHNlc3Npb24gaWQgYW5kIGRhdGEKICAgIFJPVzoKICAgIGZvciBteSAkUm93IChAU1FMcykgewoKICAgICAgICBuZXh0IFJPVyBpZiAhJFJvdzsKICAgICAgICBuZXh0IFJPVyBpZiByZWYgJFJvdyBuZSAnSEFTSCc7CiAgICAgICAgbmV4dCBST1cgaWYgISRSb3ctPntTUUx9OwogICAgICAgIG5leHQgUk9XIGlmICEkUm93LT57QmluZH07CiAgICAgICAgbmV4dCBST1cgaWYgcmVmICRSb3ctPntCaW5kfSBuZSAnQVJSQVknOwoKICAgICAgICAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICRSb3ctPntTUUx9LAogICAgICAgICAgICBCaW5kID0+ICRSb3ctPntCaW5kfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkU2VsZi0+e0NhY2hlfS0+eyRTZXNzaW9uSUR9ID0gXCVEYXRhOwoKICAgIHJldHVybiAkU2Vzc2lvbklEOwp9CgpzdWIgUmVtb3ZlU2Vzc2lvbklEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBzZXNzaW9uIGlkCiAgICBpZiAoICEkUGFyYW17U2Vzc2lvbklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0dvdCBubyBTZXNzaW9uSUQhIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlbGV0ZSBzZXNzaW9uIGZyb20gdGhlIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSAkU2VsZi0+e1Nlc3Npb25UYWJsZX0gV0hFUkUgc2Vzc2lvbl9pZCA9ID8iLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1Nlc3Npb25JRH0gXSwKICAgICk7CgogICAgIyByZXNldCBjYWNoZQogICAgZGVsZXRlICRTZWxmLT57Q2FjaGV9LT57ICRQYXJhbXtTZXNzaW9uSUR9IH07CiAgICBkZWxldGUgJFNlbGYtPntDYWNoZUlEfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9OwogICAgZGVsZXRlICRTZWxmLT57Q2FjaGVVcGRhdGV9LT57ICRQYXJhbXtTZXNzaW9uSUR9IH07CgogICAgIyBsb2cgZXZlbnQKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgIE1lc3NhZ2UgID0+ICJSZW1vdmVkIFNlc3Npb25JRCAkUGFyYW17U2Vzc2lvbklEfS4iCiAgICApOwoKICAgIHJldHVybiAxOwp9CgpzdWIgVXBkYXRlU2Vzc2lvbklEIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciAocXcoU2Vzc2lvbklEIEtleSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JF99ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkXyEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgaWYgKCAhJFNlbGYtPntDYWNoZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfSApIHsKICAgICAgICBteSAlU2Vzc2lvbkRhdGEgPSAkU2VsZi0+R2V0U2Vzc2lvbklERGF0YSggU2Vzc2lvbklEID0+ICRQYXJhbXtTZXNzaW9uSUR9ICk7CgogICAgICAgICRTZWxmLT57Q2FjaGV9LT57ICRQYXJhbXtTZXNzaW9uSUR9IH0gPSBcJVNlc3Npb25EYXRhOwogICAgfQoKICAgICMgdXBkYXRlIHRoZSB2YWx1ZSwgc2V0IGNhY2hlCiAgICAkU2VsZi0+e0NhY2hlfS0+eyAkUGFyYW17U2Vzc2lvbklEfSB9LT57ICRQYXJhbXtLZXl9IH0gICAgICAgPSAkUGFyYW17VmFsdWV9OwogICAgJFNlbGYtPntDYWNoZVVwZGF0ZX0tPnsgJFBhcmFte1Nlc3Npb25JRH0gfS0+eyAkUGFyYW17S2V5fSB9ID0gJFBhcmFte1ZhbHVlfTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIEdldEFsbFNlc3Npb25JRHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZ2V0IGFsbCBzZXNzaW9uIGlkcyBmcm9tIHRoZSBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgRElTVElOQ1Qoc2Vzc2lvbl9pZCkgRlJPTSAkU2VsZi0+e1Nlc3Npb25UYWJsZX0iLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBTZXNzaW9uSURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAU2Vzc2lvbklEcywgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gQFNlc3Npb25JRHM7Cn0KCnN1YiBHZXRBY3RpdmVTZXNzaW9ucyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRNYXhTZXNzaW9uSWRsZVRpbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1Nlc3Npb25NYXhJZGxlVGltZScpOwoKICAgICMgZ2V0IHN5c3RlbSB0aW1lCiAgICBteSAkVGltZU5vdyA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCk7CgogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiCiAgICAgICAgICAgIFNFTEVDVCBzZXNzaW9uX2lkLCBkYXRhX2tleSwgZGF0YV92YWx1ZQogICAgICAgICAgICBGUk9NICRTZWxmLT57U2Vzc2lvblRhYmxlfQogICAgICAgICAgICBXSEVSRSBkYXRhX2tleSA9ICdVc2VyVHlwZScKICAgICAgICAgICAgICAgIE9SIGRhdGFfa2V5ID0gJ1VzZXJMYXN0UmVxdWVzdCcKICAgICAgICAgICAgICAgIE9SIGRhdGFfa2V5ID0gJ1VzZXJMb2dpbicKICAgICAgICAgICAgICAgIE9SIGRhdGFfa2V5ID0gJ1Nlc3Npb25Tb3VyY2UnCiAgICAgICAgICAgIE9SREVSIEJZIGlkIEFTQyIsCiAgICApOwoKICAgIG15ICVTZXNzaW9uRGF0YTsKICAgIFJPVzoKICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICBuZXh0IFJPVyBpZiAhJFJvd1swXTsKICAgICAgICBuZXh0IFJPVyBpZiAhJFJvd1sxXTsKCiAgICAgICAgJFNlc3Npb25EYXRheyAkUm93WzBdIH0tPnsgJFJvd1sxXSB9ID0gJFJvd1syXTsKICAgIH0KCiAgICBteSAkQWN0aXZlU2Vzc2lvbkNvdW50ID0gMDsKICAgIG15ICVBY3RpdmVTZXNzaW9uUGVyVXNlckNvdW50OwogICAgU0VTU0lPTklEOgogICAgZm9yIG15ICRTZXNzaW9uSUQgKCBzb3J0IGtleXMgJVNlc3Npb25EYXRhICkgewoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhJFNlc3Npb25JRDsKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhJFNlc3Npb25EYXRheyRTZXNzaW9uSUR9OwoKICAgICAgICAjIERvbid0IGNvdW50IHNlc3Npb24gZnJvbSBzb3VyY2UgJ0dlbmVyaWNJbnRlcmZhY2UnCiAgICAgICAgbXkgJFNlc3Npb25Tb3VyY2UgPSAkU2Vzc2lvbkRhdGF7JFNlc3Npb25JRH0tPntTZXNzaW9uU291cmNlfSB8fCAnJzsKCiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgJFNlc3Npb25Tb3VyY2UgZXEgJ0dlbmVyaWNJbnRlcmZhY2UnOwoKICAgICAgICAjIGdldCBuZWVkZWQgZGF0YQogICAgICAgIG15ICRVc2VyVHlwZSAgICAgICAgPSAkU2Vzc2lvbkRhdGF7JFNlc3Npb25JRH0tPntVc2VyVHlwZX0gICAgICAgIHx8ICcnOwogICAgICAgIG15ICRVc2VyTGFzdFJlcXVlc3QgPSAkU2Vzc2lvbkRhdGF7JFNlc3Npb25JRH0tPntVc2VyTGFzdFJlcXVlc3R9IHx8ICRUaW1lTm93OwogICAgICAgIG15ICRVc2VyTG9naW4gICAgICAgPSAkU2Vzc2lvbkRhdGF7JFNlc3Npb25JRH0tPntVc2VyTG9naW59OwoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAkVXNlclR5cGUgbmUgJFBhcmFte1VzZXJUeXBlfTsKCiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgKCAkVXNlckxhc3RSZXF1ZXN0ICsgJE1heFNlc3Npb25JZGxlVGltZSApIDwgJFRpbWVOb3c7CgogICAgICAgICRBY3RpdmVTZXNzaW9uQ291bnQrKzsKCiAgICAgICAgJEFjdGl2ZVNlc3Npb25QZXJVc2VyQ291bnR7JFVzZXJMb2dpbn0gfHwgMDsKICAgICAgICAkQWN0aXZlU2Vzc2lvblBlclVzZXJDb3VudHskVXNlckxvZ2lufSsrOwogICAgfQoKICAgIG15ICVSZXN1bHQgPSAoCiAgICAgICAgVG90YWwgICA9PiAkQWN0aXZlU2Vzc2lvbkNvdW50LAogICAgICAgIFBlclVzZXIgPT4gXCVBY3RpdmVTZXNzaW9uUGVyVXNlckNvdW50LAogICAgKTsKCiAgICByZXR1cm4gJVJlc3VsdDsKfQoKc3ViIEdldEV4cGlyZWRTZXNzaW9uSURzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgY29uZmlnCiAgICBteSAkTWF4U2Vzc2lvblRpbWUgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdTZXNzaW9uTWF4VGltZScpOwogICAgbXkgJE1heFNlc3Npb25JZGxlVGltZSA9ICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbk1heElkbGVUaW1lJyk7CgogICAgIyBnZXQgY3VycmVudCB0aW1lCiAgICBteSAkVGltZU5vdyA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCk7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCBhbGwgbmVlZGVkIHRpbWVzdGFtcHMgdG8gaW52ZXN0aWdhdGUgdGhlIGV4cGlyZWQgc2Vzc2lvbnMKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIgogICAgICAgICAgICBTRUxFQ1Qgc2Vzc2lvbl9pZCwgZGF0YV9rZXksIGRhdGFfdmFsdWUKICAgICAgICAgICAgRlJPTSAkU2VsZi0+e1Nlc3Npb25UYWJsZX0KICAgICAgICAgICAgV0hFUkUgZGF0YV9rZXkgPSAnVXNlclNlc3Npb25TdGFydCcKICAgICAgICAgICAgICAgIE9SIGRhdGFfa2V5ID0gJ1VzZXJMYXN0UmVxdWVzdCcKICAgICAgICAgICAgT1JERVIgQlkgaWQgQVNDIiwKICAgICk7CgogICAgbXkgJVNlc3Npb25EYXRhOwogICAgUk9XOgogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIG5leHQgUk9XIGlmICEkUm93WzBdOwogICAgICAgIG5leHQgUk9XIGlmICEkUm93WzFdOwoKICAgICAgICAkU2Vzc2lvbkRhdGF7ICRSb3dbMF0gfS0+eyAkUm93WzFdIH0gPSAkUm93WzJdOwogICAgfQoKICAgIG15IEBFeHBpcmVkU2Vzc2lvbjsKICAgIG15IEBFeHBpcmVkSWRsZTsKICAgIFNFU1NJT05JRDoKICAgIGZvciBteSAkU2Vzc2lvbklEICggc29ydCBrZXlzICVTZXNzaW9uRGF0YSApIHsKCiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgISRTZXNzaW9uSUQ7CiAgICAgICAgbmV4dCBTRVNTSU9OSUQgaWYgISRTZXNzaW9uRGF0YXskU2Vzc2lvbklEfTsKCiAgICAgICAgIyBnZXQgbmVlZGVkIHRpbWVzdGFtcHMKICAgICAgICBteSAkVXNlclNlc3Npb25TdGFydCA9ICRTZXNzaW9uRGF0YXskU2Vzc2lvbklEfS0+e1VzZXJTZXNzaW9uU3RhcnR9IHx8ICRUaW1lTm93OwogICAgICAgIG15ICRVc2VyTGFzdFJlcXVlc3QgID0gJFNlc3Npb25EYXRheyRTZXNzaW9uSUR9LT57VXNlckxhc3RSZXF1ZXN0fSAgfHwgJFRpbWVOb3c7CgogICAgICAgICMgdGltZSBjYWxjdWxhdGlvbgogICAgICAgIG15ICRWYWxpZFRpbWUgICAgID0gJFVzZXJTZXNzaW9uU3RhcnQgKyAkTWF4U2Vzc2lvblRpbWUgLSAkVGltZU5vdzsKICAgICAgICBteSAkVmFsaWRJZGxlVGltZSA9ICRVc2VyTGFzdFJlcXVlc3QgKyAkTWF4U2Vzc2lvbklkbGVUaW1lIC0gJFRpbWVOb3c7CgogICAgICAgICMgZGVsZXRlIGludmFsaWQgc2Vzc2lvbiB0aW1lCiAgICAgICAgaWYgKCAkVmFsaWRUaW1lIDw9IDAgKSB7CiAgICAgICAgICAgIHB1c2ggQEV4cGlyZWRTZXNzaW9uLCAkU2Vzc2lvbklEOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgaW52YWxpZCBpZGxlIHNlc3Npb24gdGltZQogICAgICAgIGVsc2lmICggJFZhbGlkSWRsZVRpbWUgPD0gMCApIHsKICAgICAgICAgICAgcHVzaCBARXhwaXJlZElkbGUsICRTZXNzaW9uSUQ7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAoIFxARXhwaXJlZFNlc3Npb24sIFxARXhwaXJlZElkbGUgKTsKfQoKc3ViIENsZWFuVXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgdXNlICd0cnVuY2F0ZSB0YWJsZScgaWYgcG9zc2libGUgaW4gb3JkZXIgdG8gcmVzZXQgdGhlIGF1dG8gaW5jcmVtZW50IHZhbHVlCiAgICBpZiAoCiAgICAgICAgJFNlbGYtPntEQlR5cGV9IGVxICdteXNxbCcKICAgICAgICB8fCAkU2VsZi0+e0RCVHlwZX0gZXEgJ3Bvc3RncmVzcWwnCiAgICAgICAgfHwgJFNlbGYtPntEQlR5cGV9IGVxICdvcmFjbGUnCiAgICAgICAgfHwgJFNlbGYtPntEQlR5cGV9IGVxICdtc3NxbCcKICAgICAgICApCiAgICB7CgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbyggU1FMID0+ICJUUlVOQ0FURSBUQUJMRSAkU2VsZi0+e1Nlc3Npb25UYWJsZX0iICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gaWYgISREQk9iamVjdC0+RG8oIFNRTCA9PiAiREVMRVRFIEZST00gJFNlbGYtPntTZXNzaW9uVGFibGV9IiApOwogICAgfQoKICAgICMgcmVtb3ZlIGNhY2hlZCBkYXRhCiAgICBkZWxldGUgJFNlbGYtPntDYWNoZX07CiAgICBkZWxldGUgJFNlbGYtPntDYWNoZUlEfTsKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlVXBkYXRlfTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIERFU1RST1kgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gMSBpZiAhJFNlbGYtPntDYWNoZVVwZGF0ZX07CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICBTRVNTSU9OSUQ6CiAgICBmb3IgbXkgJFNlc3Npb25JRCAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0NhY2hlVXBkYXRlfSB9ICkgewoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhJFNlc3Npb25JRDsKCiAgICAgICAgIyBleHRyYWN0IHNlc3Npb24gZGF0YSB0byB1cGRhdGUKICAgICAgICBteSAkRGF0YSA9ICRTZWxmLT57Q2FjaGVVcGRhdGV9LT57JFNlc3Npb25JRH07CgogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICEkRGF0YTsKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiByZWYgJERhdGEgbmUgJ0hBU0gnOwogICAgICAgIG5leHQgU0VTU0lPTklEIGlmICEleyREYXRhfTsKCiAgICAgICAgIyBjcmVhdGUgc3FsIGRhdGEKICAgICAgICBteSBAU1FMczsKICAgICAgICAkU2VsZi0+X1NRTENyZWF0ZSgKICAgICAgICAgICAgRGF0YSAgICAgID0+ICREYXRhLAogICAgICAgICAgICBTUUxzICAgICAgPT4gXEBTUUxzLAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlc3Npb25JRCwKICAgICAgICApOwoKICAgICAgICBuZXh0IFNFU1NJT05JRCBpZiAhQFNRTHM7CgogICAgICAgICMgc3RvcmUgc2Vzc2lvbiBpZCBhbmQgZGF0YQogICAgICAgIFJPVzoKICAgICAgICBmb3IgbXkgJFJvdyAoQFNRTHMpIHsKCiAgICAgICAgICAgIG5leHQgUk9XIGlmICEkUm93OwogICAgICAgICAgICBuZXh0IFJPVyBpZiByZWYgJFJvdyBuZSAnSEFTSCc7CiAgICAgICAgICAgIG5leHQgUk9XIGlmICEkUm93LT57U1FMfTsKICAgICAgICAgICAgbmV4dCBST1cgaWYgISRSb3ctPntCaW5kfTsKICAgICAgICAgICAgbmV4dCBST1cgaWYgcmVmICRSb3ctPntCaW5kfSBuZSAnQVJSQVknOwoKICAgICAgICAgICAgJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gJFJvdy0+e1NRTH0sCiAgICAgICAgICAgICAgICBCaW5kID0+ICRSb3ctPntCaW5kfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0NhY2hlVXBkYXRlfS0+eyRTZXNzaW9uSUR9IH0gKSB7CgogICAgICAgICAgICBuZXh0IEtFWSBpZiAhJEtleTsKCiAgICAgICAgICAgICMgZXh0cmFjdCBkYXRhYmFzZSBpZAogICAgICAgICAgICBteSAkSUQgPSAkU2VsZi0+e0NhY2hlSUR9LT57JFNlc3Npb25JRH0tPnskS2V5fSB8fCAxOwoKICAgICAgICAgICAgIyBkZWxldGUgb2xkIHNlc3Npb24gZGF0YSBmcm9tIHRoZSBkYXRhYmFzZQogICAgICAgICAgICAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICIKICAgICAgICAgICAgICAgICAgICBERUxFVEUgRlJPTSAkU2VsZi0+e1Nlc3Npb25UYWJsZX0KICAgICAgICAgICAgICAgICAgICBXSEVSRSBzZXNzaW9uX2lkID0gPwogICAgICAgICAgICAgICAgICAgICAgICBBTkQgZGF0YV9rZXkgPSA/CiAgICAgICAgICAgICAgICAgICAgICAgIEFORCBpZCA8PSA/IiwKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJFNlc3Npb25JRCwgXCRLZXksIFwkSUQgXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyByZW1vdmUgY2FjaGVkIGRhdGEKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfTsKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlSUR9OwogICAgZGVsZXRlICRTZWxmLT57Q2FjaGVVcGRhdGV9OwoKICAgIHJldHVybiAxOwp9CgpzdWIgX1NRTENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhJFBhcmFte0RhdGF9OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17RGF0YX0gbmUgJ0hBU0gnOwogICAgcmV0dXJuIGlmICEleyAkUGFyYW17RGF0YX0gfTsKICAgIHJldHVybiBpZiAhJFBhcmFte1Nlc3Npb25JRH07CiAgICByZXR1cm4gaWYgISRQYXJhbXtTUUxzfTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte1NRTHN9IG5lICdBUlJBWSc7CgogICAgbXkgJFN0b3JhYmxlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0b3JhYmxlJyk7CgogICAgaWYgKCAkU2VsZi0+e0RCVHlwZX0gZXEgJ215c3FsJyB8fCAkU2VsZi0+e0RCVHlwZX0gZXEgJ3Bvc3RncmVzcWwnICkgewoKICAgICAgICAjIGRlZmluZSByb3cKICAgICAgICBteSAkU1FMID0gIklOU0VSVCBJTlRPICRTZWxmLT57U2Vzc2lvblRhYmxlfSAiCiAgICAgICAgICAgIC4gIihzZXNzaW9uX2lkLCBkYXRhX2tleSwgZGF0YV92YWx1ZSwgc2VyaWFsaXplZCkgVkFMVUVTICI7CiAgICAgICAgbXkgQEJpbmQ7CgogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17RGF0YX0gfSApIHsKCiAgICAgICAgICAgIG5leHQgS0VZIGlmICEkS2V5OwoKICAgICAgICAgICAgbXkgJFZhbHVlICAgICAgPSAkUGFyYW17RGF0YX0tPnskS2V5fTsKICAgICAgICAgICAgbXkgJFNlcmlhbGl6ZWQgPSAwOwoKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgcmVmICRWYWx1ZSBlcSAnSEFTSCcKICAgICAgICAgICAgICAgIHx8IHJlZiAkVmFsdWUgZXEgJ0FSUkFZJwogICAgICAgICAgICAgICAgfHwgcmVmICRWYWx1ZSBlcSAnU0NBTEFSJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBkdW1wIHRoZSBkYXRhCiAgICAgICAgICAgICAgICAkVmFsdWUgPSBlbmNvZGVfYmFzZTY0KAogICAgICAgICAgICAgICAgICAgICRTdG9yYWJsZU9iamVjdC0+U2VyaWFsaXplKCBEYXRhID0+ICRWYWx1ZSApCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFNlcmlhbGl6ZWQgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFte1Nlc3Npb25JRH07CiAgICAgICAgICAgIHB1c2ggQEJpbmQsIFwkS2V5OwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFZhbHVlOwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFNlcmlhbGl6ZWQ7CgogICAgICAgICAgICAkU1FMIC49ICcoPyw/LD8sPyksJzsKICAgICAgICB9CgogICAgICAgICMgcmVtb3ZlIHRoZSBsYXN0IGNoYXJhY3RlcgogICAgICAgIGNob3AgJFNRTDsKCiAgICAgICAgbXkgJVJvdyA9ICgKICAgICAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICAgICApOwoKICAgICAgICBwdXNoIEB7ICRQYXJhbXtTUUxzfSB9LCBcJVJvdzsKCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57REJUeXBlfSBlcSAnb3JhY2xlJyApIHsKCiAgICAgICAgIyBkZWZpbmUgcm93CiAgICAgICAgbXkgJFNRTCA9ICcnOwogICAgICAgIG15IEBCaW5kOwogICAgICAgIG15ICRDb3VudGVyID0gMDsKCiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtEYXRhfSB9ICkgewoKICAgICAgICAgICAgbmV4dCBLRVkgaWYgISRLZXk7CgogICAgICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAgICAgbXkgJFZhbHVlICAgICAgPSAkUGFyYW17RGF0YX0tPnskS2V5fTsKICAgICAgICAgICAgbXkgJFNlcmlhbGl6ZWQgPSAwOwoKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgIWRlZmluZWQgJFZhbHVlCiAgICAgICAgICAgICAgICB8fCAkVmFsdWUgZXEgJycKICAgICAgICAgICAgICAgIHx8IHJlZiAkVmFsdWUgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICB8fCByZWYgJFZhbHVlIGVxICdBUlJBWScKICAgICAgICAgICAgICAgIHx8IHJlZiAkVmFsdWUgZXEgJ1NDQUxBUicKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgd29ya2Fyb3VuZCBmb3IgdGhlIG9yYWNsZSBwcm9ibGVtIHdpdGggZW1wdHkgc3RyaW5ncwogICAgICAgICAgICAgICAgIyBhbmQgTlVMTCB2YWx1ZXMgaW4gVkFSQ0hBUiBjb2x1bW5zCiAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkICRWYWx1ZSApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJEVtcHR5ID0gdW5kZWY7CiAgICAgICAgICAgICAgICAgICAgJFZhbHVlID0gXCRFbXB0eTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFZhbHVlIGVxICcnICkgewoKICAgICAgICAgICAgICAgICAgICBteSAkRW1wdHkgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkVmFsdWUgPSBcJEVtcHR5OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZHVtcCB0aGUgZGF0YQogICAgICAgICAgICAgICAgJFZhbHVlID0gZW5jb2RlX2Jhc2U2NCgKICAgICAgICAgICAgICAgICAgICAkU3RvcmFibGVPYmplY3QtPlNlcmlhbGl6ZSggRGF0YSA9PiAkVmFsdWUgKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTZXJpYWxpemVkID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFNRTCB8fD0gJ0lOU0VSVCBBTEwgJzsKICAgICAgICAgICAgJFNRTCAuPSAiSU5UTyAkU2VsZi0+e1Nlc3Npb25UYWJsZX0gIgogICAgICAgICAgICAgICAgLiAiKHNlc3Npb25faWQsIGRhdGFfa2V5LCBkYXRhX3ZhbHVlLCBzZXJpYWxpemVkKSBWQUxVRVMgKD8sPyw/LD8pICI7CgogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFte1Nlc3Npb25JRH07CiAgICAgICAgICAgIHB1c2ggQEJpbmQsIFwkS2V5OwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFZhbHVlOwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFNlcmlhbGl6ZWQ7CgogICAgICAgICAgICAjIHNwbGl0IFNRTHMgd2l0aCBtb3JlIHRoYW4gNGsgY2hhcmVjdGVycwogICAgICAgICAgICBuZXh0IEtFWSBpZiAkQ291bnRlciA8IDQwOwoKICAgICAgICAgICAgIyBjb3B5IGJpbmQgdG8gYmUgYWJsZSB0byBjbGVhbiB0aGUgYXJyYXkgcmVmZXJlbmNlCiAgICAgICAgICAgIG15IEBCaW5kQ29weSA9IEBCaW5kOwoKICAgICAgICAgICAgJFNRTCAuPSAnU0VMRUNUICogRlJPTSBkdWFsJzsKCiAgICAgICAgICAgIG15ICVSb3cgPSAoCiAgICAgICAgICAgICAgICBTUUwgID0+ICRTUUwsCiAgICAgICAgICAgICAgICBCaW5kID0+IFxAQmluZENvcHksCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtTUUxzfSB9LCBcJVJvdzsKCiAgICAgICAgICAgICMgY2xlYW4gdmFyaWFibGUKICAgICAgICAgICAgJFNRTCAgICAgPSAnJzsKICAgICAgICAgICAgQEJpbmQgICAgPSAoKTsKICAgICAgICAgICAgJENvdW50ZXIgPSAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkU1FMICYmIEBCaW5kICkgewoKICAgICAgICAgICAgJFNRTCAuPSAnU0VMRUNUICogRlJPTSBkdWFsJzsKCiAgICAgICAgICAgIG15ICVSb3cgPSAoCiAgICAgICAgICAgICAgICBTUUwgID0+ICRTUUwsCiAgICAgICAgICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFte1NRTHN9IH0sIFwlUm93OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtEYXRhfSB9ICkgewoKICAgICAgICAgICAgbmV4dCBLRVkgaWYgISRLZXk7CgogICAgICAgICAgICBteSAkVmFsdWUgICAgICA9ICRQYXJhbXtEYXRhfS0+eyRLZXl9OwogICAgICAgICAgICBteSAkU2VyaWFsaXplZCA9IDA7CgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICByZWYgJFZhbHVlIGVxICdIQVNIJwogICAgICAgICAgICAgICAgfHwgcmVmICRWYWx1ZSBlcSAnQVJSQVknCiAgICAgICAgICAgICAgICB8fCByZWYgJFZhbHVlIGVxICdTQ0FMQVInCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGR1bXAgdGhlIGRhdGEKICAgICAgICAgICAgICAgICRWYWx1ZSA9IGVuY29kZV9iYXNlNjQoCiAgICAgICAgICAgICAgICAgICAgJFN0b3JhYmxlT2JqZWN0LT5TZXJpYWxpemUoIERhdGEgPT4gJFZhbHVlICkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU2VyaWFsaXplZCA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15IEBCaW5kOwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFte1Nlc3Npb25JRH07CiAgICAgICAgICAgIHB1c2ggQEJpbmQsIFwkS2V5OwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFZhbHVlOwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFNlcmlhbGl6ZWQ7CgogICAgICAgICAgICBteSAkU1FMID0gIklOU0VSVCBJTlRPICRTZWxmLT57U2Vzc2lvblRhYmxlfSAiCiAgICAgICAgICAgICAgICAuICIoc2Vzc2lvbl9pZCwgZGF0YV9rZXksIGRhdGFfdmFsdWUsIHNlcmlhbGl6ZWQpIFZBTFVFUyAoPyw/LD8sPykiOwoKICAgICAgICAgICAgbXkgJVJvdyA9ICgKICAgICAgICAgICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICAgICAgICAgIEJpbmQgPT4gXEBCaW5kLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBAeyAkUGFyYW17U1FMc30gfSwgXCVSb3c7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gMTsKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/Config/Files/XML/OTOBOAIDashboard.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KICAgIDxTZXR0aW5nIE5hbWU9IkRhc2hib2FyZEJhY2tlbmQjIyMwMTYwLU9UT0JPQUlEYXNoYm9hcmQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSB0aWNrZXRzIG92ZXJ2aWV3IGJ5IHNlYXJjaCB0ZW1wbGF0ZSBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLiAiTWFuZGF0b3J5IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgYWx3YXlzIHNob3duIGFuZCBjYW4gbm90IGJlIHJlbW92ZWQgYnkgYWdlbnRzLiBOb3RlOiBPbmx5IFRpY2tldCBhdHRyaWJ1dGVzIGFuZCBEeW5hbWljIEZpZWxkcyAoRHluYW1pY0ZpZWxkX05hbWVYKSBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OkRhc2hib2FyZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6Ok90b2JvQUlEYXNoYm9hcmQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPk9UT0JPLUFJIEJvdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+QXV0b21hdGljIHJlc3BvbnNlcyBmcm9tIE9UT0JPIEJvdC48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkZpbHRlciIgVHJhbnNsYXRhYmxlPSIxIj5BbGw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpbWUiPkFnZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGltaXQiPjEwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQZXJtaXNzaW9uIj5ydzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPkNvbnRlbnRMYXJnZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVmYXVsdCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2FjaGVUVExMb2NhbCI+MC41PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWZhdWx0Q29sdW1ucyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiIFRyYW5zbGF0YWJsZT0iMSI+MCAtIERpc2FibGVkPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIxIiBUcmFuc2xhdGFibGU9IjEiPjEgLSBBdmFpbGFibGU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjIiIFRyYW5zbGF0YWJsZT0iMSI+MiAtIEVuYWJsZWQgYnkgZGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2UiIFNlbGVjdGVkSUQ9IjIiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VkIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlZCIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1c3RvbWVyQ29tcGFueU5hbWUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXN0b21lcklEIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VzdG9tZXJOYW1lIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VzdG9tZXJVc2VySUQiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFc2NhbGF0aW9uUmVzcG9uc2VUaW1lIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXNjYWxhdGlvblNvbHV0aW9uVGltZSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVzY2FsYXRpb25UaW1lIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXNjYWxhdGlvblVwZGF0ZVRpbWUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaWNrZXROdW1iZXIiIFNlbGVjdGVkSUQ9IjIiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMb2NrIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT3duZXIiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQZW5kaW5nVGltZSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlF1ZXVlIiBTZWxlY3RlZElEPSIxIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVzcG9uc2libGUiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNlcnZpY2UiIFNlbGVjdGVkSUQ9IjEiPjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNMQSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBTZWxlY3RlZElEPSIyIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSIgU2VsZWN0ZWRJRD0iMSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFuZGF0b3J5Ij4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudERhc2hib2FyZCMjIzAxNjAtT1RPQk9BSURhc2hib2FyZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLlVJLklucHV0RmllbGRzLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50Lk90b2JvQUlXaWRnZXQuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPk90b2JvQUlEYXNoYm9hcmQuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3RvYm9BSURhc2hib2FyZDo6RnJvbnRlbmQ6OlRleHRBcmVhUXVlc3Rpb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGVybWl0dGVkIHdpZHRoIGZvciBjb21wb3NlIHF1ZXN0aW9uIHdpbmRvd3MuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OkRhc2hib2FyZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSJeWzAtOV17MSwzfSQiPjEwMDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI090b2JvQUlEYXNoYm9hcmQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPk90b2JvIEFJIERhc2hib2FyZCBXaWRnZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik90b2JvQUlEYXNoYm9hcmQ6OkZyb250ZW5kOjpDYWNoZVRUTCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OdW1iZXIgb2YgaG91cnMgb2YgVFRMIGZvciB0aGUgT3RvYm8tQUkgY2FjaGUgZWxlbWVudHMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OkRhc2hib2FyZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVlc3QiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBbnN3ZXIiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik90b2JvQUlEYXNoYm9hcmQ6OkZyb250ZW5kOjpQb2xsaW5nSW50ZXJ2YWwiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TnVtYmVyIG9mIHNlY29uZHMgb24gdGhlIGNsaWVudCBzaWRlIGJldHdlZW4gYXR0ZW1wdHMgdG8gZ2V0IGEgY2FjaGVkIGFuc3dlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6RGFzaGJvYXJkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9Il5bMC05XXsxLDN9JCI+NTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT3RvYm9BSURhc2hib2FyZDo6RnJvbnRlbmQ6OlRpbWVvdXRJbnRlcnZhbCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaW1lb3V0IHRvIGNvbnNpZGVyIHRoYXQgYSByZXF1ZXN0IGhhcyBubyByZXNwb25zZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6RGFzaGJvYXJkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9Il5bMC05XXsxLDN9JCI+MzAwPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgo=</File>
        <File Location="Kernel/Config/Files/XML/OTOBOAI.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPG90b2JvX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KICAgIDxTZXR0aW5nIE5hbWU9Ik9UT0JPQUk6OlRpY2tldDo6U2VhcmNoUmVzdHJpY3Rpb25zIyMjMDEwMC1EZWZhdWx0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFkZCBzZWFyY2ggcmVzdHJpY3Rpb25zIG9yIHBhcmFtZXRlcnMsIHRvIHNlbGVjdCB0aWNrZXRzIGZvciBpbXBvcnQgaW4gdGhlIFJBRyBwaXBlbGluZS4gVGhlIHBpcGVsaW5lIGluIGRldGVybWluZWQgYnkgdGhlIGxhYmVsIHByb3ZpZGVkLiBQbGVhc2Ugbm90ZSB0aGF0IGFueSBjaGFuZ2VzIHRvIHRoaXMgc2V0dGluZyBtYXkgZGVzeW5jaHJvbml6ZSB0aGUgdW5kZXJseWluZyB2ZWN0b3IgREIuIFRodXMsIGEgZnVsbCByZWltcG9ydCBvZiB0aGUgdGlja2V0IGtub3dsZWRnZSBiYXNlIHZpYSBjb25zb2xlIGNvbW1hbmQgaXMgcmVxdWlyZWQgdG8gZ3VhcmFudGVlIGEgdmFsaWQgZGF0YWJhc2Ugc3RhdGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PjwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5kZWZhdWx0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlF1ZXVlcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5SYXc8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXNlU3ViUXVldWVzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5VbmNsYXNzaWZpZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGVUeXBlIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmNsb3NlZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Y2xvc2VkIHN1Y2Nlc3NmdWw8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2VydmljZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaWNrZXRDbG9zZVRpbWVOZXdlck1pbnV0ZXMiPjE1NzY4MDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpY2tldENsb3NlVGltZU9sZGVyTWludXRlcyI+MTQ0MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQXJjaGl2ZUZsYWdzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPnk8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPm48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KPCEtLQogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGRfRmllbGROYW1lWCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRW1wdHkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXF1YWxzIj4xMjM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGlrZSI+c29tZSB2YWx1ZTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcmVhdGVyVGhhbiI+MjAwMS0wMS0wMSAwMTowMTowMTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcmVhdGVyVGhhbkVxdWFscyI+MjAwMS0wMS0wMSAwMTowMTowMTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTbWFsbGVyVGhhbiI+MjAwMS0wMS0wMSAwMTowMTowMTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTbWFsbGVyVGhhbkVxdWFscyI+MjAwMS0wMS0wMSAwMTowMTowMTwvSXRlbT4KCiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgotLT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpUaWNrZXQ6OlNlYXJjaFJlc3RyaWN0aW9ucyMjIzAyMDAtQ3VzdG9tMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZGQgc2VhcmNoIHJlc3RyaWN0aW9ucyBvciBwYXJhbWV0ZXJzLCB0byBzZWxlY3QgdGlja2V0cyBmb3IgaW1wb3J0IGluIHRoZSBSQUcgcGlwZWxpbmUuIFRoZSBwaXBlbGluZSBpbiBkZXRlcm1pbmVkIGJ5IHRoZSBsYWJlbCBwcm92aWRlZC4gUGxlYXNlIG5vdGUgdGhhdCBhbnkgY2hhbmdlcyB0byB0aGlzIHNldHRpbmcgbWF5IGRlc3luY2hyb25pemUgdGhlIHVuZGVybHlpbmcgdmVjdG9yIERCLiBUaHVzLCBhIGZ1bGwgcmVpbXBvcnQgb2YgdGhlIHRpY2tldCBrbm93bGVkZ2UgYmFzZSB2aWEgY29uc29sZSBjb21tYW5kIGlzIHJlcXVpcmVkIHRvIGd1YXJhbnRlZSBhIHZhbGlkIGRhdGFiYXNlIHN0YXRlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T1RPQk9BSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT48L0FycmF5PgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q3VzdG9tMTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJRdWV1ZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+UmF3PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlVzZVN1YlF1ZXVlcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+VW5jbGFzc2lmaWVkPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlN0YXRlVHlwZSI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5jbG9zZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmNsb3NlZCBzdWNjZXNzZnVsPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNlcnZpY2VzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGlja2V0Q2xvc2VUaW1lTmV3ZXJNaW51dGVzIj4xNTc2ODAwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaWNrZXRDbG9zZVRpbWVPbGRlck1pbnV0ZXMiPjE0NDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFyY2hpdmVGbGFncyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT55PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5uPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CjwhLS0KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRHluYW1pY0ZpZWxkX0ZpZWxkTmFtZVgiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVtcHR5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVxdWFscyI+MTIzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxpa2UiPnNvbWUgdmFsdWU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JlYXRlclRoYW4iPjIwMDEtMDEtMDEgMDE6MDE6MDE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JlYXRlclRoYW5FcXVhbHMiPjIwMDEtMDEtMDEgMDE6MDE6MDE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU21hbGxlclRoYW4iPjIwMDEtMDEtMDEgMDE6MDE6MDE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU21hbGxlclRoYW5FcXVhbHMiPjIwMDEtMDEtMDEgMDE6MDE6MDE8L0l0ZW0+CgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KLS0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6VGlja2V0OjpTZWFyY2hSZXN0cmljdGlvbnMjIyMwMzAwLUN1c3RvbTIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWRkIHNlYXJjaCByZXN0cmljdGlvbnMgb3IgcGFyYW1ldGVycywgdG8gc2VsZWN0IHRpY2tldHMgZm9yIGltcG9ydCBpbiB0aGUgUkFHIHBpcGVsaW5lLiBUaGUgcGlwZWxpbmUgaW4gZGV0ZXJtaW5lZCBieSB0aGUgbGFiZWwgcHJvdmlkZWQuIFBsZWFzZSBub3RlIHRoYXQgYW55IGNoYW5nZXMgdG8gdGhpcyBzZXR0aW5nIG1heSBkZXN5bmNocm9uaXplIHRoZSB1bmRlcmx5aW5nIHZlY3RvciBEQi4gVGh1cywgYSBmdWxsIHJlaW1wb3J0IG9mIHRoZSB0aWNrZXQga25vd2xlZGdlIGJhc2UgdmlhIGNvbnNvbGUgY29tbWFuZCBpcyByZXF1aXJlZCB0byBndWFyYW50ZWUgYSB2YWxpZCBkYXRhYmFzZSBzdGF0ZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbT4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+PC9BcnJheT4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkN1c3RvbTI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUXVldWVzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlJhdzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJVc2VTdWJRdWV1ZXMiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGVzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPlVuY2xhc3NpZmllZDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZVR5cGUiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Y2xvc2VkPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5jbG9zZWQgc3VjY2Vzc2Z1bDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTZXJ2aWNlcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpY2tldENsb3NlVGltZU5ld2VyTWludXRlcyI+MTU3NjgwMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGlja2V0Q2xvc2VUaW1lT2xkZXJNaW51dGVzIj4xNDQwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBcmNoaXZlRmxhZ3MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+eTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+bjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgo8IS0tCiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkR5bmFtaWNGaWVsZF9GaWVsZE5hbWVYIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFbXB0eSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFcXVhbHMiPjEyMzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaWtlIj5zb21lIHZhbHVlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkdyZWF0ZXJUaGFuIj4yMDAxLTAxLTAxIDAxOjAxOjAxPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkdyZWF0ZXJUaGFuRXF1YWxzIj4yMDAxLTAxLTAxIDAxOjAxOjAxPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNtYWxsZXJUaGFuIj4yMDAxLTAxLTAxIDAxOjAxOjAxPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNtYWxsZXJUaGFuRXF1YWxzIj4yMDAxLTAxLTAxIDAxOjAxOjAxPC9JdGVtPgoKICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+Ci0tPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9UT0JPQUk6OkZBUTo6U2VhcmNoUmVzdHJpY3Rpb25zIyMjMDEwMC1EZWZhdWx0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFkZCBzZWFyY2ggcmVzdHJpY3Rpb25zIG9yIHBhcmFtZXRlcnMsIHRvIHNlbGVjdCB0aWNrZXRzIGZvciBpbXBvcnQgaW4gdGhlIFJBRyBwaXBlbGluZS4gVGhlIHBpcGVsaW5lIGluIGRldGVybWluZWQgYnkgdGhlIGxhYmVsIHByb3ZpZGVkLiBQbGVhc2Ugbm90ZSB0aGF0IGFueSBjaGFuZ2VzIHRvIHRoaXMgc2V0dGluZyBtYXkgZGVzeW5jaHJvbml6ZSB0aGUgdW5kZXJseWluZyB2ZWN0b3IgREIuIFRodXMsIGEgZnVsbCByZWltcG9ydCBvZiB0aGUgdGlja2V0IGtub3dsZWRnZSBiYXNlIHZpYSBjb25zb2xlIGNvbW1hbmQgaXMgcmVxdWlyZWQgdG8gZ3VhcmFudGVlIGEgdmFsaWQgZGF0YWJhc2Ugc3RhdGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnlJRHMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+MjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+MzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYW5ndWFnZUlEcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlN0YXRlcyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+aW50ZXJuYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMiI+ZXh0ZXJuYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMyI+cHVibGljPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQXBwcm92ZWQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6RkFROjpTZWFyY2hSZXN0cmljdGlvbnMjIyMwMjAwLUN1c3RvbTEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWRkIHNlYXJjaCByZXN0cmljdGlvbnMgb3IgcGFyYW1ldGVycywgdG8gc2VsZWN0IEZBUSBhcnRpY2xlcyBmb3IgaW1wb3J0IGludG8gdGhlIFJBRyBwaXBlbGluZS4gVGhlIHBpcGVsaW5lIGlzIGRldGVybWluZWQgYnkgdGhlIGxhYmVsIGdpdmVuLiBQbGVhc2Ugbm90ZSB0aGF0IGFueSBjaGFuZ2VzIHRvIHRoaXMgc2V0dGluZyBtYXkgZGVzeW5jcm9uaXplIHRoZSB1bmRlcmx5aW5nIHZlY3RvciBEQi4gVGh1cywgYSBmdWxsIHJlaW1wb3J0IG9mIHRoZSBGQVEga25vd2xlZGdlIGJhc2UgdmlhIGNvbnNvbGUgY29tbWFuZCBpcyByZXF1aXJlZCB0byBndWFyYW50ZWUgYSB2YWxpZCBkYXRhYmFzZSBzdGF0ZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q3VzdG9tMTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeUlEcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT4zPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikxhbmd1YWdlSURzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdGVzIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5pbnRlcm5hbDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIyIj5leHRlcm5hbDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzIj5wdWJsaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBcHByb3ZlZCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpGQVE6OlNlYXJjaFJlc3RyaWN0aW9ucyMjIzAzMDAtQ3VzdG9tMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZGQgc2VhcmNoIHJlc3RyaWN0aW9ucyBvciBwYXJhbWV0ZXJzLCB0byBzZWxlY3QgRkFRIGFydGljbGVzIGZvciBpbXBvcnQgaW50byB0aGUgUkFHIHBpcGVsaW5lLiBUaGUgcGlwZWxpbmUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGFiZWwgZ2l2ZW4uIFBsZWFzZSBub3RlIHRoYXQgYW55IGNoYW5nZXMgdG8gdGhpcyBzZXR0aW5nIG1heSBkZXN5bmNyb25pemUgdGhlIHVuZGVybHlpbmcgdmVjdG9yIERCLiBUaHVzLCBhIGZ1bGwgcmVpbXBvcnQgb2YgdGhlIEZBUSBrbm93bGVkZ2UgYmFzZSB2aWEgY29uc29sZSBjb21tYW5kIGlzIHJlcXVpcmVkIHRvIGd1YXJhbnRlZSBhIHZhbGlkIGRhdGFiYXNlIHN0YXRlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T1RPQk9BSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5DdXN0b20yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhdGVnb3J5SURzIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFuZ3VhZ2VJRHMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+MjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZXMiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPmludGVybmFsPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjIiPmV4dGVybmFsPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjMiPnB1YmxpYzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFwcHJvdmVkIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik9UT0JPQUk6OkRvY3VtZW50OjpTZWFyY2hSZXN0cmljdGlvbnMjIyMwMTAwLURlZmF1bHQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9jYXRpb24gZm9yIGRvY3VtZW50cyB0byBpbmNsdWRlIGZvciB0aGUgUkFHIHBpcGVsaW5lLiBUaGUgcGlwZWxpbmUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGFiZWwgZ2l2ZW4uIENoYW5nZXMgdG8gdGhpcyBzZXR0aW5nIGRvIG5vdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZSB0aGUgdW5kZXJseWluZyB2ZWN0b3IgREIuIFBsZWFzZSBhcHByb3ByaWF0ZWx5IGltcG9ydC9wdXJnZS9yZWltcG9ydCB2aWEgY29uc29sZSBjb21tYW5kIGZvciB0aGVzZSBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T1RPQk9BSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5kZWZhdWx0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5ld2VyVGhhbkRheXMiPjMwMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRG9jdW1lbnRQYXRoIj4vb3B0L290b2JvL3Zhci9haS9kb2M8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6RG9jdW1lbnQ6OlNlYXJjaFJlc3RyaWN0aW9ucyMjIzAyMDAtQ3VzdG9tMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2NhdGlvbiBmb3IgZG9jdW1lbnRzIHRvIGluY2x1ZGUgZm9yIHRoZSBSQUcgcGlwZWxpbmUuIFRoZSBwaXBlbGluZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBsYWJlbCBnaXZlbi4gQ2hhbmdlcyB0byB0aGlzIHNldHRpbmcgZG8gbm90IGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSB1bmRlcmx5aW5nIHZlY3RvciBEQi4gUGxlYXNlIGFwcHJvcHJpYXRlbHkgaW1wb3J0L3B1cmdlL3JlaW1wb3J0IHZpYSBjb25zb2xlIGNvbW1hbmQgZm9yIHRoZXNlIGNoYW5nZXMgdG8gdGFrZSBlZmZlY3QuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkN1c3RvbTE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmV3ZXJUaGFuRGF5cyI+MzAwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEb2N1bWVudFBhdGgiPi9vcHQvb3RvYm8vdmFyL2FpL2RvYzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpEb2N1bWVudDo6U2VhcmNoUmVzdHJpY3Rpb25zIyMjMDIwMC1DdXN0b20yIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvY2F0aW9uIGZvciBkb2N1bWVudHMgdG8gaW5jbHVkZSBmb3IgdGhlIFJBRyBwaXBlbGluZS4gVGhlIHBpcGVsaW5lIGlzIGRldGVybWluZWQgYnkgdGhlIGxhYmVsIGdpdmVuLiBDaGFuZ2VzIHRvIHRoaXMgc2V0dGluZyBkbyBub3QgYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIHVuZGVybHlpbmcgdmVjdG9yIERCLiBQbGVhc2UgYXBwcm9wcmlhdGVseSBpbXBvcnQvcHVyZ2UvcmVpbXBvcnQgdmlhIGNvbnNvbGUgY29tbWFuZCBmb3IgdGhlc2UgY2hhbmdlcyB0byB0YWtlIGVmZmVjdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q3VzdG9tMjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOZXdlclRoYW5EYXlzIj4zMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvY3VtZW50UGF0aCI+L29wdC9vdG9iby92YXIvYWkvZG9jPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok1vZHVsZSMjI09UT0JPQUk6OkluZ2VzdE1hbnkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW52b2tlciBsYXllci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5Jbmdlc3RNYW55PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5Jbmdlc3RNYW55PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZUludm9rZXJEZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok1vZHVsZSMjI09UT0JPQUk6OkdldEFuc3dlciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbnZva2VyIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPkdldEFuc3dlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+R2V0QW5zd2VyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZUludm9rZXJEZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok1vZHVsZSMjI09UT0JPQUk6OlB1cmdlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyaWNJbnRlcmZhY2UgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGludm9rZXIgbGF5ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5HZW5lcmljSW50ZXJmYWNlOjpJbnZva2VyOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+UHVyZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPlB1cmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZUludm9rZXJEZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok1vZHVsZSMjI09UT0JPQUk6OlF1ZXJ5RW1iZWRkaW5ncyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBpbnZva2VyIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlF1ZXJ5RW1iZWRkaW5nczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+UXVlcnlFbWJlZGRpbmdzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZUludm9rZXJEZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkR5bmFtaWNGaWVsZHM6OkRyaXZlciMjI1RleHRBcmVhQUkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pY0ZpZWxkIGJhY2tlbmQgcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RHluYW1pY0ZpZWxkczo6RHJpdmVyUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpc3BsYXlOYW1lIiBUcmFuc2xhdGFibGU9IjEiPlRleHRhcmVhIEFJPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6VGV4dEFyZWFBSTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkR5bmFtaWNGaWVsZFRleHRBcmVhQUk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpc2FibGVkQWRkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3RUeXBlcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5BcnRpY2xlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRGFlbW9uOjpTY2hlZHVsZXJDcm9uVGFza01hbmFnZXI6OlRhc2sjIyNSZWJ1aWxkT3RvYm9BSUluZGV4IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiIENvbmZpZ0xldmVsPSIxMDAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlYnVpbGRzIHRoZSBPVE9CTyBBSSBWZWN0b3IgREIgaW5kZXguPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5EYWVtb246OlNjaGVkdWxlckNyb25UYXNrTWFuYWdlcjo6VGFzazwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXNrTmFtZSI+UmVidWlsZE90b2JvQUlJbmRleDwvSXRlbT4KICAgICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgICAgICAgICBydW4gam9iIG9uY2UgYXQgMDE6MDAgQU0gaW4gdGhlIE1vcm5pbmcKICAgICAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTY2hlZHVsZSI+MCAxICogKiAqPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6QUk6OkltcG9ydDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRnVuY3Rpb24iPkV4ZWN1dGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1heGltdW1QYXJhbGxlbEluc3RhbmNlcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGFyYW1zIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPi0tdGFyZ2V0PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT50ZmQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPi0tcmVpbXBvcnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzgwMDAtUG9wdWxhdGVPVE9CT0FJRHluYW1pY0ZpZWxkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkV2ZW50IG1vZHVsZSByZWdpc3RyYXRpb24uIEZvciBhc3luY2hyb25vdXMgTExNIHJlc3BvbnNlIGNvbGxlY3Rpb24sIHlvdSBjYW4gZGVmaW5lIHRyaWdnZXIgZXZlbnRzIChlLmcuLCBUaWNrZXRDcmVhdGUpLiBFbWl0dGVkIGV2ZW50cyBhcmUgdmFsaWRhdGVkIGFnYWluc3QgdGhpcyBzdHJpbmcgdXNpbmcgYSByZWd1bGFyIGV4cHJlc3Npb247IG11bHRpcGxlIGV2ZW50cyBtYXkgYmUgc3BlY2lmaWVkLCBzZXBhcmF0ZWQgYnkgYW4gYXJiaXRyYXJ5IGRlbGltaXRlci4gVGhlIFRyYW5zaXRpb24gYXR0cmlidXRlIGRldGVybWluZXMgd2hlbiB0aGUgZXZlbnQgaXMgZXhlY3V0ZWQ6IGVpdGhlciBleGFjdGx5IHdoZW4gaXQgaXMgZW1pdHRlZCAoMCkgb3IgYXQgdGhlIGVuZCBvZiB0aGUgZW50aXJlIGFjdGlvbiAoMSkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpFdmVudDo6VGlja2V0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlRpY2tldDo6RXZlbnQ6OlBvcHVsYXRlT1RPQk9BSUR5bmFtaWNGaWVsZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPkFydGljbGVDcmVhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJRdWV1ZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjODEwMC1Qb3B1bGF0ZU9UT0JPQUlEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RXZlbnQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4gRm9yIGFzeW5jaHJvbm91cyBMTE0gcmVzcG9uc2UgY29sbGVjdGlvbiwgeW91IGNhbiBkZWZpbmUgdHJpZ2dlciBldmVudHMgKGUuZy4sIFRpY2tldENyZWF0ZSkuIEVtaXR0ZWQgZXZlbnRzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCB0aGlzIHN0cmluZyB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbjsgbXVsdGlwbGUgZXZlbnRzIG1heSBiZSBzcGVjaWZpZWQsIHNlcGFyYXRlZCBieSBhbiBhcmJpdHJhcnkgZGVsaW1pdGVyLiBUaGUgVHJhbnNpdGlvbiBhdHRyaWJ1dGUgZGV0ZXJtaW5lcyB3aGVuIHRoZSBldmVudCBpcyBleGVjdXRlZDogZWl0aGVyIGV4YWN0bHkgd2hlbiBpdCBpcyBlbWl0dGVkICgwKSBvciBhdCB0aGUgZW5kIG9mIHRoZSBlbnRpcmUgYWN0aW9uICgxKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkV2ZW50OjpUaWNrZXQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpFdmVudDo6UG9wdWxhdGVPVE9CT0FJRHluYW1pY0ZpZWxkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+VGlja2V0UXVldWVVcGRhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJRdWV1ZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjODIwMC1Qb3B1bGF0ZU9UT0JPQUlEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RXZlbnQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4gRm9yIGFzeW5jaHJvbm91cyBMTE0gcmVzcG9uc2UgY29sbGVjdGlvbiwgeW91IGNhbiBkZWZpbmUgdHJpZ2dlciBldmVudHMgKGUuZy4sIFRpY2tldENyZWF0ZSkuIEVtaXR0ZWQgZXZlbnRzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdCB0aGlzIHN0cmluZyB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbjsgbXVsdGlwbGUgZXZlbnRzIG1heSBiZSBzcGVjaWZpZWQsIHNlcGFyYXRlZCBieSBhbiBhcmJpdHJhcnkgZGVsaW1pdGVyLiBUaGUgVHJhbnNpdGlvbiBhdHRyaWJ1dGUgZGV0ZXJtaW5lcyB3aGVuIHRoZSBldmVudCBpcyBleGVjdXRlZDogZWl0aGVyIGV4YWN0bHkgd2hlbiBpdCBpcyBlbWl0dGVkICgwKSBvciBhdCB0aGUgZW5kIG9mIHRoZSBlbnRpcmUgYWN0aW9uICgxKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkV2ZW50OjpUaWNrZXQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpFdmVudDo6UG9wdWxhdGVPVE9CT0FJRHluYW1pY0ZpZWxkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+VGlja2V0UXVldWVVcGRhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJRdWV1ZXMiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjODMwMC1PVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb24iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RXZlbnQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4gV2hlbmV2ZXIgYSBUaWNrZXQgaXMgY3JlYXRlZCBvciB1cGRhdGVkLCBlLmcuIGJ5IHJlY2VpdmluZyBuZXcgYXJ0aWNsZXMgb3IgY2hhbmdpbmcgc3RhdGUsIGl0IHNob3VsZCBiZSByZWltcG9ydGVkIGludG8gdGhlIHZlY3RvciBEQi4gVGhlcmVmb3JlLCB0aGlzIHNldHRpbmcgZGVzY3JpYmVzIHdoaWNoIGludGVybmFsIE9UT0JPIGV2ZW50cyBzaG91bGQgdHJpZ2dlciBhIHJlLWNoZWNrIG9mIHRoZSBTZWFyY2hSZXN0cmljdGlvbnMuIEZvciBhIGxpc3Qgb2Ygc3RhbmRhcmQsIFRpY2tldC1yZWxhdGVkIE9UT0JPIGV2ZW50cywgcGxlYXNlIGNvbnN1bHQgdGhlIERldmVsb3BlciBNYW51YWwuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpFdmVudDo6VGlja2V0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlRpY2tldDo6RXZlbnQ6Ok9UT0JPQUlJbmNyZW1lbnRhbFN5bmNocm9uaXphdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPlRpY2tldENyZWF0ZXxUaWNrZXQuKlVwZGF0ZXxUaWNrZXRNZXJnZXxUaWNrZXREZWxldGV8QXJ0aWNsZUNyZWF0ZXxBcnRpY2xlVXBkYXRlfEFydGljbGVFZGl0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUcmFuc2FjdGlvbiI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGQVE6OkV2ZW50TW9kdWxlUG9zdCMjIzgzMDAtT1RPQk9BSUluY3JlbWVudGFsU3luY2hyb25pemF0aW9uIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkV2ZW50IG1vZHVsZSByZWdpc3RyYXRpb24uIFdoZW5ldmVyIGFuIEZBUSBpdGVtIGlzIGNyZWF0ZWQgb3IgdXBkYXRlZCwgaXQgc2hvdWxkIGJlIHJlaW1wb3J0ZWQgaW50byB0aGUgdmVjdG9yIERCLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RXZlbnQ6OlRpY2tldDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpGQVE6OkV2ZW50OjpPVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkV2ZW50Ij5GQVFDcmVhdGV8RkFRVXBkYXRlfEZBUURlbGV0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHJhbnNhY3Rpb24iPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluRHluYW1pY0ZpZWxkVGV4dEFyZWFBSSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgbW9kdWxlIGlzIHBhcnQgb2YgdGhlIGFkbWluIGFyZWEgb2YgT1RPQk8uPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBGaWVsZHMgVGV4dEFyZWFBSSBCYWNrZW5kIEdVSTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPkFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZG1pbkR5bmFtaWNGaWVsZFRleHRBcmVhQUkjIyMwMDMtT1RPQk9BSSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkFkbWluLkR5bmFtaWNGaWVsZC5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5BZG1pbi5EeW5hbWljRmllbGRUZXh0LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LkFkbWluLlN5c0NvbmZpZy5FbnRpdHkuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpBbnN3ZXJUZW1wbGF0ZVJlcXVlc3RUeXBlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZSBpZiBvcGVuaW5nIHRoZSBhbnN3ZXIgdGVtcGxhdGUgb24gYW4gYXJ0aWNsZSB3aGljaCBoYXMgbm8gQUkgYW5zd2VyIHByZS1mZXRjaGVkIHNob3VsZCBibG9jayAoc3luY2hyb25vdXMpIG9yIHNob3cgYSBwbGFjZWhvbGRlciAoYXN5bmNocm9ub3VzKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCIgU2VsZWN0ZWRJRD0iQXN5bmNocm9ub3VzIj4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iU3luY2hyb25vdXMiIFRyYW5zbGF0YWJsZT0iMSI+U3luY2hyb25vdXM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IkFzeW5jaHJvbm91cyIgVHJhbnNsYXRhYmxlPSIxIj5Bc3luY2hyb25vdXM8L0l0ZW0+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6UGxhY2Vob2xkZXIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lIGEgc3RyaW5nIHdoaWNoIGlzIHVzZWQgYXMgYSBwbGFjZWhvbGRlciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgQUkgYW5zd2VyLiBPbmx5IHZpc2libGUgaWYgQUkgYW5zd2VyIGdlbmVyYXRpb24gaXMgYXN5bmNocm9ub3VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T1RPQk9BSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIj48IVtDREFUQVs8fCAgICAgICAgQUkgYW5zd2VyIGdlbmVyYXRpb24gaW4gcHJvZ3Jlc3MuIFBsZWFzZSByZW9wZW4gd2luZG93IHRvIGNoZWNrIGFnYWluLi4uICAgICB8Pl1dPjwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6RHluYW1pY0ZpZWxkT1RPQk9BSSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBkeW5hbWljIGZpZWxkIGluIHdoaWNoIGFuIE9UT0JPQUkgYW5zd2VyIGlzIHN0b3JlZC4gSXQgbWF5IGJlIGluY2x1ZGVkIGluIGEgcmVzcG9uc2UgdGVtcGxhdGUuIElmIGNoYW5nZWQsIHRoZSBmaWVsZCBoYXMgdG8gYmUgY3JlYXRlZCBtYW51YWxseS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyI+T1RPQk9BSTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6RHluYW1pY0ZpZWxkT1RPQk9BSTo6RW1wdHlBbnN3ZXJUb2tlbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BbiBMTE0gbWF5IG5vdCBiZSBjYXBhYmxlIG9mIG91dHB1dHRpbmcgYW4gZW1wdHkgc3RyaW5nLiBBZGp1c3QgdGhlIHByb21wdCB0byBvdXRwdXQgdGhpcyB0b2tlbiBhcyBzdWJzdGl0dXRlIGZvciBhbiBlbXB0eSBzdHJpbmcgaW5zdGVhZC4gSWYgdGhlIGR5bmFtaWMgZmllbGQgcmVjZWl2ZXMgdGhpcyB0b2tlbiwgdGhlIHJlc3VsdGluZyBPVE9CT0FJIGFuc3dlciB0ZW1wbGF0ZSB3aWxsIGhvbGQgbm8gYW5zd2VyIHN0cmluZy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyI+Tk9fT1VUUFVUPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpPdmVyd3JpdGVQcmV2aW91c1Jlc3BvbnNlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkJ5IGFjdGl2YXRpbmcgdGhpcyBvcHRpb24sIHByZXZpb3VzIEFJIGFuc3dlcnMgZmV0Y2hlZCBmb3IgYW4gYXJ0aWNsZSBhcmUgaWdub3JlZCBhbmQgYSBuZXcgcmVxdWVzdCB0byB0aGUgTExNIGlzIHN0YXJ0ZWQuIFRoaXMgaXMgb25seSB1c2VmdWwgaW4gZGV2ZWxvcG1lbnQgc2V0dGluZ3MgYW5kIHNob3VsZCBub3QgYmUgYWN0aXZhdGVkIGluIHByb2R1Y3Rpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6U3RyaXBTaWduYXR1cmVSZWdleCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DdXQgb2ZmIHRoaXMgYW5kIHN1YnNlcXVlbnQgbGluZXMgZnJvbSB0aWNrZXQgYXJ0aWNsZXMgZHVyaW5nIGluZ2VzdGlvbiBpbnRvIHRoZSBSQUcuIFRoZSB2YWx1ZSBpcyBhIFJlZ3VsYXIgRXhwcmVzc2lvbi4gVGhpcyBpcyB1c2VmdWwgdG8gc3RyaXAgcmVvY2N1cnJpbmcgc3VmZml4ZXMgbGlrZSBzaWduYXR1cmVzIGZyb20gYXJ0aWNsZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciPl4tLVxzKiQ8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpBbGxvd2VkQXJ0aWNsZVNlbmRlclR5cGVzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFycmF5IG9mIGFsbG93ZWQgQXJ0aWNsZVNlbmRlclR5cGVzIHRvIGJlIGluZGV4ZWQgYnkgT1RPQk8gQUkuIFZhbGlkIHZhbHVlcyBhcmUgJ2N1c3RvbWVyJywgJ2FnZW50JywgYW5kICdzeXN0ZW0nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6T1RPQk9BSTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPmFnZW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Y3VzdG9tZXI8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCiAgICA8U2V0dGluZyBOYW1lPSJPVE9CT0FJOjpPbmx5VmlzaWJsZUZvckN1c3RvbWVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFsbG93IG9ubHkgYXJ0aWNsZXMgdmlzaWJsZSBmb3IgY3VzdG9tZXJzIHRvIGJlIGluZ2VzdGVkIGJ5IHRoZSBSQUcuIElmIHNldCwgbm90ZXMgd2lsbCBiZSBleGNsdWRlZCBmcm9tIGluZ2VzdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9Ik9UT0JPQUk6OlF1ZXVlVG9SQUdNYXBwaW5nIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRldGVybWluZSB0aGUgdXNlLWNhc2Ugc3BlY2lmaWMgUkFHIHBpcGVsaW5lIHRvIGludm9rZSBkZXBlbmRpbmcgb24gcXVldWUgbmFtZS4gSWYgbm8gUkFHIHBpcGVsaW5lIGlzIGNvbmZpZ3VyZWQgaGVyZSwgdGhlIGRlZmF1bHQgUkFHIGlzIHVzZWQuIFN1YnF1ZXVlcyBoYXZlIHRvIGJlIGxpc3RlZCB1c2luZyA6Oi1ub3RhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSYXciPkN1c3RvbTE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQb3N0bWFzdGVyIj5DdXN0b20yPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6RGVmYXVsdFJBRyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZXQgdGhlIGRlZmF1bHQgUkFHIHBpcGVsaW5lIHVzZWQgYXMgYSBmYWxsYmFjayBhbmQgaW4gdGhlIGRhc2hib2FyZCB3aWRnZXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciPmRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjNDUyLUFJQ2hhdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5PcGVuIHRoZSBPVE9CTyBBSSBDaGF0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRab29tOjpNZW51TW9kdWxlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpY2tldE1lbnU6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+QUkgQ2hhdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+Q2hhdCB3aXRoIEFJIGFib3V0IHRoaXMgdGlja2V0LjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudFRpY2tldEFJQ2hhdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50VGlja2V0QUlDaGF0O1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUG9wdXBUeXBlIj5UaWNrZXRBY3Rpb248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFRpY2tldEFJQ2hhdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5UaGlzIG1vZHVsZSBpcyBwYXJ0IG9mIHRoZSBhZ2VudCBhcmVhIG9mIE9UT0JPLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPkFJIENoYXQgTGF1bmNoZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPCEtLQogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFnZW50VGlja2V0QUlDaGF0IyMjMDAzLU9UT0JPQUkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9hZGVyIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KLS0+CgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6TUNQOjpIb3N0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoZSBob3N0bmFtZSBvZiB0aGUgTUNQIHNlcnZlciwgZS5nLiwgJ21jcCcgd2hlbiBydW5uaW5nIGluIERvY2tlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok9UT0JPQUk8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyI+bWNwPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iT1RPQk9BSTo6Q2hhdDo6RW5kcG9pbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhlIGVuZHBvaW50IHVybCBvZiB0aGUgQUkgY2hhdCBpbnRlcmZhY2UuIEl0IG1heSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgcGxhY2Vob2xkZXIge3tPVE9CT19TSUR9fSwge3tUSUNLRVRfSUR9fSwgYW5kIHt7QVJUSUNMRV9JRH19IHRvIHBhc3MgdGhlIGNvbnRleHQgdG8gdGhlIGNoYXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpPVE9CT0FJPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciPmh0dHBzOi8ve3tGUUROfX06OTAwMC8/bW9kZWw9YmV0YS1nZW5lcmF0ZS0yJmFtcDtxPUhhbGxvJTJDJTIwbWVya2UlMjBkaXIlMjBkaWVzZSUyMERhdGVuJTNBJTIwe3tPVE9CT19TSUR9fXt7VElDS0VUX0lEfX17e0FSVElDTEVfSUR9fTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgoKICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlIyMjVGlja2V0OjpBcnRpY2xlREZVcGRhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+QXJ0aWNsZURGVXBkYXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI1RpY2tldDo6TGluayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gbGF5ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5MaW5rPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5HZW5lcmljSW50ZXJmYWNlT3BlcmF0aW9uRGVmYXVsdDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZSMjI1RpY2tldDo6VW5MaW5rIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyaWNJbnRlcmZhY2UgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiBsYXllci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlVuTGluazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZU9wZXJhdGlvbkRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGUjIyNUaWNrZXQ6OlF1ZXJ5RW1iZWRkaW5ncyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gbGF5ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5RdWVyeUVtYmVkZGluZ3M8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbnRyb2xsZXIiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlnRGlhbG9nIj5BZG1pbkdlbmVyaWNJbnRlcmZhY2VPcGVyYXRpb25EZWZhdWx0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TW9kdWxlIyMjVGlja2V0OjpUaWNrZXRHZXRBSSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmljSW50ZXJmYWNlIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBvcGVyYXRpb24gbGF5ZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5HZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5UaWNrZXRHZXRBSTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29udHJvbGxlciI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZU9wZXJhdGlvbkRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGUjIyNFbGFzdGljU2VhcmNoOjpGQVFTZWFyY2giIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+RkFRU2VhcmNoPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5FbGFzdGljU2VhcmNoPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZU9wZXJhdGlvbkRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGUjIyNFbGFzdGljU2VhcmNoOjpUaWNrZXRTZWFyY2giIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJpY0ludGVyZmFjZSBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgb3BlcmF0aW9uIGxheWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+VGlja2V0U2VhcmNoPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb250cm9sbGVyIj5FbGFzdGljU2VhcmNoPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb25maWdEaWFsb2ciPkFkbWluR2VuZXJpY0ludGVyZmFjZU9wZXJhdGlvbkRlZmF1bHQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tIyMjV2lkZ2V0cyMjIzA0NTAtQUlTaW1pbGFyVGlja2V0cyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZ2VudFRpY2tldFpvb20gd2lkZ2V0IHRoYXQgZGlzcGxheXMgc2ltaWxhciB0aWNrZXQgZGF0YSBpbiB0aGUgc2lkZSBiYXIuIFRoZSBSQUcgY29udGFpbmVyIG11c3QgYmUgYXZhaWxhYmxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRab29tPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpY2tldFpvb206OkFJU2ltaWxhclRpY2tldHM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2F0aW9uIj5TaWRlYmFyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBc3luYyI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgo=</File>
        <File Location="Kernel/GenericInterface/Operation/Ticket/ArticleDFUpdate.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OkFydGljbGVERlVwZGF0ZTsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldFVwZGF0ZQopOwoKIyBjb3JlIG1vZHVsZXMKdXNlIFNjYWxhcjo6VXRpbCBxdyhyZWZ0eXBlKTsKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZyBJc1N0cmluZ1dpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpBcnRpY2xlREZVcGRhdGUgLSBHZW5lcmljSW50ZXJmYWNlIEFydGljbGUgRHluYW1pYyBGaWVsZCBVcGRhdGUKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEM8S2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOz4uCgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSBibGVzcyB7fSwgJFR5cGU7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KCBEZWJ1Z2dlck9iamVjdCBXZWJzZXJ2aWNlSUQgKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfTsKICAgIH0KCiAgICAkU2VsZi0+e0NvbmZpZ30gICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0dlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6QXJ0aWNsZURGVXBkYXRlJyk7CiAgICAkU2VsZi0+e09wZXJhdGlvbn0gPSAkUGFyYW17T3BlcmF0aW9ufTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBSdW4oKQoKcGVyZm9ybSBVcGRhdGVBcnRpY2xlRHluYW1pY0ZpZWxkIE9wZXJhdGlvbi4gVGhpcyB3aWxsIHJldHVybiB0aGUgdXBkYXRlZCBUaWNrZXRJRCBhbmQKdGhlIHVwZGF0ZWQgQXJ0aWNsZUlELgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgICAgID0+ICdzb21lIGFnZW50IGxvZ2luJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyTG9naW4gb3IgQ3VzdG9tZXJVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIHJlcXVpcmVkCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgID0+IDEyMywKCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAnc29tZSBwYXNzd29yZCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBVc2VyTG9naW4gb3IgY3VzdG9tZXJVc2VyTG9naW4gaXMgc2VudCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBhc3N3b3JkIGlzIHJlcXVpcmVkCgogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGlja2V0SUQgb3IgVGlja2V0TnVtYmVyIGlzIHJlcXVpcmVkCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAnMjAwNDA0MDUxMDQ0MDQ4NScsCgogICAgICAgICAgICBBcnRpY2xlSUQgICAgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIG90aGVyd2lzZSBsYXN0IGN1c3RvbWVyIGFydGljbGUgaWQgaXMgdXNlZAogICAgICAgICAgICBEeW5hbWljRmllbGQgPT4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ3NvbWUgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgID0+ICRWYWx1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZhbHVlIHR5cGUgZGVwZW5kcyBvbiB0aGUgZHluYW1pYyBmaWVsZAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICMgLi4uCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlICAgID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgICAgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICMgcmVzdWx0IGRhdGEgcGF5bG9hZCBhZnRlciBPcGVyYXRpb24KICAgICAgICAgICAgVGlja2V0SUQgICAgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICMgVGlja2V0ICBJRCBudW1iZXIgaW4gT1RPQk8gKGhlbHAgZGVzayBzeXN0ZW0pCiAgICAgICAgICAgIEFydGljbGVJRCAgID0+IDQzLCAgICAgICAgICAgICAgICAgICAgICAjIEFydGljbGUgSUQgbnVtYmVyIGluIE9UT0JPIChoZWxwIGRlc2sgc3lzdGVtKQogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+SW5pdCgKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgKTsKCiAgICBpZiAoICEkUmVzdWx0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1dlYnNlcnZpY2UuSW52YWxpZENvbmZpZ3VyYXRpb24nLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtEYXRhfSApICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQXJ0aWNsZURGVXBkYXRlLkVtcHR5UmVxdWVzdCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBUaGUgcmVxdWVzdCBkYXRhIGlzIGludmFsaWQhIiwKICAgICAgICApOwogICAgfQoKICAgIGlmICggISRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSAmJiAhJFBhcmFte0RhdGF9LT57VGlja2V0TnVtYmVyfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJBcnRpY2xlREZVcGRhdGU6IFRpY2tldElEIG9yIFRpY2tldE51bWJlciBpcyByZXF1aXJlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKAogICAgICAgICEkUGFyYW17RGF0YX0tPntVc2VyTG9naW59CiAgICAgICAgJiYgISRQYXJhbXtEYXRhfS0+e1Nlc3Npb25JRH0KICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdBcnRpY2xlREZVcGRhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1VzZXJMb2dpbn0gKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9LT57UGFzc3dvcmR9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdBcnRpY2xlREZVcGRhdGUuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkFydGljbGVERlVwZGF0ZTogUGFzc3dvcmQgb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYXV0aGVudGljYXRlIHVzZXIKICAgIG15ICggJFVzZXJJRCwgJFVzZXJUeXBlICkgPSAkU2VsZi0+QXV0aCgKICAgICAgICAlUGFyYW0sCiAgICApOwoKICAgIGlmICggISRVc2VySUQgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdBcnRpY2xlREZVcGRhdGUuQXV0aEZhaWwnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkFydGljbGVERlVwZGF0ZTogVXNlciBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIGNoZWNrIFRpY2tldElECiAgICBteSAkVGlja2V0SUQ7CiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0SURMb29rdXAoCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgIH0KICAgIGVsc2UgewogICAgICAgICRUaWNrZXRJRCA9ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfTsKICAgIH0KCiAgICBpZiAoICEoJFRpY2tldElEKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkFydGljbGVERlVwZGF0ZTogVXNlciBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgdGlja2V0ISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAlVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXREYXRhICkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdBcnRpY2xlREZVcGRhdGUuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJBcnRpY2xlREZVcGRhdGU6IFVzZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHRpY2tldCEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBiYXNpYyBuZWVkZWQgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3M7CiAgICBpZiAoICRVc2VyVHlwZSBlcSAnVXNlcicgKSB7CgogICAgICAgICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgICA9PiAncncnLAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDdXN0b21lclBlcm1pc3Npb24oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdydycsCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwKICAgICAgICApOwogICAgfQogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkFydGljbGVERlVwZGF0ZTogVXNlciBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgdGlja2V0ISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkRHluYW1pY0ZpZWxkcyA9ICRQYXJhbXtEYXRhfS0+e0R5bmFtaWNGaWVsZH07CiAgICBpZiAoICFJc0FycmF5UmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZHMpICkgewoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkcykgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBEeW5hbWljRmllbGQgRWxlbWVudCBpcyBtaXNzaW5nLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICREeW5hbWljRmllbGRzID0gWyREeW5hbWljRmllbGRzXTsKICAgIH0KCiAgICBpZiAoICFJc0FycmF5UmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZHMpICkgewoKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJBcnRpY2xlREZVcGRhdGU6IER5bmFtaWNGaWVsZCBFbGVtZW50IGlzIGVtcHR5LiIsCiAgICAgICAgKTsKICAgIH0KCiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoICREeW5hbWljRmllbGRzLT5AKiApIHsKCiAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZCkgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBEeW5hbWljRmllbGQgRWxlbWVudCBpcyBtaXNzaW5nLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkRHluYW1pY0ZpZWxkLT57TmFtZX0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBEeW5hbWljRmllbGQgRWxlbWVudCBpcyBtaXNzaW5nIGNoaWxkIGtleSAnTmFtZScuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggISREeW5hbWljRmllbGQtPntWYWx1ZX0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0FydGljbGVERlVwZGF0ZS5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiQXJ0aWNsZURGVXBkYXRlOiBEeW5hbWljRmllbGQgRWxlbWVudCBpcyBtaXNzaW5nIGNoaWxkIGtleSAnVmFsdWUnLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gdGhlIERGIHVwZGF0ZQoKICAgIG15ICRBcnRpY2xlT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwogICAgbXkgJEJhY2tlbmRPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICBteSAkQXJ0aWNsZUlEID0gJFBhcmFte0RhdGF9LT57QXJ0aWNsZUlEfTsKICAgIGlmICggISRBcnRpY2xlSUQgKSB7CgogICAgICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNlbmRlclR5cGUgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgT25seUxhc3QgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgaWYgKEBBcnRpY2xlcykgewogICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEFydGljbGVzWzBde0FydGljbGVJRH07CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISRBcnRpY2xlSUQgKSB7CgogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnQXJ0aWNsZURGVXBkYXRlLk5vQ3VzdG9tZXJBcnRpY2xlJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICdUaGlzIHRpY2tldCBkb2VzIG5vdCBoYXZlIGEgY3VzdG9tZXIgYXJ0aWNsZS4nLAogICAgICAgICk7CiAgICB9CgogICAgJFJlc3VsdCA9IDE7CgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCAkRHluYW1pY0ZpZWxkcy0+QCogKSB7CgogICAgICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJER5bmFtaWNGaWVsZC0+e05hbWV9LAogICAgICAgICk7CgogICAgICAgIG15ICRTdWNjZXNzID0gJEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywgICAgICAgIyBjb21wbGV0ZSBjb25maWcgb2YgdGhlIER5bmFtaWNGaWVsZAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJEFydGljbGVJRCwgICAgICAgICAgICAgICAgIyBJRCBvZiB0aGUgY3VycmVudCBvYmplY3QgdGhhdCB0aGUgZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbXVzdCBiZSBsaW5rZWQgdG8sIGUuIGcuIFRpY2tldElECiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkLT57VmFsdWV9LCAgICAjIFZhbHVlIHRvIHN0b3JlLCBkZXBlbmRzIG9uIGJhY2tlbmQgdHlwZQogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICAgICAgRG9Xcml0ZSAgICAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICMgc3BlY2lmaWMgdG8gT1RPQk9BSSBERgogICAgICAgICk7CgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5hYmxlIHRvIHNldCB2YWx1ZSAnIgogICAgICAgICAgICAgICAgICAgIC4gJER5bmFtaWNGaWVsZC0+e1ZhbHVlfQogICAgICAgICAgICAgICAgICAgIC4gIicgZm9yIERGICIKICAgICAgICAgICAgICAgICAgICAuICREeW5hbWljRmllbGQtPntOYW1lfQogICAgICAgICAgICAgICAgICAgIC4gIiBvbiBBcnRpY2xlSUQgJEFydGljbGVJRCB3aXRoIFRpY2tldElEICRUaWNrZXRJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkUmVzdWx0ID0gJFN1Y2Nlc3MgaWYgJFJlc3VsdDsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gJFJlc3VsdCwKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgIFN1Y2Nlc3MgICA9PiAxLAogICAgICAgIH0KICAgIH07Cn0KCjE7Cg==</File>
        <File Location="Kernel/GenericInterface/Operation/Ticket/TicketGetAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldEdldEFJOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpDb21tb24KICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OkNvbW1vbgopOwoKIyBjb3JlIG1vZHVsZXMKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZ1dpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1iZWdpbiBzdG9wd29yZHMKCk9TUyBhaQoKPWVuZCBzdG9wd29yZHMKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpUaWNrZXRHZXRBSSAtIEdlbmVyaWNJbnRlcmZhY2UgVGlja2V0IEdldCBPcGVyYXRpb24gYmFja2VuZAoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KERlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiR290IG5vICROZWVkZWQhIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUnVuKCkKCnBlcmZvcm0gVGlja2V0R2V0IE9wZXJhdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBhYmxlIHRvIHJldHVybgpvbmUgb3IgbW9yZSB0aWNrZXQgZW50cmllcyBpbiBvbmUgY2FsbC4KCiAgICBteSAkUmVzdWx0ID0gJE9wZXJhdGlvbk9iamVjdC0+UnVuKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBVc2VyTG9naW4gICAgICAgICAgICA9PiAnc29tZSBhZ2VudCBsb2dpbicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlckxvZ2luIG9yIEN1c3RvbWVyVXNlckxvZ2luIG9yIFNlc3Npb25JRCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICByZXF1aXJlZAogICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiAgICA9PiAnc29tZSBjdXN0b21lciBsb2dpbicsCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgICAgID0+IDEyMywKCiAgICAgICAgICAgIFBhc3N3b3JkICAgICAgICAgICAgID0+ICdzb21lIHBhc3N3b3JkJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBVc2VyTG9naW4gb3IgY3VzdG9tZXJVc2VyTG9naW4gaXMgc2VudCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBhc3N3b3JkIGlzIHJlcXVpcmVkCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICczMiwzMycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXF1aXJlZCwgY291bGQgYmUgY29tYSBzZXBhcmF0ZWQgSURzIG9yIGFuIEFycmF5CiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgICAgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCwgMCBhcyBkZWZhdWx0LiBJbmRpY2F0ZSBpZiBEeW5hbWljIEZpZWxkcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIHNob3VsZCBiZSBpbmNsdWRlZCBvciBub3Qgb24gdGhlIHRpY2tldCBjb250ZW50LgogICAgICAgICAgICBFeHRlbmRlZCAgICAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW9uYWwsIDAgYXMgZGVmYXVsdAogICAgICAgICAgICBBbGxBcnRpY2xlcyAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW9uYWwsIDAgYXMgZGVmYXVsdC4gU2V0IGFzIDEgd2lsbCBpbmNsdWRlIGFydGljbGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgZm9yIHRpY2tldHMuCiAgICAgICAgICAgIEFydGljbGVTZW5kZXJUeXBlICAgID0+IFsgJEFydGljbGVTZW5kZXJUeXBlMSwgJEFydGljbGVTZW5kZXJUeXBlMiBdLCAgIyBPcHRpb25hbCwgb25seSByZXF1ZXN0ZWQgYXJ0aWNsZSBzZW5kZXIgdHlwZXMKICAgICAgICAgICAgQXJ0aWNsZU9yZGVyICAgICAgICAgPT4gJ0RFU0MnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE9wdGlvbmFsLCBERVNDLEFTQyAtIGRlZmF1bHQgaXMgQVNDCiAgICAgICAgICAgIEFydGljbGVMaW1pdCAgICAgICAgID0+IDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbAogICAgICAgICAgICBBdHRhY2htZW50cyAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3B0aW9uYWwsIDAgYXMgZGVmYXVsdC4gSWYgaXQncyBzZXQgd2l0aCB0aGUgdmFsdWUgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGF0dGFjaG1lbnRzIGZvciBhcnRpY2xlcyB3aWxsIGJlIGluY2x1ZGVkIG9uIHRpY2tldCBkYXRhCiAgICAgICAgICAgIEdldEF0dGFjaG1lbnRDb250ZW50cyA9IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCwgMSBhcyBkZWZhdWx0LiAwfDEsCiAgICAgICAgICAgIEhUTUxCb2R5QXNBdHRhY2htZW50ID0+IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPcHRpb25hbCwgSWYgZW5hYmxlZCB0aGUgSFRNTCBib2R5IHZlcnNpb24gb2YgZWFjaCBhcnRpY2xlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICBpcyBhZGRlZCB0byB0aGUgYXR0YWNobWVudHMgbGlzdAojIFJvdGhlciBPU1MgLyBvdG9iby1haQogICAgICAgICAgICBMaW5rcyAgICAgICAgICAgICAgICA9PiB1bmRlZiB8IDEgfCBbICdUaWNrZXQnLCAnRkFRJywgJ0NvbmZpZ0l0ZW0nXQojIEVPIG90b2JvLWFpCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluIGNhc2Ugb2YgYW4gZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBUaWNrZXQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFRpY2tldE51bWJlciAgICAgICA9PiAnMjAxMDEwMjcwMDAwMDEnLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgICA9PiAnc29tZSB0aXRsZScsCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgID0+IDEyMywKICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgICAgICAgPT4gJ3NvbWUgc3RhdGUnLAogICAgICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgICAgICAgICAgICAgU3RhdGVUeXBlICAgICAgICAgID0+ICdzb21lIHN0YXRlIHR5cGUnLAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICAgICAgICA9PiAnc29tZSBwcmlvcml0eScsCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICAgICAgID0+IDEyMywKICAgICAgICAgICAgICAgICAgICBMb2NrICAgICAgICAgICAgICAgPT4gJ2xvY2snLAogICAgICAgICAgICAgICAgICAgIExvY2tJRCAgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgICAgICAgICAgICAgUXVldWUgICAgICAgICAgICAgID0+ICdzb21lIHF1ZXVlJywKICAgICAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICAgICAgICA9PiAnY3VzdG9tZXJfaWRfMTIzJywKICAgICAgICAgICAgICAgICAgICBDdXN0b21lclVzZXJJRCAgICAgPT4gJ2N1c3RvbWVyX3VzZXJfaWRfMTIzJywKICAgICAgICAgICAgICAgICAgICBPd25lciAgICAgICAgICAgICAgPT4gJ3NvbWVfb3duZXJfbG9naW4nLAogICAgICAgICAgICAgICAgICAgIE93bmVySUQgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgID0+ICdzb21lIHRpY2tldCB0eXBlJywKICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIFNMQSAgICAgICAgICAgICAgICA9PiAnc29tZSBzbGEnLAogICAgICAgICAgICAgICAgICAgIFNMQUlEICAgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgICAgICAgICAgICAgU2VydmljZSAgICAgICAgICAgID0+ICdzb21lIHNlcnZpY2UnLAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgICAgICA9PiAxMjMsCiAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2libGUgICAgICAgID0+ICdzb21lX3Jlc3BvbnNpYmxlX2xvZ2luJywKICAgICAgICAgICAgICAgICAgICBSZXNwb25zaWJsZUlEICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIEFnZSAgICAgICAgICAgICAgICA9PiAzNDU2LAogICAgICAgICAgICAgICAgICAgIENyZWF0ZWQgICAgICAgICAgICA9PiAnMjAxMC0xMC0yNyAyMDoxNTowMCcKICAgICAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIENoYW5nZWQgICAgICAgICAgICA9PiAnMjAxMC0xMC0yNyAyMDoxNToxNScsCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgID0+IDEyMywKICAgICAgICAgICAgICAgICAgICBBcmNoaXZlRmxhZyAgICAgICAgPT4gJ3knLAogICAgICAgICAgICAgICAgICAgIFRpbWVVbml0ICAgICAgICAgICA9PiAxMjMsCgogICAgICAgICAgICAgICAgICAgICMgSWYgRHluYW1pY0ZpZWxkcyA9PiAxIHdhcyBwYXNzZWQsIHlvdSdsbCBnZXQgYW4gZW50cnkgbGlrZSB0aGlzIGZvciBlYWNoIGR5bmFtaWMgZmllbGQ6CiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJ3NvbWUgbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnc29tZSB2YWx1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKCiAgICAgICAgICAgICAgICAgICAgIyAodGltZSBzdGFtcHMgb2YgZXhwZWN0ZWQgZXNjYWxhdGlvbnMpCiAgICAgICAgICAgICAgICAgICAgRXNjYWxhdGlvblJlc3BvbnNlVGltZSAgICAgICAgICAgKHVuaXggdGltZSBzdGFtcCBvZiByZXNwb25zZSB0aW1lIGVzY2FsYXRpb24pCiAgICAgICAgICAgICAgICAgICAgRXNjYWxhdGlvblVwZGF0ZVRpbWUgICAgICAgICAgICAgKHVuaXggdGltZSBzdGFtcCBvZiB1cGRhdGUgdGltZSBlc2NhbGF0aW9uKQogICAgICAgICAgICAgICAgICAgIEVzY2FsYXRpb25Tb2x1dGlvblRpbWUgICAgICAgICAgICh1bml4IHRpbWUgc3RhbXAgb2Ygc29sdXRpb24gdGltZSBlc2NhbGF0aW9uKQoKICAgICAgICAgICAgICAgICAgICAjIChnZW5lcmFsIGVzY2FsYXRpb24gaW5mbyBvZiBuZWFyZXN0IGVzY2FsYXRpb24gdHlwZSkKICAgICAgICAgICAgICAgICAgICBFc2NhbGF0aW9uRGVzdGluYXRpb25JbiAgICAgICAgICAoZXNjYWxhdGlvbiBpbiBlLiBnLiAxaCA0bSkKICAgICAgICAgICAgICAgICAgICBFc2NhbGF0aW9uRGVzdGluYXRpb25UaW1lICAgICAgICAoZGF0ZSBvZiBlc2NhbGF0aW9uIGluIHVuaXggdGltZSwgZS4gZy4gNzIxOTMyOTIpCiAgICAgICAgICAgICAgICAgICAgRXNjYWxhdGlvbkRlc3RpbmF0aW9uRGF0ZSAgICAgICAgKGRhdGUgb2YgZXNjYWxhdGlvbiwgZS4gZy4gIjIwMDktMDItMTQgMTg6MDA6MDAiKQogICAgICAgICAgICAgICAgICAgIEVzY2FsYXRpb25UaW1lV29ya2luZ1RpbWUgICAgICAgIChzZWNvbmRzIG9mIHdvcmtpbmcvc2VydmljZSB0aW1lIHRpbGwgZXNjYWxhdGlvbiwgZS4gZy4gIjE4MDAiKQogICAgICAgICAgICAgICAgICAgIEVzY2FsYXRpb25UaW1lICAgICAgICAgICAgICAgICAgIChzZWNvbmRzIHRvdGFsIHRpbGwgZXNjYWxhdGlvbiBvZiBuZWFyZXN0IGVzY2FsYXRpb24gdGltZSB0eXBlIC0gcmVzcG9uc2UsIHVwZGF0ZSBvciBzb2x1dGlvbiB0aW1lLCBlLiBnLiAiMzYwMCIpCgogICAgICAgICAgICAgICAgICAgICMgKGRldGFpbGVkIGVzY2FsYXRpb24gaW5mbyBhYm91dCBmaXJzdCByZXNwb25zZSwgdXBkYXRlIGFuZCBzb2x1dGlvbiB0aW1lKQogICAgICAgICAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lRXNjYWxhdGlvbiAgICAgIChpZiB0cnVlLCB0aWNrZXQgaXMgZXNjYWxhdGVkKQogICAgICAgICAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lTm90aWZpY2F0aW9uICAgIChpZiB0cnVlLCBub3RpZnkgLSB4JSBvZiBlc2NhbGF0aW9uIGhhcyByZWFjaGVkKQogICAgICAgICAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lRGVzdGluYXRpb25UaW1lIChkYXRlIG9mIGVzY2FsYXRpb24gaW4gdW5peCB0aW1lLCBlLiBnLiA3MjE5MzI5MikKICAgICAgICAgICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZURlc3RpbmF0aW9uRGF0ZSAoZGF0ZSBvZiBlc2NhbGF0aW9uLCBlLiBnLiAiMjAwOS0wMi0xNCAxODowMDowMCIpCiAgICAgICAgICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWVXb3JraW5nVGltZSAgICAgKHNlY29uZHMgb2Ygd29ya2luZy9zZXJ2aWNlIHRpbWUgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMTgwMCIpCiAgICAgICAgICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICAgICAgICAgICAgICAgKHNlY29uZHMgdG90YWwgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMzYwMCIpCgogICAgICAgICAgICAgICAgICAgIFVwZGF0ZVRpbWVFc2NhbGF0aW9uICAgICAgICAgICAgIChpZiB0cnVlLCB0aWNrZXQgaXMgZXNjYWxhdGVkKQogICAgICAgICAgICAgICAgICAgIFVwZGF0ZVRpbWVOb3RpZmljYXRpb24gICAgICAgICAgIChpZiB0cnVlLCBub3RpZnkgLSB4JSBvZiBlc2NhbGF0aW9uIGhhcyByZWFjaGVkKQogICAgICAgICAgICAgICAgICAgIFVwZGF0ZVRpbWVEZXN0aW5hdGlvblRpbWUgICAgICAgIChkYXRlIG9mIGVzY2FsYXRpb24gaW4gdW5peCB0aW1lLCBlLiBnLiA3MjE5MzI5MikKICAgICAgICAgICAgICAgICAgICBVcGRhdGVUaW1lRGVzdGluYXRpb25EYXRlICAgICAgICAoZGF0ZSBvZiBlc2NhbGF0aW9uLCBlLiBnLiAiMjAwOS0wMi0xNCAxODowMDowMCIpCiAgICAgICAgICAgICAgICAgICAgVXBkYXRlVGltZVdvcmtpbmdUaW1lICAgICAgICAgICAgKHNlY29uZHMgb2Ygd29ya2luZy9zZXJ2aWNlIHRpbWUgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMTgwMCIpCiAgICAgICAgICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICAgICAgICAgICAgICAgKHNlY29uZHMgdG90YWwgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMzYwMCIpCgogICAgICAgICAgICAgICAgICAgIFNvbHV0aW9uVGltZUVzY2FsYXRpb24gICAgICAgICAgIChpZiB0cnVlLCB0aWNrZXQgaXMgZXNjYWxhdGVkKQogICAgICAgICAgICAgICAgICAgIFNvbHV0aW9uVGltZU5vdGlmaWNhdGlvbiAgICAgICAgIChpZiB0cnVlLCBub3RpZnkgLSB4JSBvZiBlc2NhbGF0aW9uIGhhcyByZWFjaGVkKQogICAgICAgICAgICAgICAgICAgIFNvbHV0aW9uVGltZURlc3RpbmF0aW9uVGltZSAgICAgIChkYXRlIG9mIGVzY2FsYXRpb24gaW4gdW5peCB0aW1lLCBlLiBnLiA3MjE5MzI5MikKICAgICAgICAgICAgICAgICAgICBTb2x1dGlvblRpbWVEZXN0aW5hdGlvbkRhdGUgICAgICAoZGF0ZSBvZiBlc2NhbGF0aW9uLCBlLiBnLiAiMjAwOS0wMi0xNCAxODowMDowMCIpCiAgICAgICAgICAgICAgICAgICAgU29sdXRpb25UaW1lV29ya2luZ1RpbWUgICAgICAgICAgKHNlY29uZHMgb2Ygd29ya2luZy9zZXJ2aWNlIHRpbWUgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMTgwMCIpCiAgICAgICAgICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICAgICAgICAgICAgICAgKHNlY29uZHMgdG90YWwgdGlsbCBlc2NhbGF0aW9uLCBlLiBnLiAiMzYwMCIpCgogICAgICAgICAgICAgICAgICAgICMgaWYgeW91IHVzZSBwYXJhbSBFeHRlbmRlZCB0byBnZXQgZXh0ZW5kZWQgdGlja2V0IGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICAgICBGaXJzdFJlc3BvbnNlICAgICAgICAgICAgICAgICAgICh0aW1lc3RhbXAgb2YgZmlyc3QgcmVzcG9uc2UsIGZpcnN0IGNvbnRhY3Qgd2l0aCBjdXN0b21lcikKICAgICAgICAgICAgICAgICAgICBGaXJzdFJlc3BvbnNlSW5NaW4gICAgICAgICAgICAgIChtaW51dGVzIHRpbGwgZmlyc3QgcmVzcG9uc2UpCiAgICAgICAgICAgICAgICAgICAgRmlyc3RSZXNwb25zZURpZmZJbk1pbiAgICAgICAgICAobWludXRlcyB0aWxsIG9yIG92ZXIgZmlyc3QgcmVzcG9uc2UpCgogICAgICAgICAgICAgICAgICAgIFNvbHV0aW9uSW5NaW4gICAgICAgICAgICAgICAgICAgKG1pbnV0ZXMgdGlsbCBzb2x1dGlvbiB0aW1lKQogICAgICAgICAgICAgICAgICAgIFNvbHV0aW9uRGlmZkluTWluICAgICAgICAgICAgICAgKG1pbnV0ZXMgdGlsbCBvciBvdmVyIHNvbHV0aW9uIHRpbWUpCgogICAgICAgICAgICAgICAgICAgIEZpcnN0TG9jayAgICAgICAgICAgICAgICAgICAgICAgKHRpbWVzdGFtcCBvZiBmaXJzdCBsb2NrKQoKIyBSb3RoZXIgT1NTIC8gb3RvYm8tYWkKICAgICAgICAgICAgICAgICAgICBMaW5rcyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYXJnZXRUeXBlIiA9PiAiVGlja2V0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYXJnZXRJRCIgICA9PiAiMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGlua1R5cGUiICAgPT4gIk5vcm1hbCIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIF0sCiMgRU8gb3RvYm8tYWkKCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZSA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb2R5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBseVRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluUmVwbHlUbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZGVyVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZGVyVHlwZUlECiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbWVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNvbWluZ1RpbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVVbml0CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBEeW5hbWljRmllbGRzID0+IDEgd2FzIHBhc3NlZCwgeW91J2xsIGdldCBhbiBlbnRyeSBsaWtlIHRoaXMgZm9yIGVhY2ggZHluYW1pYyBmaWVsZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZCA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAnc29tZSBuYW1lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJ3NvbWUgdmFsdWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dGFjaG1lbnQgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICAgID0+ICJ4eHh4IiwgICAgICMgYWN0dWFsIGF0dGFjaG1lbnQgY29udGVudHMsIGJhc2U2NCBlbmNvbmRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50QWx0ZXJuYXRpdmUgPT4gIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRJRCAgICAgICAgICA9PiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgICAgICAgID0+ICJhcHBsaWNhdGlvbi9wZGYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlSUQgICAgICAgICAgICAgPT4gMzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgICAgICAgICA9PiAiU3RkQXR0YWNobWVudC1UZXN0MS5wZGYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlc2l6ZVJhdyAgICAgICAgPT4gNDcyMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIC4gLiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIy4gLiAuCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIy4gLiAuCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJlc3VsdCA9ICRTZWxmLT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1dlYnNlcnZpY2UuSW52YWxpZENvbmZpZ3VyYXRpb24nLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAoICRVc2VySUQsICRVc2VyVHlwZSApID0gJFNlbGYtPkF1dGgoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0R2V0LkF1dGhGYWlsJywKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldEdldDogQXV0aG9yaXphdGlvbiBmYWlsaW5nISIsCiAgICApIGlmICEkVXNlcklEOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9LT57JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldEdldC5NaXNzaW5nUGFyYW1ldGVyJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0R2V0OiAkTmVlZGVkIHBhcmFtZXRlciBpcyBtaXNzaW5nISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgbXkgJEVycm9yTWVzc2FnZSA9ICcnOwoKICAgICMgYWxsIG5lZWRlZCB2YXJpYWJsZXMKICAgIG15IEBUaWNrZXRJRHM7CiAgICBpZiAoIElzU3RyaW5nV2l0aERhdGEoICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSApICkgewogICAgICAgIEBUaWNrZXRJRHMgPSBzcGxpdCggLywvLCAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0gKTsKICAgIH0KICAgIGVsc2lmICggSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0gKSApIHsKICAgICAgICBAVGlja2V0SURzID0gQHsgJFBhcmFte0RhdGF9LT57VGlja2V0SUR9IH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldEdldC5Xcm9uZ1N0cnVjdHVyZScsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0R2V0OiBTdHJ1Y3R1cmUgZm9yIFRpY2tldElEIGlzIG5vdCBjb3JyZWN0ISIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIEdldCB0aGUgbGlzdCBvZiBhcnRpY2xlIGR5bmFtaWMgZmllbGRzCiAgICBteSAkQXJ0aWNsZUR5bmFtaWNGaWVsZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3QoCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnQXJ0aWNsZScsCiAgICAgICAgUmVzdWx0VHlwZSA9PiAnSEFTSCcsCiAgICApOwoKICAgICMgQ3JhdGUgYSBsb29rdXAgbGlzdCBmb3IgZWFzeSBzZWFyY2gKICAgIG15ICVBcnRpY2xlRHluYW1pY0ZpZWxkTG9va3VwID0gcmV2ZXJzZSAleyRBcnRpY2xlRHluYW1pY0ZpZWxkTGlzdH07CgogICAgVElDS0VUOgogICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewoKICAgICAgICBteSAkQWNjZXNzID0gJFNlbGYtPkNoZWNrQWNjZXNzUGVybWlzc2lvbnMoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwKICAgICAgICAgICAgVXNlclR5cGUgPT4gJFVzZXJUeXBlLAogICAgICAgICk7CgogICAgICAgIG5leHQgVElDS0VUIGlmICRBY2Nlc3M7CgogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0R2V0LkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAnVGlja2V0R2V0OiBVc2VyIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB0aWNrZXQhJywKICAgICAgICApOwogICAgfQoKICAgIG15ICREeW5hbWljRmllbGRzICAgICAgICAgPSAkUGFyYW17RGF0YX0tPntEeW5hbWljRmllbGRzfSB8fCAwOwogICAgbXkgJEV4dGVuZGVkICAgICAgICAgICAgICA9ICRQYXJhbXtEYXRhfS0+e0V4dGVuZGVkfSAgICAgIHx8IDA7CiAgICBteSAkQWxsQXJ0aWNsZXMgICAgICAgICAgID0gJFBhcmFte0RhdGF9LT57QWxsQXJ0aWNsZXN9ICAgfHwgMDsKICAgIG15ICRBcnRpY2xlT3JkZXIgICAgICAgICAgPSAkUGFyYW17RGF0YX0tPntBcnRpY2xlT3JkZXJ9ICB8fCAnQVNDJzsKICAgIG15ICRBcnRpY2xlTGltaXQgICAgICAgICAgPSAkUGFyYW17RGF0YX0tPntBcnRpY2xlTGltaXR9ICB8fCAwOwogICAgbXkgJEF0dGFjaG1lbnRzICAgICAgICAgICA9ICRQYXJhbXtEYXRhfS0+e0F0dGFjaG1lbnRzfSAgIHx8IDA7CiAgICBteSAkR2V0QXR0YWNobWVudENvbnRlbnRzID0gJFBhcmFte0RhdGF9LT57R2V0QXR0YWNobWVudENvbnRlbnRzfSAvLyAxOwoKICAgIG15ICRSZXR1cm5EYXRhID0gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgIH07CiAgICBteSBASXRlbTsKCiAgICBteSAkQXJ0aWNsZVNlbmRlclR5cGUgPSAnJzsKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17RGF0YX0tPntBcnRpY2xlU2VuZGVyVHlwZX0gKSApIHsKICAgICAgICAkQXJ0aWNsZVNlbmRlclR5cGUgPSAkUGFyYW17RGF0YX0tPntBcnRpY2xlU2VuZGVyVHlwZX07CiAgICB9CiAgICBlbHNpZiAoIElzU3RyaW5nV2l0aERhdGEoICRQYXJhbXtEYXRhfS0+e0FydGljbGVTZW5kZXJUeXBlfSApICkgewogICAgICAgICRBcnRpY2xlU2VuZGVyVHlwZSA9IFsgJFBhcmFte0RhdGF9LT57QXJ0aWNsZVNlbmRlclR5cGV9IF07CiAgICB9CgogICAgIyBCeSBkZWZhdWx0LCBkbyBub3QgaW5jbHVkZSBIVE1MIGJvZHkgYXMgYXR0YWNobWVudCwgdW5sZXNzIGl0IGlzIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgogICAgbXkgJUV4Y2x1ZGVBdHRhY2htZW50cyA9ICgKICAgICAgICBFeGNsdWRlUGxhaW5UZXh0ID0+IDEsCiAgICAgICAgRXhjbHVkZUhUTUxCb2R5ICA9PiAkUGFyYW17RGF0YX0tPntIVE1MQm9keUFzQXR0YWNobWVudH0gPyAwIDogMSwKICAgICk7CgogICAgIyBzdGFydCB0aWNrZXQgbG9vcAogICAgVElDS0VUOgogICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewogICAgICAgIG15ICRUaWNrZXRBcnRpY2xlTGltaXQgPSAkQXJ0aWNsZUxpbWl0OwoKICAgICAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICAgICAjIGdldCB0aGUgVGlja2V0IGVudHJ5CiAgICAgICAgbXkgJVRpY2tldEVudHJ5UmF3ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAkRHluYW1pY0ZpZWxkcywKICAgICAgICAgICAgRXh0ZW5kZWQgICAgICA9PiAkRXh0ZW5kZWQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXRFbnRyeVJhdyApICkgewoKICAgICAgICAgICAgJEVycm9yTWVzc2FnZSA9ICdDb3VsZCBub3QgZ2V0IFRpY2tldCBkYXRhJwogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldEdldDo6UnVuKCknOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0R2V0Lk5vdFZhbGlkVGlja2V0SUQnLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRHZXQ6ICRFcnJvck1lc3NhZ2UiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJVRpY2tldEVudHJ5OwogICAgICAgIG15IEBEeW5hbWljRmllbGRzOwoKICAgICAgICAjIHJlbW92ZSBhbGwgZHluYW1pYyBmaWVsZHMgZnJvbSBtYWluIHRpY2tldCBoYXNoIGFuZCBzZXQgdGhlbSBpbnRvIGFuIGFycmF5LgogICAgICAgIEFUVFJJQlVURToKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlVGlja2V0RW50cnlSYXcgKSB7CgogICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGUgPX4gbXtcQSBEeW5hbWljRmllbGRfKC4qKSBcen1tc3ggKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBEeW5hbWljRmllbGRzLCB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJDEsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRpY2tldEVudHJ5UmF3eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIG5leHQgQVRUUklCVVRFOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkVGlja2V0RW50cnl7JEF0dHJpYnV0ZX0gPSAkVGlja2V0RW50cnlSYXd7JEF0dHJpYnV0ZX07CiAgICAgICAgfQoKICAgICAgICAkVGlja2V0RW50cnl7VGltZVVuaXR9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNjb3VudGVkVGltZUdldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICk7CgogICAgICAgICMgYWRkIGR5bmFtaWMgZmllbGRzIGFycmF5IGludG8gJ0R5bmFtaWNGaWVsZCcgaGFzaCBrZXkgaWYgYW55CiAgICAgICAgaWYgKEBEeW5hbWljRmllbGRzKSB7CiAgICAgICAgICAgICRUaWNrZXRFbnRyeXtEeW5hbWljRmllbGR9ID0gXEBEeW5hbWljRmllbGRzOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgVGlja2V0IGVudHJ5IGRhdGEKICAgICAgICBteSAkVGlja2V0QnVuZGxlID0gewogICAgICAgICAgICAlVGlja2V0RW50cnksCiAgICAgICAgfTsKCiAgICAgICAgaWYgKCAhJEFsbEFydGljbGVzICkgewojIFJvdGhlciBPU1MgLyBvdG9iby1haQogICAgICAgICAgICAkVGlja2V0QnVuZGxlLT57TGlua3N9ID0gJFNlbGYtPl9BZGRMaW5rcygKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkUGFyYW17RGF0YX0sCiAgICAgICAgICAgICAgICBUaWNrZXRCdW5kbGUgPT4gJFRpY2tldEJ1bmRsZQogICAgICAgICAgICApOwojIEVPIG90b2JvLWFpCiAgICAgICAgICAgIHB1c2ggQEl0ZW0sICRUaWNrZXRCdW5kbGU7CiAgICAgICAgICAgIG5leHQgVElDS0VUOwogICAgICAgIH0KCiAgICAgICAgbXkgJUFydGljbGVMaXN0RmlsdGVyczsKICAgICAgICBpZiAoICRVc2VyVHlwZSBlcSAnQ3VzdG9tZXInICkgewogICAgICAgICAgICAlQXJ0aWNsZUxpc3RGaWx0ZXJzID0gKAogICAgICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICAgICBteSBAQXJ0aWNsZXM7CiAgICAgICAgaWYgKCRBcnRpY2xlU2VuZGVyVHlwZSkgewogICAgICAgICAgICBmb3IgbXkgJFNlbmRlclR5cGUgKCBAeyAkQXJ0aWNsZVNlbmRlclR5cGUgfHwgW10gfSApIHsKICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlc0ZpbHRlcmVkID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgPT4gJFNlbmRlclR5cGUsCiAgICAgICAgICAgICAgICAgICAgJUFydGljbGVMaXN0RmlsdGVycywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBwdXNoIEBBcnRpY2xlcywgQEFydGljbGVzRmlsdGVyZWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICVBcnRpY2xlTGlzdEZpbHRlcnMsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIE1vZGlmeSBBcnRpY2xlTGltaXQgaWYgaXQgaXMgZ3JlYXRlciB0aGVuIG51bWJlciBvZiBhcnRpY2xlcyAoc2VlIGJ1ZyMxNDU4NSkuCiAgICAgICAgaWYgKCAkQXJ0aWNsZUxpbWl0ID4gc2NhbGFyIEBBcnRpY2xlcyApIHsKICAgICAgICAgICAgJFRpY2tldEFydGljbGVMaW1pdCA9IHNjYWxhciBAQXJ0aWNsZXM7CiAgICAgICAgfQoKICAgICAgICAjIFNldCBudW1iZXIgb2YgYXJ0aWNsZXMgYnkgQXJ0aWNsZUxpbWl0IGFuZCBBcnRpY2xlT3JkZXIgcGFyYW1ldGVycy4KICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggXEBBcnRpY2xlcyApICYmICRUaWNrZXRBcnRpY2xlTGltaXQgKSB7CiAgICAgICAgICAgIGlmICggJEFydGljbGVPcmRlciBlcSAnREVTQycgKSB7CiAgICAgICAgICAgICAgICBAQXJ0aWNsZXMgPSByZXZlcnNlIEBBcnRpY2xlczsKICAgICAgICAgICAgfQogICAgICAgICAgICBAQXJ0aWNsZXMgPSBAQXJ0aWNsZXNbIDAgLi4gKCAkVGlja2V0QXJ0aWNsZUxpbWl0IC0gMSApIF07CiAgICAgICAgfQoKICAgICAgICAjIHN0YXJ0IGFydGljbGUgbG9vcAogICAgICAgIEFSVElDTEU6CiAgICAgICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZXMpIHsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSggJXskQXJ0aWNsZX0gKTsKCiAgICAgICAgICAgIG15ICVBcnRpY2xlRGF0YSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+ICREeW5hbWljRmllbGRzLAogICAgICAgICAgICApOwogICAgICAgICAgICAkQXJ0aWNsZSA9IFwlQXJ0aWNsZURhdGE7CgogICAgICAgICAgICBuZXh0IEFSVElDTEUgaWYgISRBdHRhY2htZW50czsKCiAgICAgICAgICAgICMgZ2V0IGF0dGFjaG1lbnQgaW5kZXggKHdpdGhvdXQgYXR0YWNobWVudHMpCiAgICAgICAgICAgIG15ICVBdG1JbmRleCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAlRXhjbHVkZUF0dGFjaG1lbnRzLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBBUlRJQ0xFIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggXCVBdG1JbmRleCApOwoKICAgICAgICAgICAgbXkgQEF0dGFjaG1lbnRzOwogICAgICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgICAgICBmb3IgbXkgJEZpbGVJRCAoIHNvcnQga2V5cyAlQXRtSW5kZXggKSB7CiAgICAgICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRGaWxlSUQ7CiAgICAgICAgICAgICAgICBteSAlQXR0YWNobWVudCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICBGaWxlSUQgICAgPT4gJEZpbGVJRCwgICAgICAgICAgICAgICAgICMgYXMgcmV0dXJuZWQgYnkgQXJ0aWNsZUF0dGFjaG1lbnRJbmRleAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCBcJUF0dGFjaG1lbnQgKTsKCiAgICAgICAgICAgICAgICAkQXR0YWNobWVudHtGaWxlSUR9ID0gJEZpbGVJRDsKICAgICAgICAgICAgICAgIGlmICgkR2V0QXR0YWNobWVudENvbnRlbnRzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBjb250ZW50IHRvIGJhc2U2NCwgYnV0IHByZXZlbnQgNzYgY2hhcnMgYnJha2UsIHNlZSBidWcjMTQ1MDAuCiAgICAgICAgICAgICAgICAgICAgJEF0dGFjaG1lbnR7Q29udGVudH0gPSBlbmNvZGVfYmFzZTY0KCAkQXR0YWNobWVudHtDb250ZW50fSwgJycgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICMgdW5zZXQgY29udGVudAogICAgICAgICAgICAgICAgICAgICRBdHRhY2htZW50e0NvbnRlbnR9ICAgICAgICAgICAgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkQXR0YWNobWVudHtDb250ZW50QWx0ZXJuYXRpdmV9ID0gJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoIEBBdHRhY2htZW50cywgeyVBdHRhY2htZW50fTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgQXR0YWNobWVudHMgZGF0YQogICAgICAgICAgICAkQXJ0aWNsZS0+e0F0dGFjaG1lbnR9ID0gXEBBdHRhY2htZW50czsKCiAgICAgICAgfSAgICAjIGZpbmlzaCBhcnRpY2xlIGxvb3AKCiAgICAgICAgIyBzZXQgVGlja2V0IGVudHJ5IGRhdGEKICAgICAgICBpZiAoQEFydGljbGVzKSB7CgogICAgICAgICAgICBteSBAQXJ0aWNsZUJveDsKCiAgICAgICAgICAgIGZvciBteSAkQXJ0aWNsZVJhdyAoQEFydGljbGVzKSB7CiAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZTsKICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlRHluYW1pY0ZpZWxkczsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBhbGwgZHluYW1pYyBmaWVsZHMgZnJvbSBtYWluIGFydGljbGUgaGFzaCBhbmQgc2V0IHRoZW0gaW50byBhbiBhcnJheS4KICAgICAgICAgICAgICAgIEFUVFJJQlVURToKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7JEFydGljbGVSYXd9ICkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGUgPX4gbXtcQSBEeW5hbWljRmllbGRfKC4qKSBcen1tc3ggKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHNraXAgZHluYW1pYyBmaWVsZHMgdGhhdCBhcmUgbm90IGFydGljbGUgcmVsYXRlZAogICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgQXJ0aWNsZUdldCgpIGFsc28gcmV0dXJucyB0aWNrZXQgZHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgKCAhJEFydGljbGVEeW5hbWljRmllbGRMb29rdXB7JDF9ICk7CgogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBBcnRpY2xlRHluYW1pY0ZpZWxkcywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gJDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkQXJ0aWNsZVJhdy0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEFUVFJJQlVURTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRBcnRpY2xleyRBdHRyaWJ1dGV9ID0gJEFydGljbGVSYXctPnskQXR0cmlidXRlfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkQXJ0aWNsZXtUaW1lVW5pdH0gPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUFjY291bnRlZFRpbWVHZXQoCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlUmF3LT57QXJ0aWNsZUlEfQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGFkZCBkeW5hbWljIGZpZWxkcyBhcnJheSBpbnRvICdEeW5hbWljRmllbGQnIGhhc2gga2V5IGlmIGFueQogICAgICAgICAgICAgICAgaWYgKEBBcnRpY2xlRHluYW1pY0ZpZWxkcykgewogICAgICAgICAgICAgICAgICAgICRBcnRpY2xle0R5bmFtaWNGaWVsZH0gPSBcQEFydGljbGVEeW5hbWljRmllbGRzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHB1c2ggQEFydGljbGVCb3gsIFwlQXJ0aWNsZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkVGlja2V0QnVuZGxlLT57QXJ0aWNsZX0gPSBcQEFydGljbGVCb3g7CiAgICAgICAgfQoKIyBSb3RoZXIgT1NTIC8gb3RvYm8tYWkKICAgICAgICAkVGlja2V0QnVuZGxlLT57TGlua3N9ID0gJFNlbGYtPl9BZGRMaW5rcygKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRQYXJhbXtEYXRhfSwKICAgICAgICAgICAgVGlja2V0QnVuZGxlID0+ICRUaWNrZXRCdW5kbGUKICAgICAgICApOwojIEVPIG90b2JvLWFpCgogICAgICAgIHB1c2ggQEl0ZW0sICRUaWNrZXRCdW5kbGU7CiAgICB9ICAgICMgZmluaXNoIHRpY2tldCBsb29wCgogICAgaWYgKCAhc2NhbGFyIEBJdGVtICkgewogICAgICAgICRFcnJvck1lc3NhZ2UgPSAnQ291bGQgbm90IGdldCBUaWNrZXQgZGF0YScKICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldEdldDo6UnVuKCknOwoKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldEdldC5Ob3RUaWNrZXREYXRhJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRHZXQ6ICRFcnJvck1lc3NhZ2UiLAogICAgICAgICk7CgogICAgfQoKICAgICMgc2V0IHRpY2tldCBkYXRhIGludG8gcmV0dXJuIHN0cnVjdHVyZQogICAgJFJldHVybkRhdGEtPntEYXRhfS0+e1RpY2tldH0gPSBcQEl0ZW07CgogICAgIyByZXR1cm4gcmVzdWx0CiAgICByZXR1cm4gJFJldHVybkRhdGE7Cn0KCiMgUm90aGVyIE9TUyAvIG90b2JvLWFpCnN1YiBfQWRkTGlua3MgewoKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CiAgICBteSAkVGlja2V0QnVuZGxlID0gJFBhcmFte1RpY2tldEJ1bmRsZX07CiAgICBteSAkVGlja2V0SUQgICAgID0gJFRpY2tldEJ1bmRsZS0+e1RpY2tldElEfTsKCiAgICAjIGdldCBsaW5rcwogICAgbXkgJEdldExpbmtzID0gJFBhcmFte0RhdGF9LT57TGlua3N9OwogICAgaWYgKCRHZXRMaW5rcykgewoKICAgICAgICBpZiAoIHJlZiAkR2V0TGlua3MgbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJEdldExpbmtzID0gWyRHZXRMaW5rc107CiAgICAgICAgfQogICAgICAgIG15ICRMaW5rT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKICAgICAgICBteSAkTGlua3MgICAgICA9ICRMaW5rT2JqZWN0LT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgICAgICBPYmplY3QgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIEtleSAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFN0YXRlICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgRGlyZWN0aW9uID0+ICdCb3RoJywKICAgICAgICApOwoKICAgICAgICBteSBATGlua3MyUmV0dXJuOwoKICAgICAgICBPQkpFQ1RUWVBFOgogICAgICAgIGZvciBteSAkVGFyZ2V0VHlwZSAoICRHZXRMaW5rcy0+QCogKSB7CgogICAgICAgICAgICBuZXh0IE9CSkVDVFRZUEUgaWYgIWV4aXN0cyAkTGlua3MtPnskVGFyZ2V0VHlwZX07CgogICAgICAgICAgICBmb3IgbXkgJExpbmtLaW5kICgga2V5cyAkTGlua3MtPnskVGFyZ2V0VHlwZX0tPiUqICkgewoKICAgICAgICAgICAgICAgIGZvciBteSAkRGlyZWN0aW9uICgga2V5cyAkTGlua3MtPnskVGFyZ2V0VHlwZX0tPnskTGlua0tpbmR9LT4lKiApIHsKCiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRMaW5rICgga2V5cyAkTGlua3MtPnskVGFyZ2V0VHlwZX0tPnskTGlua0tpbmR9LT57JERpcmVjdGlvbn0tPiUqICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJERhdGEgPSAkTGlua3MtPnskVGFyZ2V0VHlwZX0tPnskTGlua0tpbmR9LT57JERpcmVjdGlvbn0tPnskTGlua307CgogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBMaW5rczJSZXR1cm4sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtUeXBlICAgPT4gJExpbmtLaW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0VHlwZSA9PiAkVGFyZ2V0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldElEICAgPT4gJExpbmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgID0+ICREYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uICA9PiAkRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gXEBMaW5rczJSZXR1cm47CiAgICB9CgogICAgcmV0dXJuIFtdOwp9CgojIEVPIG90b2JvLWFpCgoxOwo=</File>
        <File Location="Kernel/GenericInterface/Operation/ElasticSearch/FAQSearch.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpFbGFzdGljU2VhcmNoOjpGQVFTZWFyY2g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoIDphbGwgKTsKCnVzZSBwYXJlbnQgcXcoCiAgICBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uCik7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkVsYXN0aWNTZWFyY2g6OkZBUVNlYXJjaCAtIEdlbmVyaWNJbnRlcmZhY2UgRVMgU2VhcmNoIE9wZXJhdGlvbiBiYWNrZW5kIGZvciBGQVFzCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRGVidWdnZXJPYmplY3QgV2Vic2VydmljZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBJbml0KCkKCmluaXRpYWxpemUgdGhlIG9wZXJhdGlvbiBieSBjaGVja2luZyB0aGUgd2ViIHNlcnZpY2UgY29uZmlndXJhdGlvbiBhbmQgZ2F0aGVyIG9mIHRoZSBkeW5hbWljIGZpZWxkcwoKICAgIG15ICRSZXR1cm4gPSAkQ29tbW9uT2JqZWN0LT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAxLAogICAgKTsKCnJldHVybnM6CgogICAgJFJldHVybiA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAgaW4gY2FzZSBvZiBmYWlsdXJlLAogICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgTWVzc2FnZScsCiAgICB9Cgo9Y3V0CgpzdWIgSW5pdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkCiAgICBpZiAoICEkUGFyYW17V2Vic2VydmljZUlEfSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gV2Vic2VydmljZUlEISIsCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGdldCB3ZWIgc2VydmljZSBjb25maWd1cmF0aW9uCiAgICBteSAkV2Vic2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyktPldlYnNlcnZpY2VHZXQoCiAgICAgICAgSUQgPT4gJFBhcmFte1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRXZWJzZXJ2aWNlKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnQ291bGQgbm90IGRldGVybWluZSBXZWIgc2VydmljZSBjb25maWd1cmF0aW9uJwogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OkNvbW1vbjo6bmV3KCknLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9Owp9Cgo9aGVhZDIgUnVuKCkKClBlcmZvcm0gRkFRU2VhcmNoIE9wZXJhdGlvbi4gVGhpcyB3aWxsIHJldHVybiBGQVEgaXRlbXMgZnJvbSBFUy4KCiAgICBteSAkUmVzdWx0ID0gJE9wZXJhdGlvbk9iamVjdC0+UnVuKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBGdWxsdGV4dCA9PiAnc2VhcmNodGVybScKICAgICAgICAgICAgTGltaXQgICAgPT4gMTAsICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBkZWZhdWx0IGlzIDEwCiAgICAgICAgfQogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEKICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW4gY2FzZSBvZiBhbiBlcnJvcgogICAgICAgIERhdGEgICAgICAgICA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICdBdHRhY2htZW50cycgPT4gW10sCiAgICAgICAgICAgICAgICAnQ2F0ZWdvcnlJRCcgPT4gMSwKICAgICAgICAgICAgICAgICdGaWVsZDEnID0+ICc8c3ltcHRob20+JywKICAgICAgICAgICAgICAgICdGaWVsZDInID0+ICc8cHJvYmxlbT4nLAogICAgICAgICAgICAgICAgJ0ZpZWxkMycgPT4gJzxzb2x1dGlvbj4nLAogICAgICAgICAgICAgICAgJ0l0ZW1JRCcgPT4gMiwKICAgICAgICAgICAgICAgICdLZXl3b3JkcycgPT4gJ0thdHplLCBIdW5nZXIsIEZ1dHRlcicsCiAgICAgICAgICAgICAgICAnTnVtYmVyJyA9PiAnMTAwMDInLAogICAgICAgICAgICAgICAgJ1N0YXRlVHlwZUlEJyA9PiAxLAogICAgICAgICAgICAgICAgJ1RpdGxlJyA9PiAnS2F0emUgZnVldHRlcm4hJwogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9OwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+SW5pdCgKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgKTsKCiAgICBpZiAoICEkUmVzdWx0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1dlYnNlcnZpY2UuSW52YWxpZENvbmZpZ3VyYXRpb24nLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAoICRVc2VySUQsICRVc2VyVHlwZSApID0gJFNlbGYtPkF1dGgoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgIEVycm9yQ29kZSAgICA9PiAnRWxhc3RpY1NlYXJjaC5BdXRoRmFpbCcsCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJFbGFzdGljU2VhcmNoOiBBdXRob3JpemF0aW9uIGZhaWxpbmchIiwKICAgICkgaWYgISRVc2VySUQ7CgogICAgbXkgJEVTT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkVsYXN0aWNzZWFyY2gnKTsKICAgIG15IEBSZXN1bHQgICA9ICRFU09iamVjdC0+RkFRU2VhcmNoKAogICAgICAgIEZ1bGx0ZXh0ID0+ICRQYXJhbXtEYXRhfS0+e0Z1bGx0ZXh0fSwKICAgICAgICBSZXN1bHQgICA9PiAnRlVMTCcsCiAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwKICAgICAgICBMaW1pdCAgICA9PiAkUGFyYW17RGF0YX0tPntMaW1pdH0gLy8gMTAsCiAgICApOwoKICAgIG15IEBSZXR1cm47CgogICAgZm9yIG15ICRJdGVtIChAUmVzdWx0KSB7CiAgICAgICAgZm9yIG15ICRLZXkgKCBrZXlzICRJdGVtLT4lKiApIHsKICAgICAgICAgICAgcHVzaCBAUmV0dXJuLCAkSXRlbS0+eyRLZXl9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBEYXRhICAgID0+IFxAUmV0dXJuLAogICAgfTsKfQoKMTsK</File>
        <File Location="Kernel/GenericInterface/Operation/ElasticSearch/TicketSearch.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpFbGFzdGljU2VhcmNoOjpUaWNrZXRTZWFyY2g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoIDphbGwgKTsKCnVzZSBwYXJlbnQgcXcoCiAgICBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6Q29tbW9uCik7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OkVsYXN0aWNTZWFyY2g6OlRpY2tldFNlYXJjaCAtIEdlbmVyaWNJbnRlcmZhY2UgRVMgU2VhcmNoIE9wZXJhdGlvbiBiYWNrZW5kIGZvciBUaWNrZXRzCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRGVidWdnZXJPYmplY3QgV2Vic2VydmljZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBJbml0KCkKCmluaXRpYWxpemUgdGhlIG9wZXJhdGlvbiBieSBjaGVja2luZyB0aGUgd2ViIHNlcnZpY2UgY29uZmlndXJhdGlvbiBhbmQgZ2F0aGVyIG9mIHRoZSBkeW5hbWljIGZpZWxkcwoKICAgIG15ICRSZXR1cm4gPSAkQ29tbW9uT2JqZWN0LT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAxLAogICAgKTsKCnJldHVybnM6CgogICAgJFJldHVybiA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIG9yIDAgaW4gY2FzZSBvZiBmYWlsdXJlLAogICAgICAgIEVycm9yTWVzc2FnZSA9PiAnRXJyb3IgTWVzc2FnZScsCiAgICB9Cgo9Y3V0CgpzdWIgSW5pdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkCiAgICBpZiAoICEkUGFyYW17V2Vic2VydmljZUlEfSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gV2Vic2VydmljZUlEISIsCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGdldCB3ZWIgc2VydmljZSBjb25maWd1cmF0aW9uCiAgICBteSAkV2Vic2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyktPldlYnNlcnZpY2VHZXQoCiAgICAgICAgSUQgPT4gJFBhcmFte1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRXZWJzZXJ2aWNlKSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAnQ291bGQgbm90IGRldGVybWluZSBXZWIgc2VydmljZSBjb25maWd1cmF0aW9uJwogICAgICAgICAgICAgICAgLiAnIGluIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OkNvbW1vbjo6bmV3KCknLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICB9Owp9Cgo9aGVhZDIgUnVuKCkKClBlcmZvcm0gRkFRU2VhcmNoIE9wZXJhdGlvbi4gVGhpcyB3aWxsIHJldHVybiBUaWNrZXQgaXRlbXMgZnJvbSBFUy4KCiAgICBteSAkUmVzdWx0ID0gJE9wZXJhdGlvbk9iamVjdC0+UnVuKAoKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgRnVsbHRleHQgPT4gJ3NlYXJjaHRlcm0nCiAgICAgICAgICAgIExpbWl0ICAgID0+IDEwLCAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCwgZGVmYXVsdCBpcyAxMAogICAgICAgIH0KICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluIGNhc2Ugb2YgYW4gZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAnQXR0YWNobWVudHMnID0+IFtdLAogICAgICAgICAgICAgICAgJ0NhdGVnb3J5SUQnID0+IDEsCiAgICAgICAgICAgICAgICAnRmllbGQxJyA9PiAnPHN5bXB0aG9tPicsCiAgICAgICAgICAgICAgICAnRmllbGQyJyA9PiAnPHByb2JsZW0+JywKICAgICAgICAgICAgICAgICdGaWVsZDMnID0+ICc8c29sdXRpb24+JywKICAgICAgICAgICAgICAgICdJdGVtSUQnID0+IDIsCiAgICAgICAgICAgICAgICAnS2V5d29yZHMnID0+ICdLYXR6ZSwgSHVuZ2VyLCBGdXR0ZXInLAogICAgICAgICAgICAgICAgJ051bWJlcicgPT4gJzEwMDAyJywKICAgICAgICAgICAgICAgICdTdGF0ZVR5cGVJRCcgPT4gMSwKICAgICAgICAgICAgICAgICdUaXRsZScgPT4gJ0thdHplIGZ1ZXR0ZXJuIScKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgfTsKCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUmVzdWx0ID0gJFNlbGYtPkluaXQoCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICk7CgogICAgaWYgKCAhJFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdXZWJzZXJ2aWNlLkludmFsaWRDb25maWd1cmF0aW9uJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICk7CiAgICB9CgogICAgbXkgKCAkVXNlcklELCAkVXNlclR5cGUgKSA9ICRTZWxmLT5BdXRoKAogICAgICAgICVQYXJhbSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICBFcnJvckNvZGUgICAgPT4gJ0VsYXN0aWNTZWFyY2guQXV0aEZhaWwnLAogICAgICAgIEVycm9yTWVzc2FnZSA9PiAiRWxhc3RpY1NlYXJjaDogQXV0aG9yaXphdGlvbiBmYWlsaW5nISIsCiAgICApIGlmICEkVXNlcklEOwoKICAgIG15ICRFU09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbGFzdGljc2VhcmNoJyk7CiAgICBteSBAUmVzdWx0ICAgPSAkRVNPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICBGdWxsdGV4dCA9PiAkUGFyYW17RGF0YX0tPntGdWxsdGV4dH0sCiAgICAgICAgUmVzdWx0ICAgPT4gJ0ZVTEwnLAogICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgTGltaXQgICAgPT4gJFBhcmFte0RhdGF9LT57TGltaXR9IC8vIDEwLAogICAgKTsKCiAgICBteSBAUmV0dXJuOwoKICAgIGZvciBteSAkSXRlbSAoQFJlc3VsdCkgewogICAgICAgIGZvciBteSAkS2V5ICgga2V5cyAkSXRlbS0+JSogKSB7CiAgICAgICAgICAgIHB1c2ggQFJldHVybiwgJEl0ZW0tPnskS2V5fTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiBcQFJldHVybiwKICAgIH07Cn0KCjE7Cg==</File>
        <File Location="Kernel/GenericInterface/Operation/Ticket/Link.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6Okxpbms7Cgp1c2UgdjUuMjQ7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBwYXJlbnQgcXcoCiAgICBLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpUaWNrZXRVcGRhdGUKKTsKCiMgY29yZSBtb2R1bGVzCnVzZSBTY2FsYXI6OlV0aWwgcXcocmVmdHlwZSk7CnVzZSBNSU1FOjpCYXNlNjQgcXcoZW5jb2RlX2Jhc2U2NCk7CgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyhJc0FycmF5UmVmV2l0aERhdGEgSXNIYXNoUmVmV2l0aERhdGEgSXNTdHJpbmcgSXNTdHJpbmdXaXRoRGF0YSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb246OlRpY2tldDo6TGluayAtIExpbmsgVGlja2V0IHRvIE9iamVjdHMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEM8S2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpPcGVyYXRpb24tPm5ldygpOz4uCgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSBibGVzcyB7fSwgJFR5cGU7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KCBEZWJ1Z2dlck9iamVjdCBXZWJzZXJ2aWNlSUQgKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfTsKICAgIH0KCiAgICAkU2VsZi0+e0NvbmZpZ30gICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0dlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6TGluaycpOwogICAgJFNlbGYtPntPcGVyYXRpb259ID0gJFBhcmFte09wZXJhdGlvbn07CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUnVuKCkKCnBlcmZvcm0gYSBsaW5rIHRpY2tldCB0byB0YXJnZXQgT3BlcmF0aW9uLgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgICAgID0+ICdzb21lIGFnZW50IGxvZ2luJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyTG9naW4gb3IgQ3VzdG9tZXJVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIHJlcXVpcmVkCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgID0+IDEyMywKCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAnc29tZSBwYXNzd29yZCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBVc2VyTG9naW4gb3IgY3VzdG9tZXJVc2VyTG9naW4gaXMgc2VudCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBhc3N3b3JkIGlzIHJlcXVpcmVkCgogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGlja2V0SUQgb3IgVGlja2V0TnVtYmVyIGlzIHJlcXVpcmVkCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAnMjAwNDA0MDUxMDQ0MDQ4NScsCgogICAgICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0ZBUScsICAgICAgICAgICAjIFRpY2tldCwgQ29uZmlnSXRlbQoKICAgICAgICAgICAgVGFyZ2V0SUQgICAgID0+ICc1JywgICAgICAgICAgICAgIyBJZCBvZiB0YXJnZXQKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdQYXJlbnRDaGlsZCcsICAgIyBkZWZhdWx0cyB0byBOb3JtYWwKICAgICAgIH0sCiAgICApOwoKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgICA9PiAxLAogICAgICAgIH0KICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJlc3VsdCA9ICRTZWxmLT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnV2Vic2VydmljZS5JbnZhbGlkQ29uZmlndXJhdGlvbicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0RhdGF9ICkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRMaW5rLkVtcHR5UmVxdWVzdCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0TGluazogVGhlIHJlcXVlc3QgZGF0YSBpcyBpbnZhbGlkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICEkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0gJiYgISRQYXJhbXtEYXRhfS0+e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRMaW5rLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldExpbms6IFRpY2tldElEIG9yIFRpY2tldE51bWJlciBpcyByZXF1aXJlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJFBhcmFte0RhdGF9LT57VGFyZ2V0VHlwZX0gfHwgISRQYXJhbXtEYXRhfS0+e1RhcmdldElEfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldExpbmsuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0TGluazogVGFyZ2V0VHlwZSBhbmQgVGFyZ2V0SUQgYXJlIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkTGlua1R5cGUgPSAkUGFyYW17RGF0YX0tPntMaW5rVHlwZX0gfHwgJ05vcm1hbCc7CgogICAgaWYgKAogICAgICAgICEkUGFyYW17RGF0YX0tPntVc2VyTG9naW59CiAgICAgICAgJiYgISRQYXJhbXtEYXRhfS0+e1Nlc3Npb25JRH0KICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRMaW5rLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldExpbms6IFVzZXJMb2dpbiBvciBTZXNzaW9uSUQgaXMgcmVxdWlyZWQhIiwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0RhdGF9LT57VXNlckxvZ2lufSApIHsKICAgICAgICBpZiAoICEkUGFyYW17RGF0YX0tPntQYXNzd29yZH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldExpbmsuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldExpbms6IFBhc3N3b3JkIG9yIFNlc3Npb25JRCBpcyByZXF1aXJlZCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGF1dGhlbnRpY2F0ZSB1c2VyCiAgICBteSAoICRVc2VySUQsICRVc2VyVHlwZSApID0gJFNlbGYtPkF1dGgoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICBpZiAoICEkVXNlcklEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0TGluay5BdXRoRmFpbCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0TGluazogVXNlciBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIGNoZWNrIFRpY2tldElECiAgICBteSAkVGlja2V0SUQ7CiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0SURMb29rdXAoCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgIH0KICAgIGVsc2UgewogICAgICAgICRUaWNrZXRJRCA9ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfTsKICAgIH0KCiAgICBpZiAoICEoJFRpY2tldElEKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldExpbmsuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRMaW5rOiBVc2VyIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB0aWNrZXQhIiwKICAgICAgICApOwogICAgfQoKICAgIG15ICVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICApOwoKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCBcJVRpY2tldERhdGEgKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldExpbmsuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRMaW5rOiBVc2VyIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB0aWNrZXQhIiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgYmFzaWMgbmVlZGVkIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzOwogICAgaWYgKCAkVXNlclR5cGUgZXEgJ1VzZXInICkgewoKICAgICAgICAkQWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ3J3JywKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICA9PiAkVXNlcklELAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkQWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3VzdG9tZXJQZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgICA9PiAncncnLAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgKTsKICAgIH0KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRMaW5rLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0TGluazogRG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBsaW5rIHRoaXMgdGlja2V0ISIsCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAkTGlua09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CgogICAgJEFjY2VzcyA9ICRMaW5rT2JqZWN0LT5PYmplY3RQZXJtaXNzaW9uKAogICAgICAgIE9iamVjdCA9PiAkUGFyYW17RGF0YX0tPntUYXJnZXRUeXBlfSwKICAgICAgICBLZXkgICAgPT4gJFBhcmFte0RhdGF9LT57VGFyZ2V0SUR9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRMaW5rLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0TGluazogRG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBsaW5rIHRvIHRoaXMgb2JqZWN0ISIsCiAgICAgICAgfTsKICAgIH0KCiAgICAkUmVzdWx0ID0gJExpbmtPYmplY3QtPkxpbmtBZGQoCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdUaWNrZXQnLAogICAgICAgIFRhcmdldEtleSAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICRQYXJhbXtEYXRhfS0+e1RhcmdldFR5cGV9LAogICAgICAgIFNvdXJjZUtleSAgICA9PiAkUGFyYW17RGF0YX0tPntUYXJnZXRJRH0sCiAgICAgICAgVHlwZSAgICAgICAgID0+ICRMaW5rVHlwZSwKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICk7CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+ICRSZXN1bHQsCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gJFJlc3VsdCwKICAgICAgICB9CiAgICB9Owp9CgoxOwo=</File>
        <File Location="Kernel/GenericInterface/Operation/Ticket/UnLink.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlVuTGluazsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldFVwZGF0ZQopOwoKIyBjb3JlIG1vZHVsZXMKdXNlIFNjYWxhcjo6VXRpbCBxdyhyZWZ0eXBlKTsKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZyBJc1N0cmluZ1dpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpVbkxpbmsgLSBSZW1vdmUgTGluayBUaWNrZXQgdG8gT2JqZWN0cwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgQzxLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Pi4KCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9IGJsZXNzIHt9LCAkVHlwZTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIERlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRCApKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgICRTZWxmLT57Q29uZmlnfSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpMaW5rJyk7CiAgICAkU2VsZi0+e09wZXJhdGlvbn0gPSAkUGFyYW17T3BlcmF0aW9ufTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBSdW4oKQoKcGVyZm9ybSB1bmxpbmsgT3BlcmF0aW9uIHJlbW92aW5nIGEgbGluayBmcm9tIGEgdGlja2V0IHRvIHNvbWUgdGFyZ2V0LgoKICAgIG15ICRSZXN1bHQgPSAkT3BlcmF0aW9uT2JqZWN0LT5SdW4oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgICAgID0+ICdzb21lIGFnZW50IGxvZ2luJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2VyTG9naW4gb3IgQ3VzdG9tZXJVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIHJlcXVpcmVkCiAgICAgICAgICAgIFNlc3Npb25JRCAgICAgICAgID0+IDEyMywKCiAgICAgICAgICAgIFBhc3N3b3JkICA9PiAnc29tZSBwYXNzd29yZCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBVc2VyTG9naW4gb3IgY3VzdG9tZXJVc2VyTG9naW4gaXMgc2VudCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIFBhc3N3b3JkIGlzIHJlcXVpcmVkCgogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGlja2V0SUQgb3IgVGlja2V0TnVtYmVyIGlzIHJlcXVpcmVkCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAnMjAwNDA0MDUxMDQ0MDQ4NScsCgogICAgICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0ZBUScsICAgICAgICAgICAjIFRpY2tldCwgQ29uZmlnSXRlbQoKICAgICAgICAgICAgVGFyZ2V0SUQgICAgID0+ICc1JywgICAgICAgICAgICAgIyBJZCBvZiB0YXJnZXQKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdQYXJlbnRDaGlsZCcsICAgIyBkZWZhdWx0cyB0byBOb3JtYWwKICAgICAgIH0sCiAgICApOwoKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgICA9PiAxLAogICAgICAgIH0KICAgIH07Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJlc3VsdCA9ICRTZWxmLT5Jbml0KAogICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICApOwoKICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnV2Vic2VydmljZS5JbnZhbGlkQ29uZmlndXJhdGlvbicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte0RhdGF9ICkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRVbkxpbmsuRW1wdHlSZXF1ZXN0JywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRVbkxpbms6IFRoZSByZXF1ZXN0IGRhdGEgaXMgaW52YWxpZCEiLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAhJFBhcmFte0RhdGF9LT57VGlja2V0SUR9ICYmICEkUGFyYW17RGF0YX0tPntUaWNrZXROdW1iZXJ9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0VW5MaW5rLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogVGlja2V0SUQgb3IgVGlja2V0TnVtYmVyIGlzIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICEkUGFyYW17RGF0YX0tPntUYXJnZXRUeXBlfSB8fCAhJFBhcmFte0RhdGF9LT57VGFyZ2V0SUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnVGlja2V0VW5MaW5rLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogVGFyZ2V0VHlwZSBhbmQgVGFyZ2V0SUQgYXJlIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkTGlua1R5cGUgPSAkUGFyYW17RGF0YX0tPntMaW5rVHlwZX0gfHwgJ05vcm1hbCc7CgogICAgaWYgKAogICAgICAgICEkUGFyYW17RGF0YX0tPntVc2VyTG9naW59CiAgICAgICAgJiYgISRQYXJhbXtEYXRhfS0+e1Nlc3Npb25JRH0KICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRVbkxpbmsuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVGlja2V0VW5MaW5rOiBVc2VyTG9naW4gb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1VzZXJMb2dpbn0gKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9LT57UGFzc3dvcmR9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRVbkxpbmsuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogUGFzc3dvcmQgb3IgU2Vzc2lvbklEIGlzIHJlcXVpcmVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYXV0aGVudGljYXRlIHVzZXIKICAgIG15ICggJFVzZXJJRCwgJFVzZXJUeXBlICkgPSAkU2VsZi0+QXV0aCgKICAgICAgICAlUGFyYW0sCiAgICApOwoKICAgIGlmICggISRVc2VySUQgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRVbkxpbmsuQXV0aEZhaWwnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogVXNlciBjb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAjIGNoZWNrIFRpY2tldElECiAgICBteSAkVGlja2V0SUQ7CiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0SURMb29rdXAoCiAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgIH0KICAgIGVsc2UgewogICAgICAgICRUaWNrZXRJRCA9ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfTsKICAgIH0KCiAgICBpZiAoICEoJFRpY2tldElEKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldFVuTGluay5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogVXNlciBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgdGlja2V0ISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAlVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggXCVUaWNrZXREYXRhICkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdUaWNrZXRVbkxpbmsuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJUaWNrZXRVbkxpbms6IFVzZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHRpY2tldCEiLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBiYXNpYyBuZWVkZWQgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3M7CiAgICBpZiAoICRVc2VyVHlwZSBlcSAnVXNlcicgKSB7CgogICAgICAgICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgICA9PiAncncnLAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRBY2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDdXN0b21lclBlcm1pc3Npb24oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdydycsCiAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwKICAgICAgICApOwogICAgfQogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldFVuTGluay5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogRG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9ucyB0byB1cGRhdGUgdGhpcyB0aWNrZXQhIiwKICAgICAgICB9OwogICAgfQoKICAgIG15ICRMaW5rT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKCiAgICAkQWNjZXNzID0gJExpbmtPYmplY3QtPk9iamVjdFBlcm1pc3Npb24oCiAgICAgICAgT2JqZWN0ID0+ICRQYXJhbXtEYXRhfS0+e1RhcmdldFR5cGV9LAogICAgICAgIEtleSAgICA9PiAkUGFyYW17RGF0YX0tPntUYXJnZXRJRH0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1RpY2tldFVuTGluay5BY2Nlc3NEZW5pZWQnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlRpY2tldFVuTGluazogRG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBsaW5rIHRvIHRoaXMgb2JqZWN0ISIsCiAgICAgICAgfTsKICAgIH0KCiAgICAkUmVzdWx0ID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGUoCiAgICAgICAgT2JqZWN0MiA9PiAnVGlja2V0JywKICAgICAgICBLZXkyICAgID0+ICRUaWNrZXRJRCwKICAgICAgICBPYmplY3QxID0+ICRQYXJhbXtEYXRhfS0+e1RhcmdldFR5cGV9LAogICAgICAgIEtleTEgICAgPT4gJFBhcmFte0RhdGF9LT57VGFyZ2V0SUR9LAogICAgICAgIFR5cGUgICAgPT4gJExpbmtUeXBlLAogICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRCwKICAgICk7CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+ICRSZXN1bHQsCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gJFJlc3VsdCwKICAgICAgICB9CiAgICB9Owp9CgoxOwo=</File>
        <File Location="Kernel/GenericInterface/Operation/Ticket/QueryEmbeddings.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlF1ZXJ5RW1iZWRkaW5nczsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHBhcmVudCBxdygKICAgIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpUaWNrZXQ6OlRpY2tldFVwZGF0ZQopOwoKIyBjb3JlIG1vZHVsZXMKdXNlIFNjYWxhcjo6VXRpbCBxdyhyZWZ0eXBlKTsKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSBJc0hhc2hSZWZXaXRoRGF0YSBJc1N0cmluZyBJc1N0cmluZ1dpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbjo6VGlja2V0OjpRdWVyeUVtYmVkZGluZ3MgLSBRdWVyeSBBSSBFbWJlZGRpbmdzIChTaW1pbGFyIEl0ZW1zKQoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgQzxLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Ok9wZXJhdGlvbi0+bmV3KCk7Pi4KCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZiA9IGJsZXNzIHt9LCAkVHlwZTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIERlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRCApKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgICRTZWxmLT57Q29uZmlnfSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnR2VuZXJpY0ludGVyZmFjZTo6T3BlcmF0aW9uOjpRdWVyeUVtYmVkZGluZ3MnKTsKICAgICRTZWxmLT57T3BlcmF0aW9ufSA9ICRQYXJhbXtPcGVyYXRpb259OwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFJ1bigpCgpwZXJmb3JtIHF1ZXJ5LXZlY3Rvci1kYiBmb3Igc2ltaWxhciBpdGVtcyBPcGVyYXRpb24uCgogICAgbXkgJFJlc3VsdCA9ICRPcGVyYXRpb25PYmplY3QtPlJ1bigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgVXNlckxvZ2luICAgICAgICAgPT4gJ3NvbWUgYWdlbnQgbG9naW4nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXJMb2dpbiBvciBDdXN0b21lclVzZXJMb2dpbiBvciBTZXNzaW9uSUQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgcmVxdWlyZWQKICAgICAgICAgICAgU2Vzc2lvbklEICAgICAgICAgPT4gMTIzLAoKICAgICAgICAgICAgUGFzc3dvcmQgID0+ICdzb21lIHBhc3N3b3JkJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIFVzZXJMb2dpbiBvciBjdXN0b21lclVzZXJMb2dpbiBpcyBzZW50IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgUGFzc3dvcmQgaXMgcmVxdWlyZWQKCiAgICAgICAgICAgIFRpY2tldElEICAgICA9PiAxMjMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaWNrZXRJRCBvciBUaWNrZXROdW1iZXIgaXMgcmVxdWlyZWQKICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICcyMDA0MDQwNTEwNDQwNDg1JywKCiAgICAgICAgICAgIENvbGxlY3Rpb24gID0+ICdmYXFzJywKICAgICAgICAgICAgTGFiZWxzICAgICAgPT4gW10sCiAgICAgICAgICAgIEZ1bGxUZXh0ICAgID0+IDB8MSwKICAgICAgICAgICAgTGltaXQgICAgICAgPT4gMywgIyBkZWZhdWx0CiAgICAgICAgICAgIFF1ZXJ5ICAgICAgID0+ICdzZWFyY2h0ZXJtJywKICAgICAgIH0sCiAgICApOwoKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICAgICAgICAgID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ2lkJyA9PiAnMTNmODk0NjEtY2IzNi00ODllLWIyOTQtZTg1ZDhkYzY3Y2EyJywKICAgICAgICAgICAgICAgICdtZXRhZGF0YScgPT4gewogICAgICAgICAgICAgICAgICAgICdmdWxsdGV4dCcgPT4gJzx0aGUgRkFRIHNvbHV0aW9uIGZ1bGx0ZXh0PicsCiAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnZGVmYXVsdCcsCiAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZV9pZCcgPT4gJzEnICAgICAgIyBGQVEgSXRlbUlECiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ3BhZ2VfY29udGVudCcgPT4gJzx0aGUgRkFRIHRpdGxlLCBzeXB0aG9tIGFuZCBwcm9ibGVtIGZpZWxkcz4nLAogICAgICAgICAgICAgICAgJ3R5cGUnID0+ICdEb2N1bWVudCcKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgfTsKCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUmVzdWx0ID0gJFNlbGYtPkluaXQoCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICk7CgogICAgaWYgKCAhJFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdXZWJzZXJ2aWNlLkludmFsaWRDb25maWd1cmF0aW9uJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17RGF0YX0gKSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICBFcnJvckNvZGUgICAgPT4gJ1F1ZXJ5RW1iZWRkaW5ncy5FbXB0eVJlcXVlc3QnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlF1ZXJ5RW1iZWRkaW5nczogVGhlIHJlcXVlc3QgZGF0YSBpcyBpbnZhbGlkISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICEkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0gJiYgISRQYXJhbXtEYXRhfS0+e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdRdWVyeUVtYmVkZGluZ3MuTWlzc2luZ1BhcmFtZXRlcicsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUXVlcnlFbWJlZGRpbmdzOiBUaWNrZXRJRCBvciBUaWNrZXROdW1iZXIgaXMgcmVxdWlyZWQhIiwKICAgICAgICApOwogICAgfQoKICAgIGlmICggISRQYXJhbXtEYXRhfS0+e0NvbGxlY3Rpb259ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlF1ZXJ5RW1iZWRkaW5nczogQ29sbGVjdGlvbiBpcyByZXF1aXJlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJExpbmtUeXBlID0gJFBhcmFte0RhdGF9LT57TGlua1R5cGV9IHx8ICdOb3JtYWwnOwoKICAgIGlmICgKICAgICAgICAhJFBhcmFte0RhdGF9LT57VXNlckxvZ2lufQogICAgICAgICYmICEkUGFyYW17RGF0YX0tPntTZXNzaW9uSUR9CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlF1ZXJ5RW1iZWRkaW5nczogVXNlckxvZ2luIG9yIFNlc3Npb25JRCBpcyByZXF1aXJlZCEiLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17RGF0YX0tPntVc2VyTG9naW59ICkgewogICAgICAgIGlmICggISRQYXJhbXtEYXRhfS0+e1Bhc3N3b3JkfSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLk1pc3NpbmdQYXJhbWV0ZXInLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJRdWVyeUVtYmVkZGluZ3M6IFBhc3N3b3JkIG9yIFNlc3Npb25JRCBpcyByZXF1aXJlZCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGF1dGhlbnRpY2F0ZSB1c2VyCiAgICBteSAoICRVc2VySUQsICRVc2VyVHlwZSApID0gJFNlbGYtPkF1dGgoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICBpZiAoICEkVXNlcklEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLkF1dGhGYWlsJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJRdWVyeUVtYmVkZGluZ3M6IFVzZXIgY291bGQgbm90IGJlIGF1dGhlbnRpY2F0ZWQhIiwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBjaGVjayBUaWNrZXRJRAogICAgbXkgJFRpY2tldElEOwogICAgaWYgKCAkUGFyYW17RGF0YX0tPntUaWNrZXROdW1iZXJ9ICkgewogICAgICAgICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldElETG9va3VwKAogICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFBhcmFte0RhdGF9LT57VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRVc2VySUQsCiAgICAgICAgKTsKCiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkVGlja2V0SUQgPSAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH07CiAgICB9CgogICAgaWYgKCAhKCRUaWNrZXRJRCkgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdRdWVyeUVtYmVkZGluZ3MuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJRdWVyeUVtYmVkZGluZ3M6IFVzZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIHRpY2tldCEiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRCwKICAgICk7CgogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoIFwlVGlja2V0RGF0YSApICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUXVlcnlFbWJlZGRpbmdzOiBVc2VyIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB0aWNrZXQhIiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgYmFzaWMgbmVlZGVkIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJFNlbGYtPkNoZWNrQWNjZXNzUGVybWlzc2lvbnMoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICAgICAgVXNlclR5cGUgPT4gJFVzZXJUeXBlLAogICAgKTsKCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUXVlcnlFbWJlZGRpbmdzOiBVc2VyIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB0aWNrZXQhIiwKICAgICAgICApOwogICAgfQoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgIGlmICggISRQYXJhbXtEYXRhfS0+e0FydGljbGVJRH0gKSB7CgogICAgICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFNlbmRlclR5cGUgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgT25seUxhc3QgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgaWYgKEBBcnRpY2xlcykgewogICAgICAgICAgICAkUGFyYW17RGF0YX0tPntBcnRpY2xlSUR9ID0gJEFydGljbGVzWzBde0FydGljbGVJRH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPlJldHVybkVycm9yKAogICAgICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdRdWVyeUVtYmVkZGluZ3MuQWNjZXNzRGVuaWVkJywKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUXVlcnlFbWJlZGRpbmdzOiBuZWVkIEFydGljbGVJRCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICBBcnRpY2xlSUQgPT4gJFBhcmFte0RhdGF9LT57QXJ0aWNsZUlEfSwKICAgICk7CgogICAgaWYgKCAhJEFydGljbGVCYWNrZW5kT2JqZWN0ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+UmV0dXJuRXJyb3IoCiAgICAgICAgICAgIEVycm9yQ29kZSAgICA9PiAnUXVlcnlFbWJlZGRpbmdzLkFjY2Vzc0RlbmllZCcsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiUXVlcnlFbWJlZGRpbmdzOiBBcnRpY2xlIHVuYXZhaWxhYmxlISIsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgIEFydGljbGVJRCA9PiAkUGFyYW17RGF0YX0tPntBcnRpY2xlSUR9LAogICAgKTsKCiAgICBteSAkUXVlcnkgPSAkUGFyYW17RGF0YX0tPntRdWVyeX0gLy8gKCAoICRBcnRpY2xle1N1YmplY3R9IC8vICcnICkgLiAnXG4nIC4gKCAkQXJ0aWNsZXtCb2R5fSAvLyAnJyApICk7CgogICAgbXkgJENvbmZpZ09iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRRdWV1ZVRvUkFHTWFwcGluZyA9ICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6UXVldWVUb1JBR01hcHBpbmcnKSAvLyB7fTsKICAgIG15ICRSQUcgICAgICAgICAgICAgICA9ICRRdWV1ZVRvUkFHTWFwcGluZy0+eyAkVGlja2V0RGF0YXtRdWV1ZX0gfSAgICAgICAvLyAkQ29uZmlnT2JqZWN0LT5HZXQoJ09UT0JPQUk6OkRlZmF1bHRSQUcnKTsKCiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CiAgICBteSAkQUlXZWJzZXJ2aWNlICAgICA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlR2V0KAogICAgICAgIE5hbWUgPT4gJ09UT0JPLUFJJywKICAgICk7CgogICAgaWYgKCAhJEFJV2Vic2VydmljZSApIHsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5SZXR1cm5FcnJvcigKICAgICAgICAgICAgRXJyb3JDb2RlICAgID0+ICdRdWVyeUVtYmVkZGluZ3MuV2Vic2VydmljZVVuYXZhaWwnLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIlF1ZXJ5RW1iZWRkaW5nczogV2Vic2VydmljZSBJbnZva2VyIG5vdCBmb3VuZCEiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJFdlYnNlcnZpY2VJRCA9ICRBSVdlYnNlcnZpY2UtPntJRH07CgogICAgJFJlc3VsdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyktPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJ1F1ZXJ5RW1iZWRkaW5ncycsCiAgICAgICAgQXN5bmNocm9ub3VzID0+IDAsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgQ29sbGVjdGlvbiA9PiAkUGFyYW17RGF0YX0tPntDb2xsZWN0aW9ufSwKICAgICAgICAgICAgTGFiZWxzICAgICA9PiBbJFJBR10sCiAgICAgICAgICAgIEZ1bGx0ZXh0ICAgPT4gJFBhcmFte0RhdGF9LT57RnVsbHRleHR9LAogICAgICAgICAgICBMaW1pdCAgICAgID0+ICRQYXJhbXtEYXRhfS0+e0xpbWl0fSwKICAgICAgICAgICAgUXVlcnkgICAgICA9PiAkUXVlcnksCiAgICAgICAgfQogICAgKTsKCiAgICByZXR1cm4gJFJlc3VsdCw7Cn0KCjE7Cg==</File>
        <File Location="Kernel/GenericInterface/Invoker/OTOBOAI/QueryEmbeddings.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6T1RPQk9BSTo6UXVlcnlFbWJlZGRpbmdzOwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwp1c2UgTUlNRTo6QmFzZTY0IHF3KGVuY29kZV9iYXNlNjQpOwoKIyBDUEFOIG1vZHVsZXMKdXNlIFVSSTo6RXNjYXBlIHF3KHVyaV91bmVzY2FwZSk7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWZvciBzdG9wd29yZHMgYWkKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok9UT0JPQUk6OlF1ZXJ5RW1iZWRkaW5ncwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpJbnZva2VyLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0gYmxlc3Mge30sICRUeXBlOwoKICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtcyBhbmQgc3RvcmUgdGhlbSBpbiAkU2VsZgogICAgZm9yIG15ICROZWVkZWQgKHF3L0RlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRC8pIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUHJlcGFyZVJlcXVlc3QoKQoKUHJlcGFyZSB0aGUgaW52b2NhdGlvbiBvZiB0aGUgY29uZmlndXJlZCByZW1vdGUgd2ViIHNlcnZpY2UuIFRoaXMgd2lsbCBxdWVyeSB0aGUKb3RvYm8tYWktZG9ja2VyIGNvbnRhaW5lciBmb3IgYSBSQUcgYW5zd2VyLgoKICAgIG15ICRSZXN1bHQgPSAkSW52b2tlck9iamVjdC0+UHJlcGFyZVJlcXVlc3QoCiAgICAgICAgRGF0YSA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkCiAgICAgICAgICAgIENvbGxlY3Rpb24gID0+ICdmYXFzJywKICAgICAgICAgICAgTGFiZWxzICAgICAgPT4gW10sCiAgICAgICAgICAgIEZ1bGx0ZXh0ICAgID0+IDB8MSwKICAgICAgICAgICAgTGltaXQgICAgICAgPT4gMywgIyBkZWZhdWx0CiAgICAgICAgICAgIFF1ZXJ5ICAgICAgID0+ICdzZWFyY2h0ZXJtJywKICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgInR5cGUiIDogImZhcXMiLAogICAgICAgICAgICAibGFiZWxzIiA6IFsgImRlZmF1bHQiIF0sCiAgICAgICAgICAgICJyZXRyaWV2ZV9mdWxsdGV4dCIgOiAiMSIsCiAgICAgICAgICAgICJuX3Jlc3VsdHMiIDogMywKICAgICAgICAgICAgInF1ZXJ5X3RleHQiIDogIkthdHplIgogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIFByZXBhcmVSZXF1ZXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbGxlY3Rpb24gPSAkUGFyYW17RGF0YX17Q29sbGVjdGlvbn07CiAgICBteSAkTGFiZWxzICAgICA9ICRQYXJhbXtEYXRhfXtMYWJlbHN9OwogICAgbXkgJEZ1bGx0ZXh0ICAgPSAkUGFyYW17RGF0YX17RnVsbHRleHR9IC8vIDA7CiAgICBteSAkTGltaXQgICAgICA9ICRQYXJhbXtEYXRhfXtMaW1pdH0gICAgLy8gMzsKICAgIG15ICRRdWVyeSAgICAgID0gJFBhcmFte0RhdGF9e1F1ZXJ5fTsKCiAgICAjIGNoZWNrIG5lZWRlZAogICAgZm9yIG15ICROZWVkZWQgKHF3L0NvbGxlY3Rpb24gTGFiZWxzIFF1ZXJ5LykgewogICAgICAgIGlmICggISRQYXJhbXtEYXRhfXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIHR5cGUgICAgICAgICAgICAgID0+ICRDb2xsZWN0aW9uLAogICAgICAgICAgICBsYWJlbHMgICAgICAgICAgICA9PiAkTGFiZWxzLAogICAgICAgICAgICByZXRyaWV2ZV9mdWxsdGV4dCA9PiAkRnVsbHRleHQsCiAgICAgICAgICAgIG5fcmVzdWx0cyAgICAgICAgID0+ICRMaW1pdCwKICAgICAgICAgICAgcXVlcnlfdGV4dCAgICAgICAgPT4gJFF1ZXJ5LAogICAgICAgIH0sCiAgICB9OwoKfQoKPWhlYWQyIEhhbmRsZVJlc3BvbnNlKCkKCmhhbmRsZSByZXNwb25zZSBkYXRhIG9mIHRoZSBjb25maWd1cmVkIHJlbW90ZSB3ZWIgc2VydmljZS4KVGhpcyB3aWxsIGp1c3QgcmV0dXJuIHRoZSBkYXRhIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCgogICAgbXkgJFJlc3VsdCA9ICRJbnZva2VyT2JqZWN0LT5IYW5kbGVSZXNwb25zZSgKICAgICAgICBSZXNwb25zZVN1Y2Nlc3MgICAgICA9PiAxLCAgICAgICAgICAgICAgIyBzdWNjZXNzIHN0YXR1cyBvZiB0aGUgcmVtb3RlIHdlYiBzZXJ2aWNlCiAgICAgICAgUmVzcG9uc2VFcnJvck1lc3NhZ2UgPT4gJycsICAgICAgICAgICAgICMgaW4gY2FzZSBvZiB3ZWIgc2VydmljZSBlcnJvcgogICAgICAgIERhdGEgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRhdGEgcGF5bG9hZAogICAgICAgICAgICAuLi4KICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgICAgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAnaWQnID0+ICcxM2Y4OTQ2MS1jYjM2LTQ4OWUtYjI5NC1lODVkOGRjNjdjYTInLAogICAgICAgICAgICAgICAgJ21ldGFkYXRhJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ2Z1bGx0ZXh0JyA9PiAnYW5zd2VyOiA8c29sdXRpb24gcGFydCBvZiBGQVE+IScsCiAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnZGVmYXVsdCcsCiAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZV9pZCcgPT4gJzEnCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ3BhZ2VfY29udGVudCcgPT4gJzxUaXRsZSxRdWVzdGlvbiBhbmQgUHJvYmxlbSBwYXJ0IG9mIHRoZSBGQVE+JywKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnRG9jdW1lbnQnCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKfTsKCj1jdXQKCnN1YiBIYW5kbGVSZXNwb25zZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSByZXNwb25zZSwgZm9yd2FyZCBpdAogICAgaWYgKCAhJFBhcmFte1Jlc3BvbnNlU3VjY2Vzc30gKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUGFyYW17UmVzcG9uc2VFcnJvck1lc3NhZ2V9LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiAkUGFyYW17RGF0YX0sCiAgICB9Owp9CgoxOwo=</File>
        <File Location="Kernel/System/Console/Command/Maint/AI/QueryEmbeddings.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6QUk6OlF1ZXJ5RW1iZWRkaW5nczsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSBwYXJlbnQgcXcoS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkJhc2VDb21tYW5kKTsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkZvcmVhY2hUb0ZvcikKCiMgSW5mb3JtIHRoZSBvYmplY3QgbWFuYWdlciBhYm91dCB0aGUgaGFyZCBkZXBlbmRlbmNpZXMuCiMgVGhpcyBtb2R1bGUgbXVzdCBiZSBkaXNjYXJkZWQgd2hlbiBvbmUgb2YgdGhlIGhhcmQgZGVwZW5kZW5jaWVzIGhhcyBiZWVuIGRpc2NhcmRlZC4Kb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScsCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAopOwoKc3ViIENvbmZpZ3VyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5EZXNjcmlwdGlvbignUmV0cmlldmUgYW4gQUkgZ2VuZXJhdGVkIEFuc3dlciBmcm9tIHRoZSBvdG9iby1haS1zZXJ2aWNlcyBjb250YWluZXIuJyk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdjb2xsZWN0aW9uJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnZmFxc3x0aWNrZXRfcGFpcnN8dGlja2V0X2NodW5ja3N8ZG9jcycsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyL14uKyQvc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3F1ZXJ5JywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnc2VhcmNodGVybScsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyL14uKyQvc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2Z1bGx0ZXh0JywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAncmV0cmlldmUgZnVsbHRleHQnLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDAsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdsYWJlbCcsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ2RlZmF1bHQnLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9eLiskL3NteCwKICAgICAgICBNdWx0aXBsZSAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm47Cn0KCnN1YiBQcmVSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHdoZXRoZXIgb3RvYm8tYWkgd2ViIHNlcnZpY2UgaXMgZW5hYmxlZCBhbmQgaWYgbm90LCBhY3RpdmF0ZSBpdAogICAgbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwoKICAgIG15ICRBSVdlYnNlcnZpY2UgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUdldCgKICAgICAgICBOYW1lID0+ICdPVE9CTy1BSScsCiAgICApOwoKICAgIGlmICggISRBSVdlYnNlcnZpY2UgKSB7CiAgICAgICAgJFNlbGYtPlByaW50KCI8cmVkPk9UT0JPLUFJIHdlYnNlcnZpY2Ugbm90IGZvdW5kISBVbmFibGUgdG8gY29udGludWUuPC9yZWQ+XG4iKTsKICAgICAgICBkaWU7CiAgICB9CgogICAgIyBTZXQgdGhlIHdlYnNlcnZpY2UgaWQKICAgICRTZWxmLT57V2Vic2VydmljZUlEfSA9ICRBSVdlYnNlcnZpY2UtPntJRH07CgogICAgaWYgKCAkQUlXZWJzZXJ2aWNlLT57VmFsaWRJRH0gIT0gMSApIHsKICAgICAgICAkU2VsZi0+UHJpbnQoCiAgICAgICAgICAgICI8eWVsbG93Pk9UT0JPLUFJIHdlYnNlcnZpY2UgaXMgbm93IGFjdGl2YXRlZC4gSWYgeW91IGRvbid0IHdhbnQgdG8ga2VlcCBpdCBlbmFibGVkLCBwbGVhc2UgZGlzYWJsZSBpdCBtYW51YWxseSBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLCBhZnRlciB0aGUgaW1wb3J0IGlzIGNvbXBsZXRlLjwveWVsbG93PlxuIgogICAgICAgICk7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZVVwZGF0ZSgKICAgICAgICAgICAgJXskQUlXZWJzZXJ2aWNlfSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludCgiPHJlZD5PVE9CTy1BSSB3ZWJzZXJ2aWNlIGNvdWxkIG5vdCBiZSBhY3RpdmF0ZWQhIFVuYWJsZSB0byBjb250aW51ZS48L3JlZD5cbiIpOwogICAgICAgICAgICBkaWU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPdG9ib0FJT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUknKTsKICAgIG15ICRDb2xsZWN0aW9uICAgID0gJFNlbGYtPkdldE9wdGlvbignY29sbGVjdGlvbicpOwogICAgbXkgJFF1ZXJ5ICAgICAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdxdWVyeScpOwogICAgbXkgJExhYmVscyAgICAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdsYWJlbCcpICAgIC8vIFsnZGVmYXVsdCddOwogICAgbXkgJEZ1bGx0ZXh0ICAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdmdWxsdGV4dCcpIC8vIDA7CgogICAgbXkgJFJlc3VsdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyktPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgICAgIEludm9rZXIgICAgICA9PiAnUXVlcnlFbWJlZGRpbmdzJywKICAgICAgICBBc3luY2hyb25vdXMgPT4gMCwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBDb2xsZWN0aW9uID0+ICRDb2xsZWN0aW9uLAogICAgICAgICAgICBRdWVyeSAgICAgID0+ICRRdWVyeSwKICAgICAgICAgICAgTGFiZWxzICAgICA9PiAkTGFiZWxzLAogICAgICAgICAgICBGdWxsdGV4dCAgID0+ICRGdWxsdGV4dCwKICAgICAgICB9CiAgICApOwoKICAgIG15ICRNYWluT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKICAgIG15ICREdW1wICAgICAgID0gJE1haW5PYmplY3QtPkR1bXAoJFJlc3VsdCk7CgogICAgJFNlbGYtPlByaW50KCIkRHVtcFxuIik7CgogICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZU9rKCk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Language/de_OTOBOAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX09UT0JPQUk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFN5c0NvbmZpZyBEcm9wZG93biBWYWx1ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3luY2hyb25vdXMnfSA9ICdTeW5jaHJvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3VyIHJlcXVlc3Qgd2FzIGNhbmNlbGVkJ30gPSAnRGllIEFuZnJhZ2Ugd3VyZGUgYWJnZWJyb2NoZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91ciByZXF1ZXN0IGhhcyBmYWlsZWQnfSA9ICdEaWUgQW5mcmFnZSBpc3QgZmVobGdlc2NobGFnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91ciByZXF1ZXN0IGhhcyB0aW1lZCBvdXQnfSA9ICdJaHJlIEFuZnJhZ2UgaXN0IGFiZ2VsYXVmZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZCByZXF1ZXN0J30gPSAnQW5mcmFnZSDDvGJlcm1pdHRlbG4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ltaWxhciBUaWNrZXRzJ30gPSAnw4RobmxpY2hlIFRpY2tldHMnOwoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgICAgICdZb3VyIHJlcXVlc3Qgd2FzIGNhbmNlbGVkJywKICAgICAgICAnWW91ciByZXF1ZXN0IGhhcyBmYWlsZWQnLAogICAgICAgICdZb3VyIHJlcXVlc3QgaGFzIHRpbWVkIG91dCcsCiAgICAgICAgJ1NlbmQgcmVxdWVzdCcsCiAgICApOwp9CgoxOwo=</File>
        <File Location="Kernel/Modules/AdminDynamicFieldTextAreaAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5EeW5hbWljRmllbGRUZXh0QXJlYUFJOwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBuYW1lc3BhY2U6OmF1dG9jbGVhbjsKdXNlIHV0Zjg7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlICAgICAgICAgICAgICBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxmID0gYmxlc3MgeyVQYXJhbX0sICRUeXBlOwoKICAgICMgU29tZSBzZXR1cAogICAgJFNlbGYtPntUZW1wbGF0ZUZpbGV9ID0gJ0FkbWluRHluYW1pY0ZpZWxkVGV4dEFyZWFBSSc7CgogICAgIyBzZXQgdXAgdGhlIGZpZWxkIHR5cGUgc3BlY2lmaWMgc2V0dGluZ3MKICAgIG15IEBGaWVsZFR5cGVTZXR0aW5nczsKICAgIHsKICAgICAgICBteSAkRmllbGRUeXBlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpZWxkVHlwZScgKTsKICAgICAgICBpZiAoJEZpZWxkVHlwZSkgewogICAgICAgICAgICBteSAkRHJpdmVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCggJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6JyAuICRGaWVsZFR5cGUgKTsKICAgICAgICAgICAgQEZpZWxkVHlwZVNldHRpbmdzID0gJERyaXZlck9iamVjdC0+R2V0RmllbGRUeXBlU2V0dGluZ3MoKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfSA9IFxARmllbGRUeXBlU2V0dGluZ3M7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBTdG9yZSBsYXN0IGVudGl0eSBzY3JlZW4uCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24nKS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuRW50aXR5JywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGQnICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X0FkZCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FkZEFjdGlvbicgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X0FkZEFjdGlvbigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NoYW5nZScgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fQ2hhbmdlKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5fQ2hhbmdlQWN0aW9uKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ1VuZGVmaW5lZCBzdWJhY3Rpb24uJyksCiAgICApOwp9CgpzdWIgX0FkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgIG15ICVHZXRQYXJhbTsKCiAgICAjIGNoZWNrIGlmIHdlIGNsb25lIGZyb20gYW4gZXhpc3RpbmcgZmllbGQKICAgIG15ICRDbG9uZUZpZWxkSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiQ2xvbmVGaWVsZElEIiApOwogICAgaWYgKCRDbG9uZUZpZWxkSUQpIHsKICAgICAgICBteSAkRmllbGRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgSUQgPT4gJENsb25lRmllbGRJRCwKICAgICAgICApOwoKICAgICAgICAjIGlmIHdlIGZvdW5kIGEgZmllbGQgY29uZmlnLCBjb3B5IGl0cyBjb250ZW50IGZvciB1c2FnZSBpbiBfU2hvd1NjcmVlbgogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJEZpZWxkQ29uZmlnKSApIHsKCiAgICAgICAgICAgICMgY29weSBzdGFuZGFyZCBzdHVmZgogICAgICAgICAgICBmb3IgbXkgJEtleSAocXcoT2JqZWN0VHlwZSBGaWVsZFR5cGUgTGFiZWwgTmFtZSBWYWxpZElEKSkgewogICAgICAgICAgICAgICAgJEdldFBhcmFteyRLZXl9ID0gJEZpZWxkQ29uZmlnLT57JEtleX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaXRlcmF0ZSBvdmVyIHNwZWNpYWwgc3R1ZmYgYW5kIGNvcHkgaW4tZGVwdGggY29udGVudCBhcyBmbGF0IGxpc3QKICAgICAgICAgICAgQ09ORklHS0VZOgogICAgICAgICAgICBmb3IgbXkgJENvbmZpZ0tleSAoIGtleXMgJEZpZWxkQ29uZmlnLT57Q29uZmlnfS0+JSogKSB7CiAgICAgICAgICAgICAgICBuZXh0IENPTkZJR0tFWSBpZiAkQ29uZmlnS2V5IGVxICdQYXJ0T2ZTZXQnOwoKICAgICAgICAgICAgICAgIG15ICRERkRldGFpbHMgPSAkRmllbGRDb25maWctPntDb25maWd9OwogICAgICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJERGRGV0YWlscy0+eyRDb25maWdLZXl9ICkgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJENvbmZpZ0NvbnRlbnQgPSAkREZEZXRhaWxzLT57JENvbmZpZ0tleX07CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDb250ZW50S2V5ICgga2V5cyAkQ29uZmlnQ29udGVudC0+JSogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXskQ29udGVudEtleX0gPSAkQ29uZmlnQ29udGVudC0+eyRDb250ZW50S2V5fTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17JENvbmZpZ0tleX0gPSAkREZEZXRhaWxzLT57JENvbmZpZ0tleX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJEdldFBhcmFte0Nsb25lRmllbGRJRH0gPSAkQ2xvbmVGaWVsZElEOwogICAgfQoKICAgIGZvciBteSAkTmVlZGVkIChxdyhPYmplY3RUeXBlIEZpZWxkVHlwZSBGaWVsZE9yZGVyKSkgewogICAgICAgICRHZXRQYXJhbXskTmVlZGVkfSAvLz0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5lZWRlZCApOwogICAgICAgIGlmICggISRHZXRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdOZWVkICVzJywgJE5lZWRlZCApLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgbXkgJEZpbHRlclBhcmFtIChxdyhPYmplY3RUeXBlRmlsdGVyIE5hbWVzcGFjZUZpbHRlcikpIHsKICAgICAgICAkR2V0UGFyYW17JEZpbHRlclBhcmFtfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRGaWx0ZXJQYXJhbSApOwogICAgfQoKICAgICMgZ2V0IHRoZSBvYmplY3QgdHlwZSBhbmQgZmllbGQgdHlwZSBkaXNwbGF5IG5hbWUKICAgIG15ICRDb25maWdPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkT2JqZWN0VHlwZU5hbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0R5bmFtaWNGaWVsZHM6Ok9iamVjdFR5cGUnKS0+eyAkR2V0UGFyYW17T2JqZWN0VHlwZX0gfS0+e0Rpc3BsYXlOYW1lfSB8fCAnJzsKICAgIG15ICRGaWVsZFR5cGVOYW1lICA9ICRDb25maWdPYmplY3QtPkdldCgnRHluYW1pY0ZpZWxkczo6RHJpdmVyJyktPnsgJEdldFBhcmFte0ZpZWxkVHlwZX0gfS0+e0Rpc3BsYXlOYW1lfSAgICAgIHx8ICcnOwoKICAgICMgY2hlY2sgbmFtZXNwYWNlIHZhbGlkaXR5CiAgICBteSAkTmFtZXNwYWNlcyA9ICRDb25maWdPYmplY3QtPkdldCgnRHluYW1pY0ZpZWxkOjpOYW1lc3BhY2VzJyk7CiAgICBteSAkTmFtZXNwYWNlICA9ICcnOwogICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoJE5hbWVzcGFjZXMpICYmICRHZXRQYXJhbXtOYW1lc3BhY2VGaWx0ZXJ9ICkgewogICAgICAgICROYW1lc3BhY2UgPSAoIGdyZXAgeyAkXyBlcSAkR2V0UGFyYW17TmFtZXNwYWNlRmlsdGVyfSB9ICROYW1lc3BhY2VzLT5AKiApID8gJEdldFBhcmFte05hbWVzcGFjZUZpbHRlcn0gOiAnJzsKICAgIH0KCiAgICByZXR1cm4gJFNlbGYtPl9TaG93U2NyZWVuKAogICAgICAgICVQYXJhbSwKICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgTW9kZSAgICAgICAgICAgPT4gJ0FkZCcsCiAgICAgICAgQnJlYWRjcnVtYlRleHQgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQWRkICVzIGZpZWxkJywgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCRGaWVsZFR5cGVOYW1lKSApLAogICAgICAgIE9iamVjdFR5cGVOYW1lID0+ICRPYmplY3RUeXBlTmFtZSwKICAgICAgICBGaWVsZFR5cGVOYW1lICA9PiAkRmllbGRUeXBlTmFtZSwKICAgICAgICBOYW1lc3BhY2UgICAgICA9PiAkTmFtZXNwYWNlLAogICAgKTsKfQoKc3ViIF9BZGRBY3Rpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgbXkgJUVycm9yczsKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkTmVlZGVkIChxdyhOYW1lIExhYmVsIEZpZWxkT3JkZXIpKSB7CiAgICAgICAgJEdldFBhcmFteyROZWVkZWR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5lZWRlZCApOwogICAgICAgIGlmICggISRHZXRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEVycm9yc3sgJE5lZWRlZCAuICdTZXJ2ZXJFcnJvcicgfSAgICAgICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3JzeyAkTmVlZGVkIC4gJ1NlcnZlckVycm9yTWVzc2FnZScgfSA9IFRyYW5zbGF0YWJsZSgnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nKTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiAgICBpZiAoICRHZXRQYXJhbXtGaWVsZE9yZGVyfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBmaWVsZCBvcmRlciBpcyBudW1lcmljIGFuZCBwb3NpdGl2ZQogICAgICAgIGlmICggJEdldFBhcmFte0ZpZWxkT3JkZXJ9ICF+IG17XEEgKD86IFxkICkrIFx6fXhtcyApIHsKCiAgICAgICAgICAgICMgYWRkIHNlcnZlciBlcnJvciBlcnJvciBjbGFzcwogICAgICAgICAgICAkRXJyb3Jze0ZpZWxkT3JkZXJTZXJ2ZXJFcnJvcn0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3tGaWVsZE9yZGVyU2VydmVyRXJyb3JNZXNzYWdlfSA9IFRyYW5zbGF0YWJsZSgnVGhlIGZpZWxkIG11c3QgYmUgbnVtZXJpYy4nKTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIG15ICRDb25maWdQYXJhbSAoCiAgICAgICAgcXcoT2JqZWN0VHlwZSBPYmplY3RUeXBlTmFtZSBGaWVsZFR5cGUgRmllbGRUeXBlTmFtZSBWYWxpZElEIE5hbWVzcGFjZSkKICAgICAgICApCiAgICB7CiAgICAgICAgJEdldFBhcmFteyRDb25maWdQYXJhbX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkQ29uZmlnUGFyYW0gKTsKICAgIH0KCiAgICAjIGV4dHJhY3QgZmllbGQgdHlwZSBzcGVjaWZpYyBwYXJhbWV0ZXJzLCBlLmcuIE11bHRpVmFsdWUKICAgIFNFVFRJTkc6CiAgICBmb3IgbXkgJFNldHRpbmcgKCAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfS0+QCogKSB7CgogICAgICAgICMgc2tpcCBjdXN0b20gaW5wdXRzIHdoaWNoIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkKICAgICAgICAjIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIHJlZmVyZW5jZSBmaWx0ZXIgbGlzdAogICAgICAgIG5leHQgU0VUVElORyBpZiAhJFNldHRpbmctPntJbnB1dFR5cGV9OwoKICAgICAgICBteSAkTmFtZSA9ICRTZXR0aW5nLT57Q29uZmlnUGFyYW1OYW1lfTsKICAgICAgICBpZiAoICRTZXR0aW5nLT57TXVsdGlwbGV9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17JE5hbWV9LT5AKiA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICROYW1lICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkR2V0UGFyYW17JE5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5hbWUgKTsKICAgICAgICB9CgogICAgICAgICMgdmFsaWRhdGUgaW5wdXQgaWYgbmVjZXNzYXJ5CiAgICAgICAgaWYgKCAkU2V0dGluZy0+e01hbmRhdG9yeX0gKSB7CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXskTmFtZX0gfHwgKCAkU2V0dGluZy0+e011bHRpcGxlfSAmJiAhJEdldFBhcmFteyROYW1lfS0+QCogKSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7ICROYW1lIC4gJ1NlcnZlckVycm9yJyB9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAkRXJyb3JzeyAkTmFtZSAuICdTZXJ2ZXJFcnJvck1lc3NhZ2UnIH0gPSBUcmFuc2xhdGFibGUoJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZm9yIG15ICRGaWx0ZXJQYXJhbSAocXcoT2JqZWN0VHlwZUZpbHRlciBOYW1lc3BhY2VGaWx0ZXIpKSB7CiAgICAgICAgJEdldFBhcmFteyRGaWx0ZXJQYXJhbX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkRmlsdGVyUGFyYW0gKTsKICAgIH0KCiAgICBpZiAoICRHZXRQYXJhbXtOYW1lfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBuYW1lIGlzIGFscGhhbnVtZXJpYwogICAgICAgIGlmICggJEdldFBhcmFte05hbWV9ICF+IG17XEEgKD86IFthLXpBLVpdIHwgXGQgKSsgXHp9eG1zICkgewoKICAgICAgICAgICAgIyBhZGQgc2VydmVyIGVycm9yIGVycm9yIGNsYXNzCiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPQogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlKCdUaGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBvbmx5IEFTQ0lJIGxldHRlcnMgYW5kIG51bWJlcnMuJyk7CiAgICAgICAgfQoKICAgICAgICAkR2V0UGFyYW17TmFtZX0gPSAkR2V0UGFyYW17TmFtZXNwYWNlfSA/ICRHZXRQYXJhbXtOYW1lc3BhY2V9IC4gJy0nIC4gJEdldFBhcmFte05hbWV9IDogJEdldFBhcmFte05hbWV9OwoKICAgICAgICAjIGNoZWNrIGlmIG5hbWUgaXMgZHVwbGljYXRlZAogICAgICAgIG15ICVEeW5hbWljRmllbGRzTGlzdCA9ICV7CiAgICAgICAgICAgICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3QoCiAgICAgICAgICAgICAgICBWYWxpZCAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBSZXN1bHRUeXBlID0+ICdIQVNIJywKICAgICAgICAgICAgKQogICAgICAgIH07CgogICAgICAgICVEeW5hbWljRmllbGRzTGlzdCA9IHJldmVyc2UgJUR5bmFtaWNGaWVsZHNMaXN0OwoKICAgICAgICBpZiAoICREeW5hbWljRmllbGRzTGlzdHsgJEdldFBhcmFte05hbWV9IH0gKSB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgZXJyb3IgY2xhc3MKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3J9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1RoZXJlIGlzIGFub3RoZXIgZmllbGQgd2l0aCB0aGUgc2FtZSBuYW1lLicpOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgdW5jb3JyZWN0YWJsZSBlcnJvcnMKICAgIGlmICggISRHZXRQYXJhbXtWYWxpZElEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdOZWVkIFZhbGlkSUQnKSwKICAgICAgICApOwogICAgfQoKICAgICMgcmV0dXJuIHRvIGFkZCBzY3JlZW4gaWYgZXJyb3JzCiAgICBpZiAoJUVycm9ycykgewogICAgICAgIHJldHVybiAkU2VsZi0+X1Nob3dTY3JlZW4oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUVycm9ycywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBNb2RlID0+ICdBZGQnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgc3BlY2lmaWMgY29uZmlnCiAgICBteSAlRmllbGRDb25maWcgPSAoKTsKCiAgICAjIGV4dHJhY3QgZmllbGQgdHlwZSBzcGVjaWZpYyBwYXJhbWV0ZXJzLCBlLmcuIE11bHRpVmFsdWUKICAgIFNFVFRJTkc6CiAgICBmb3IgbXkgJFNldHRpbmcgKCAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfS0+QCogKSB7CgogICAgICAgICMgc2tpcCBjdXN0b20gaW5wdXRzIHdoaWNoIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkKICAgICAgICAjIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIHJlZmVyZW5jZSBmaWx0ZXIgbGlzdAogICAgICAgIG5leHQgU0VUVElORyBpZiAhJFNldHRpbmctPntJbnB1dFR5cGV9OwoKICAgICAgICBteSAkTmFtZSA9ICRTZXR0aW5nLT57Q29uZmlnUGFyYW1OYW1lfTsKICAgICAgICAkRmllbGRDb25maWd7JE5hbWV9ID0gJEdldFBhcmFteyROYW1lfTsKICAgIH0KCiAgICAjIGNyZWF0ZSBhIG5ldyBmaWVsZAogICAgbXkgJEZpZWxkSUQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgTmFtZSAgICAgICA9PiAkR2V0UGFyYW17TmFtZX0sCiAgICAgICAgTGFiZWwgICAgICA9PiAkR2V0UGFyYW17TGFiZWx9LAogICAgICAgIEZpZWxkT3JkZXIgPT4gJEdldFBhcmFte0ZpZWxkT3JkZXJ9LAogICAgICAgIEZpZWxkVHlwZSAgPT4gJEdldFBhcmFte0ZpZWxkVHlwZX0sCiAgICAgICAgT2JqZWN0VHlwZSA9PiAkR2V0UGFyYW17T2JqZWN0VHlwZX0sCiAgICAgICAgQ29uZmlnICAgICA9PiBcJUZpZWxkQ29uZmlnLAogICAgICAgIFZhbGlkSUQgICAgPT4gJEdldFBhcmFte1ZhbGlkSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICEkRmllbGRJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdDb3VsZCBub3QgY3JlYXRlIHRoZSBuZXcgZmllbGQnKSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRSZWRpcmVjdFN0cmluZyA9ICJBY3Rpb249QWRtaW5EeW5hbWljRmllbGQiOwoKICAgIGlmICggSXNTdHJpbmdXaXRoRGF0YSggJEdldFBhcmFte09iamVjdFR5cGVGaWx0ZXJ9ICkgKSB7CiAgICAgICAgJFJlZGlyZWN0U3RyaW5nIC49ICI7T2JqZWN0VHlwZUZpbHRlcj0iIC4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZSA9PiAnWyUgRGF0YS5GaWx0ZXIgfCB1cmkgJV0nLAogICAgICAgICAgICBEYXRhICAgICA9PiB7CiAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJEdldFBhcmFte09iamVjdFR5cGVGaWx0ZXJ9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICBpZiAoIElzU3RyaW5nV2l0aERhdGEoICRHZXRQYXJhbXtOYW1lc3BhY2VGaWx0ZXJ9ICkgKSB7CiAgICAgICAgJFJlZGlyZWN0U3RyaW5nIC49ICI7TmFtZXNwYWNlRmlsdGVyPSIgLiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkZpbHRlciB8IHVyaSAlXScsCiAgICAgICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkR2V0UGFyYW17TmFtZXNwYWNlRmlsdGVyfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gJFJlZGlyZWN0U3RyaW5nICk7Cn0KCnN1YiBfQ2hhbmdlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICROZWVkZWQgKHF3KE9iamVjdFR5cGUgRmllbGRUeXBlKSkgewogICAgICAgICRHZXRQYXJhbXskTmVlZGVkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICROZWVkZWQgKTsKICAgICAgICBpZiAoICEkR2V0UGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnTmVlZCAlcycsICROZWVkZWQgKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIG15ICRGaWx0ZXJQYXJhbSAocXcoT2JqZWN0VHlwZUZpbHRlciBOYW1lc3BhY2VGaWx0ZXIpKSB7CiAgICAgICAgJEdldFBhcmFteyRGaWx0ZXJQYXJhbX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkRmlsdGVyUGFyYW0gKTsKICAgIH0KCiAgICAjIGdldCB0aGUgb2JqZWN0IHR5cGUgYW5kIGZpZWxkIHR5cGUgZGlzcGxheSBuYW1lCiAgICBteSAkQ29uZmlnT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJE9iamVjdFR5cGVOYW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdEeW5hbWljRmllbGRzOjpPYmplY3RUeXBlJyktPnsgJEdldFBhcmFte09iamVjdFR5cGV9IH0tPntEaXNwbGF5TmFtZX0gfHwgJyc7CiAgICBteSAkRmllbGRUeXBlTmFtZSAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0R5bmFtaWNGaWVsZHM6OkRyaXZlcicpLT57ICRHZXRQYXJhbXtGaWVsZFR5cGV9IH0tPntEaXNwbGF5TmFtZX0gICAgICB8fCAnJzsKCiAgICBteSAkRmllbGRJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKTsKICAgIGlmICggISRGaWVsZElEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05lZWQgSUQnKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgZGF0YQogICAgbXkgJER5bmFtaWNGaWVsZERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBJRCA9PiAkRmllbGRJRCwKICAgICk7CgogICAgIyBjaGVjayBmb3IgdmFsaWQgZHluYW1pYyBmaWVsZCBjb25maWd1cmF0aW9uCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkRGF0YSkgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb3VsZCBub3QgZ2V0IGRhdGEgZm9yIGR5bmFtaWMgZmllbGQgJXMnLCAkRmllbGRJRCApLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJUNvbmZpZzsKCiAgICAjIGV4dHJhY3QgY29uZmlndXJhdGlvbgogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJER5bmFtaWNGaWVsZERhdGEtPntDb25maWd9ICkgKSB7CiAgICAgICAgJUNvbmZpZyA9ICREeW5hbWljRmllbGREYXRhLT57Q29uZmlnfS0+JSo7CiAgICB9CgogICAgcmV0dXJuICRTZWxmLT5fU2hvd1NjcmVlbigKICAgICAgICAlUGFyYW0sCiAgICAgICAgJUdldFBhcmFtLAogICAgICAgICREeW5hbWljRmllbGREYXRhLT4lKiwKICAgICAgICAlQ29uZmlnLAogICAgICAgIElEICAgICAgICAgICAgID0+ICRGaWVsZElELAogICAgICAgIE1vZGUgICAgICAgICAgID0+ICdDaGFuZ2UnLAogICAgICAgIEJyZWFkY3J1bWJUZXh0ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NoYW5nZSAlcyBmaWVsZCcsICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkRmllbGRUeXBlTmFtZSkgKSwKICAgICAgICBPYmplY3RUeXBlTmFtZSA9PiAkT2JqZWN0VHlwZU5hbWUsCiAgICAgICAgRmllbGRUeXBlTmFtZSAgPT4gJEZpZWxkVHlwZU5hbWUsCiAgICApOwp9CgpzdWIgX0NoYW5nZUFjdGlvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICVFcnJvcnM7CiAgICBteSAlR2V0UGFyYW07CiAgICBmb3IgbXkgJE5lZWRlZCAocXcoTmFtZSBMYWJlbCBGaWVsZE9yZGVyKSkgewogICAgICAgICRHZXRQYXJhbXskTmVlZGVkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICROZWVkZWQgKTsKICAgICAgICBpZiAoICEkR2V0UGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRFcnJvcnN7ICROZWVkZWQgLiAnU2VydmVyRXJyb3InIH0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3sgJE5lZWRlZCAuICdTZXJ2ZXJFcnJvck1lc3NhZ2UnIH0gPSBUcmFuc2xhdGFibGUoJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJyk7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRGaWVsZElEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0lEJyApOwogICAgaWYgKCAhJEZpZWxkSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTmVlZCBJRCcpLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGRhdGEKICAgIG15ICREeW5hbWljRmllbGREYXRhID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgIElEID0+ICRGaWVsZElELAogICAgKTsKCiAgICAjIGNoZWNrIGZvciB2YWxpZCBkeW5hbWljIGZpZWxkIGNvbmZpZ3VyYXRpb24KICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGREYXRhKSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCBnZXQgZGF0YSBmb3IgZHluYW1pYyBmaWVsZCAlcycsICRGaWVsZElEICksCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRHZXRQYXJhbXtGaWVsZE9yZGVyfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBmaWVsZCBvcmRlciBpcyBudW1lcmljIGFuZCBwb3NpdGl2ZQogICAgICAgIGlmICggJEdldFBhcmFte0ZpZWxkT3JkZXJ9ICF+IG17XEEgKD86IFxkICkrIFx6fXhtcyApIHsKCiAgICAgICAgICAgICMgYWRkIHNlcnZlciBlcnJvciBlcnJvciBjbGFzcwogICAgICAgICAgICAkRXJyb3Jze0ZpZWxkT3JkZXJTZXJ2ZXJFcnJvcn0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3tGaWVsZE9yZGVyU2VydmVyRXJyb3JNZXNzYWdlfSA9IFRyYW5zbGF0YWJsZSgnVGhlIGZpZWxkIG11c3QgYmUgbnVtZXJpYy4nKTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIG15ICRDb25maWdQYXJhbSAoCiAgICAgICAgcXcoT2JqZWN0VHlwZSBPYmplY3RUeXBlTmFtZSBGaWVsZFR5cGUgRmllbGRUeXBlTmFtZSBWYWxpZElEIE5hbWVzcGFjZSkKICAgICAgICApCiAgICB7CiAgICAgICAgJEdldFBhcmFteyRDb25maWdQYXJhbX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkQ29uZmlnUGFyYW0gKTsKICAgIH0KCiAgICAjIGV4dHJhY3QgZmllbGQgdHlwZSBzcGVjaWZpYyBwYXJhbWV0ZXJzLCBlLmcuIE11bHRpVmFsdWUKICAgIFNFVFRJTkc6CiAgICBmb3IgbXkgJFNldHRpbmcgKCAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfS0+QCogKSB7CgogICAgICAgICMgc2tpcCBjdXN0b20gaW5wdXRzIHdoaWNoIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkKICAgICAgICAjIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIHJlZmVyZW5jZSBmaWx0ZXIgbGlzdAogICAgICAgIG5leHQgU0VUVElORyBpZiAhJFNldHRpbmctPntJbnB1dFR5cGV9OwoKICAgICAgICBteSAkTmFtZSA9ICRTZXR0aW5nLT57Q29uZmlnUGFyYW1OYW1lfTsKICAgICAgICBpZiAoICRTZXR0aW5nLT57TXVsdGlwbGV9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17JE5hbWV9LT5AKiA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICROYW1lICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkR2V0UGFyYW17JE5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5hbWUgKTsKICAgICAgICB9CgogICAgICAgICMgdmFsaWRhdGUgaW5wdXQgaWYgbmVjZXNzYXJ5CiAgICAgICAgaWYgKCAkU2V0dGluZy0+e01hbmRhdG9yeX0gKSB7CiAgICAgICAgICAgIGlmICggIWRlZmluZWQgJEdldFBhcmFteyROYW1lfSB8fCAoICRTZXR0aW5nLT57TXVsdGlwbGV9ICYmICEkR2V0UGFyYW17JE5hbWV9LT5AKiApICkgewogICAgICAgICAgICAgICAgJEVycm9yc3sgJE5hbWUgLiAnU2VydmVyRXJyb3InIH0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICRFcnJvcnN7ICROYW1lIC4gJ1NlcnZlckVycm9yTWVzc2FnZScgfSA9IFRyYW5zbGF0YWJsZSgnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmb3IgbXkgJEZpbHRlclBhcmFtIChxdyhPYmplY3RUeXBlRmlsdGVyIE5hbWVzcGFjZUZpbHRlcikpIHsKICAgICAgICAkR2V0UGFyYW17JEZpbHRlclBhcmFtfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRGaWx0ZXJQYXJhbSApOwogICAgfQoKICAgIGlmICggJEdldFBhcmFte05hbWV9ICkgewoKICAgICAgICAjIGNoZWNrIGlmIG5hbWUgaXMgbG93ZXJjYXNlCiAgICAgICAgaWYgKCAkR2V0UGFyYW17TmFtZX0gIX4gbXtcQSAoPzogW2EtekEtWl0gfCBcZCApKyBcen14bXMgKSB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgZXJyb3IgY2xhc3MKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3JNZXNzYWdlfSA9CiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUoJ1RoZSBmaWVsZCBkb2VzIG5vdCBjb250YWluIG9ubHkgQVNDSUkgbGV0dGVycyBhbmQgbnVtYmVycy4nKTsKICAgICAgICB9CgogICAgICAgICRHZXRQYXJhbXtOYW1lfSA9ICRHZXRQYXJhbXtOYW1lc3BhY2V9ID8gJEdldFBhcmFte05hbWVzcGFjZX0gLiAnLScgLiAkR2V0UGFyYW17TmFtZX0gOiAkR2V0UGFyYW17TmFtZX07CgogICAgICAgICMgY2hlY2sgaWYgbmFtZSBpcyBkdXBsaWNhdGVkCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZHNMaXN0ID0gJXsKICAgICAgICAgICAgJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdCgKICAgICAgICAgICAgICAgIFZhbGlkICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFJlc3VsdFR5cGUgPT4gJ0hBU0gnLAogICAgICAgICAgICApCiAgICAgICAgfTsKCiAgICAgICAgJUR5bmFtaWNGaWVsZHNMaXN0ID0gcmV2ZXJzZSAlRHluYW1pY0ZpZWxkc0xpc3Q7CgogICAgICAgIGlmICgKICAgICAgICAgICAgJER5bmFtaWNGaWVsZHNMaXN0eyAkR2V0UGFyYW17TmFtZX0gfSAmJgogICAgICAgICAgICAkRHluYW1pY0ZpZWxkc0xpc3R7ICRHZXRQYXJhbXtOYW1lfSB9IG5lICRGaWVsZElECiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgY2xhc3MKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3J9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1RoZXJlIGlzIGFub3RoZXIgZmllbGQgd2l0aCB0aGUgc2FtZSBuYW1lLicpOwogICAgICAgIH0KCiAgICAgICAgIyBpZiBpdCdzIGFuIGludGVybmFsIGZpZWxkLCBpdCdzIG5hbWUgc2hvdWxkIG5vdCBjaGFuZ2UKICAgICAgICBpZiAoCiAgICAgICAgICAgICREeW5hbWljRmllbGREYXRhLT57SW50ZXJuYWxGaWVsZH0gJiYKICAgICAgICAgICAgJER5bmFtaWNGaWVsZHNMaXN0eyAkR2V0UGFyYW17TmFtZX0gfSBuZSAkRmllbGRJRAogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBhZGQgc2VydmVyIGVycm9yIGNsYXNzCiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yfSAgICAgICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3Jze05hbWVTZXJ2ZXJFcnJvck1lc3NhZ2V9ID0gVHJhbnNsYXRhYmxlKCdUaGUgbmFtZSBmb3IgdGhpcyBmaWVsZCBzaG91bGQgbm90IGNoYW5nZS4nKTsKICAgICAgICAgICAgJFBhcmFte0ludGVybmFsRmllbGR9ICAgICAgICAgICA9ICREeW5hbWljRmllbGREYXRhLT57SW50ZXJuYWxGaWVsZH07CiAgICAgICAgfQogICAgfQoKICAgICMgdW5jb3JyZWN0YWJsZSBlcnJvcnMKICAgIGlmICggISRHZXRQYXJhbXtWYWxpZElEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdOZWVkIFZhbGlkSUQnKSwKICAgICAgICApOwogICAgfQoKICAgICMgQ2hlY2sgaWYgZHluYW1pYyBmaWVsZCBpcyBwcmVzZW50IGluIFN5c0NvbmZpZyBzZXR0aW5nCiAgICBteSAkVXBkYXRlRW50aXR5ICAgICAgICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdVcGRhdGVFbnRpdHknICkgfHwgJyc7CiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKTsKICAgIG15ICVEeW5hbWljRmllbGRPbGREYXRhICAgICAgID0gJXskRHluYW1pY0ZpZWxkRGF0YX07CiAgICBteSBASXNEeW5hbWljRmllbGRJblN5c0NvbmZpZyA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ3VyYXRpb25FbnRpdHlDaGVjaygKICAgICAgICBFbnRpdHlUeXBlID0+ICdEeW5hbWljRmllbGQnLAogICAgICAgIEVudGl0eU5hbWUgPT4gJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfSwKICAgICk7CiAgICBpZiAoQElzRHluYW1pY0ZpZWxkSW5TeXNDb25maWcpIHsKCiAgICAgICAgIyBBbiBlbnRpdHkgcHJlc2VudCBpbiBTeXNDb25maWcgY291bGRuJ3QgYmUgaW52YWxpZGF0ZWQuCiAgICAgICAgaWYgKAogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMb29rdXAoIFZhbGlkSUQgPT4gJEdldFBhcmFte1ZhbGlkSUR9ICkKICAgICAgICAgICAgbmUgJ3ZhbGlkJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRXJyb3Jze1ZhbGlkSURJbnZhbGlkfSAgICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3tWYWxpZE9wdGlvblNlcnZlckVycm9yfSA9ICdJblNldHRpbmcnOwogICAgICAgIH0KCiAgICAgICAgIyBJbiBjYXNlIGNoYW5naW5nIG5hbWUgYW4gYXV0aG9yaXphdGlvbiAoVXBkYXRlRW50aXR5KSBzaG91bGQgYmUgc2VudAogICAgICAgIGVsc2lmICggJER5bmFtaWNGaWVsZERhdGEtPntOYW1lfSBuZSAkR2V0UGFyYW17TmFtZX0gJiYgISRVcGRhdGVFbnRpdHkgKSB7CiAgICAgICAgICAgICRFcnJvcnN7TmFtZUludmFsaWR9ICAgICAgICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7SW5TZXR0aW5nTmFtZVNlcnZlckVycm9yfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgcmV0dXJuIHRvIGNoYW5nZSBzY3JlZW4gaWYgZXJyb3JzCiAgICBpZiAoJUVycm9ycykgewogICAgICAgIHJldHVybiAkU2VsZi0+X1Nob3dTY3JlZW4oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUVycm9ycywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBJRCAgID0+ICRGaWVsZElELAogICAgICAgICAgICBNb2RlID0+ICdDaGFuZ2UnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgc3BlY2lmaWMgY29uZmlnCiAgICBteSAlRmllbGRDb25maWcgPSAoKTsKCiAgICAjIGV4dHJhY3QgZmllbGQgdHlwZSBzcGVjaWZpYyBwYXJhbWV0ZXJzLCBlLmcuIE11bHRpVmFsdWUKICAgIFNFVFRJTkc6CiAgICBmb3IgbXkgJFNldHRpbmcgKCAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfS0+QCogKSB7CgogICAgICAgICMgc2tpcCBjdXN0b20gaW5wdXRzIHdoaWNoIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkKICAgICAgICAjIGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIHJlZmVyZW5jZSBmaWx0ZXIgbGlzdAogICAgICAgIG5leHQgU0VUVElORyBpZiAhJFNldHRpbmctPntJbnB1dFR5cGV9OwoKICAgICAgICBteSAkTmFtZSA9ICRTZXR0aW5nLT57Q29uZmlnUGFyYW1OYW1lfTsKICAgICAgICAkRmllbGRDb25maWd7JE5hbWV9ID0gJEdldFBhcmFteyROYW1lfTsKICAgIH0KCiAgICAjIHVwZGF0ZSBkeW5hbWljIGZpZWxkIChGaWVsZFR5cGUgYW5kIE9iamVjdFR5cGUgY2Fubm90IGJlIGNoYW5nZWQ7IHVzZSBvbGQgdmFsdWVzKQogICAgbXkgJFVwZGF0ZVN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRVcGRhdGUoCiAgICAgICAgSUQgICAgICAgICA9PiAkRmllbGRJRCwKICAgICAgICBOYW1lICAgICAgID0+ICRHZXRQYXJhbXtOYW1lfSwKICAgICAgICBMYWJlbCAgICAgID0+ICRHZXRQYXJhbXtMYWJlbH0sCiAgICAgICAgRmllbGRPcmRlciA9PiAkR2V0UGFyYW17RmllbGRPcmRlcn0sCiAgICAgICAgRmllbGRUeXBlICA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e0ZpZWxkVHlwZX0sCiAgICAgICAgT2JqZWN0VHlwZSA9PiAkRHluYW1pY0ZpZWxkRGF0YS0+e09iamVjdFR5cGV9LAogICAgICAgIENvbmZpZyAgICAgPT4gXCVGaWVsZENvbmZpZywKICAgICAgICBWYWxpZElEICAgID0+ICRHZXRQYXJhbXtWYWxpZElEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgaWYgKCAhJFVwZGF0ZVN1Y2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCB1cGRhdGUgdGhlIGZpZWxkICVzJywgJEdldFBhcmFte05hbWV9ICksCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoCiAgICAgICAgQElzRHluYW1pY0ZpZWxkSW5TeXNDb25maWcKICAgICAgICAmJiAkRHluYW1pY0ZpZWxkT2xkRGF0YXtOYW1lfSBuZSAkR2V0UGFyYW17TmFtZX0KICAgICAgICAmJiAkVXBkYXRlRW50aXR5CiAgICAgICAgKQogICAgewogICAgICAgIFNFVFRJTkc6CiAgICAgICAgZm9yIG15ICRTZXR0aW5nTmFtZSAoQElzRHluYW1pY0ZpZWxkSW5TeXNDb25maWcpIHsKCiAgICAgICAgICAgIG15ICVTZXR0aW5nID0gJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ0dldCgKICAgICAgICAgICAgICAgIE5hbWUgPT4gJFNldHRpbmdOYW1lLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBTRVRUSU5HIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggXCVTZXR0aW5nICk7CgogICAgICAgICAgICAkU2V0dGluZ3tFZmZlY3RpdmVWYWx1ZX0gPX4gcy8kRHluYW1pY0ZpZWxkT2xkRGF0YXtOYW1lfS8kR2V0UGFyYW17TmFtZX0vZzsKCiAgICAgICAgICAgIG15ICRFeGNsdXNpdmVMb2NrR1VJRCA9ICRTeXNDb25maWdPYmplY3QtPlNldHRpbmdMb2NrKAogICAgICAgICAgICAgICAgTmFtZSAgID0+ICRTZXR0aW5ne05hbWV9LAogICAgICAgICAgICAgICAgRm9yY2UgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9CiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZXR0aW5ne0V4Y2x1c2l2ZUxvY2tHVUlEfSA9ICRFeGNsdXNpdmVMb2NrR1VJRDsKCiAgICAgICAgICAgICRTeXNDb25maWdPYmplY3QtPlNldHRpbmdVcGRhdGUoCiAgICAgICAgICAgICAgICAlU2V0dGluZywKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkU3lzQ29uZmlnT2JqZWN0LT5Db25maWd1cmF0aW9uRGVwbG95KAogICAgICAgICAgICBDb21tZW50cyAgICAgID0+ICJEeW5hbWljRmllbGQgbmFtZSBjaGFuZ2UiLAogICAgICAgICAgICBEaXJ0eVNldHRpbmdzID0+IFxASXNEeW5hbWljRmllbGRJblN5c0NvbmZpZywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIEZvcmNlICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRGaWx0ZXJTdHJpbmcgPSAnJzsKCiAgICBpZiAoIElzU3RyaW5nV2l0aERhdGEoICRHZXRQYXJhbXtPYmplY3RUeXBlRmlsdGVyfSApICkgewogICAgICAgICRGaWx0ZXJTdHJpbmcgLj0gIjtPYmplY3RUeXBlRmlsdGVyPSIgLiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkZpbHRlciB8IHVyaSAlXScsCiAgICAgICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkR2V0UGFyYW17T2JqZWN0VHlwZUZpbHRlcn0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KICAgIGlmICggSXNTdHJpbmdXaXRoRGF0YSggJEdldFBhcmFte05hbWVzcGFjZUZpbHRlcn0gKSApIHsKICAgICAgICAkRmlsdGVyU3RyaW5nIC49ICI7TmFtZXNwYWNlRmlsdGVyPSIgLiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkZpbHRlciB8IHVyaSAlXScsCiAgICAgICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkR2V0UGFyYW17TmFtZXNwYWNlRmlsdGVyfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgaWYgdGhlIHVzZXIgd291bGQgbGlrZSB0byBjb250aW51ZSBlZGl0aW5nIHRoZSBkeW5hbWljIGZpZWxkLCBqdXN0IHJlZGlyZWN0IHRvIHRoZSBjaGFuZ2Ugc2NyZWVuCiAgICBpZiAoCiAgICAgICAgZGVmaW5lZCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICkKICAgICAgICAmJiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb250aW51ZUFmdGVyU2F2ZScgKSBlcSAnMScgKQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+CiAgICAgICAgICAgICAgICAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249Q2hhbmdlO09iamVjdFR5cGU9JER5bmFtaWNGaWVsZERhdGEtPntPYmplY3RUeXBlfTtGaWVsZFR5cGU9JER5bmFtaWNGaWVsZERhdGEtPntGaWVsZFR5cGV9O0lEPSRGaWVsZElEJEZpbHRlclN0cmluZyIKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgb3RoZXJ3aXNlIHJldHVybiB0byBvdmVydmlldwogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj1BZG1pbkR5bmFtaWNGaWVsZCRGaWx0ZXJTdHJpbmciICk7CiAgICB9Cn0KCnN1YiBfU2hvd1NjcmVlbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICROYW1lc3BhY2UgPSAkUGFyYW17TmFtZXNwYWNlfTsKICAgICRQYXJhbXtEaXNwbGF5RmllbGROYW1lfSA9ICdOZXcnOwoKICAgIGlmICggJFBhcmFte01vZGV9IGVxICdDaGFuZ2UnIHx8ICRQYXJhbXtOYW1lfSApIHsKCiAgICAgICAgaWYgKCAhJFBhcmFte0Nsb25lRmllbGRJRH0gKSB7CiAgICAgICAgICAgICRQYXJhbXtTaG93V2FybmluZ30gICAgICA9ICdTaG93V2FybmluZyc7CiAgICAgICAgICAgICRQYXJhbXtEaXNwbGF5RmllbGROYW1lfSA9ICRQYXJhbXtOYW1lfTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIG5hbWVzcGFjZQogICAgICAgIGlmICggJFBhcmFte05hbWV9ID1+IC8oLiopLSguKikvICkgewogICAgICAgICAgICAkTmFtZXNwYWNlID0gJDE7CiAgICAgICAgICAgICRQYXJhbXtQbGFpbkZpZWxkTmFtZX0gPSAkMiB1bmxlc3MgJFBhcmFte0Nsb25lRmllbGRJRH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17UGxhaW5GaWVsZE5hbWV9ID0gJFBhcmFte05hbWV9OwogICAgICAgIH0KICAgIH0KCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gam9pbiAnJywKICAgICAgICAkTGF5b3V0T2JqZWN0LT5IZWFkZXIsCiAgICAgICAgJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcjsKCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKICAgICMgZ2V0IGFsbCBmaWVsZHMKICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGlzdCBvZiBvcmRlciBudW1iZXJzIChpcyBhbHJlYWR5IHNvcnRlZCkuCiAgICBteSBARHluYW1pY2ZpZWxkT3JkZXJMaXN0OwogICAgbXkgJUR5bmFtaWNmaWVsZE5hbWVzTGlzdDsKICAgIGZvciBteSAkRHluYW1pY2ZpZWxkICggQHskRHluYW1pY0ZpZWxkTGlzdH0gKSB7CiAgICAgICAgcHVzaCBARHluYW1pY2ZpZWxkT3JkZXJMaXN0LCAkRHluYW1pY2ZpZWxkLT57RmllbGRPcmRlcn07CiAgICAgICAgJER5bmFtaWNmaWVsZE5hbWVzTGlzdHsgJER5bmFtaWNmaWVsZC0+e0ZpZWxkT3JkZXJ9IH0gPSAkRHluYW1pY2ZpZWxkLT57TGFiZWx9OwogICAgfQoKICAgICMgd2hlbiBhZGRpbmcgd2UgbmVlZCB0byBjcmVhdGUgYW4gZXh0cmEgb3JkZXIgbnVtYmVyIGZvciB0aGUgbmV3IGZpZWxkCiAgICBpZiAoICRQYXJhbXtNb2RlfSBlcSAnQWRkJyApIHsKCiAgICAgICAgIyBnZXQgdGhlIGxhc3QgZWxlbWVudCBmcm9tIHRoZSBvcmRlciBsaXN0IGFuZCBhZGQgMQogICAgICAgIG15ICRMYXN0T3JkZXJOdW1iZXIgPSAkRHluYW1pY2ZpZWxkT3JkZXJMaXN0Wy0xXTsKICAgICAgICAkTGFzdE9yZGVyTnVtYmVyKys7CgogICAgICAgICMgYWRkIHRoaXMgbmV3IG9yZGVyIG51bWJlciB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiAgICAgICAgcHVzaCBARHluYW1pY2ZpZWxkT3JkZXJMaXN0LCAkTGFzdE9yZGVyTnVtYmVyOwogICAgfQoKICAgICMgc2hvdyB0aGUgbmFtZXMgb2YgdGhlIG90aGVyIGZpZWxkcyB0byBlYXNlIG9yZGVyaW5nCiAgICBteSAlT3JkZXJOYW1lc0xpc3Q7CiAgICBteSAkQ3VycmVudGx5VGV4dCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ3VycmVudGx5JykgLiAnOiAnOwogICAgZm9yIG15ICRPcmRlck51bWJlciAoIHNvcnQgQER5bmFtaWNmaWVsZE9yZGVyTGlzdCApIHsKICAgICAgICAkT3JkZXJOYW1lc0xpc3R7JE9yZGVyTnVtYmVyfSA9ICRPcmRlck51bWJlcjsKICAgICAgICBpZiAoICREeW5hbWljZmllbGROYW1lc0xpc3R7JE9yZGVyTnVtYmVyfSAmJiAkT3JkZXJOdW1iZXIgbmUgJFBhcmFte0ZpZWxkT3JkZXJ9ICkgewogICAgICAgICAgICAkT3JkZXJOYW1lc0xpc3R7JE9yZGVyTnVtYmVyfSA9ICRPcmRlck51bWJlciAuICcgLSAnCiAgICAgICAgICAgICAgICAuICRDdXJyZW50bHlUZXh0CiAgICAgICAgICAgICAgICAuICREeW5hbWljZmllbGROYW1lc0xpc3R7JE9yZGVyTnVtYmVyfTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZE9yZGVyU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVPcmRlck5hbWVzTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgID0+ICdGaWVsZE9yZGVyJywKICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICRQYXJhbXtGaWVsZE9yZGVyfSB8fCAxLAogICAgICAgIFBvc3NpYmxlTm9uZSAgPT4gMCwKICAgICAgICBUcmFuc2xhdGlvbiAgID0+IDAsCiAgICAgICAgU29ydCAgICAgICAgICA9PiAnTnVtZXJpY0tleScsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnTW9kZXJuaXplIFc3NXBjIFZhbGlkYXRlX051bWJlcicsCiAgICApOwoKICAgICMgQWRkIGZpZWxkIHR5cGUgc3BlY2lmaWMgaW5wdXRzLiBDdXJyZW50bHkgb25seSBTZWxlY3Rpb25zIGFyZSBzdXBwb3J0ZWQuCiAgICAjIFNlbGVjdGlvbnMgbWF5IGJlIHNldCB1cCBpbiBhIGRlY2xhcmF0aXZlIHdheS4KICAgIFNFVFRJTkc6CiAgICBmb3IgbXkgJFNldHRpbmcgKCAkU2VsZi0+e0ZpZWxkVHlwZVNldHRpbmdzfS0+QCogKSB7CiAgICAgICAgbmV4dCBTRVRUSU5HIHVubGVzcyAkU2V0dGluZy0+e0lucHV0VHlwZX07CgogICAgICAgIGlmICggJFNldHRpbmctPntJbnB1dFR5cGV9IGVxICdTZWxlY3Rpb24nICkgewogICAgICAgICAgICBteSAkTmFtZSAgICAgICA9ICRTZXR0aW5nLT57Q29uZmlnUGFyYW1OYW1lfTsKICAgICAgICAgICAgbXkgQENzc0NsYXNzZXMgPSBxdyhNb2Rlcm5pemUgVzUwcGMpOwogICAgICAgICAgICBwdXNoIEBDc3NDbGFzc2VzLCAkU2V0dGluZy0+e01hbmRhdG9yeX0gICAgICAgICAgID8gJ1ZhbGlkYXRlX1JlcXVpcmVkJyA6ICgpOwogICAgICAgICAgICBwdXNoIEBDc3NDbGFzc2VzLCAkUGFyYW17ICROYW1lIC4gJ1NlcnZlckVycm9yJyB9ID8gJ1NlcnZlckVycm9yJyAgICAgICA6ICgpOwogICAgICAgICAgICBteSAkRmllbGRTdHJnID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAkTmFtZSwKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICAgID0+ICRTZXR0aW5nLT57U2VsZWN0aW9uRGF0YX0sCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgICA9PiAoICRTZXR0aW5nLT57UG9zc2libGVOb25lfSAvLyAwICksCiAgICAgICAgICAgICAgICBEaXNhYmxlZCAgICAgICA9PiAoICRTZXR0aW5nLT57RGlzYWJsZWR9ICAgICAvLyAwICksCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgICA9PiAkUGFyYW17JE5hbWV9IHx8ICcwJywKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgID0+ICggam9pbiAnICcsIEBDc3NDbGFzc2VzICksCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICAgICA9PiAoICRTZXR0aW5nLT57TXVsdGlwbGV9ICAgIC8vIDAgKSwKICAgICAgICAgICAgICAgIFRyZWVWaWV3ICAgICAgID0+ICggJFNldHRpbmctPntUcmVlVmlld30gICAgLy8gMCApLAogICAgICAgICAgICAgICAgU29ydCAgICAgICAgICAgPT4gKCAkU2V0dGluZy0+e1NvcnR9ICAgICAgICAvLyAwICksCiAgICAgICAgICAgICAgICBTb3J0UmV2ZXJzZSAgICA9PiAoICRTZXR0aW5nLT57U29ydFJldmVyc2V9IC8vIDAgKSwKICAgICAgICAgICAgICAgIFNvcnRJbmRpdmlkdWFsID0+ICRTZXR0aW5nLT57U29ydEluZGl2aWR1YWx9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NvbmZpZ1BhcmFtUm93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENvbmZpZ1BhcmFtTmFtZSAgICA9PiAkTmFtZSwKICAgICAgICAgICAgICAgICAgICBMYWJlbCAgICAgICAgICAgICAgPT4gJFNldHRpbmctPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgRmllbGRTdHJnICAgICAgICAgID0+ICRGaWVsZFN0cmcsCiAgICAgICAgICAgICAgICAgICAgRXhwbGFuYXRpb24gICAgICAgID0+ICRTZXR0aW5nLT57RXhwbGFuYXRpb259LAogICAgICAgICAgICAgICAgICAgIFNlcnZlckVycm9yTWVzc2FnZSA9PiAkUGFyYW17ICROYW1lIC4gJ1NlcnZlckVycm9yTWVzc2FnZScgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFNFVFRJTkc7CiAgICAgICAgfQoKICAgICAgICAjIG1vcmUgaW5wdXQgdHlwZXMgbWlnaHQgYmUgc3VwcG9ydGVkIGluIGZ1dHVyZQogICAgfQoKICAgIG15ICROYW1lc3BhY2VMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdEeW5hbWljRmllbGQ6Ok5hbWVzcGFjZXMnKTsKICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCROYW1lc3BhY2VMaXN0KSApIHsKICAgICAgICBteSAkTmFtZXNwYWNlU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgID0+ICROYW1lc3BhY2VMaXN0LAogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdOYW1lc3BhY2UnLAogICAgICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICROYW1lc3BhY2UgfHwgJycsCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSAgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gICA9PiAwLAogICAgICAgICAgICBTb3J0ICAgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgIENsYXNzICAgICAgICAgPT4gJ01vZGVybml6ZSBXNzVwYycsCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZE5hbWVzcGFjZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZXNwYWNlU3RyZyA9PiAkTmFtZXNwYWNlU3RyZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CgogICAgIyBjcmVhdGUgdGhlIFZhbGlkaXR5IHNlbGVjdAogICAgbXkgJFZhbGlkaXR5U3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17VmFsaWRJRH0gfHwgMSwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMCwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZSBXNTBwYycsCiAgICApOwoKICAgICMgSW50ZXJuYWwgZmllbGRzIGNhbiBub3QgYmUgZGVsZXRlZCBhbmQgbmFtZSBzaG91bGQgbm90IGNoYW5nZS4KICAgIG15ICRSZWFkb25seUludGVybmFsRmllbGQgPSAnJzsKICAgIGlmICggJFBhcmFte0ludGVybmFsRmllbGR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdJbnRlcm5hbEZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgICAgICRSZWFkb25seUludGVybmFsRmllbGQgPSAncmVhZG9ubHknOwogICAgfQoKICAgICMgZ2V0IHRoZSBmaWVsZCBpZAogICAgbXkgJEZpZWxkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CgogICAgIyBvbmx5IGlmIHRoZSBkeW5hbWljIGZpZWxkIGV4aXN0cyBhbmQgc2hvdWxkIGJlIGVkaXRlZCwKICAgICMgbm90IGlmIHRoZSBmaWVsZCBpcyBhZGRlZCBmb3IgdGhlIGZpcnN0IHRpbWUKICAgIGlmICgkRmllbGRJRCkgewoKICAgICAgICBteSAkRHluYW1pY0ZpZWxkID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICBJRCA9PiAkRmllbGRJRCwKICAgICAgICApOwoKICAgICAgICBteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICREeW5hbWljRmllbGQtPntOYW1lfTsKCiAgICAgICAgIyBBZGQgd2FybmluZyBpbiBjYXNlIHRoZSBEeW5hbWljRmllbGQgYmVsb25ncyBhIFN5c0NvbmZpZyBzZXR0aW5nLgogICAgICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CgogICAgICAgICMgSW4gY2FzZSBkaXJ0eSBzZXR0aW5nIGRpc2FibGUgZm9ybQogICAgICAgIG15ICRJc0RpcnR5Q29uZmlnID0gMDsKICAgICAgICBteSBASXNEaXJ0eVJlc3VsdCA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ3VyYXRpb25EaXJ0eVNldHRpbmdzTGlzdCgpOwogICAgICAgIG15ICVJc0RpcnR5TGlzdCAgID0gbWFwIHsgJF8gPT4gMSB9IEBJc0RpcnR5UmVzdWx0OwoKICAgICAgICBteSBASXNEeW5hbWljRmllbGRJblN5c0NvbmZpZyA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ3VyYXRpb25FbnRpdHlDaGVjaygKICAgICAgICAgICAgRW50aXR5VHlwZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRW50aXR5TmFtZSA9PiAkRHluYW1pY0ZpZWxkTmFtZSAvLyAnJywKICAgICAgICApOwoKICAgICAgICBpZiAoQElzRHluYW1pY0ZpZWxkSW5TeXNDb25maWcpIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGRJblN5c0NvbmZpZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBPbGROYW1lID0+ICREeW5hbWljRmllbGROYW1lLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yIG15ICRTZXR0aW5nTmFtZSAoQElzRHluYW1pY0ZpZWxkSW5TeXNDb25maWcpIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZEluU3lzQ29uZmlnUm93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ05hbWUgPT4gJFNldHRpbmdOYW1lLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgVmVyaWZ5IGlmIGRpcnR5IHNldHRpbmcKICAgICAgICAgICAgICAgIGlmICggJElzRGlydHlMaXN0eyRTZXR0aW5nTmFtZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJElzRGlydHlDb25maWcgPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRJc0RpcnR5Q29uZmlnKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkSW5TeXNDb25maWdEaXJ0eScsCgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICB9CgogICAgbXkgJEZpbHRlclN0cmcgPSAnJzsKICAgIGlmICggSXNTdHJpbmdXaXRoRGF0YSggJFBhcmFte09iamVjdFR5cGVGaWx0ZXJ9ICkgKSB7CiAgICAgICAgJEZpbHRlclN0cmcgLj0gIjtPYmplY3RUeXBlRmlsdGVyPSIgLiAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkZpbHRlciB8IHVyaSAlXScsCiAgICAgICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17T2JqZWN0VHlwZUZpbHRlcn0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSgkTmFtZXNwYWNlTGlzdCkgKSB7CiAgICAgICAgaWYgKCBJc1N0cmluZ1dpdGhEYXRhKCAkUGFyYW17TmFtZXNwYWNlRmlsdGVyfSApICkgewogICAgICAgICAgICAkRmlsdGVyU3RyZyAuPSAiO05hbWVzcGFjZUZpbHRlcj0iIC4gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuRmlsdGVyIHwgdXJpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte05hbWVzcGFjZUZpbHRlcn0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgcmV0dXJuIGpvaW4gJycsCiAgICAgICAgJE91dHB1dCwKICAgICAgICAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAkU2VsZi0+e1RlbXBsYXRlRmlsZX0sCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBGaWx0ZXJTdHJnICAgICAgICAgICAgPT4gJEZpbHRlclN0cmcsCiAgICAgICAgICAgICAgICBWYWxpZGl0eVN0cmcgICAgICAgICAgPT4gJFZhbGlkaXR5U3RyZywKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZE9yZGVyU3RyZyA9PiAkRHluYW1pY0ZpZWxkT3JkZXJTdHJnLAogICAgICAgICAgICAgICAgUmVhZG9ubHlJbnRlcm5hbEZpZWxkID0+ICRSZWFkb25seUludGVybmFsRmllbGQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKSwKICAgICAgICAkTGF5b3V0T2JqZWN0LT5Gb290ZXI7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Modules/OtoboAIDashboard.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6T3RvYm9BSURhc2hib2FyZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkQ2FjaGVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwogICAgbXkgJE90b2JvQUlPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScpOwogICAgbXkgJE1haW5PYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICRTdWJhY3Rpb24gICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmFjdGlvbicgKSB8fCAnJzsKICAgIG15ICRRdWVzdGlvbiAgICAgICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1F1ZXN0aW9uJyApICB8fCAnJzsKCiAgICAjIGF0dGVudGlvbiBNRDVTdW0gY2FuIGNoYW5nZSB1dGY4X2ZsYWcgb2YgcGFzc2VkIHN0cmluZyByZWYKICAgIG15ICRRdWVzdGlvbkNvcHlGb3JNRDVDYWxjID0gJFF1ZXN0aW9uOwogICAgbXkgJFF1ZXN0aW9uTWQ1ICAgICAgICAgICAgPSAkTWFpbk9iamVjdC0+TUQ1c3VtKCBTdHJpbmcgPT4gXCRRdWVzdGlvbkNvcHlGb3JNRDVDYWxjICk7CiAgICBteSAkQ2FjaGVLZXlRdWVzdGlvbiAgICAgICA9ICdPdG9ib0FJLUN1c3RvbS1SZXNwb25zZS0nIC4gJFF1ZXN0aW9uTWQ1OwogICAgbXkgJENhY2hlS2V5UmVxdWVzdCAgICAgICAgPSAnT3RvYm9BSS1DdXN0b20tUmVxdWVzdC0nIC4gJFNlbGYtPntVc2VySUR9OwoKICAgIG15ICRKU09OOwogICAgaWYgKCAkU3ViYWN0aW9uIGVxICJHZXRBSUFuc3dlciIgKSB7CiAgICAgICAgbXkgJEFuc3dlciA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICdPdG9ib0FJJywKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXlRdWVzdGlvbiwKICAgICAgICApOwogICAgICAgIGlmICgkQW5zd2VyKSB7CiAgICAgICAgICAgICRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9PiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgID0+ICRBbnN3ZXIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBteSAkUmVxdWVzdEV4aXN0cyA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgICAgICAgICAgVHlwZSA9PiAnT3RvYm9BSScsCiAgICAgICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleVJlcXVlc3QsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgkUmVxdWVzdEV4aXN0cykgewogICAgICAgICAgICAgICAgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPT4gJ29uZ29pbmcnLAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJFJlcXVlc3RFeGlzdHMsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkT3RvYm9BSU9iamVjdC0+R2V0QW5zd2VyQXN5bmMoCiAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb24gPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICRUVEwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ090b2JvQUlEYXNoYm9hcmQ6OkZyb250ZW5kOjpDYWNoZVRUTCcpLT57UmVxdWVzdH0gfHwgMjQ7CiAgICAgICAgICAgICAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICAgICAgICAgICAgICBUeXBlICA9PiAnT3RvYm9BSScsCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5UmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgVFRMICAgPT4gNjAgKiA2MCAqICRUVEwsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPT4gJ3BlbmRpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJFF1ZXN0aW9uTWQ1LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkU3ViYWN0aW9uIGVxICJQb2xsQUlBbnN3ZXIiICkgewogICAgICAgIG15ICRBbnN3ZXIgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAnT3RvYm9BSScsCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5UXVlc3Rpb24sCiAgICAgICAgKTsKICAgICAgICBpZiAoJEFuc3dlcikgewogICAgICAgICAgICAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPT4gJ3N1Y2Nlc3MnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkQW5zd2VyLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJENhY2hlT2JqZWN0LT5EZWxldGUoCiAgICAgICAgICAgICAgICBUeXBlID0+ICdPdG9ib0FJJywKICAgICAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5UmVxdWVzdCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15ICRSZXF1ZXN0RXhpc3RzID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgICAgICBUeXBlID0+ICdPdG9ib0FJJywKICAgICAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5UmVxdWVzdCwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCRSZXF1ZXN0RXhpc3RzKSB7CiAgICAgICAgICAgICAgICAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9PiAncGVuZGluZycsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkUXVlc3Rpb25NZDUsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9PiAnZmFpbCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRTdWJhY3Rpb24gZXEgIkNhbmNlbEFJUmVxdWVzdCIgKSB7CiAgICAgICAgJENhY2hlT2JqZWN0LT5EZWxldGUoCiAgICAgICAgICAgIFR5cGUgPT4gJ090b2JvQUknLAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleVJlcXVlc3QsCiAgICAgICAgKTsKICAgICAgICAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgU3RhdHVzID0+ICdjYW5jZWxlZCcsCiAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJFF1ZXN0aW9uTWQ1LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgfQoKICAgICMgc2VuZCBKU09OIHJlc3BvbnNlCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICApOwp9CgoxOwo=</File>
        <File Location="Kernel/Modules/AgentTicketAIChat.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRUaWNrZXRBSUNoYXQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTmV0OjpETlM7CnVzZSBVUkk6OkVzY2FwZSBxdyh1cmlfZXNjYXBlX3V0ZjgpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgbXkgJEF1dGhTZXNzaW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyk7CiAgICBteSAkVXNlck9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgbXkgJFBhcmFtT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZmV0Y2ggZGF0YQogICAgbXkgJE1DUEhvc3QgICA9ICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6TUNQOjpIb3N0Jyk7CiAgICBteSAkQ2hhdFVSTCAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdPVE9CT0FJOjpDaGF0OjpFbmRwb2ludCcpOwogICAgbXkgJENoZWNrSVAgICA9ICRDb25maWdPYmplY3QtPkdldCgnU2Vzc2lvbkNoZWNrUmVtb3RlSVAnKTsKICAgIG15ICRUaWNrZXRJRCAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0SUQnICk7CiAgICBteSAkQXJ0aWNsZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0FydGljbGVJRCcgKTsKICAgIG15ICVVc2VyRGF0YSAgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0gKTsKICAgIG15ICRGUUROICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZRRE4nKTsKCiAgICAjIG9ubHkgZ2VuZXJhdGUgYW4gT1RPQk8gc2Vzc2lvbiBpZCBpZiBhc2tlZCBmb3IKICAgIGlmICggJENoYXRVUkwgPX4gL1x7XHtPVE9CT19TSURcfVx9LyApIHsKCiAgICAgICAgIyBkZXRlcm1pbmUgcmVtb3RlIElQIG9mIG1jcCBzZXJ2ZXIgdG8gYmluZCBzZXNzaW9uIHRvCiAgICAgICAgbXkgJFJlbW90ZUlQID0gJ25vbmUnOwoKICAgICAgICBpZiAoJENoZWNrSVApIHsKCiAgICAgICAgICAgICRSZW1vdGVJUCA9ICRTZWxmLT5HZXRNQ1BSZW1vdGVBZGRyKCBNQ1AgPT4gJE1DUEhvc3QgKTsKICAgICAgICAgICAgaWYgKCAhJFJlbW90ZUlQICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkNhbm5vdCByZXNvbHZlIElQIGFkZHJlc3Mgb2YgTUNQLiBVbmFibGUgdG8gY3JlYXRlIGEgY2hhdCBzZXNzaW9uLiIgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgbWNwIGJvdW5kIHdlYnNlcnZpY2Ugc2Vzc2lvbgogICAgICAgIG15ICRTZXNzaW9uSUQgPSAkQXV0aFNlc3Npb25PYmplY3QtPkNyZWF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgJVVzZXJEYXRhLAogICAgICAgICAgICBVc2VyTGFzdFJlcXVlc3QgPT4gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvRXBvY2goKSwKICAgICAgICAgICAgVXNlclR5cGUgICAgICAgID0+ICdVc2VyJywKICAgICAgICAgICAgU2Vzc2lvblNvdXJjZSAgID0+ICdHZW5lcmljSW50ZXJmYWNlJywKICAgICAgICAgICAgUmVtb3RlQWRkciAgICAgID0+ICRSZW1vdGVJUCwKICAgICAgICApOwogICAgICAgIGlmICggISRTZXNzaW9uSUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJDYW5ub3QgY3JlYXRlIG5ldyBjaGF0IHNlc3Npb24uIiApOwogICAgICAgIH0KCiAgICAgICAgJFNlc3Npb25JRCA9IHVyaV9lc2NhcGVfdXRmOCgkU2Vzc2lvbklEKTsKICAgICAgICAkQ2hhdFVSTCA9fiBzL1x7XHtPVE9CT19TSURcfVx9L290b2JvX3NpZFwlM0QkU2Vzc2lvbklELzsKICAgIH0KCiAgICAkQ2hhdFVSTCA9fiBzL1x7XHtGUUROXH1cfS8kRlFETi87CgogICAgaWYgKCRUaWNrZXRJRCkgewogICAgICAgICRDaGF0VVJMID1+IHMvXHtce1RJQ0tFVF9JRFx9XH0vK3RpY2tldF9pZFwlM0QkVGlja2V0SUQvOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJENoYXRVUkwgPX4gcy9ce1x7VElDS0VUX0lEXH1cfS8vOwogICAgfQoKICAgIGlmICgkQXJ0aWNsZUlEKSB7CiAgICAgICAgJENoYXRVUkwgPX4gcy9ce1x7QVJUSUNMRV9JRFx9XH0vK2FydGljbGVfaWRcJTNEJEFydGljbGVJRC87CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkQ2hhdFVSTCA9fiBzL1x7XHtBUlRJQ0xFX0lEXH1cfS8vOwogICAgfQoKICAgICMgcmVkaXJlY3QgdG8gY2hhdAogICAgJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgRXh0VVJMID0+ICRDaGF0VVJMLAogICAgKTsKICAgIHJldHVybjsKfQoKc3ViIEdldE1DUFJlbW90ZUFkZHIgewoKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE1DUCA9ICRQYXJhbXsnTUNQJ30gfHwgJ21jcCc7CgogICAgbXkgJFJlc29sdmVyID0gTmV0OjpETlM6OlJlc29sdmVyLT5uZXc7CiAgICAkUmVzb2x2ZXItPnRjcF90aW1lb3V0KDEwKTsKICAgICRSZXNvbHZlci0+dWRwX3RpbWVvdXQoMTApOwoKICAgIG15ICRSZXN1bHQgPSAkUmVzb2x2ZXItPnNlYXJjaCgkTUNQKTsKICAgIHJldHVybiBpZiAhJFJlc3VsdDsKCiAgICBSRUNPUkQ6CiAgICBmb3IgbXkgJFJlY29yZCAoICRSZXN1bHQtPmFuc3dlciApIHsKCiAgICAgICAgaWYgKCAkUmVjb3JkLT5jYW4oJ2FkZHJlc3MnKSApIHsKCiAgICAgICAgICAgIHJldHVybiAkUmVjb3JkLT5hZGRyZXNzOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCjE7Cg==</File>
        <File Location="Kernel/Output/HTML/ArticleAction/AgentTicketAIChat.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpBcnRpY2xlQWN0aW9uOjpBZ2VudFRpY2tldEFJQ2hhdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKIyBvcHRpb25hbCBBY2xBY3Rpb25Mb29rdXAKc3ViIENoZWNrQWNjZXNzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBDaGVjayBuZWVkZWQgc3R1ZmYuCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0IEFydGljbGUgQ2hhbm5lbE5hbWUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgYmFzaWMgY29uZGl0aW9ucwogICAgaWYgKCAkUGFyYW17Q2hhbm5lbE5hbWV9IGVxICdJbnRlcm5hbCcgKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgY2hlY2sgaWYgbW9kdWxlIGlzIHJlZ2lzdGVyZWQKICAgIHJldHVybiBpZiAhJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPntBZ2VudFRpY2tldEFJQ2hhdH07CgogICAgIyBjaGVjayBBY2wKICAgIHJldHVybiBpZiAhJFBhcmFte0FjbEFjdGlvbkxvb2t1cH0tPntBZ2VudFRpY2tldEFJQ2hhdH07CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBHZXRDb25maWcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIENoZWNrIG5lZWRlZCBzdHVmZi4KICAgIGZvciBteSAkTmVlZGVkIChxdyhUaWNrZXQgQXJ0aWNsZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJExpbmsgICAgICAgID0gIkFjdGlvbj1BZ2VudFRpY2tldEFJQ2hhdDtUaWNrZXRJRD0kUGFyYW17VGlja2V0fS0+e1RpY2tldElEfTtBcnRpY2xlSUQ9JFBhcmFte0FydGljbGV9LT57QXJ0aWNsZUlEfSI7CiAgICBteSAkRGVzY3JpcHRpb24gPSBUcmFuc2xhdGFibGUoJ0FJJyk7CgogICAgbXkgJU1lbnVJdGVtID0gKAogICAgICAgIEl0ZW1UeXBlICAgID0+ICdMaW5rJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAkRGVzY3JpcHRpb24sCiAgICAgICAgTmFtZSAgICAgICAgPT4gJERlc2NyaXB0aW9uLAogICAgICAgIENsYXNzICAgICAgID0+ICdBc1BvcHVwIFBvcHVwVHlwZV9UaWNrZXRBY3Rpb24nLAogICAgICAgIExpbmsgICAgICAgID0+ICRMaW5rLAogICAgKTsKCiAgICByZXR1cm4gKCBcJU1lbnVJdGVtICk7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Output/HTML/Dashboard/OtoboAIDashboard.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6Ok90b2JvQUlEYXNoYm9hcmQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlICAgICAgICAgICAgICBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgcGFyYW1ldGVycwogICAgZm9yIG15ICROZWVkZWQgKHF3KENvbmZpZyBOYW1lIFVzZXJJRCkpIHsKICAgICAgICBkaWUgIkdvdCBubyAkTmVlZGVkISIgaWYgKCAhJFNlbGYtPnskTmVlZGVkfSApOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFByZWZlcmVuY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQFBhcmFtczsKCiAgICByZXR1cm4gQFBhcmFtczsKfQoKc3ViIENvbmZpZyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgaWYgZnJvbnRlbmQgbW9kdWxlIG9mIGxpbmsgaXMgdXNlZAogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ317TGlua30gJiYgJFNlbGYtPntDb25maWd9e0xpbmt9ID1+IC9BY3Rpb249KC4rPykoWyY7XS4rP3wpJC8gKSB7CiAgICAgICAgbXkgJEFjdGlvbiA9ICQxOwogICAgICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn0gKSB7CiAgICAgICAgICAgICRTZWxmLT57Q29uZmlnfXtMaW5rfSA9ICcnOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gKAogICAgICAgICV7ICRTZWxmLT57Q29uZmlnfSB9LAoKICAgICAgICAjIERvbid0IGNhY2hlIHRoaXMgZ2xvYmFsbHkgYXMgaXQgY29udGFpbnMgSlMgdGhhdCBpcyBub3QgaW5zaWRlIG9mIHRoZSBIVE1MLgogICAgICAgIENhY2hlVFRMID0+IHVuZGVmLAogICAgICAgIENhY2hlS2V5ID0+IHVuZGVmLAogICAgKTsKfQoKc3ViIEZpbHRlckNvbnRlbnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm47Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRQb2xsaW5nSW50ZXJ2YWwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ090b2JvQUlEYXNoYm9hcmQ6OkZyb250ZW5kOjpQb2xsaW5nSW50ZXJ2YWwnKSB8fCAzMDsKICAgIG15ICRUaW1lb3V0SW50ZXJ2YWwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ090b2JvQUlEYXNoYm9hcmQ6OkZyb250ZW5kOjpUaW1lb3V0SW50ZXJ2YWwnKSB8fCAzMDA7CiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1BvbGxpbmdJbnRlcnZhbCcsCiAgICAgICAgVmFsdWUgPT4gJFBvbGxpbmdJbnRlcnZhbCwKICAgICk7CiAgICAkTGF5b3V0T2JqZWN0LT5BZGRKU0RhdGEoCiAgICAgICAgS2V5ICAgPT4gJ1RpbWVvdXRJbnRlcnZhbCcsCiAgICAgICAgVmFsdWUgPT4gJFRpbWVvdXRJbnRlcnZhbCwKICAgICk7CiAgICBteSAkQ2FjaGVPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CiAgICBteSAkQ2FjaGVLZXlSZXF1ZXN0ID0gJ090b2JvQUktQ3VzdG9tLVJlcXVlc3QtJyAuICRTZWxmLT57VXNlcklEfTsKICAgIG15ICRSZXF1ZXN0RXhpc3RzICAgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+ICdPdG9ib0FJJywKICAgICAgICBLZXkgID0+ICRDYWNoZUtleVJlcXVlc3QsCiAgICApOwoKICAgIG15ICRDb250ZW50ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnT3RvYm9BSURhc2hib2FyZCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgUXVlc3Rpb24gPT4gJFJlcXVlc3RFeGlzdHMsCiAgICAgICAgfQogICAgKTsKCiAgICByZXR1cm4gJENvbnRlbnQ7Cn0KCjE7Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AgentTicketZoom/AISimilarTickets.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKERhdGEuV2lkZ2V0VGl0bGUpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTaW1pbGFyVGlja2V0cyIpICVdClslIEZPUkVBQ0ggVGlja2V0IElOIERhdGEgJV0KICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT0iWyUgVGlja2V0LnBhZ2VfY29udGVudCB8IGh0bWwgJV0iIHN0eWxlPSJkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTogbm93cmFwOyIgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ii9vdG9iby9pbmRleC5wbD9BY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPVslIFRpY2tldC5tZXRhZGF0YS5zb3VyY2VfaWQgfCB1cmwgJV0iPgogICAgICAgICAgICAgICAgICAgIFslIFRpY2tldC5wYWdlX2NvbnRlbnQgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9hPgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNpbWlsYXJUaWNrZXRzIikgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/AdminDynamicFieldTextAreaAI.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMSBjbGFzcz0iSW52aXNpYmxlVGV4dCI+CiAgICAgICAgWyUgVHJhbnNsYXRlKCJEeW5hbWljIEZpZWxkcyIpIHwgaHRtbCAlXSAtIFslIFRyYW5zbGF0ZShEYXRhLk9iamVjdFR5cGVOYW1lKSB8IGh0bWwgJV06CiAgICAgICAgWyUgVVNFIFRpdGxlID0gU3RyaW5nKERhdGEuQnJlYWRjcnVtYlRleHQpICVdCiAgICAgICAgWyUgVGl0bGUgfCBodG1sICVdCiAgICA8L2gxPgoKICAgIFslIEJyZWFkY3J1bWJQYXRoID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFRyYW5zbGF0ZSgnRHluYW1pYyBGaWVsZHMgTWFuYWdlbWVudCcpLAogICAgICAgICAgICAgICAgTGluayA9PiAnQWRtaW5EeW5hbWljRmllbGQnIF8gRGF0YS5GaWx0ZXJTdHJnLAogICAgICAgICAgICB9LAogICAgICAgIF0KICAgICVdCgogICAgWyUgVVNFIEJyZWFkY3J1bWJOYW1lID0gU3RyaW5nKFRyYW5zbGF0ZShEYXRhLk9iamVjdFR5cGVOYW1lKSkgJV0KCiAgICBbJSBTV0lUQ0ggRGF0YS5Nb2RlICVdCiAgICAgICAgWyUgQ0FTRSAnQWRkJyAlXQogICAgICAgICAgICBbJSBCcmVhZGNydW1iUGF0aC5wdXNoKHsgTmFtZSA9PiBCcmVhZGNydW1iTmFtZS5hcHBlbmQoICc6ICcsIFRpdGxlICkgfSkgJV0KICAgICAgICBbJSBDQVNFICdDaGFuZ2UnICVdCiAgICAgICAgICAgIFslIEJyZWFkY3J1bWJQYXRoLnB1c2goeyBOYW1lID0+IEJyZWFkY3J1bWJOYW1lLmFwcGVuZCggJzogJywgVGl0bGUsICcgLSAnLCBEYXRhLk5hbWUgKSB9KSAlXQogICAgWyUgRU5EICVdCgogICAgWyUgSU5DTFVERSAiQnJlYWRjcnVtYi50dCIgUGF0aCA9IEJyZWFkY3J1bWJQYXRoICVdCgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pbkR5bmFtaWNGaWVsZFslIERhdGEuRmlsdGVyU3RyZyAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gYmFjayB0byBvdmVydmlldyIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGZvcm0gaWQ9IkVudGl0eVVwZGF0ZSIgYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWRtaW5EeW5hbWljRmllbGRUZXh0QXJlYUFJIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iWyUgRGF0YS5Nb2RlIHwgaHRtbCAlXUFjdGlvbiI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik9iamVjdFR5cGUiIHZhbHVlPSJbJSBEYXRhLk9iamVjdFR5cGUgfCBodG1sICVdIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRmllbGRUeXBlIiB2YWx1ZT0iWyUgRGF0YS5GaWVsZFR5cGUgfCBodG1sICVdIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iT2JqZWN0VHlwZUZpbHRlciIgdmFsdWU9IlslIERhdGEuT2JqZWN0VHlwZUZpbHRlciB8IGh0bWwgJV0iPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJOYW1lc3BhY2VGaWx0ZXIiIHZhbHVlPSJbJSBEYXRhLk5hbWVzcGFjZUZpbHRlciB8IGh0bWwgJV0iPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJRCIgdmFsdWU9IlslIERhdGEuSUQgfCBodG1sICVdIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiR2VuZXJhbCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxheW91dEdyaWQgQ29sdW1uc1dpdGhTcGFjaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU2l6ZTFvZjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJOYW1lIiBjbGFzcz0iVzUwcGMgWyUgRGF0YS5OYW1lU2VydmVyRXJyb3IgfCBodG1sICVdIFslIERhdGEuU2hvd1dhcm5pbmcgfCBodG1sICVdICBWYWxpZGF0ZV9BbHBoYW51bWVyaWMiIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMjAwIiB2YWx1ZT0iWyUgRGF0YS5QbGFpbkZpZWxkTmFtZSB8IGh0bWwgJV0iIG5hbWU9Ik5hbWUiIFslIERhdGEuUmVhZG9ubHlJbnRlcm5hbEZpZWxkIHwgaHRtbCAlXT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLCBhbmQgdGhlIHZhbHVlIHNob3VsZCBiZSBhbHBoYWJldGljIGFuZCBudW1lcmljIGNoYXJhY3RlcnMgb25seS4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZShEYXRhLk5hbWVTZXJ2ZXJFcnJvck1lc3NhZ2UpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiTXVzdCBiZSB1bmlxdWUgYW5kIG9ubHkgYWNjZXB0IGFscGhhYmV0aWMgYW5kIG51bWVyaWMgY2hhcmFjdGVycy4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJXYXJuaW5nIEhpZGRlbiI+WyUgVHJhbnNsYXRlKCJDaGFuZ2luZyB0aGlzIHZhbHVlIHdpbGwgcmVxdWlyZSBtYW51YWwgY2hhbmdlcyBpbiB0aGUgc3lzdGVtLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkxhYmVsIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIkxhYmVsIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9IkxhYmVsIiBjbGFzcz0iVzUwcGMgWyUgRGF0YS5MYWJlbFNlcnZlckVycm9yIHwgaHRtbCAlXSBWYWxpZGF0ZV9SZXF1aXJlZCIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSIyMDAiIHZhbHVlPSJbJSBEYXRhLkxhYmVsIHwgaHRtbCAlXSIgbmFtZT0iTGFiZWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTGFiZWxFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkxhYmVsU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbFNlcnZlckVycm9yTWVzc2FnZSkgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJUaGlzIGlzIHRoZSBuYW1lIHRvIGJlIHNob3duIG9uIHRoZSBzY3JlZW5zIHdoZXJlIHRoZSBmaWVsZCBpcyBhY3RpdmUuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iRmllbGRPcmRlciI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJGaWVsZCBvcmRlciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5EeW5hbWljRmllbGRPcmRlclN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRmllbGRPcmRlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIG51bWVyaWMuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJGaWVsZE9yZGVyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoRGF0YS5GaWVsZE9yZGVyU2VydmVyRXJyb3JNZXNzYWdlKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIlRoaXMgaXMgdGhlIG9yZGVyIGluIHdoaWNoIHRoaXMgZmllbGQgd2lsbCBiZSBzaG93biBvbiB0aGUgc2NyZWVucyB3aGVyZSBpcyBhY3RpdmUuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZE5hbWVzcGFjZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTmFtZXNwYWNlIj5bJSBUcmFuc2xhdGUoIk5hbWVzcGFjZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lc3BhY2VTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIlRoaXMgaXMgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0aGlzIGZpZWxkIHdpbGwgYmUgdXNlZCBhcyBwcmVmaXggd2l0aCB0aGUgbmFtZS4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkTmFtZXNwYWNlIikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVG9vbHRpcFZhbHVlIj5bJSBUcmFuc2xhdGUoIlRvb2x0aXAgbWVzc2FnZToiKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJUb29sdGlwVmFsdWUiIGNsYXNzPSJXNzVwYyIgcm93cz0iMyIgY29scz0iODAiIG5hbWU9IlRvb2x0aXAiPlslIERhdGEuVG9vbHRpcCB8IGh0bWwgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJUaGlzIGlzIHRoZSB0b29sdGlwIG1lc3NhZ2Ugc2hvd24gaW5zaWRlIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTaXplMW9mMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRCI+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZGl0eVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVmFsaWRJREVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVmFsaWRJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVxdWlyZWRWYWxpZE9wdGlvblNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdClslIFJlbmRlckJsb2NrRW5kKCJSZXF1aXJlZFZhbGlkT3B0aW9uU2VydmVyRXJyb3IiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJblNldHRpbmdWYWxpZE9wdGlvblNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIklzIG5vdCBwb3NzaWJsZSB0byBpbnZhbGlkYXRlIHRoaXMgZW50cnksIGFsbCBjb25maWcgc2V0dGluZ3MgaGF2ZSB0byBiZSBjaGFuZ2VkIGJlZm9yZWhhbmQuIikgfCBodG1sICVdClslIFJlbmRlckJsb2NrRW5kKCJJblNldHRpbmdWYWxpZE9wdGlvblNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJGaWVsZFR5cGVOYW1lIj5bJSBUcmFuc2xhdGUoIkZpZWxkIHR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iRmllbGRUeXBlTmFtZSIgcmVhZG9ubHkgY2xhc3M9Ilc1MHBjIiB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjIwMCIgdmFsdWU9IlslIFRyYW5zbGF0ZShEYXRhLkZpZWxkVHlwZU5hbWUpIHwgaHRtbCAlXSIgbmFtZT0iRmllbGRUeXBlTmFtZSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik9iamVjdFR5cGVOYW1lIj5bJSBUcmFuc2xhdGUoIk9iamVjdCB0eXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Ik9iamVjdFR5cGVOYW1lIiByZWFkb25seSBjbGFzcz0iVzUwcGMiIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMjAwIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKERhdGEuT2JqZWN0VHlwZU5hbWUpIHwgaHRtbCAlXSIgbmFtZT0iT2JqZWN0VHlwZU5hbWUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSW50ZXJuYWxGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iSW50ZXJuYWxGaWVsZCI+WyUgVHJhbnNsYXRlKCJJbnRlcm5hbCBmaWVsZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJJbnRlcm5hbEZpZWxkIiByZWFkb25seSBjbGFzcz0iVzUwcGMiIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMSIgdmFsdWU9IlslIERhdGEuSW50ZXJuYWxGaWVsZCB8IGh0bWwgJV0iIG5hbWU9IkludGVybmFsRmllbGQiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHByb3RlY3RlZCBhbmQgY2FuJ3QgYmUgZGVsZXRlZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnRlcm5hbEZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+ClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZEluU3lzQ29uZmlnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik9sZE5hbWUiIGlkPSJPbGROYW1lIiB2YWx1ZT0iWyUgRGF0YS5PbGROYW1lIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVXBkYXRlRW50aXR5IiBpZD0iVXBkYXRlRW50aXR5IiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJFbnRpdHlJblNldHRpbmciIGNsYXNzPSJIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlRleHREaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJUaGlzIGR5bmFtaWMgZmllbGQgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIGNvbmZpZyBzZXR0aW5nczoiKSB8IGh0bWwgJV08L2gxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZEluU3lzQ29uZmlnUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iSW5TeXNDb25maWdTZXR0aW5nIj5bJSBEYXRhLlNldHRpbmdOYW1lICVdPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZEluU3lzQ29uZmlnUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkSW5TeXNDb25maWciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRJblN5c0NvbmZpZ0RpcnR5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN5c0NvbmZpZ0RpcnR5IiBpZD0iU3lzQ29uZmlnRGlydHkiIHZhbHVlPSIxIi8+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGRJblN5c0NvbmZpZ0RpcnR5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoRGF0YS5GaWVsZFR5cGVOYW1lKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJGaWVsZCBTZXR0aW5ncyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29sc1Jvd3NWYWx1ZXMiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJSb3dzIj5bJSBUcmFuc2xhdGUoIk51bWJlciBvZiByb3dzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iUm93cyIgY2xhc3M9IlcyNXBjIFZhbGlkYXRlX051bWJlciBbJSBEYXRhLlJvd3NTZXJ2ZXJFcnJvciAlXSIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSIzIiB2YWx1ZT0iWyUgRGF0YS5Sb3dzIHwgaHRtbCAlXSIgbmFtZT0iUm93cyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUm93c0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIG11c3QgYmUgbnVtZXJpYy4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSb3dzU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoRGF0YS5Sb3dzU2VydmVyRXJyb3JNZXNzYWdlKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJTcGVjaWZ5IHRoZSBoZWlnaHQgKGluIGxpbmVzKSBmb3IgdGhpcyBmaWVsZCBpbiB0aGUgZWRpdCBtb2RlLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29scyI+WyUgVHJhbnNsYXRlKCJOdW1iZXIgb2YgY29scyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9IkNvbHMiIGNsYXNzPSJXMjVwYyBWYWxpZGF0ZV9OdW1iZXIgWyUgRGF0YS5Db2xzU2VydmVyRXJyb3IgJV0iIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMyIgdmFsdWU9IlslIERhdGEuQ29scyB8IGh0bWwgJV0iIG5hbWU9IkNvbHMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNvbHNFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBtdXN0IGJlIG51bWVyaWMuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ29sc1NlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKERhdGEuQ29sc1NlcnZlckVycm9yTWVzc2FnZSkgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiU3BlY2lmeSB0aGUgd2lkdGggKGluIGNoYXJhY3RlcnMpIGZvciB0aGlzIGZpZWxkIGluIHRoZSBlZGl0IG1vZGUuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQ29sc1Jvd3NWYWx1ZXMiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29uZmlnUGFyYW1Sb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLkNvbmZpZ1BhcmFtTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iWyUgRGF0YS5Db25maWdQYXJhbU5hbWUgfCBodG1sICVdRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQsIGFuZCB0aGUgdmFsdWUgc2hvdWxkIGJlIGFscGhhYmV0aWMgYW5kIG51bWVyaWMgY2hhcmFjdGVycyBvbmx5LiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIERhdGEuQ29uZmlnUGFyYW1OYW1lIHwgaHRtbCAlXVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKERhdGEuU2VydmVyRXJyb3JNZXNzYWdlKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKERhdGEuRXhwbGFuYXRpb24pIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkNvbmZpZ1BhcmFtUm93IikgJV0KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5Nb2RlID09ICdDaGFuZ2UnICVdCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBpZD0iU3VibWl0QW5kQ29udGludWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIGFuZCBmaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgaWQ9IlN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pbkR5bmFtaWNGaWVsZFslIERhdGEuRmlsdGVyU3RyZyAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KPC9kaXY+Cg==</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/DynamicField/Agent/TextAreaAI.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8dGV4dGFyZWEgY2xhc3M9IlslIERhdGEuRmllbGRDbGFzcyAlXSIgaWQ9IlslIERhdGEuRmllbGROYW1lICVdIiBuYW1lPSJbJSBEYXRhLkZpZWxkTmFtZSAlXSIgdGl0bGU9IlslIERhdGEuRmllbGRMYWJlbEVzY2FwZWQgJV0iIHJvd3M9IlslIERhdGEuUm93c051bWJlciAlXSIgY29scz0iWyUgRGF0YS5Db2xzTnVtYmVyICVdIiBkYXRhLW1heGxlbmd0aD0iWyUgRGF0YS5NYXhMZW5ndGggJV0iIHJlYWRvbmx5PlslIERhdGEuVmFsdWVFc2NhcGVkICVdPC90ZXh0YXJlYT4KPGRpdiBpZD0iWyUgRGF0YS5EaXZJRCAlXSIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgPHA+CiAgICAgICAgWyUgRGF0YS5FcnJvck1lc3NhZ2UyICVdIFslIERhdGEuRXJyb3JNZXNzYWdlMyAlXQogICAgPC9wPgo8L2Rpdj4K</File>
        <File Location="Kernel/Output/HTML/Templates/Standard/OtoboAIDashboard.tt" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJDb21wb3NlUmVxdWVzdCIgaWQ9IkNvbXBvc2VSZXF1ZXN0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CgogICAgICAgIDxkaXYgY2xhc3M9IlJvdyIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGRDZWxsIiBzdHlsZT0iZ3JpZC1jb2x1bW46IDEgLyBzcGFuIDEiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0iT3RvYm9BSVRleHRBcmVhIiB0aXRsZT0iWW91ciBxdWVzdGlvbj8iIHBsYWNlaG9sZGVyPSJZb3VyIHF1ZXN0aW9uPyIgaWQ9IlJlcXVlc3QiIG5hbWU9IlJlcXVlc3QiIHJvd3M9IjUiIGNvbHM9IlslIENvbmZpZygiT3RvYm9BSURhc2hib2FyZDo6RnJvbnRlbmQ6OlRleHRBcmVhUXVlc3Rpb24iKSAlXSIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuQm9keUludmFsaWQgfCBodG1sICVdIj5bJSBEYXRhLlF1ZXN0aW9uICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSZXF1ZXN0RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJlcXVlc3RTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iUmVwbHlCb3giIGNsYXNzPSJSb3ciIHN0eWxlPSJncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkQ2VsbCIgc3R5bGU9ImdyaWQtY29sdW1uOiAxIC8gc3BhbiAxIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9Ik90b2JvQUlUZXh0QXJlYSIgaWQ9IlJlcGx5IiByb3dzPSIxNSIgY29scz0iWyUgQ29uZmlnKCJPdG9ib0FJRGFzaGJvYXJkOjpGcm9udGVuZDo6VGV4dEFyZWFRdWVzdGlvbiIpICVdIiByZWFkb25seSBjbGFzcz0iUmVhZG9ubHkgUmljaFRleHQiPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmVxdWVzdEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSZXF1ZXN0U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICA8YnV0dG9uIGlkPSJTdWJtaXRRdWVzdGlvbiIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgYWNjZXNza2V5PSJnIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTZW5kIHF1ZXN0aW9uIikgfCBodG1sICVdIChnKSIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2VuZCByZXF1ZXN0IikgfCBodG1sICVdIiA+CiAgICAgICAgICAgICAgICA8c3Bhbj48c3Bhbj48aSBjbGFzcz0ib29vZm8gb29vZm8tYWRkIj48L2k+WyUgVHJhbnNsYXRlKCJTZW5kIHJlcXVlc3QiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGlkPSJDYW5jZWxRdWVzdGlvbiIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgYWNjZXNza2V5PSJnIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTZW5kIHF1ZXN0aW9uIikgfCBodG1sICVdIChnKSIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdIiA+CiAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIkNhbmNlbCIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxpbWcgaWQ9Ik90b2JvQUlMb2FkZXIiIHNyYz1bJSBDb25maWcoIkZyb250ZW5kOjpXZWJQYXRoIikgJV1za2lucy9BZ2VudC9kZWZhdWx0L2ltZy9sb2FkZXIuZ2lmIGFsdD0iWyUgVHJhbnNsYXRlKCJXYWl0aW5nIHJlcGx5IikgfCBodG1sICVdIi8+CiAgICAgICAgPC9kaXY+CiAgICA8L2ZpZWxkc2V0Pgo8L2Zvcm0+Cg==</File>
        <File Location="Kernel/Output/HTML/TicketZoom/AISimilarTickets.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRab29tOjpBSVNpbWlsYXJUaWNrZXRzOwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBuYW1lc3BhY2U6OmF1dG9jbGVhbjsKdXNlIHV0Zjg7Cgp1c2UgcGFyZW50ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6QmFzZSc7CgojIGNvcmUgbW9kdWxlcwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpMYW5ndWFnZSAgICAgICAgICAgICAgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzSGFzaFJlZldpdGhEYXRhKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJFVzZXJPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgbXkgJVRpY2tldCAgICA9ICRQYXJhbXtUaWNrZXR9LT4lKjsKICAgIG15ICVBY2xBY3Rpb24gPSAkUGFyYW17QWNsQWN0aW9ufS0+JSo7CiAgICBteSAkVGlja2V0SUQgID0gJFRpY2tldHtUaWNrZXRJRH07CiAgICBteSAkQXJ0aWNsZUlEOwoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwogICAgbXkgQEFydGljbGVzICAgICAgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICBPbmx5Rmlyc3QgPT4gMSwKICAgICk7CiAgICBpZiAoQEFydGljbGVzKSB7CiAgICAgICAgJEFydGljbGVJRCA9ICRBcnRpY2xlc1swXXtBcnRpY2xlSUR9OwogICAgfQogICAgcmV0dXJuICcnIGlmICEkQXJ0aWNsZUlEOwoKICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgKTsKCiAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgKTsKCiAgICByZXR1cm4gJycgaWYgISRBcnRpY2xle1N1YmplY3R9ICYmICEkQXJ0aWNsZXtCb2R5fTsKCiAgICBteSAkTW9yZUxpa2VUaGlzID0gKCAkQXJ0aWNsZXtTdWJqZWN0fSAvLyAnJyApIC4gIlxuIiAuICggJEFydGljbGV7Qm9keX0gLy8gJycgKTsKCiAgICAjIHNldCBkaXNwbGF5IG9wdGlvbnMKICAgICRQYXJhbXtXaWRnZXRUaXRsZX0gPSBUcmFuc2xhdGFibGUoJ1NpbWlsYXIgVGlja2V0cycpOwoKICAgICMgZ2V0IHpvb20gc2V0dGluZ3MgZGVwZW5kaW5nIG9uIHRpY2tldCB0eXBlCiAgICAkU2VsZi0+e0Rpc3BsYXlTZXR0aW5nc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSIpOwoKICAgICMgc2ltaWxhciBzZWFyY2ggcXVlcnkgdmlhIG90b2JvLWFpLXJhZyBJbnZva2VyCiAgICBteSAkUXVldWVUb1JBR01hcHBpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ09UT0JPQUk6OlF1ZXVlVG9SQUdNYXBwaW5nJykgLy8ge307CiAgICBteSAkUkFHICAgICAgICAgICAgICAgPSAkUXVldWVUb1JBR01hcHBpbmctPnsgJFRpY2tldHtRdWV1ZX0gfSAgICAgICAgICAgLy8gJENvbmZpZ09iamVjdC0+R2V0KCdPVE9CT0FJOjpEZWZhdWx0UkFHJyk7CgogICAgbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwogICAgbXkgJEFJV2Vic2VydmljZSAgICAgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUdldCgKICAgICAgICBOYW1lID0+ICdPVE9CTy1BSScsCiAgICApOwoKICAgIGlmICggISRBSVdlYnNlcnZpY2UgKSB7CgogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICBteSAkV2Vic2VydmljZUlEID0gJEFJV2Vic2VydmljZS0+e0lEfTsKCiAgICBteSAkVGlja2V0UGFpcnMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpLT5SdW4oCiAgICAgICAgV2Vic2VydmljZUlEID0+ICRXZWJzZXJ2aWNlSUQsCiAgICAgICAgSW52b2tlciAgICAgID0+ICdRdWVyeUVtYmVkZGluZ3MnLAogICAgICAgIEFzeW5jaHJvbm91cyA9PiAwLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIENvbGxlY3Rpb24gPT4gJ3RpY2tldF9wYWlycycsCiAgICAgICAgICAgIExhYmVscyAgICAgPT4gWyRSQUddLAogICAgICAgICAgICBGdWxsdGV4dCAgID0+IDAsCiAgICAgICAgICAgIExpbWl0ICAgICAgPT4gNSwKICAgICAgICAgICAgUXVlcnkgICAgICA9PiAkTW9yZUxpa2VUaGlzLAogICAgICAgIH0KICAgICk7CgogICAgbXkgJFRpY2tldENodW5rcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyktPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFdlYnNlcnZpY2VJRCwKICAgICAgICBJbnZva2VyICAgICAgPT4gJ1F1ZXJ5RW1iZWRkaW5ncycsCiAgICAgICAgQXN5bmNocm9ub3VzID0+IDAsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgQ29sbGVjdGlvbiA9PiAndGlja2V0X2NodW5rcycsCiAgICAgICAgICAgIExhYmVscyAgICAgPT4gWyRSQUddLAogICAgICAgICAgICBGdWxsdGV4dCAgID0+IDAsCiAgICAgICAgICAgIExpbWl0ICAgICAgPT4gNSwKICAgICAgICAgICAgUXVlcnkgICAgICA9PiAkTW9yZUxpa2VUaGlzLAogICAgICAgIH0KICAgICk7CgogICAgbXkgJVRpY2tldHM7CgogICAgZm9yIG15ICRJdGVtICggJFRpY2tldFBhaXJzLT57RGF0YX0tPkAqICkgewoKICAgICAgICBteSAkSXRlbVRpY2tldElEID0gJEl0ZW0tPnttZXRhZGF0YX0tPntzb3VyY2VfaWR9OwoKICAgICAgICBpZiAoICRJdGVtVGlja2V0SUQgbmUgJFRpY2tldElEICkgewoKICAgICAgICAgICAgJFRpY2tldHN7JEl0ZW1UaWNrZXRJRH0gPSAkSXRlbTsKICAgICAgICB9CiAgICB9CgogICAgZm9yIG15ICRJdGVtICggJFRpY2tldENodW5rcy0+e0RhdGF9LT5AKiApIHsKCiAgICAgICAgbXkgJEl0ZW1UaWNrZXRJRCA9ICRJdGVtLT57bWV0YWRhdGF9LT57c291cmNlX2lkfTsKCiAgICAgICAgaWYgKCAkSXRlbVRpY2tldElEIG5lICRUaWNrZXRJRCApIHsKICAgICAgICAgICAgJFRpY2tldHN7JEl0ZW1UaWNrZXRJRH0gPSAkSXRlbTsKICAgICAgICB9CiAgICB9CgogICAgbXkgQERhdGEgPSB2YWx1ZXMgJVRpY2tldHM7CgogICAgcmV0dXJuICcnIGlmIHNjYWxhciBARGF0YSA9PSAwOwoKICAgICMgcmVuZGVyIHRoZSB3aWRnZXQKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1NpbWlsYXJUaWNrZXRzJywKICAgICAgICBEYXRhID0+IFxARGF0YSwKICAgICk7CgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGlja2V0Wm9vbS9BSVNpbWlsYXJUaWNrZXRzJywKICAgICAgICBEYXRhICAgICAgICAgPT4geyAlUGFyYW0sICVUaWNrZXQsICVBY2xBY3Rpb24gfSwKICAgICk7CgogICAgcmV0dXJuIHsKICAgICAgICBPdXRwdXQgPT4gJE91dHB1dCwKICAgIH07Cn0KCjE7Cg==</File>
        <File Location="Kernel/System/OtoboAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPdG9ib0FJOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzSGFzaFJlZldpdGhEYXRhKTsKCnVzZSBwYXJlbnQgcXcoS2VybmVsOjpTeXN0ZW06OkFzeW5jaHJvbm91c0V4ZWN1dG9yKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpPdG9ib0FJIC0gZ2V0IE90b2JvQUkgR2V0QW5zd2VyIGZvciBhIFF1ZXN0aW9uIG9yIGFuIEFydGljbGVJRAoKPWhlYWQxIERFU0NSSVBUSU9OCgpjYWxsIE90b2JvQUkgR2V0QW5zd2VyIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGEgT3RvYm9BSSBvYmplY3QuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHksIGluc3RlYWQgdXNlOgoKICAgIG15ICRPdG9ib0FJT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUknKTsKCj1jdXQKCnN1YiBuZXcgewoKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIG15ICRTdHJpcFNpZ25hdHVyZVJlZ0V4ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpTdHJpcFNpZ25hdHVyZVJlZ2V4Jyk7CiAgICBpZiAoJFN0cmlwU2lnbmF0dXJlUmVnRXgpIHsKCiAgICAgICAgbXkgJFJlZ2V4ID0gcXIvJFN0cmlwU2lnbmF0dXJlUmVnRXgvbTsKICAgICAgICAkU2VsZi0+e1N0cmlwU2lnbmF0dXJlUmVnRXh9ID0gJFJlZ2V4OwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIEdldEFuc3dlckFzeW5jKCkKCkdldCBhbiBPdG9ib0FJIEFuc3dlciBhc3luY2hyb25vdXNseS4KCiAgICBteSAkU3VjY2VzcyA9ICRPdG9ib0FJT2JqZWN0LT5HZXRBbnN3ZXJBc3luYygKICAgICAgICBRdWVzdGlvbiA9PiAnPHNvbWUgYWkgcXVlc3Rpb24+JywgICMgdGhlIHF1ZXN0aW9uIHRvIGFzayB0aGUgTExNCiAgICAgICAgT2JqZWN0SUQgPT4gJEFydGljbGVJRCwgICAgICAgICAgICAjIGlmIGdpdmVuLCBjb25zdHJ1Y3QgcXVlc3Rpb24gZnJvbSBBcnRpY2xlIFN1YmplY3QrQm9keQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXN1bHRzIHdpbGwgYmUgc3RvcmVkIGluIHRoaXMgQXJ0aWNsZXMgQUlSZXN1bHQgRHluYW1pY0ZpZWxkCiAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRCwgICAgICAgICAgICAgICAjIGlmIHNwZWNpZmllZCwgYW5kIHRoaXMgd2FzIGEgcXVlc3Rpb24sIHBvcHVsYXRlIHVzZXIgc3BlY2ZpYyBjYWNoZSBrZXkKICAgICk7Cgo9Y3V0CgpzdWIgR2V0QW5zd2VyQXN5bmMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBpZiAoICEkUGFyYW17T2JqZWN0SUR9ICYmICEkUGFyYW17UXVlc3Rpb259ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgZWl0aGVyIE9iamVjdElEIG9yIFF1ZXN0aW9uIHBhcmFtLiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICBNZXNzYWdlICA9PiAiT3RvYm9BSTo6R2V0QW5zd2VyQXN5bmMgY2FsbCBpbml0aWF0ZWQuIiwKICAgICk7CgogICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+QXN5bmNDYWxsKAogICAgICAgIE9iamVjdE5hbWUgICAgICAgICAgICAgICA9PiAnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUknLCAgICAjIG9wdGlvbmFsLCBpZiBub3QgZ2l2ZW4gdGhlIG9iamVjdCBpcyB1c2VkIGZyb20gd2hlcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQKICAgICAgICBGdW5jdGlvbk5hbWUgICAgICAgICAgICAgPT4gJ0dldEFuc3dlcicsICAgICAgICAgICAgICAgICAgIyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gZXhlY3V0ZQogICAgICAgIEZ1bmN0aW9uUGFyYW1zICAgICAgICAgICA9PiBcJVBhcmFtLCAgICAgICAgICAgICAgICAgICAgICAjIGEgcmVmIHdpdGggdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbgogICAgICAgIEF0dGVtcHRzICAgICAgICAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBkZWZhdWx0OiAxLCBudW1iZXIgb2YgdHJpZXMgdG8gbG9jayB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIHRhc2sgYnkgdGhlIHNjaGVkdWxlcgogICAgICAgIE1heGltdW1QYXJhbGxlbEluc3RhbmNlcyA9PiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBkZWZhdWx0OiAwICh1bmxpbWl0ZWQpLCBudW1iZXIgb2Ygc2FtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgZnVuY3Rpb24gY2FsbHMgZnJvbSB0aGUgc2FtZSBvYmplY3QgdGhhdCBjYW4gYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUKICAgICk7CgogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiSW5pdGlhbGl6ZSBhc3luYyBjYWxsIGZhaWxlZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgR2V0QW5zd2VyKCkKCkdldCBhbiBPdG9ib0FJIEFuc3dlciBzeW5jaHJvbm91c2x5LiBJZiBjYWxsZWQgZnJvbSBHZXRBbnN3ZXJBc3luYygpLCB0aGlzIHdpbGwgaGFwcGVuIG9uIGEgRGFlbW9uIHRocmVhZC4KCiAgICBteSAkUmVzdWx0ID0gJE90b2JvQUlPYmplY3QtPkdldEFuc3dlcigKICAgICAgICBRdWVzdGlvbiAgPT4gJzxzb21lIGFpIHF1ZXN0aW9uPicsICMgdGhlIHF1ZXN0aW9uIHRvIGFzayB0aGUgTExNCiAgICAgICAgT2JqZWN0SUQgID0+ICRBcnRpY2xlSUQsICAgICAgICAgICAjIGlmIGdpdmVuLCBjb25zdHJ1Y3QgcXVlc3Rpb24gZnJvbSBBcnRpY2xlIFN1YmplY3QrQm9keQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXN1bHRzIHdpbGwgYmUgc3RvcmVkIGluIHRoaXMgQXJ0aWNsZXMgQUlSZXN1bHQgRHluYW1pY0ZpZWxkCiAgICAgICAgVXNlcklEICAgID0+ICRVc2VySUQsICAgICAgICAgICAgICAjIGlmIHNwZWNpZmllZCwgYW5kIHRoaXMgd2FzIGEgcXVlc3Rpb24sIHBvcHVsYXRlIHVzZXIgc3BlY2ZpYyBjYWNoZSBrZXkKICAgICAgICBQZXJzaXN0ICAgPT4gMXwwLCAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIGRlZmF1bHQgaXMgMS4gV2hldGhlciB0byBwZXJzaXN0IFJlc3VsdCBpbiBERiAod2l0aCBPYmplY3RJRCkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcG9wbGF0ZSB0aGUgdXNlIHNwZWNpZmljIGNhY2hlIGtleQogICAgICAgIERvU2NvcmluZyA9PiAwfDEsICAgICAgICAgICAgICAgICAgIyBhc2sgTExNIHRvIGRvIHRoZSBleHRyYSBldmFsdWF0aW9uIHN0ZXAsIHVzZWQgYnkgTWFpbnQ6OkFJOjpTY29yaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnNvbGUgY29tbWFuZAogICAgICAgIFJBRyAgICAgICA9PiAnQ3VzdG9tMScsICAgICAgICAgICAgIyAob3B0aW9uYWwpLCBkZWZhdWx0OiAkQ29uZmlnT2JqZWN0LT5HZXQoJ09UT0JPQUk6OkRlZmF1bHRSQUcnKSwgdGhlIFJBRwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBhbnN3ZXIsIG9ubHkgd29ya3MgZm9yIHF1ZXN0aW9uIGNhbGxzCiAgICApOwoKICAgICMgb24gc3VjY2VzcwogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEFuc3dlciA9PiAndGhlIEFJIGFuc3dlciBhcyB0ZXh0JywKICAgICAgICAgICAgU2NvcmUgID0+ICdUaGUgQUkgZXZhbHVhdGlvbiBzY29yZSAlLicsICAjIG9ubHkgaWYgc2NvcmluZyBpcyBhY3RpdmF0ZWQsIHNlZSBTeXNDb25maWcKICAgICAgICB9LAogICAgfQoKICAgICMgb24gZXJyb3IKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyA9PiAwLAogICAgICAgIEVycm9yID0+ICJTb21lRXJyb3JNc2ciLAogICAgfQoKPWN1dAoKc3ViIEdldEFuc3dlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGlmICggISRQYXJhbXtPYmplY3RJRH0gJiYgISRQYXJhbXtRdWVzdGlvbn0gKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBlaXRoZXIgT2JqZWN0SUQgb3IgUXVlc3Rpb24gcGFyYW0uIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkRG9TY29yaW5nID0gJFBhcmFte0RvU2NvcmluZ30gLy8gMDsKCiAgICBteSAkRXJyb3JNZXNzYWdlID0gJyc7CiAgICBteSAkU3VjY2VzcyAgICAgID0gMDsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGNoZWNrIHdoZXRoZXIgb3RvYm8gQUkgaXMgZW5hYmxlZCBhbmQgaWYgbm90LCBhY3RpdmF0ZSBpdAogICAgbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwoKICAgIG15ICRBSVdlYnNlcnZpY2UgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUdldCgKICAgICAgICBOYW1lID0+ICdPVE9CTy1BSScsCiAgICApOwoKICAgIGlmICggISRBSVdlYnNlcnZpY2UgKSB7CgogICAgICAgICRFcnJvck1lc3NhZ2UgPSAiT1RPQk8tQUkgd2Vic2VydmljZSBub3QgZm91bmQhIFVuYWJsZSB0byBjb250aW51ZS4iOwogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAkRXJyb3JNZXNzYWdlLAogICAgICAgICk7CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgPT4gJFN1Y2Nlc3MsCiAgICAgICAgICAgIEVycm9yICAgPT4gJEVycm9yTWVzc2FnZSwKICAgICAgICB9OwogICAgfQoKICAgICMgU2V0IHRoZSB3ZWJzZXJ2aWNlIGlkCiAgICAkU2VsZi0+e1dlYnNlcnZpY2VJRH0gPSAkQUlXZWJzZXJ2aWNlLT57SUR9OwoKICAgICMgcHJlcGFyZSB0aGUgcXVlc3Rpb24KICAgIG15ICRPYmplY3RJRCA9ICRQYXJhbXtPYmplY3RJRH07CiAgICBteSAkVXNlcklEICAgPSAkUGFyYW17VXNlcklEfTsKICAgIG15ICRQZXJzaXN0ICA9ICRQYXJhbXtQZXJzaXN0fSAvLyAxOwogICAgbXkgJFF1ZXN0aW9uOwogICAgbXkgJFJBRyA9ICRQYXJhbXtSQUd9IC8vICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6RGVmYXVsdFJBRycpOwoKICAgIGlmICgkT2JqZWN0SUQpIHsKCiAgICAgICAgbXkgJFRpY2tldE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICAgICAgbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CgogICAgICAgIG15ICRBcnRpY2xlSUQgPSAkT2JqZWN0SUQ7CiAgICAgICAgbXkgJFRpY2tldElEICA9ICRBcnRpY2xlT2JqZWN0LT5UaWNrZXRJRExvb2t1cCgKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoIFRpY2tldElEID0+ICRUaWNrZXRJRCApOwoKICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgICk7CgogICAgICAgIG15ICVBcnRpY2xlID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkQXJ0aWNsZXtCb2R5fSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJObyBib2R5IGluIHRoZSBhcnRpY2xlISIsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBteSAkU3ViamVjdCA9ICRBcnRpY2xle1N1YmplY3R9IC8vICcnOwogICAgICAgIG15ICRCb2R5ICAgID0gJEFydGljbGV7Qm9keX0gICAgLy8gJyc7CgogICAgICAgICRCb2R5ICAgICA9ICRTZWxmLT5fU3RyaXBTaWduYXR1cmUoIEJvZHkgPT4gJEJvZHkgKTsKICAgICAgICAkUXVlc3Rpb24gPSAiU3ViamVjdDogIiAuICRTdWJqZWN0IC4gJ1xuXG4nIC4gJEJvZHk7CgogICAgICAgIG15ICRRdWV1ZVRvUkFHTWFwcGluZyA9ICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6UXVldWVUb1JBR01hcHBpbmcnKSAvLyB7fTsKICAgICAgICAkUkFHID0gJFF1ZXVlVG9SQUdNYXBwaW5nLT57ICRUaWNrZXREYXRhe1F1ZXVlfSB9IC8vICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6RGVmYXVsdFJBRycpOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICRRdWVzdGlvbiA9ICRQYXJhbXtRdWVzdGlvbn07CiAgICB9CgogICAgbXkgJFJlc3VsdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyktPlJ1bigKICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgICAgIEludm9rZXIgICAgICA9PiAnR2V0QW5zd2VyJywKICAgICAgICBBc3luY2hyb25vdXMgPT4gMCwKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBRdWVzdGlvbiAgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICBEb1Njb3JpbmcgPT4gJERvU2NvcmluZywKICAgICAgICAgICAgUkFHICAgICAgID0+ICRSQUcsCiAgICAgICAgfQogICAgKTsKCiAgICBteSAkTWFpbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyk7CiAgICBteSAkRHVtcCAgICAgICA9ICRNYWluT2JqZWN0LT5EdW1wKCRSZXN1bHQpOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgTWVzc2FnZSAgPT4gIk90b2JvQUkgR2V0QW5zd2VyIFJlc3VsdDogJER1bXAiLAogICAgKTsKCiAgICBteSAkQW5zd2VyID0gJFJlc3VsdC0+e0RhdGF9e0Fuc3dlcn0gfHwgIiI7CgogICAgIyBzZXQgZHluYW1pYyBmaWVsZCB2YWx1ZSBpZiBPYmplY3RJRCB3YXMgZ2l2ZW4KICAgIGlmICggJE9iamVjdElEICYmICRQZXJzaXN0ICkgewoKICAgICAgICAjIGZldGNoaW5nIGR5bmFtaWMgZmllbGQgY29uZmlnCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZE5hbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ09UT0JPQUk6OkR5bmFtaWNGaWVsZE9UT0JPQUknKSB8fCAnT1RPQk9BSSc7CiAgICAgICAgbXkgJE9UT0JPQUlERkNvbmZpZyAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgTmFtZSA9PiAkRHluYW1pY0ZpZWxkTmFtZSwKICAgICAgICApOwogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRPVE9CT0FJREZDb25maWcpICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiRHluYW1pY0ZpZWxkICckRHluYW1pY0ZpZWxkTmFtZScgbm90IGZvdW5kIG9uIHRoZSBzeXN0ZW0hIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpLT5WYWx1ZVNldCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRPVE9CT0FJREZDb25maWcsCiAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkT2JqZWN0SUQsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkQW5zd2VyLAogICAgICAgICAgICBEb1dyaXRlICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFVzZXJJRCAmJiAkUGVyc2lzdCApIHsKICAgICAgICBteSAkQ2FjaGVPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwogICAgICAgIG15ICRNYWluT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKTsKICAgICAgICBteSAkUXVlc3Rpb25NZDUgICAgICA9ICRNYWluT2JqZWN0LT5NRDVzdW0oIFN0cmluZyA9PiBcJFF1ZXN0aW9uICk7CiAgICAgICAgbXkgJENhY2hlS2V5UXVlc3Rpb24gPSAnT3RvYm9BSS1DdXN0b20tUmVzcG9uc2UtJyAuICRRdWVzdGlvbk1kNTsKICAgICAgICBteSAkVFRMICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnT3RvYm9BSURhc2hib2FyZDo6RnJvbnRlbmQ6OkNhY2hlVFRMJyktPntBbnN3ZXJ9IHx8IDI0OwogICAgICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAnT3RvYm9BSScsCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleVF1ZXN0aW9uLAogICAgICAgICAgICBWYWx1ZSA9PiAkQW5zd2VyLAogICAgICAgICAgICBUVEwgICA9PiA2MCAqIDYwICogJFRUTCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIERhdGEgICAgPT4gJFJlc3VsdC0+e0RhdGF9LAogICAgfTsKfQoKc3ViIF9TdHJpcFNpZ25hdHVyZSB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQm9keSA9ICRQYXJhbXtCb2R5fTsKCiAgICBteSAkUmVnRXggPSAkU2VsZi0+e1N0cmlwU2lnbmF0dXJlUmVnRXh9OwogICAgcmV0dXJuICRCb2R5IGlmICggISRSZWdFeCApOwoKICAgIGlmICggJEJvZHkgPX4gLyRSZWdFeC8gKSB7CgogICAgICAgIHJldHVybiBzdWJzdHIoICRCb2R5LCAwLCAkLVswXSApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgIHJldHVybiAkQm9keTsKICAgIH0KfQoKMTsK</File>
        <File Location="Kernel/System/OtoboAI/Import.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpPdG9ib0FJOjpJbXBvcnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgUGF0aDo6Q2xhc3MgICAgcXcoZmlsZSk7CnVzZSBGaWxlOjpGaW5kICAgICBxdyhmaW5kKTsKdXNlIEZpbGU6OkJhc2VuYW1lIHF3KGRpcm5hbWUpOwp1c2UgSlNPTiAgICAgICAgICAgcXcoZW5jb2RlX2pzb24gZnJvbV9qc29uKTsKdXNlIFN0b3JhYmxlICAgICAgIHF3KGRjbG9uZSk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7Cgp1c2UgcGFyZW50IHF3KEtlcm5lbDo6U3lzdGVtOjpBc3luY2hyb25vdXNFeGVjdXRvcik7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnLAogICAgJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6UGFja2FnZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkZBUScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCAtIGluZ2VzdCBUaWNrZXRzIG9yIEZBUXMKCj1oZWFkMSBERVNDUklQVElPTgoKY2FsbCBPdG9ib0FJIEltcG9ydCBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5Cgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBJbXBvcnQgb2JqZWN0LiBEbyBub3QgdXNlIGl0IGRpcmVjdGx5LCBpbnN0ZWFkIHVzZToKCiAgICBteSAkSW1wb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCcpOwoKPWN1dAoKc3ViIG5ldyB7CgogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgJFNlbGYtPkluaXRJbXBvcnQoKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBJbml0SW1wb3J0KCkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIEFJIHdlYiBzZXJ2aWNlIGlzIGVuYWJsZWQgYW5kIGlmIG5vdCwgYWN0aXZhdGUgaXQKICAgIG15ICRXZWJzZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnKTsKCiAgICBteSAkQUlXZWJzZXJ2aWNlID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VHZXQoCiAgICAgICAgTmFtZSA9PiAnT1RPQk8tQUknLAogICAgKTsKCiAgICBpZiAoICEkQUlXZWJzZXJ2aWNlICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT1RPQk8tQUkgd2Vic2VydmljZSBub3QgZm91bmQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgICMgU2V0IHRoZSB3ZWJzZXJ2aWNlIGlkCiAgICAkU2VsZi0+e1dlYnNlcnZpY2VJRH0gPSAkQUlXZWJzZXJ2aWNlLT57SUR9OwoKICAgIGlmICggJEFJV2Vic2VydmljZS0+e1ZhbGlkSUR9ICE9IDEgKSB7CgogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgICMgZmV0Y2ggY29uZmlnCiAgICBteSAkU3RyaXBTaWduYXR1cmVSZWdFeCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnT1RPQk9BSTo6U3RyaXBTaWduYXR1cmVSZWdleCcpOwogICAgaWYgKCRTdHJpcFNpZ25hdHVyZVJlZ0V4KSB7CgogICAgICAgIG15ICRSZWdleCA9IHFyLyRTdHJpcFNpZ25hdHVyZVJlZ0V4L207CiAgICAgICAgJFNlbGYtPntTdHJpcFNpZ25hdHVyZVJlZ0V4fSA9ICRSZWdleDsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIE1pZ3JhdGVUaWNrZXRzKCkKClN5bmNocm9uaXplIHRoZSBPVE9CTy1BSSB2ZWN0b3IgREIgd2l0aCB0aGUgdXBkYXRlZCBzdGF0ZXMgb2Ygb25lIG9yIG1vcmUgVGlja2V0cyBmb3Igb25lIG9yIG1vcmUgdXNlLWNhc2VzLgoKcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFN1Y2Nlc3MgPSAkT2JqZWN0LT5NaWdyYXRlVGlja2V0cygKICAgICAgICBUaWNrZXRJRCA9PiAxMjMsICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCwgY29uc2lkZXIgb25seSB0aGlzIHRpY2tldCBmb3IgbWlncmF0aW9uCiAgICAgICAgVXNlQ2FzZXMgPT4gWyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIGNvbnNpZGVyIG9ubHkgdGhlc2UgdXNlLWNhc2VzIGZvciBtaWdyYXRpb24KICAgICAgICAgICAgJ2RlZmF1bHQnLAogICAgICAgICAgICAnc2FsZXMnLAogICAgICAgIF0sCiAgICAgICAgU2FtcGxlICAgICAgID0+ICcvaG9tZS9zYW1wbGUuanNvbicsICAgICMgb3B0aW9uYWwsIGZpbGUgcGF0aCBvciBkaXJlY3RvcnkgdG8gd3JpdGUgYSBzYW1wbGUuanNvbiBjb250YWluaW5nIFRpY2tldElEcyB0byBzYW1wbGUKICAgICAgICBTYW1wbGVOdGggICAgPT4gMTAsICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCwgc2FtcGxlIHNpemUgKGRlZmF1bHQ6IDEwKQogICAgICAgIFJlZmVyZW5jZSAgICA9PiAnL2hvbWUvc2FtcGxlLmpzb24nLCAgICAjIG9wdGlvbmFsLCBwYXRoIHRvIGFuIGV4aXN0aW5nIHNhbXBsZS5qc29uIGNvbnRhaW5pbmcgVGlja2V0SURzIHRvIHJlZmVyZW5jZQogICAgICAgIEFzeW5jaHJvbm91cyA9PiAwLCAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBkbyBub3QgbWFudWFsbHkgc2V0IHRoaXMsIHVubGVzcyB5b3UgYXJlIGV4cGxpY2l0bHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBydW5uaW5nIHRoZSBSZXF1ZXN0ZXIgaW4gYW4gYXN5bmNocm9ub3VzIGNvbnRleHQgKGRlZmF1bHQ6IDApCiAgICAgICAgQ29uc29sZSAgICAgID0+ICRDb25zb2xlT2JqZWN0LCAgICAgICAgICMgb3B0aW9uYWwsIGdpdmUgcmVhbHRpbWUgc3RhdHVzIHVwZGF0ZXMgb24gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIChhc3N1bWVzIHByaW50IHRvIFNURE9VVCkKICAgICk7Cgo9Y3V0CgpzdWIgTWlncmF0ZVRpY2tldHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPkluaXRJbXBvcnQoKSA9PSAwOwoKICAgIG15ICRVc2VDYXNlcyAgICAgPSAkUGFyYW17VXNlQ2FzZXN9OwogICAgbXkgJFNhbXBsZSAgICAgICA9ICRQYXJhbXtTYW1wbGV9OwogICAgbXkgJFNhbXBsZU50aCAgICA9ICRQYXJhbXtTYW1wbGVOdGh9IHx8IDEwOwogICAgbXkgJFJlZmVyZW5jZSAgICA9ICRQYXJhbXtSZWZlcmVuY2V9OwogICAgbXkgJEFzeW5jaHJvbm91cyA9ICRQYXJhbXtBc3luY2hyb25vdXN9OwogICAgbXkgJENvbnNvbGUgICAgICA9ICRQYXJhbXtDb25zb2xlfSAmJiAkUGFyYW17Q29uc29sZX0tPmNhbignUHJpbnQnKSA/ICRQYXJhbXtDb25zb2xlfSA6IHVuZGVmOwoKICAgIG15ICRCYXRjaFNpemUgPSAxMDA7CgogICAgIyBoYW5kbGUgc2FtcGxlIG9wdGlvbiBmb3IgY29uc29sZSBjb21tYW5kCiAgICBpZiAoJFNhbXBsZSkgewoKICAgICAgICBteSAkRnVsbFBhdGggPSAkU2FtcGxlOwoKICAgICAgICBpZiAoIC1kICRTYW1wbGUgKSB7CiAgICAgICAgICAgICRGdWxsUGF0aCAuPSAiL3NhbXBsZS5qc29uIjsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57U2FtcGxlUGF0aH0gPSAkRnVsbFBhdGg7CgogICAgICAgIG15ICRTYW1wbGVEaXIgPSBkaXJuYW1lKCRGdWxsUGF0aCk7CiAgICAgICAgaWYgKCAhLWQgJFNhbXBsZURpciApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gImRvLXNhbXBsZSBwYXJhbWV0ZXIgbmVlZHMgYSB2YWxpZCBwYXRoIHRvIGFuIG91dHB1dCBmaWxlLCBidXQgcGFyZW50IHBhdGggIiAuICRTYW1wbGVEaXIgLiAiIGRvZXMgbm90IGV4aXN0LiIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGRpZTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkUmVmZXJlbmNlICYmIC1lICRSZWZlcmVuY2UgKSB7CgogICAgICAgIG15ICRSZWZJRHNKU09OID0gZmlsZSgkUmVmZXJlbmNlKS0+c2x1cnA7CiAgICAgICAgJFNlbGYtPntSZWZJRHN9ID0gZnJvbV9qc29uKCRSZWZJRHNKU09OKTsKICAgIH0KCiAgICBteSAkVGlja2V0T2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJEFydGljbGVPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgIG15ICRSZXF1ZXN0ZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwoKICAgIG15ICRPbmx5VmlzaWJsZUZvckN1c3RvbWVyICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpPbmx5VmlzaWJsZUZvckN1c3RvbWVyJykgLy8gMTsKICAgIG15ICRBbGxvd2VkQXJ0aWNsZVNlbmRlclR5cGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpBbGxvd2VkQXJ0aWNsZVNlbmRlclR5cGVzJyk7CiAgICBteSAkU2VhcmNoUmVzdHJpY3Rpb25zSGFzaCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnT1RPQk9BSTo6VGlja2V0OjpTZWFyY2hSZXN0cmljdGlvbnMnKSAvLyB7fTsKCiAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAkQ29uc29sZS0+UHJpbnQoIjxncmVlbj5Jbmdlc3RpbmcgVGlja2V0cyAuLi48L2dyZWVuPlxuIik7CiAgICB9CgogICAgbXkgJVRpY2tldFNhbXBsZTsKCiAgICBTRUFSQ0hSRVNUUklDVElPTjoKICAgIGZvciBteSAkU2VhcmNoUmVzdHJpY3Rpb25zS2V5ICgga2V5cyAkU2VhcmNoUmVzdHJpY3Rpb25zSGFzaC0+JSogKQogICAgewogICAgICAgIG15ICRTZWFyY2hSZXN0cmljdGlvbnMgPSBkY2xvbmUoICRTZWFyY2hSZXN0cmljdGlvbnNIYXNoLT57JFNlYXJjaFJlc3RyaWN0aW9uc0tleX0gKTsKCiAgICAgICAgbXkgJEluY2x1ZGVVc2VDYXNlID0gMDsKICAgICAgICBpZiAoICRVc2VDYXNlcyAmJiBzY2FsYXIgJFVzZUNhc2VzLT5AKiApIHsKCiAgICAgICAgICAgICRJbmNsdWRlVXNlQ2FzZSA9IGdyZXAgeyAkXyBlcSAkU2VhcmNoUmVzdHJpY3Rpb25zS2V5IH0gJFVzZUNhc2VzLT5AKjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRJbmNsdWRlVXNlQ2FzZSA9IDE7CiAgICAgICAgfQoKICAgICAgICBuZXh0IFNFQVJDSFJFU1RSSUNUSU9OIGlmICRJbmNsdWRlVXNlQ2FzZSA9PSAwOwoKICAgICAgICBteSBAVXNlQ2FzZUxhYmVscyA9ICggZGVsZXRlICRTZWFyY2hSZXN0cmljdGlvbnMtPntMYWJlbH0gKS0+QCo7CgogICAgICAgIGlmICggIWV4aXN0cyAkVGlja2V0U2FtcGxleyRTZWFyY2hSZXN0cmljdGlvbnNLZXl9ICkgewogICAgICAgICAgICAkVGlja2V0U2FtcGxleyRTZWFyY2hSZXN0cmljdGlvbnNLZXl9ID0gW107CiAgICAgICAgfQoKICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCI8eWVsbG93PlVzZSBDYXNlOiAkU2VhcmNoUmVzdHJpY3Rpb25zS2V5LjwveWVsbG93PlxuIik7CiAgICAgICAgfQoKICAgICAgICAjIHJlbW92ZSBzZWFyY2ggcGFyYW1ldGVycyB3aXRoIGVtcHR5IGFycmF5cyBhcyB0aGV5IHByZXZlbnQgc2VhcmNoIHJlc3VsdHMgZW50aXJlbHkKICAgICAgICBmb3IgbXkgJEFycmF5UGFyYW0gKHF3KFF1ZXVlcyBTZXJ2aWNlcyBTdGF0ZVR5cGVzIFR5cGVzKSkgewogICAgICAgICAgICBpZiAoICFJc0FycmF5UmVmV2l0aERhdGEoICRTZWFyY2hSZXN0cmljdGlvbnMtPnskQXJyYXlQYXJhbX0gKSApIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSAkU2VhcmNoUmVzdHJpY3Rpb25zLT57JEFycmF5UGFyYW19OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGZldGNoIGFsbCBUaWNrZXRJRHMgc2F0aXNmeWluZyB0aGlzIHNlYXJjaCByZXN0cmljdGlvbgogICAgICAgIG15IEBUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICAgICAgICAgIFJlc3VsdCAgICAgPT4gJ0FSUkFZJywKICAgICAgICAgICAgTGltaXQgICAgICA9PiAxMDBfMDAwXzAwMCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICBQZXJtaXNzaW9uID0+ICdybycsCiAgICAgICAgICAgIFRpY2tldElEICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgJXskU2VhcmNoUmVzdHJpY3Rpb25zfSwKICAgICAgICApOwoKICAgICAgICBteSAkRXJyb3JzID0gMDsKICAgICAgICBteSAkQ291bnQgID0gMDsKCiAgICAgICAgIyBvbmx5IHJlcXVpcmVkIGZvciBjb25zb2xlIGNvbW1hbmQKICAgICAgICBteSAkSGFuZGxlZCAgID0gMDsKICAgICAgICBteSAkSW1wb3J0ZWQgID0gMDsKICAgICAgICBteSAkUGVyY2VudDEwID0gKCBzb3J0IHsgJGEgPD0+ICRiIH0gKCAxMCwgaW50KCBzY2FsYXIoQFRpY2tldElEcykgLyAxMCApICkgKVsxXTsKICAgICAgICBteSAkUGVyY2VudDEgID0gKCBzb3J0IHsgJGEgPD0+ICRiIH0gKCAxLCAgaW50KCBzY2FsYXIoQFRpY2tldElEcykgLyAxMDAgKSApIClbMV07CgogICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoCiAgICAgICAgICAgICAgICAiPHllbGxvdz4iIC4gKCBzY2FsYXIgQFRpY2tldElEcyApIC4gIiBUaWNrZXRzIGFyZSBjb25zaWRlcmVkIGZvciB0cmFuc2Zlci4gVGhpcyBjYW4gdGFrZSBzZXZlcmFsIGhvdXJzLCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiB0aWNrZXRzLjwveWVsbG93PlxuIgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgQkFUQ0g6CiAgICAgICAgd2hpbGUgKCAkQ291bnQgPCBzY2FsYXIgQFRpY2tldElEcyApIHsKICAgICAgICAgICAgbXkgJFVudGlsID0gJENvdW50ICsgJEJhdGNoU2l6ZSAtIDE7CiAgICAgICAgICAgIGlmICggJFVudGlsID4gJCNUaWNrZXRJRHMgKSB7CiAgICAgICAgICAgICAgICAkVW50aWwgPSAkI1RpY2tldElEczsKICAgICAgICAgICAgfQogICAgICAgICAgICBteSBAQmF0Y2ggPSBAVGlja2V0SURzWyAkQ291bnQgLi4gJFVudGlsIF07CgogICAgICAgICAgICBteSBASW1wb3J0VGlja2V0c1FBOwogICAgICAgICAgICBteSBASW1wb3J0VGlja2V0c0FnZW50QXJ0aWNsZXM7CgogICAgICAgICAgICBUSUNLRVRJRDoKICAgICAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQEJhdGNoKSB7CgogICAgICAgICAgICAgICAgIyBzaG93IHByb2dyZXNzCiAgICAgICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRDb3VudCAmJiAkQ291bnQgJSAkUGVyY2VudDEwID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRQZXJjZW50ID0gaW50KCAkQ291bnQgLyAoIHNjYWxhcihAVGlja2V0SURzKSAvIDEwMCApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8eWVsbG93PiRDb3VudDwveWVsbG93PiBvZiA8eWVsbG93PiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIHNjYWxhcihAVGlja2V0SURzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIjwveWVsbG93PiBwcm9jZXNzZWQgKDx5ZWxsb3c+JFBlcmNlbnQgJTwveWVsbG93PiBkb25lLiAkSGFuZGxlZCBUaWNrZXRzIGhhbmRsZWQsICRJbXBvcnRlZCBUaWNrZXRzIGltcG9ydGVkKS5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCBzY2FsYXIoQFRpY2tldElEcykgPiA1MCAmJiAkQ291bnQgJSAkUGVyY2VudDEgPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCcuICcpOwogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoKS0+Zmx1c2goKTsgICAgIyBzaG93IHRoZSBkb3QgaW1tZWRpYXRlbHksIGJld2FyZSB0aGlzIGFzc3VtZXMgQ29uc29sZU9iamVjdCBwcmludHMgdG8gU1RET1VUCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRDb3VudCsrOwoKICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICgkUmVmZXJlbmNlKSB7CgogICAgICAgICAgICAgICAgICAgIG15ICRJc1BhcnRPZlNhbXBsZSA9IGdyZXAgeyAkXyBlcSAiJFRpY2tldElEIiB9ICRTZWxmLT57UmVmSURzfS0+eyRTZWFyY2hSZXN0cmljdGlvbnNLZXl9LT5AKjsKICAgICAgICAgICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICgkSXNQYXJ0T2ZTYW1wbGUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgIUBBcnRpY2xlczsKCiAgICAgICAgICAgICAgICBteSAlU2VuZGVyTG9va3VwID0gbWFwIHsgJF8gPT4gJEFydGljbGVPYmplY3QtPkFydGljbGVTZW5kZXJUeXBlTG9va3VwKCBTZW5kZXJUeXBlID0+ICRfICkgfSBxdy9hZ2VudCBjdXN0b21lci87CgogICAgICAgICAgICAgICAgIyBTZWxlY3Rpb25SdWxlOiBvbmx5IGNvbnNpZGVyIHRpY2tldHMgc3RhcnRlZCBieSBhIGN1c3RvbWVyCiAgICAgICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICRBcnRpY2xlc1swXXtTZW5kZXJUeXBlSUR9IG5lICRTZW5kZXJMb29rdXB7Y3VzdG9tZXJ9OwoKICAgICAgICAgICAgICAgIG15ICRRdWVzdGlvbkFydGljbGUgPSBzaGlmdCBAQXJ0aWNsZXM7CiAgICAgICAgICAgICAgICBteSBAQW5zd2VyQXJ0aWNsZXM7CgogICAgICAgICAgICAgICAgaWYgKCRTYW1wbGUpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBrZWVwIDEwJSBzYW1wbGUgb2YgdGlja2V0cyBmb3IgdGVzdGluZyBhbmQgZG8gTk9UIGltcG9ydCB0aGVtCgogICAgICAgICAgICAgICAgICAgIGlmICggJEhhbmRsZWQgJSAkU2FtcGxlTnRoID09IDAgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkSGFuZGxlZCsrOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoICRUaWNrZXRTYW1wbGV7JFNlYXJjaFJlc3RyaWN0aW9uc0tleX0tPkAqLCAkVGlja2V0SUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgVElDS0VUSUQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIEFSVElDTEU6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlcykgewoKICAgICAgICAgICAgICAgICAgICAjIFNlbGVjdGlvblJ1bGU6IHNraXAgdGlja2V0cyB3aGVyZSB0aGUgY3VzdG9tZXIgc2VudCBpbmZvIHR3aWNlIHdpdGhvdXQgYW55IGFnZW50IGludGVyZmVyZW5jZQogICAgICAgICAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgJEFydGljbGUtPntTZW5kZXJUeXBlSUR9IGVxICRTZW5kZXJMb29rdXB7Y3VzdG9tZXJ9ICYmICFAQW5zd2VyQXJ0aWNsZXM7CgogICAgICAgICAgICAgICAgICAgICMgU2VsZWN0aW9uUnVsZTogc2tpcCBhcnRpY2xlcyBpZiB0aGV5IGFyZSBub3QgY3VzdG9tZXIgdmlzaWJsZQogICAgICAgICAgICAgICAgICAgIGlmICgkT25seVZpc2libGVGb3JDdXN0b21lcikgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEFSVElDTEUgaWYgJEFydGljbGUtPntJc1Zpc2libGVGb3JDdXN0b21lcn0gbmUgMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgU2VsZWN0aW9uUnVsZTogc2tpcCBhcnRpY2xlcyBpZiB0aGVpciBzZW5kZXJ0eXBlIGlzIG5vdCBvbiB0aGUgd2hpdGVsaXN0IChpZiBlbmFibGVkKQogICAgICAgICAgICAgICAgICAgIGlmICgkQWxsb3dlZEFydGljbGVTZW5kZXJUeXBlcykgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkQWxsb3dlZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIFRZUEVTOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFR5cGUgKCAkQWxsb3dlZEFydGljbGVTZW5kZXJUeXBlcy0+QCogKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRTZW5kZXJMb29rdXB7JFR5cGV9ID09ICRBcnRpY2xlLT57U2VuZGVyVHlwZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWxsb3dlZCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBUWVBFUzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkQWxsb3dlZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQVJUSUNMRTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcHVzaCBAQW5zd2VyQXJ0aWNsZXMsICRBcnRpY2xlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgIUBBbnN3ZXJBcnRpY2xlczsKCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJFF1ZXN0aW9uQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmQtPkFydGljbGVHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkUXVlc3Rpb25BcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICEkQXJ0aWNsZXtCb2R5fTsKCiAgICAgICAgICAgICAgICAgICAgJFF1ZXN0aW9uQXJ0aWNsZSA9IFwlQXJ0aWNsZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSBAQW5zd2VyQXJ0aWNsZXNXaXRoQm9keTsKCiAgICAgICAgICAgICAgICBBTlNXRVI6CiAgICAgICAgICAgICAgICBmb3IgbXkgJGkgKCAwIC4uICQjQW5zd2VyQXJ0aWNsZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFuc3dlckFydGljbGVzWyRpXXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIG15ICVBcnRpY2xlID0gJEFydGljbGVCYWNrZW5kLT5BcnRpY2xlR2V0KAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFuc3dlckFydGljbGVzWyRpXXtBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIG5leHQgQU5TV0VSIGlmICEkQXJ0aWNsZXtCb2R5fTsKCiAgICAgICAgICAgICAgICAgICAgIyBTZWxlY3Rpb25SdWxlOiBSZW1vdmUgY2l0YXRpb25zIGZyb20gYWdlbnQgYXJ0aWNsZXMKICAgICAgICAgICAgICAgICAgICAkQXJ0aWNsZXtCb2R5fSA9fiBzL15ccyo+Lis/JC8vbXNnOwoKICAgICAgICAgICAgICAgICAgICBwdXNoIEBBbnN3ZXJBcnRpY2xlc1dpdGhCb2R5LCBcJUFydGljbGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbmV4dCBUSUNLRVRJRCBpZiAhQEFuc3dlckFydGljbGVzV2l0aEJvZHk7CgogICAgICAgICAgICAgICAgJEhhbmRsZWQrKzsKICAgICAgICAgICAgICAgICRJbXBvcnRlZCsrOwoKICAgICAgICAgICAgICAgIG15ICRRdWVzdGlvblN1YmplY3QgPSAkUXVlc3Rpb25BcnRpY2xlLT57U3ViamVjdH0gICAgICAgICAvLyAnJzsKICAgICAgICAgICAgICAgIG15ICRRdWVzdGlvbkJvZHkgICAgPSAkUXVlc3Rpb25BcnRpY2xlLT57Qm9keX0gICAgICAgICAgICAvLyAnJzsKICAgICAgICAgICAgICAgIG15ICRBbnN3ZXJTdWJqZWN0ICAgPSAkQW5zd2VyQXJ0aWNsZXNXaXRoQm9keVswXXtTdWJqZWN0fSAvLyAnJzsKICAgICAgICAgICAgICAgIG15ICRBbnN3ZXJCb2R5ICAgICAgPSAkQW5zd2VyQXJ0aWNsZXNXaXRoQm9keVswXXtCb2R5fTsKCiAgICAgICAgICAgICAgICAkUXVlc3Rpb25Cb2R5ID0gJFNlbGYtPlN0cmlwU2lnbmF0dXJlKCBCb2R5ID0+ICRRdWVzdGlvbkJvZHkgKTsKICAgICAgICAgICAgICAgICRBbnN3ZXJCb2R5ICAgPSAkU2VsZi0+U3RyaXBTaWduYXR1cmUoIEJvZHkgPT4gJEFuc3dlckJvZHkgKTsKCiAgICAgICAgICAgICAgICBteSAkSW1wb3J0UUFUaWNrZXQgPSB7CiAgICAgICAgICAgICAgICAgICAgInNvdXJjZV9pZCIgICAgID0+ICIkVGlja2V0SUQiLAogICAgICAgICAgICAgICAgICAgICJjb250ZW50X2l0ZW1zIiA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT4gJ3F1ZXN0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPT4gJFF1ZXN0aW9uU3ViamVjdCAuICcuICcgLiAkUXVlc3Rpb25Cb2R5LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0+ICdhbnN3ZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9PiAkQW5zd2VyU3ViamVjdCAuICcuICcgLiAkQW5zd2VyQm9keSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICRJbXBvcnRRQVRpY2tldC0+e2xhYmVsc30gPSBcQFVzZUNhc2VMYWJlbHM7CgogICAgICAgICAgICAgICAgcHVzaCBASW1wb3J0VGlja2V0c1FBLCAkSW1wb3J0UUFUaWNrZXQ7CgogICAgICAgICAgICAgICAgbXkgQENvbnRlbnRJdGVtczsKICAgICAgICAgICAgICAgIGZvciBteSAkQW5zd2VyQXJ0aWNsZVdpdGhCb2R5IChAQW5zd2VyQXJ0aWNsZXNXaXRoQm9keSkgewoKICAgICAgICAgICAgICAgICAgICBteSAkU3ViamVjdCA9ICRBbnN3ZXJBcnRpY2xlV2l0aEJvZHktPntTdWJqZWN0fSAvLyAnJzsKICAgICAgICAgICAgICAgICAgICBteSAkQm9keSAgICA9ICRBbnN3ZXJBcnRpY2xlV2l0aEJvZHktPntCb2R5fSAgICAvLyAnJzsKCiAgICAgICAgICAgICAgICAgICAgJEJvZHkgPSAkU2VsZi0+U3RyaXBTaWduYXR1cmUoIEJvZHkgPT4gJEJvZHkgKTsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBDb250ZW50SXRlbXMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PiAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPT4gJFN1YmplY3QgLiAnLiAnIC4gJEJvZHksCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkSW1wb3J0QWdlbnRBcnRpY2xlcyA9IHsKICAgICAgICAgICAgICAgICAgICAic291cmNlX2lkIiAgICAgPT4gIiRUaWNrZXRJRCIsCiAgICAgICAgICAgICAgICAgICAgImNvbnRlbnRfaXRlbXMiID0+IFxAQ29udGVudEl0ZW1zLAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAkSW1wb3J0QWdlbnRBcnRpY2xlcy0+e2xhYmVsc30gPSBcQFVzZUNhc2VMYWJlbHM7CgogICAgICAgICAgICAgICAgcHVzaCBASW1wb3J0VGlja2V0c0FnZW50QXJ0aWNsZXMsICRJbXBvcnRBZ2VudEFydGljbGVzOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkUmVzdWx0OwogICAgICAgICAgICBpZiAoQEltcG9ydFRpY2tldHNRQSkgewoKICAgICAgICAgICAgICAgICMgSW5nZXN0IFEvQSBhcnRpY2xlcwogICAgICAgICAgICAgICAgJFJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIEludm9rZXIgICAgICA9PiAnSW5nZXN0TWFueScsCiAgICAgICAgICAgICAgICAgICAgQXN5bmNocm9ub3VzID0+ICRBc3luY2hyb25vdXMsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAndGlja2V0X3BhaXJzJywgICAgICAjIGN1cnJlbnRseSBzdXBwb3J0ZWQ6IGZhcSwgZG9jdW1lbnRhdGlvbiwgdGlja2V0X3BhaXJzLCB0aWNrZXRfY2h1bmtzCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gXEBJbXBvcnRUaWNrZXRzUUEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhJFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnMrKzsKCiAgICAgICAgICAgICAgICAgICAgbXkgJFNvdXJjZUlEcyA9IGpvaW4oICcsJywgbWFwIHsgJF8tPntzb3VyY2VfaWR9IH0gQEltcG9ydFRpY2tldHNRQSApOwoKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZhaWxlZCB0byBpbmdlc3QgUS9BIGFydGljbGUgcGFpcnMgb2YgVGlja2V0SUQocykgJFNvdXJjZUlEczogIiAuICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoICI8cmVkPkVycm9yIGltcG9ydGluZyBUaWNrZXRJRChzKSAkU291cmNlSURzOiAiIC4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gLiAiPC9yZWQ+XG4iICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoQEltcG9ydFRpY2tldHNBZ2VudEFydGljbGVzKSB7CgogICAgICAgICAgICAgICAgIyBJbmdlc3QgYWdlbnQgYXJ0aWNsZXMKICAgICAgICAgICAgICAgICRSZXN1bHQgPSAkUmVxdWVzdGVyT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICBJbnZva2VyICAgICAgPT4gJ0luZ2VzdE1hbnknLAogICAgICAgICAgICAgICAgICAgIEFzeW5jaHJvbm91cyA9PiAkQXN5bmNocm9ub3VzLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ3RpY2tldF9jaHVua3MnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+IFxASW1wb3J0VGlja2V0c0FnZW50QXJ0aWNsZXMsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhJFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnMrKzsKCiAgICAgICAgICAgICAgICAgICAgbXkgJFNvdXJjZUlEcyA9IGpvaW4oICcsJywgbWFwIHsgJF8tPntzb3VyY2VfaWR9IH0gQEltcG9ydFRpY2tldHNRQSApOwoKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZhaWxlZCB0byBpbmdlc3QgYWdlbnQgYXJ0aWNsZXMgb2YgVGlja2V0SUQocykgJFNvdXJjZUlEczogIiAuICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoICI8cmVkPkVycm9yIGltcG9ydGluZyBUaWNrZXRJRChzKSAkU291cmNlSURzOiAiIC4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gLiAiPC9yZWQ+XG4iICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJEVycm9ycykgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnVGlja2V0IHRyYW5zZmVyIGNvbXBsZXRlLiAnIC4gJEVycm9ycyAuICcgZXJyb3Iocykgb2NjdXJyZWQhJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCI8eWVsbG93PlRpY2tldCB0cmFuc2ZlciBjb21wbGV0ZS4gJEVycm9ycyBlcnJvcihzKSBvY2N1cnJlZCE8L3llbGxvdz5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgiPGdyZWVuPlRpY2tldCB0cmFuc2ZlciBjb21wbGV0ZS4gQ29uc2lkZXJlZCAkQ291bnQgdGlja2V0cywgb2Ygd2ljaCAkSW1wb3J0ZWQgd2hlcmUgaW1wb3J0ZWQuPC9ncmVlbj5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICgkU2FtcGxlKSB7CgogICAgICAgIG15ICRKU09OID0gZW5jb2RlX2pzb24oIFwlVGlja2V0U2FtcGxlICk7CiAgICAgICAgZmlsZSggJFNlbGYtPntTYW1wbGVQYXRofSApLT5zcGV3KCRKU09OKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIE1pZ3JhdGVUaWNrZXRzQXN5bmMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGxldCB0aGUgcmVxdWVzdGVyIGtub3cgaXQgaXMgcnVuIGluIGFuIGFzeW5jaHJvbm91cyBjb250ZXh0CiAgICAkUGFyYW17QXN5bmNocm9ub3VzfSA9IDE7CgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICBNZXNzYWdlICA9PiAiT3RvYm9BSTo6SW1wb3J0OjpNaWdyYXRlVGlja2V0c0FzeW5jIGNhbGwgaW5pdGlhdGVkLiIsCiAgICApOwoKICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPkFzeW5jQ2FsbCgKICAgICAgICBPYmplY3ROYW1lICAgICAgICAgICAgICAgPT4gJ0tlcm5lbDo6U3lzdGVtOjpPdG9ib0FJOjpJbXBvcnQnLAogICAgICAgIEZ1bmN0aW9uTmFtZSAgICAgICAgICAgICA9PiAnTWlncmF0ZVRpY2tldHMnLAogICAgICAgIEZ1bmN0aW9uUGFyYW1zICAgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgIEF0dGVtcHRzICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIE1heGltdW1QYXJhbGxlbEluc3RhbmNlcyA9PiAwLAogICAgKTsKCiAgICBpZiAoICEkU3VjY2VzcyApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbml0aWFsaXplIGFzeW5jIGNhbGwgZmFpbGVkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBNaWdyYXRlRkFRcygpCgpTeW5jaHJvbml6ZSB0aGUgT1RPQk8tQUkgdmVjdG9yIERCIHdpdGggdGhlIHVwZGF0ZWQgc3RhdGVzIG9mIG9uZSBvciBtb3JlIEZBUSBpdGVtcyBmb3Igb25lIG9yIG1vcmUgdXNlLWNhc2VzLgoKcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgb3IgdW5kZWYgb3RoZXJ3aXNlCgogICAgbXkgJFN1Y2Nlc3MgPSAkT2JqZWN0LT5NaWdyYXRlRkFRcygKICAgICAgICBGQVFJRCAgICA9PiAxMjMsICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIGNvbnNpZGVyIG9ubHkgdGhpcyBGQVEgaXRlbSBmb3IgbWlncmF0aW9uCiAgICAgICAgVXNlQ2FzZXMgPT4gWyAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBjb25zaWRlciBvbmx5IHRoZXNlIHVzZS1jYXNlcyBmb3IgbWlncmF0aW9uCiAgICAgICAgICAgICdkZWZhdWx0JywKICAgICAgICAgICAgJ3NhbGVzJywKICAgICAgICBdLAogICAgICAgIEFzeW5jaHJvbm91cyA9PiAwLCAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCwgZG8gbm90IG1hbnVhbGx5IHNldCB0aGlzLCB1bmxlc3MgeW91IGFyZSBleHBsaWNpdGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJ1bm5pbmcgdGhlIFJlcXVlc3RlciBpbiBhbiBhc3luY2hyb25vdXMgY29udGV4dCAoZGVmYXVsdDogMCkKICAgICAgICBDb25zb2xlICAgICAgPT4gJENvbnNvbGVPYmplY3QsICAgICMgb3B0aW9uYWwsIGdpdmUgcmVhbHRpbWUgc3RhdHVzIHVwZGF0ZXMgb24gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIChhc3N1bWVzIHByaW50IHRvIFNURE9VVCkKICAgICk7Cgo9Y3V0CgpzdWIgTWlncmF0ZUZBUXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPkluaXRJbXBvcnQoKSA9PSAwOwoKICAgIG15ICRVc2VDYXNlcyAgICAgPSAkUGFyYW17VXNlQ2FzZXN9OwogICAgbXkgJEFzeW5jaHJvbm91cyA9ICRQYXJhbXtBc3luY2hyb25vdXN9OwogICAgbXkgJENvbnNvbGUgICAgICA9ICRQYXJhbXtDb25zb2xlfSAmJiAkUGFyYW17Q29uc29sZX0tPmNhbignUHJpbnQnKSA/ICRQYXJhbXtDb25zb2xlfSA6IHVuZGVmOwoKICAgICMgY2hlY2sgd2hldGhlciBGQVEgcGFja2FnZSBpcyBpbnN0YWxsZWQKICAgIG15ICRQYWNrYWdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBhY2thZ2UnKTsKICAgIG15ICRJc0luc3RhbGxlZCAgID0gJFBhY2thZ2VPYmplY3QtPlBhY2thZ2VJc0luc3RhbGxlZCgKICAgICAgICBOYW1lID0+ICdGQVEnLAogICAgKTsKICAgIGlmICggISRJc0luc3RhbGxlZCApIHsKICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCI8eWVsbG93PlNraXBwaW5nIEZBUSBhcnRpY2xlcyAoRkFRIG5vdCBpbnN0YWxsZWQpLi4uPC95ZWxsb3c+XG4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICRDb25zb2xlLT5QcmludCgiPGdyZWVuPkluZ2VzdGluZyBGQVFzIC4uLjwvZ3JlZW4+XG4iKTsKICAgIH0KCiAgICAjIHByZXBhcmUgdGhlIGltcG9ydAogICAgbXkgJEZBUU9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpGQVEnKTsKICAgIG15ICRSZXF1ZXN0ZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OlJlcXVlc3RlcicpOwogICAgbXkgJEhUTUxVdGlsc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKTsKCiAgICAjIGRldGVybWluZSBzZWFyY2ggcmVzdHJpY3Rpb25zIGZvciBGQVFTZWFyY2gKICAgIG15ICRTZWFyY2hSZXN0cmljdGlvbnNIYXNoID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpGQVE6OlNlYXJjaFJlc3RyaWN0aW9ucycpIC8vIHt9OwoKICAgIFNFQVJDSFJFU1RSSUNUSU9OOgogICAgZm9yIG15ICRTZWFyY2hSZXN0cmljdGlvbnNLZXkgKCBrZXlzICRTZWFyY2hSZXN0cmljdGlvbnNIYXNoLT4lKiApCiAgICB7CiAgICAgICAgbXkgJFNlYXJjaFJlc3RyaWN0aW9ucyA9IGRjbG9uZSggJFNlYXJjaFJlc3RyaWN0aW9uc0hhc2gtPnskU2VhcmNoUmVzdHJpY3Rpb25zS2V5fSApOwogICAgICAgIG15IEBVc2VDYXNlTGFiZWxzICAgICAgPSAoIGRlbGV0ZSAkU2VhcmNoUmVzdHJpY3Rpb25zLT57TGFiZWx9ICktPkAqOwoKICAgICAgICBteSAkSW5jbHVkZVVzZUNhc2UgPSAwOwogICAgICAgIGlmICggJFVzZUNhc2VzICYmIHNjYWxhciAkVXNlQ2FzZXMtPkAqICkgewoKICAgICAgICAgICAgJEluY2x1ZGVVc2VDYXNlID0gZ3JlcCB7ICRfIGVxICRTZWFyY2hSZXN0cmljdGlvbnNLZXkgfSAkVXNlQ2FzZXMtPkAqOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEluY2x1ZGVVc2VDYXNlID0gMTsKICAgICAgICB9CgogICAgICAgIG5leHQgU0VBUkNIUkVTVFJJQ1RJT04gaWYgJEluY2x1ZGVVc2VDYXNlID09IDA7CgogICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoIjx5ZWxsb3c+VXNlIENhc2U6ICRTZWFyY2hSZXN0cmljdGlvbnNLZXk8L3llbGxvdz5cbiIpOwogICAgICAgIH0KCiAgICAgICAgIyBmZXRjaCBhbGwgRkFRSURzIHNhdGlzZnlpbmcgdGhpcyBzZWFyY2ggcmVzdHJpY3Rpb24KICAgICAgICBteSBARkFRSURzID0gJEZBUU9iamVjdC0+RkFRU2VhcmNoKAogICAgICAgICAgICBMaW1pdCAgICAgID0+IDEwMF8wMDBfMDAwLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gJ3JvJywKICAgICAgICAgICAgRkFRSUQgICAgICA9PiAkUGFyYW17RkFRSUR9LAogICAgICAgICAgICAleyRTZWFyY2hSZXN0cmljdGlvbnN9LAogICAgICAgICk7CgogICAgICAgICMgaXRlcmF0ZSBvdmVyIHRoZSBmYXFzCiAgICAgICAgbXkgJENvdW50ICAgICA9IDA7CiAgICAgICAgbXkgJFBlcmNlbnQxMCA9ICggc29ydCB7ICRhIDw9PiAkYiB9ICggMTAsIGludCggc2NhbGFyKEBGQVFJRHMpIC8gMTAgKSApIClbMV07CiAgICAgICAgbXkgJFBlcmNlbnQxICA9ICggc29ydCB7ICRhIDw9PiAkYiB9ICggMSwgIGludCggc2NhbGFyKEBGQVFJRHMpIC8gMTAwICkgKSApWzFdOwoKICAgICAgICBpZiAoIHNjYWxhcihARkFRSURzKSA+IDEwMCAmJiAkQ29uc29sZSApIHsKICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCI8eWVsbG93PkZBUSBhcnRpY2xlIGFyZSB0cmFuc2ZlcnJlZC4gVGhpcyBjYW4gdGFrZSBzZXZlcmFsIGhvdXJzLCBkZXBlbmRpbmcgb24gdGhlIG51bWJlciBvZiBmYXEgYXJ0aWNsZS48L3llbGxvdz5cbiIpOwogICAgICAgIH0KCiAgICAgICAgbXkgJEVycm9ycyA9IDA7CiAgICAgICAgbXkgQEZBUURhdGE7CgogICAgICAgIEZBUUlEOgogICAgICAgIGZvciBteSAkRkFRSUQgKEBGQVFJRHMpIHsKCiAgICAgICAgICAgICRDb3VudCsrOwoKICAgICAgICAgICAgbXkgJUZBUSA9ICRGQVFPYmplY3QtPkZBUUdldCgKICAgICAgICAgICAgICAgIEl0ZW1JRCAgICAgICAgPT4gJEZBUUlELAogICAgICAgICAgICAgICAgSXRlbUZpZWxkcyAgICA9PiAxLCAgICAgICAgIyBPcHRpb25hbCwgZGVmYXVsdCAwLiBUbyBpbmNsdWRlIHRoZSBpdGVtIGZpZWxkIGNvbnRlbnQgZm9yIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRkFRIGl0ZW0gb24gdGhlIHJldHVybiBzdHJ1Y3R1cmUuCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDAsICAgICAgICAjIE9wdGlvbmFsLCBkZWZhdWx0IDAuIFRvIGluY2x1ZGUgdGhlIGR5bmFtaWMgZmllbGRzIGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEZBUSBpdGVtIG9uIHRoZSByZXR1cm4gc3RydWN0dXJlLgogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzY3J1YiBIVE1MCiAgICAgICAgICAgIG15ICRRdWVzdGlvbiA9ICRIVE1MVXRpbHNPYmplY3QtPlRvQXNjaWkoIFN0cmluZyA9PiAkRkFRe1RpdGxlfSAvLyAnJyApCiAgICAgICAgICAgICAgICAuICIuICIgLiAkSFRNTFV0aWxzT2JqZWN0LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJEZBUXtGaWVsZDF9IC8vICcnICkKICAgICAgICAgICAgICAgIC4gIi4gIiAuICRIVE1MVXRpbHNPYmplY3QtPlRvQXNjaWkoIFN0cmluZyA9PiAkRkFRe0ZpZWxkMn0gLy8gJycgKTsKCiAgICAgICAgICAgIG15ICRBbnN3ZXIgPSAkSFRNTFV0aWxzT2JqZWN0LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJEZBUXtGaWVsZDN9IC8vICcnICk7CgogICAgICAgICAgICAjIHByZXBhcmUgZGF0YSBpdGVtIGZvciBpbnZva2VyCgogICAgICAgICAgICBteSAkRGF0YSA9IHsKICAgICAgICAgICAgICAgICJzb3VyY2VfaWQiICAgICA9PiAiJEZBUUlEIiwKICAgICAgICAgICAgICAgICJjb250ZW50X2l0ZW1zIiA9PiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0+ICdxdWVzdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0+ICdhbnN3ZXInLAogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0+ICRBbnN3ZXIsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgJERhdGEtPntsYWJlbHN9ID0gXEBVc2VDYXNlTGFiZWxzOwoKICAgICAgICAgICAgcHVzaCBARkFRRGF0YSwgJERhdGE7CgogICAgICAgICAgICAjIGJhdGNoZXMgb2YgMTAgRkFRcwogICAgICAgICAgICBpZiAoICRDb3VudCAlIDEwID09IDAgKSB7CgogICAgICAgICAgICAgICAgIyBpbmdlc3QKICAgICAgICAgICAgICAgIG15ICRSZXN1bHQgPSAkUmVxdWVzdGVyT2JqZWN0LT5SdW4oCiAgICAgICAgICAgICAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICBJbnZva2VyICAgICAgPT4gJ0luZ2VzdE1hbnknLAogICAgICAgICAgICAgICAgICAgIEFzeW5jaHJvbm91cyA9PiAkQXN5bmNocm9ub3VzLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ2ZhcXMnLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+IFxARkFRRGF0YSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICEkUmVzdWx0LT57U3VjY2Vzc30gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9ycysrOwoKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkVycm9yIGltcG9ydGluZyBGQVFzOiAiIC4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRDb25zb2xlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCggIjxyZWQ+RXJyb3IgaW1wb3J0aW5nIEZBUXM6ICIgLiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSAuICI8L3JlZD5cbiIgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgQEZBUURhdGEgPSAoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzaG93IHByb2dyZXNzIGFuZCBwb3RlbnRpYWxseSBzbGVlcAogICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgIGlmICggJENvdW50ICUgJFBlcmNlbnQxMCA9PSAwICkgewogICAgICAgICAgICAgICAgICAgIG15ICRQZXJjZW50ID0gaW50KCAkQ291bnQgLyAoIHNjYWxhcihARkFRSURzKSAvIDEwMCApICk7CiAgICAgICAgICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KAogICAgICAgICAgICAgICAgICAgICAgICAiPHllbGxvdz4kQ291bnQ8L3llbGxvdz4gb2YgPHllbGxvdz4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIHNjYWxhcihARkFRSURzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiPC95ZWxsb3c+IHByb2Nlc3NlZCAoPHllbGxvdz4kUGVyY2VudCAlPC95ZWxsb3c+IGRvbmUpLlxuIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoIHNjYWxhcihARkFRSURzKSA+IDUwICYmICRDb3VudCAlICRQZXJjZW50MSA9PSAwICkgewogICAgICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgnLiAnKTsKICAgICAgICAgICAgICAgICAgICBzZWxlY3QoKS0+Zmx1c2goKTsgICAgIyBzaG93IHRoZSBkb3QgaW1tZWRpYXRlbHksIGJld2FyZSB0aGlzIGFzc3VtZXMgQ29uc29sZU9iamVjdCBwcmludHMgdG8gU1RET1VUCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgaW5nZXN0IGxlZnRvdmVycwogICAgICAgIGlmIChARkFRRGF0YSkgewoKICAgICAgICAgICAgbXkgJFJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICBJbnZva2VyICAgICAgPT4gJ0luZ2VzdE1hbnknLAogICAgICAgICAgICAgICAgQXN5bmNocm9ub3VzID0+ICRBc3luY2hyb25vdXMsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ2ZhcXMnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gXEBGQVFEYXRhLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnMrKzsKCiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJFcnJvciBpbXBvcnRpbmcgRkFRczogIiAuICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoICI8cmVkPkVycm9yIGltcG9ydGluZyBGQVFzOiAiIC4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gLiAiPC9yZWQ+XG4iICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkRXJyb3JzKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdGQVEgdHJhbnNmZXIgY29tcGxldGUuICcgLiAkRXJyb3JzIC4gJyBlcnJvcihzKSBvY2N1cnJlZCEnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRDb25zb2xlKSB7CiAgICAgICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoIjx5ZWxsb3c+RkFRIHRyYW5zZmVyIGNvbXBsZXRlLiAkRXJyb3JzIGVycm9yKHMpIG9jY3VycmVkITwveWVsbG93PlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCI8Z3JlZW4+RkFRIHRyYW5zZmVyIGNvbXBsZXRlLiBJbXBvcnRlZCAkQ291bnQgRkFRIGl0ZW1zLjwvZ3JlZW4+XG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgTWlncmF0ZUZBUXNBc3luYyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgbGV0IHRoZSByZXF1ZXN0ZXIga25vdyBpdCBpcyBydW4gaW4gYW4gYXN5bmNocm9ub3VzIGNvbnRleHQKICAgICRQYXJhbXtBc3luY2hyb25vdXN9ID0gMTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgIE1lc3NhZ2UgID0+ICJPdG9ib0FJOjpJbXBvcnQ6Ok1pZ3JhdGVGQVFzQXN5bmMgY2FsbCBpbml0aWF0ZWQuIiwKICAgICk7CgogICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+QXN5bmNDYWxsKAogICAgICAgIE9iamVjdE5hbWUgICAgICAgICAgICAgICA9PiAnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCcsCiAgICAgICAgRnVuY3Rpb25OYW1lICAgICAgICAgICAgID0+ICdNaWdyYXRlRkFRcycsCiAgICAgICAgRnVuY3Rpb25QYXJhbXMgICAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgQXR0ZW1wdHMgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgTWF4aW11bVBhcmFsbGVsSW5zdGFuY2VzID0+IDAsCiAgICApOwoKICAgIGlmICggISRTdWNjZXNzICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkluaXRpYWxpemUgYXN5bmMgY2FsbCBmYWlsZWQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIE1pZ3JhdGVEb2NzKCkKClN5bmNocm9uaXplIHRoZSBPVE9CTy1BSSB2ZWN0b3IgREIgd2l0aCBvbmUgb3IgbW9yZSBkb2N1bWVudHMgZm9yIG9uZSBvciBtb3JlIHVzZS1jYXNlcy4KCnJldHVybnMgMSBpZiBzdWNjZXNzZnVsIG9yIHVuZGVmIG90aGVyd2lzZQoKICAgIG15ICRTdWNjZXNzID0gJE9iamVjdC0+TWlncmF0ZURvY3MoCiAgICAgICAgVXNlQ2FzZXMgPT4gWyAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsLCBjb25zaWRlciBvbmx5IHRoZXNlIHVzZS1jYXNlcyBmb3IgbWlncmF0aW9uCiAgICAgICAgICAgICdkZWZhdWx0JywKICAgICAgICAgICAgJ3NhbGVzJywKICAgICAgICBdLAogICAgICAgIEFzeW5jaHJvbm91cyA9PiAwLCAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCwgZG8gbm90IG1hbnVhbGx5IHNldCB0aGlzLCB1bmxlc3MgeW91IGFyZSBleHBsaWNpdGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJ1bm5pbmcgdGhlIFJlcXVlc3RlciBpbiBhbiBhc3luY2hyb25vdXMgY29udGV4dCAoZGVmYXVsdDogMCkKICAgICAgICBDb25zb2xlICAgICAgPT4gJENvbnNvbGVPYmplY3QsICAgICMgb3B0aW9uYWwsIGdpdmUgcmVhbHRpbWUgc3RhdHVzIHVwZGF0ZXMgb24gdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIChhc3N1bWVzIHByaW50IHRvIFNURE9VVCkKICAgICk7Cgo9Y3V0CgpzdWIgTWlncmF0ZURvY3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgJFNlbGYtPkluaXRJbXBvcnQoKSA9PSAwOwoKICAgIG15ICRVc2VDYXNlcyAgICAgPSAkUGFyYW17VXNlQ2FzZXN9OwogICAgbXkgJEFzeW5jaHJvbm91cyA9ICRQYXJhbXtBc3luY2hyb25vdXN9OwogICAgbXkgJEJhdGNoU2l6ZSAgICA9ICRQYXJhbXtCYXRjaFNpemV9OwogICAgbXkgJENvbnNvbGUgICAgICA9ICRQYXJhbXtDb25zb2xlfSAmJiAkUGFyYW17Q29uc29sZX0tPmNhbignUHJpbnQnKSA/ICRQYXJhbXtDb25zb2xlfSA6IHVuZGVmOwoKICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICRDb25zb2xlLT5QcmludCgiPGdyZWVuPkluZ2VzdGluZyBEb2N1bWVudHMgLi4uPC9ncmVlbj5cbiIpOwogICAgfQoKICAgICMgcHJlcGFyZSB0aGUgaW1wb3J0CiAgICBteSAkUmVxdWVzdGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInKTsKCiAgICAjIGRldGVybWluZSBzZWFyY2ggcmVzdHJpY3Rpb25zIGZvciBkb2N1bWVudCBzZWFyY2gKICAgIG15ICRTZWFyY2hSZXN0cmljdGlvbnNIYXNoID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpEb2N1bWVudDo6U2VhcmNoUmVzdHJpY3Rpb25zJykgLy8ge307CgogICAgU0VBUkNIUkVTVFJJQ1RJT046CiAgICBmb3IgbXkgJFNlYXJjaFJlc3RyaWN0aW9uc0tleSAoIGtleXMgJFNlYXJjaFJlc3RyaWN0aW9uc0hhc2gtPiUqICkKICAgIHsKICAgICAgICBteSAkU2VhcmNoUmVzdHJpY3Rpb25zID0gZGNsb25lKCAkU2VhcmNoUmVzdHJpY3Rpb25zSGFzaC0+eyRTZWFyY2hSZXN0cmljdGlvbnNLZXl9ICk7CiAgICAgICAgbXkgQFVzZUNhc2VMYWJlbHMgICAgICA9ICggZGVsZXRlICRTZWFyY2hSZXN0cmljdGlvbnMtPntMYWJlbH0gKS0+QCo7CgogICAgICAgIG15ICRJbmNsdWRlVXNlQ2FzZSA9IDA7CiAgICAgICAgaWYgKCAkVXNlQ2FzZXMgJiYgc2NhbGFyICRVc2VDYXNlcy0+QCogKSB7CgogICAgICAgICAgICAkSW5jbHVkZVVzZUNhc2UgPSBncmVwIHsgJF8gZXEgJFNlYXJjaFJlc3RyaWN0aW9uc0tleSB9ICRVc2VDYXNlcy0+QCo7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkSW5jbHVkZVVzZUNhc2UgPSAxOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBTRUFSQ0hSRVNUUklDVElPTiBpZiAkSW5jbHVkZVVzZUNhc2UgPT0gMDsKCiAgICAgICAgaWYgKCRDb25zb2xlKSB7CiAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgiPHllbGxvdz5Vc2UgQ2FzZTogJFNlYXJjaFJlc3RyaWN0aW9uc0tleTwveWVsbG93PlxuIik7CiAgICAgICAgfQoKICAgICAgICBteSAkRG9jdW1lbnRQYXRocyA9ICRTZWxmLT5fRG9jdW1lbnRTZWFyY2goCiAgICAgICAgICAgICUkU2VhcmNoUmVzdHJpY3Rpb25zLAogICAgICAgICAgICBDb25zb2xlID0+ICRDb25zb2xlLAogICAgICAgICk7CgogICAgICAgIG15IEBDb250ZW50OwogICAgICAgIG15ICRDb3VudCAgPSAwOwogICAgICAgIG15ICRFcnJvcnMgPSAwOwogICAgICAgIG15ICRCYXRjaCAgPSAxOwoKICAgICAgICBET0NVTUVOVDoKICAgICAgICBmb3IgbXkgJERvY3VtZW50UGF0aCAoQCREb2N1bWVudFBhdGhzKSB7CgogICAgICAgICAgICAkQ291bnQrKzsKCiAgICAgICAgICAgICMgc2x1cnAgY29udGVudCBvZiBmaWxlCiAgICAgICAgICAgIG15ICRGaWxlQ29udGVudCA9IGZpbGUoJERvY3VtZW50UGF0aCktPnNsdXJwKCBpb21vZGUgPT4gJzw6ZW5jb2RpbmcoVVRGLTgpJyApIC8vICcnOwoKICAgICAgICAgICAgbXkgJERhdGEgPSB7CiAgICAgICAgICAgICAgICAic291cmNlX2lkIiAgICAgPT4gIiREb2N1bWVudFBhdGgiLAogICAgICAgICAgICAgICAgImNvbnRlbnRfaXRlbXMiID0+IFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT4gJ3RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0+ICRGaWxlQ29udGVudCwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH07CgogICAgICAgICAgICAkRGF0YS0+e2xhYmVsc30gPSBcQFVzZUNhc2VMYWJlbHM7CgogICAgICAgICAgICBwdXNoIEBDb250ZW50LCAkRGF0YTsKCiAgICAgICAgICAgICMgaW5nZXN0IGluIGJhdGNoZXMgb2YgMTAKICAgICAgICAgICAgaWYgKCAkQ291bnQgPj0gKCAkQmF0Y2hTaXplICogJEJhdGNoICkgKSB7CgogICAgICAgICAgICAgICAgJEJhdGNoID0gJEJhdGNoICsgMTsKCiAgICAgICAgICAgICAgICAjIGluZ2VzdAogICAgICAgICAgICAgICAgbXkgJFJlc3VsdCA9ICRSZXF1ZXN0ZXJPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIEludm9rZXIgICAgICA9PiAnSW5nZXN0TWFueScsCiAgICAgICAgICAgICAgICAgICAgQXN5bmNocm9ub3VzID0+ICRBc3luY2hyb25vdXMsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnZG9jcycsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gXEBDb250ZW50LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGlmICggISRSZXN1bHQtPntTdWNjZXNzfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JzKys7CgogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiRXJyb3IgaW1wb3J0aW5nIERvY3VtZW50ICckRG9jdW1lbnRQYXRoJzogIiAuICRSZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkQ29uc29sZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ29uc29sZS0+UHJpbnQoICI8cmVkPkVycm9yIGltcG9ydGluZyBEb2N1bWVudCAnJERvY3VtZW50UGF0aCc6ICIgLiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSAuICI8L3JlZD5cbiIgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgQENvbnRlbnQgPSAoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBpbmdlc3QgbGVmdG92ZXJzCiAgICAgICAgaWYgKEBDb250ZW50KSB7CgogICAgICAgICAgICBteSAkUmVzdWx0ID0gJFJlcXVlc3Rlck9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgV2Vic2VydmljZUlEID0+ICRTZWxmLT57V2Vic2VydmljZUlEfSwKICAgICAgICAgICAgICAgIEludm9rZXIgICAgICA9PiAnSW5nZXN0TWFueScsCiAgICAgICAgICAgICAgICBBc3luY2hyb25vdXMgPT4gJEFzeW5jaHJvbm91cywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnZG9jcycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiBcQENvbnRlbnQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFJlc3VsdC0+e1N1Y2Nlc3N9ICkgewogICAgICAgICAgICAgICAgJEVycm9ycysrOwoKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0Vycm9yIGltcG9ydGluZyBEb2N1bWVudHM6ICcgLiAkUmVzdWx0LT57RXJyb3JNZXNzYWdlfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCRDb25zb2xlKSB7CiAgICAgICAgICAgICAgICAgICAgJENvbnNvbGUtPlByaW50KCAiPHJlZD5FcnJvciBpbXBvcnRpbmcgRG9jdW1lbnRzOiAiIC4gJFJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gLiAiPC9yZWQ+XG4iICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkRXJyb3JzKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdEb2N1bWVudCB0cmFuc2ZlciBjb21wbGV0ZS4gJyAuICRFcnJvcnMgLiAnIGVycm9yKHMpIG9jY3VycmVkIScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgiPHllbGxvdz5Eb2N1bWVudCB0cmFuc2ZlciBjb21wbGV0ZS4gJEVycm9ycyBlcnJvcihzKSBvY2N1cnJlZCE8L3llbGxvdz5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoJENvbnNvbGUpIHsKICAgICAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgiPGdyZWVuPkRvY3VtZW50IHRyYW5zZmVyIGNvbXBsZXRlLiBUcmFuc2ZlcnJlZCAkQ291bnQgRG9jdW1lbnQgaXRlbXMuPC9ncmVlbj5cbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7Cn0KCnN1YiBNaWdyYXRlRG9jc0FzeW5jIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBsZXQgdGhlIHJlcXVlc3RlciBrbm93IGl0IGlzIHJ1biBpbiBhbiBhc3luY2hyb25vdXMgY29udGV4dAogICAgJFBhcmFte0FzeW5jaHJvbm91c30gPSAxOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgTWVzc2FnZSAgPT4gIk90b2JvQUk6OkltcG9ydDo6TWlncmF0ZURvY3NBc3luYyBjYWxsIGluaXRpYXRlZC4iLAogICAgKTsKCiAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5Bc3luY0NhbGwoCiAgICAgICAgT2JqZWN0TmFtZSAgICAgICAgICAgICAgID0+ICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSTo6SW1wb3J0JywKICAgICAgICBGdW5jdGlvbk5hbWUgICAgICAgICAgICAgPT4gJ01pZ3JhdGVEb2NzJywKICAgICAgICBGdW5jdGlvblBhcmFtcyAgICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICBBdHRlbXB0cyAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBNYXhpbXVtUGFyYWxsZWxJbnN0YW5jZXMgPT4gMCwKICAgICk7CgogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiSW5pdGlhbGl6ZSBhc3luYyBjYWxsIGZhaWxlZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgUHVyZ2VUaWNrZXRzKCkKClB1cmdlcyB0aGUgT1RPQk8tQUkgdmVjdG9yIERCIG9mIG9uZSBvciBtb3JlIFRpY2tldHMuCgpyZXR1cm5zIDEgaWYgYXQgbGVhc3Qgb25lIGVudHJ5IGhhcyBiZWVuIHB1cmdlZAoKICAgIG15ICRTdWNjZXNzID0gJE9iamVjdC0+UHVyZ2VUaWNrZXRzKAogICAgICAgIFRpY2tldElEID0+IDEyMywgICAgIyBvcHRpb25hbCwgcHVyZ2Ugb25seSB0aGlzIHRpY2tldAogICAgKTsKCj1jdXQKCnN1YiBQdXJnZVRpY2tldHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+SW5pdEltcG9ydCgpOwoKICAgIG15ICRSZXN1bHRQYWlycyA9ICRTZWxmLT5fUHVyZ2UoCiAgICAgICAgQ29sbGVjdGlvbiA9PiAndGlja2V0X3BhaXJzJywKICAgICAgICBTb3VyY2VJRCAgID0+ICRQYXJhbXtUaWNrZXRJRH0KICAgICk7CiAgICBteSAkUmVzdWx0Q2h1bmtzID0gJFNlbGYtPl9QdXJnZSgKICAgICAgICBDb2xsZWN0aW9uID0+ICd0aWNrZXRfY2h1bmtzJywKICAgICAgICBTb3VyY2VJRCAgID0+ICRQYXJhbXtUaWNrZXRJRH0KICAgICk7CgogICAgcmV0dXJuICRSZXN1bHRQYWlycyB8fCAkUmVzdWx0Q2h1bmtzOwp9Cgo9aGVhZDIgUHVyZ2VGQVFzKCkKClB1cmdlcyB0aGUgT1RPQk8tQUkgdmVjdG9yIERCIG9mIG9uZSBvciBtb3JlIEZBUSBpdGVtcy4KCnJldHVybnMgMSBpZiBhdCBsZWFzdCBvbmUgZW50cnkgaGFzIGJlZW4gcHVyZ2VkCgogICAgbXkgJFN1Y2Nlc3MgPSAkT2JqZWN0LT5QdXJnZUZBUXMoCiAgICAgICAgRkFRSUQgPT4gMTIzLCAgICAjIG9wdGlvbmFsLCBwdXJnZSBvbmx5IHRoaXMgRkFRIGl0ZW0KICAgICk7Cgo9Y3V0CgpzdWIgUHVyZ2VGQVFzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkluaXRJbXBvcnQoKTsKCiAgICByZXR1cm4gJFNlbGYtPl9QdXJnZSgKICAgICAgICBDb2xsZWN0aW9uID0+ICdmYXFzJywKICAgICAgICBTb3VyY2VJRCAgID0+ICRQYXJhbXtGQVFJRH0sCiAgICApOwp9Cgo9aGVhZDIgUHVyZ2VEb2NzKCkKClB1cmdlcyB0aGUgT1RPQk8tQUkgdmVjdG9yIERCIG9mIGFsbCBEb2N1bWVudCBpdGVtcy4KCnJldHVybnMgMSBpZiBhdCBsZWFzdCBvbmUgZW50cnkgaGFzIGJlZW4gcHVyZ2VkCgogICAgbXkgJFN1Y2Nlc3MgPSAkT2JqZWN0LT5QdXJnZURvY3MoKTsKCj1jdXQKCnN1YiBQdXJnZURvY3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+SW5pdEltcG9ydCgpOwoKICAgIHJldHVybiAkU2VsZi0+X1B1cmdlKCBDb2xsZWN0aW9uID0+ICdkb2NzJyApOwp9CgpzdWIgX1B1cmdlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJlcXVlc3Rlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6UmVxdWVzdGVyJyk7CgogICAgbXkgJFJlc3VsdDsKCiAgICBpZiAoICRQYXJhbXtTb3VyY2VJRH0gKSB7CgogICAgICAgICRSZXN1bHQgPSAkUmVxdWVzdGVyT2JqZWN0LT5SdW4oCiAgICAgICAgICAgIFdlYnNlcnZpY2VJRCA9PiAkU2VsZi0+e1dlYnNlcnZpY2VJRH0sCiAgICAgICAgICAgIEludm9rZXIgICAgICA9PiAnRGVsZXRlQnlJRCcsCiAgICAgICAgICAgIEFzeW5jaHJvbm91cyA9PiAwLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgdHlwZSAgICAgICA9PiAkUGFyYW17Q29sbGVjdGlvbn0sCiAgICAgICAgICAgICAgICBzb3VyY2VfaWRzID0+IFsiJFBhcmFte1NvdXJjZUlEfSJdLAogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAkUmVzdWx0ID0gJFJlcXVlc3Rlck9iamVjdC0+UnVuKAogICAgICAgICAgICBXZWJzZXJ2aWNlSUQgPT4gJFNlbGYtPntXZWJzZXJ2aWNlSUR9LAogICAgICAgICAgICBJbnZva2VyICAgICAgPT4gJ1B1cmdlJywKICAgICAgICAgICAgQXN5bmNocm9ub3VzID0+IDAsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBDb2xsZWN0aW9uID0+ICRQYXJhbXtDb2xsZWN0aW9ufQogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gSXNIYXNoUmVmV2l0aERhdGEoJFJlc3VsdCkgICAgICAgICYmCiAgICAgICAgJFJlc3VsdC0+e1N1Y2Nlc3N9ICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgSXNIYXNoUmVmV2l0aERhdGEoICRSZXN1bHQtPntEYXRhfSApICYmCiAgICAgICAgJFJlc3VsdC0+e0RhdGF9e3N1Y2Nlc3N9Owp9CgpzdWIgX0RvY3VtZW50U2VhcmNoIHsKCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICREb2N1bWVudFJvb3QgID0gJFBhcmFte0RvY3VtZW50UGF0aH07CiAgICBteSAkTmV3ZXJUaGFuRGF5cyA9ICRQYXJhbXtOZXdlclRoYW5EYXlzfTsKICAgIG15ICRDb25zb2xlICAgICAgID0gJFBhcmFte0NvbnNvbGV9OwoKICAgIGlmICggIS1kICREb2N1bWVudFJvb3QgKSB7CiAgICAgICAgaWYgKCRDb25zb2xlKSB7CiAgICAgICAgICAgICRDb25zb2xlLT5QcmludCgiPHllbGxvdz5Ta2lwcGluZyBEb2N1bWVudHMgKERvY3VtZW50IGZvbGRlciAnJERvY3VtZW50Um9vdCcgZG9lcyBub3QgZXhpc3QpLi4uPC95ZWxsb3c+XG4iKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRTZWNvbmRzUGVyRGF5ID0gNjAgKiA2MCAqIDI0OwoKICAgICMgZ2xvYiBmaWxlcyByZWN1cnNpdmVseSBzdGFydGluZyBpbiAkRG9jdW1lbnRSb290CiAgICBteSBARmlsZXM7CiAgICBmaW5kKAogICAgICAgIHsKICAgICAgICAgICAgd2FudGVkID0+IHN1YiB7CgogICAgICAgICAgICAgICAgIyBvbmx5IGhhbmRsZSBmaWxlcywgbm90IGRpcmVjdG9yaWVzCiAgICAgICAgICAgICAgICBpZiAoICEtZCAkXyApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCROZXdlclRoYW5EYXlzKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGxhc3Qgd3JpdGUgdGltZSBzdGFtcAogICAgICAgICAgICAgICAgICAgICAgICBteSAoJFdyaXRlVGltZSkgPSAoIHN0YXQoJF8pIClbOV07CgogICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxhc3Qgd3JpdGUgdGltZSBpcyBOZXdlclRoYW5EYXlzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKCB0aW1lKCkgLSAkV3JpdGVUaW1lICkgPCAoICROZXdlclRoYW5EYXlzICogJFNlY29uZHNQZXJEYXkgKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZCB0aGlzIGZpbGUgdG8gcmVzdWx0IHNldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARmlsZXMsICRfOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAjIGFkZCB0aGlzIGZpbGUgdG8gcmVzdWx0IHNldAogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBGaWxlcywgJF87CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBub19jaGRpciA9PiAxCiAgICAgICAgfSwKICAgICAgICAkRG9jdW1lbnRSb290CiAgICApOwoKICAgIHJldHVybiBcQEZpbGVzOwp9CgpzdWIgU3RyaXBTaWduYXR1cmUgewoKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEJvZHkgPSAkUGFyYW17Qm9keX07CgogICAgbXkgJFJlZ0V4ID0gJFNlbGYtPntTdHJpcFNpZ25hdHVyZVJlZ0V4fTsKICAgIHJldHVybiAkQm9keSBpZiAoICEkUmVnRXggKTsKCiAgICBpZiAoICRCb2R5ID1+IC8kUmVnRXgvICkgewoKICAgICAgICByZXR1cm4gc3Vic3RyKCAkQm9keSwgMCwgJC1bMF0gKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICByZXR1cm4gJEJvZHk7CiAgICB9Cn0KCjE7Cg==</File>
        <File Location="Kernel/System/DynamicField/Driver/TextAreaAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6VGV4dEFyZWFBSTsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OlBhcmFtT2JqZWN0KQoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSBuYW1lc3BhY2U6OmF1dG9jbGVhbjsKdXNlIHV0Zjg7Cgp1c2UgcGFyZW50IHF3KEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6VGV4dEFyZWEpOwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgICAgICAgICAgICAgIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKCk7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6RHJpdmVyOjpUZXh0QXJlYUFJIC0gZHJpdmVyIGZvciB0aGUgVGV4dEFyZWFBSSBkeW5hbWljIGZpZWxkCgo9aGVhZDEgREVTQ1JJUFRJT04KCkR5bmFtaWNGaWVsZHMgVGV4dEFyZWFBSSBEcml2ZXIgZGVsZWdhdGUKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgpUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBwdWJsaWMgaW50ZXJmYWNlIG9mIEw8S2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZD4uClBsZWFzZSBsb29rIHRoZXJlIGZvciBhIGRldGFpbGVkIHJlZmVyZW5jZSBvZiB0aGUgZnVuY3Rpb25zLgoKPWhlYWQyIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCRUeXBlKSA9IEBfOwoKICAgICMgQ2FsbCBjb25zdHJ1Y3RvciBvZiB0aGUgYmFzZSBjbGFzcy4KICAgIG15ICRTZWxmID0gJFR5cGUtPlNVUEVSOjpuZXc7CgogICAgIyBTZXR0aW5ncyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgVGV4dEFyZWFBSSBkeW5hbWljIGZpZWxkCiAgICAkU2VsZi0+e0JlaGF2aW9yc317SXNDdXN0b21lckludGVyZmFjZUNhcGFibGV9ID0gMDsKICAgICRTZWxmLT57QmVoYXZpb3JzfXtJc1NldENhcGFibGV9ICAgICAgICAgICAgICAgPSAwOwogICAgJFNlbGYtPntCZWhhdmlvcnN9e0lzU3RhdHNDb25kaXRpb259ICAgICAgICAgICA9IDA7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgVmFsdWVTZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBpZiAoICEkUGFyYW17RG9Xcml0ZX0gKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcmV0dXJuICRTZWxmLT5TVVBFUjo6VmFsdWVTZXQoJVBhcmFtKTsKfQoKc3ViIEVkaXRGaWVsZFZhbHVlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB0aGlzIGZpZWxkIGlzIGludGVuZGVkIHRvIGJlIHJlYWRvbmx5IGFuZCB0aGVyZWZvciBtdXN0IG5ldmVyIGhhdmUgYW4gRWRpdEZpZWxkVmFsdWUKICAgIHJldHVybjsKfQoKc3ViIEVkaXRGaWVsZFJlbmRlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGFrZSBjb25maWcgZnJvbSBmaWVsZCBjb25maWcKICAgIG15ICRGaWVsZENvbmZpZyA9ICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9e0NvbmZpZ307CiAgICBteSAkRmllbGROYW1lICAgPSAnRHluYW1pY0ZpZWxkXycgLiAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfXtOYW1lfTsKICAgIG15ICRGaWVsZExhYmVsICA9ICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9e0xhYmVsfTsKCiAgICBteSAkVmFsdWUgPSAnJzsKCiAgICAjIHNldCB0aGUgZmllbGQgdmFsdWUgb3IgZGVmYXVsdAogICAgaWYgKCAkUGFyYW17VXNlRGVmYXVsdFZhbHVlfSApIHsKICAgICAgICAkVmFsdWUgPSAkRmllbGRDb25maWctPntEZWZhdWx0VmFsdWV9IC8vICcnOwogICAgfQogICAgJFZhbHVlID0gJFBhcmFte1ZhbHVlfSAvLyAkVmFsdWU7CgogICAgIyBleHRyYWN0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZyb20gdGhlIHdlYiByZXF1ZXN0CiAgICBteSAkRmllbGRWYWx1ZSA9ICRTZWxmLT5FZGl0RmllbGRWYWx1ZUdldCgKICAgICAgICAlUGFyYW0sCiAgICApOwoKICAgIGlmICggZGVmaW5lZCAkRmllbGRWYWx1ZSApIHsKICAgICAgICAkVmFsdWUgPSAkRmllbGRWYWx1ZTsKICAgIH0KCiAgICBpZiAoICFyZWYgJFZhbHVlICkgewogICAgICAgICRWYWx1ZSA9IFskVmFsdWVdOwogICAgfQogICAgZWxzaWYgKCAhJFZhbHVlLT5AKiApIHsKICAgICAgICAkVmFsdWUgPSBbdW5kZWZdOwogICAgfQoKICAgICMgc2V0IHRoZSByb3dzIG51bWJlcgogICAgbXkgJFJvd3NOdW1iZXIgPSBkZWZpbmVkICRGaWVsZENvbmZpZy0+e1Jvd3N9ICYmICRGaWVsZENvbmZpZy0+e1Jvd3N9ID8gJEZpZWxkQ29uZmlnLT57Um93c30gOiAnNyc7CgogICAgIyBzZXQgdGhlIGNvbHMgbnVtYmVyCiAgICBteSAkQ29sc051bWJlciA9IGRlZmluZWQgJEZpZWxkQ29uZmlnLT57Q29sc30gJiYgJEZpZWxkQ29uZmlnLT57Q29sc30gPyAkRmllbGRDb25maWctPntDb2xzfSA6ICc0Mic7CgogICAgIyBjaGVjayBhbmQgc2V0IGNsYXNzIGlmIG5lY2Vzc2FyeQogICAgbXkgJEZpZWxkQ2xhc3MgPSAnRHluYW1pY0ZpZWxkVGV4dEFyZWEnOwogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtDbGFzc30gJiYgJFBhcmFte0NsYXNzfSBuZSAnJyApIHsKICAgICAgICAkRmllbGRDbGFzcyAuPSAnICcgLiAkUGFyYW17Q2xhc3N9OwogICAgfQoKICAgICMgc2V0IGNsYXNzZXMgYWNjb3JkaW5nIHRvIG1hbmRhdG9yeSBhbmQgYWNsIGhpZGRlbiBwYXJhbXMKICAgIGlmICggJFBhcmFte0FDTEhpZGRlbn0gJiYgJFBhcmFte01hbmRhdG9yeX0gKSB7CiAgICAgICAgJEZpZWxkQ2xhc3MgLj0gJyBWYWxpZGF0ZV9SZXF1aXJlZF9JZlZpc2libGUnOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TWFuZGF0b3J5fSApIHsKICAgICAgICAkRmllbGRDbGFzcyAuPSAnIFZhbGlkYXRlX1JlcXVpcmVkJzsKICAgIH0KCiAgICAjIHNldCBlcnJvciBjc3MgY2xhc3MKICAgIGlmICggJFBhcmFte1NlcnZlckVycm9yfSApIHsKICAgICAgICAkRmllbGRDbGFzcyAuPSAnIFNlcnZlckVycm9yJzsKICAgIH0KCiAgICAjIHNldCB2YWxpZGF0aW9uIGNsYXNzIGZvciBtYXhpbXVtIGNoYXJhY3RlcnMKICAgICRGaWVsZENsYXNzIC49ICcgVmFsaWRhdGVfTWF4TGVuZ3RoJzsKCiAgICBteSAkRmllbGRMYWJlbEVzY2FwZWQgPSAkUGFyYW17TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICBUZXh0ID0+ICRQYXJhbXtMYXlvdXRPYmplY3R9e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCRGaWVsZExhYmVsKSwKICAgICk7CgogICAgIyBjcmVhdGUgZmllbGQgSFRNTAogICAgIyB0aGUgWEhUTUwgZGVmaW5pdGlvbiBkb2VzIG5vdCBzdXBwb3J0IG1heGxlbmd0aCBhdHRyaWJ1dGUgZm9yIGEgdGV4dC1hcmVhIGZpZWxkLAogICAgIyB3ZSB1c2UgZGF0YS1tYXhsZW5ndGggaW5zdGVhZAogICAgIyBOb3RpY2UgdGhhdCBzb21lIGJyb3dzZXJzIGNvdW50IG5ldyBsaW5lcyBcblxyIGFzIG9ubHkgMSBjaGFyYWN0ZXIuIEluIHRoZXNlIGNhc2VzIHRoZQogICAgIyB2YWxpZGF0aW9uIGZyYW1ld29yayBtaWdodCBnZW5lcmF0ZSBhbiBlcnJvciB3aGlsZSB0aGUgdXNlciBpcyBzdGlsbCBjYXBhYmxlIHRvIGVudGVyIHRleHQgaW4gdGhlCiAgICAjIHRleHQtYXJlYS4gT3RoZXJ3aXNlIHRoZSBtYXhsZW5ndGggcHJvcGVydHkgd2lsbCBwcmV2ZW50IHRvIGVudGVyIG1vcmUgdGV4dCB0aGFuIHRoZSBtYXhpbXVtLgogICAgbXkgJE1heExlbmd0aCA9ICRQYXJhbXtNYXhMZW5ndGh9IC8vICRTZWxmLT57TWF4TGVuZ3RofTsKCiAgICBteSAkRXJyb3JNZXNzYWdlMSA9ICRQYXJhbXtMYXlvdXRPYmplY3R9e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIG9yIik7CiAgICBteSAkRXJyb3JNZXNzYWdlMiA9ICRQYXJhbXtMYXlvdXRPYmplY3R9e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCJUaGUgZmllbGQgY29udGVudCBpcyB0b28gbG9uZyEiKTsKICAgIG15ICRFcnJvck1lc3NhZ2UzID0gJFBhcmFte0xheW91dE9iamVjdH17TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICJNYXhpbXVtIHNpemUgaXMgJXMgY2hhcmFjdGVycy4iLCAkTWF4TGVuZ3RoICk7CgogICAgbXkgJUZpZWxkVGVtcGxhdGVEYXRhID0gKAogICAgICAgIEZpZWxkQ2xhc3MgICAgICAgID0+ICRGaWVsZENsYXNzLAogICAgICAgIEZpZWxkTmFtZSAgICAgICAgID0+ICRGaWVsZE5hbWUsCiAgICAgICAgRmllbGRMYWJlbEVzY2FwZWQgPT4gJEZpZWxkTGFiZWxFc2NhcGVkLAogICAgICAgIFJlYWRvbmx5ICAgICAgICAgID0+ICRQYXJhbXtSZWFkb25seX0sCiAgICAgICAgUm93c051bWJlciAgICAgICAgPT4gJFJvd3NOdW1iZXIsCiAgICAgICAgQ29sc051bWJlciAgICAgICAgPT4gJENvbHNOdW1iZXIsCiAgICAgICAgTWF4TGVuZ3RoICAgICAgICAgPT4gJE1heExlbmd0aCwKICAgICAgICBFcnJvck1lc3NhZ2UxICAgICA9PiAkRXJyb3JNZXNzYWdlMSwKICAgICAgICBFcnJvck1lc3NhZ2UyICAgICA9PiAkRXJyb3JNZXNzYWdlMiwKICAgICAgICBFcnJvck1lc3NhZ2UzICAgICA9PiAkRXJyb3JNZXNzYWdlMywKICAgICAgICBEaXZJRCAgICAgICAgICAgICA9PiAkRmllbGROYW1lIC4gJ0Vycm9yJywKICAgICk7CgogICAgbXkgJEZpZWxkVGVtcGxhdGVGaWxlID0gJ0R5bmFtaWNGaWVsZC9BZ2VudC9UZXh0QXJlYSc7CgogICAgbXkgJUVycm9yID0gKAogICAgICAgIFNlcnZlckVycm9yID0+ICRQYXJhbXtTZXJ2ZXJFcnJvcn0sCiAgICAgICAgTWFuZGF0b3J5ICAgPT4gJFBhcmFte01hbmRhdG9yeX0sCiAgICApOwogICAgbXkgQFJlc3VsdEhUTUw7CiAgICBmb3IgbXkgJFZhbHVlSW5kZXggKCAwIC4uICQjeyRWYWx1ZX0gKSB7CiAgICAgICAgJEZpZWxkVGVtcGxhdGVEYXRhe0ZpZWxkSUR9ICAgICAgPSAkRmllbGRDb25maWctPntNdWx0aVZhbHVlfSA/ICRGaWVsZE5hbWUgLiAnXycgLiAkVmFsdWVJbmRleCA6ICRGaWVsZE5hbWU7CiAgICAgICAgJEZpZWxkVGVtcGxhdGVEYXRhe1ZhbHVlRXNjYXBlZH0gPSAkUGFyYW17TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCA9PiAkVmFsdWUtPlskVmFsdWVJbmRleF0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFZhbHVlSW5kZXggKSB7CiAgICAgICAgICAgIGlmICggJEVycm9ye1NlcnZlckVycm9yfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcntEaXZJRFNlcnZlckVycm9yfSA9ICRGaWVsZFRlbXBsYXRlRGF0YXtGaWVsZElEfSAuICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAkRXJyb3J7RXJyb3JNZXNzYWdlfSAgICAgPSBUcmFuc2xhdGFibGUoICRQYXJhbXtFcnJvck1lc3NhZ2V9IHx8ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRFcnJvcntNYW5kYXRvcnl9ICkgewogICAgICAgICAgICAgICAgJEVycm9ye0RpdklETWFuZGF0b3J5fSAgICAgICA9ICRGaWVsZFRlbXBsYXRlRGF0YXtGaWVsZElEfSAuICdFcnJvcic7CiAgICAgICAgICAgICAgICAkRXJyb3J7RmllbGRSZXF1aXJlZE1lc3NhZ2V9ID0gVHJhbnNsYXRhYmxlKCdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBSZXN1bHRIVE1MLCAkUGFyYW17TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJEZpZWxkVGVtcGxhdGVGaWxlLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgJUZpZWxkVGVtcGxhdGVEYXRhLAogICAgICAgICAgICAgICAgJUVycm9yLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBjYWxsIEVkaXRMYWJlbFJlbmRlciBvbiB0aGUgY29tbW9uIERyaXZlcgogICAgbXkgJExhYmVsU3RyaW5nID0gJFNlbGYtPkVkaXRMYWJlbFJlbmRlcigKICAgICAgICAlUGFyYW0sCiAgICAgICAgTWFuZGF0b3J5ID0+ICRQYXJhbXtNYW5kYXRvcnl9IHx8ICcwJywKICAgICAgICBGaWVsZE5hbWUgPT4gJEZpZWxkTmFtZSwKICAgICk7CgogICAgbXkgJERhdGEgPSB7CiAgICAgICAgTGFiZWwgPT4gJExhYmVsU3RyaW5nLAogICAgICAgIEZpZWxkID0+ICRSZXN1bHRIVE1MWzBdLAogICAgfTsKCiAgICByZXR1cm4gJERhdGE7Cn0KCnN1YiBHZXRGaWVsZFR5cGVTZXR0aW5ncyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAoKTsKfQoKMTsK</File>
        <File Location="Kernel/System/Console/Command/Maint/AI/Import.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6QUk6OkltcG9ydDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBwYXJlbnQgcXcoS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkJhc2VDb21tYW5kKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpPdG9ib0FJOjpJbXBvcnQnLAopOwoKc3ViIENvbmZpZ3VyZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5EZXNjcmlwdGlvbignSW1wb3J0IGV4aXN0aW5nIHRpY2tldHMgYW5kIGZhcSBhcnRpY2xlcyB0byB0aGUgQUkgdmVjdG9yIGRhdGFiYXNlLicpOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAndGFyZ2V0JywKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAiU3BlY2lmeSB3aGljaCBvYmplY3RzIHdpbGwgYmUgbWlncmF0ZWQuIHQ6IFRpY2tldHM7IGY6IEZBUSBhcnRpY2xlczsgZDogZG9jdW1lbnRzLiBJZiBub3Qgc3BlY2lmaWVkIGFsbCBzb3VyY2VzIHdpbGwgYmUgaGFuZGxlZC4iLAogICAgICAgIFJlcXVpcmVkICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCA9PiBxci9eW3RmZF0rJC9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAncmVpbXBvcnQnLAogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICJEbyBhIHJlLWltcG9ydCwgd2hpY2ggbWVhbnMgdGhlIEFJIHZlY3RvcnN0b3JlIGFuZCBmdWxsdGV4dCBwb3N0Z3JlcyBEQnMgd2lsbCBiZSBwdXJnZWQgZm9yIHRoZSB0YXJnZXQgY29sbGVjdGlvbnMuIiwKICAgICAgICBSZXF1aXJlZCA9PiAwLAogICAgICAgIEhhc1ZhbHVlID0+IDAsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAncHVyZ2UnLAogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICJwdXJnZSB0YXJnZXQgY29sbGVjdGlvbnMpLiIsCiAgICAgICAgUmVxdWlyZWQgPT4gMCwKICAgICAgICBIYXNWYWx1ZSA9PiAwLAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3NhbXBsZS1udGgnLAogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICJPbmx5IHJlbGV2YW50IHdpdGggLS1kby1zY29yaW5nLCBzcGVjaWZpZXMgdGhlIHNhbXBsZSBzaXplLiBUYWtlIGV2ZXJ5IG50aCBudW0gZm9yIHNhbXBsaW5nLiBTcGVjaWZ5aW5nIDEwIHdpbGwgdGFrZSBldmVyeSB0ZW50aCwgcmVzdWx0aW5nIGluIGEgMTAlIHNhbXBsZSBzaXplLiBTcGVjaWZ5IDUgdG8gdGFrZSBldmVyeSA1dGggd2hpY2ggd2lsbCBnaXZlIDIwJSBTYW1wZWxzaXplLiBTcGVjaWZ5IDIwIHRvIHRha2UgZXZlcnkgMjB0aCB3aGljaCB3aWxsIHlpZWxkIDUlIHNhbXBsZSBzaXplLiBUaGUgZGVmYXVsdCBpcyAxMC4iLAogICAgICAgIFJlcXVpcmVkICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCA9PiBxci9bMC05XSsvc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3NhbXBsZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgIlNwZWNpZnkgYSBmaWxlIHBhdGggdG8gd3JpdGUgYSBzYW1wbGUuanNvbiBmaWxlIGNvbnRhaW5pbmcgVGlja2V0SURzIHRvIHNhbXBsZS4gV2hlbiBzcGVjaWZpZWQsIHRoZW4gc2V2ZXJ5IHNhbXBsZS1udGggVGlja2V0IHdpbGwgbm90IGJlIGltcG9ydGVkLCBidXQgYWRkZWQgdG8gdGhlIGxpc3Qgb2Ygc2FtcGxlIGlkcy4gVGhlIGRlZmF1bHQgZm9yIHNhbXBsZS1udGggaXMgMTAgdG8gc2FtcGxlIGV2ZXJ5IDEwdGggVGlja2V0ICgxMCUgc2FtcGxlIHNpemUpLiBPdmVycmlkZSB3aXRoIHRoZSAtLXNhbXBsZS1udGggcGFyYW1ldGVyLiIsCiAgICAgICAgUmVxdWlyZWQgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ID0+IHFyLy4qL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdyZWZlcmVuY2UnLAogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICJTcGVjaWZ5IGEgZmlsZSBwYXRoIHRvIGFuIGV4aXN0aW5nIHNhbXBsZS5qc29uIGZpbGUgY29udGFpbmluZyBUaWNrZXRJRHMgdG8gcmVmZXJlbmNlLiBXaGVuIHNwZWNpZmllZCwgbm8gbmV3IHNhbXBsZSB3aWxsIGJlIGdlbmVyYXRlZCwgYnV0IGFsbCBUaWNrZXRJRHMgZnJvbSB0aGUgcmVmZXJlbmNlIHNhbXBsZSBmaWxlIHdpbGwgYmUgaG9sZCBiYWNrIGFnYWluIGZvciBzY29yaW5nLiIsCiAgICAgICAgUmVxdWlyZWQgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ID0+IHFyLy4qL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICd1c2UtY2FzZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgIlRoZSB1c2UtY2FzZSBuYW1lKHMpIHRvIGluZ2VzdCBkYXRhIGZvci4gSWYgbGVmdCBlbXB0eSwgYWxsIHVzZSBjYXNlcyB3aWxsIGJlIGluZ2VzdGVkLiIsCiAgICAgICAgUmVxdWlyZWQgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ID0+IHFyLy4qL3NteCwKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAnYmF0Y2gtc2l6ZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgIlRoZSBiYXRjaCBzaXplIGZvciBpbXBvcnRpbmcgZG9jdW1lbnRzLiBEZWZhdWx0cyB0byA1LiIsCiAgICAgICAgUmVxdWlyZWQgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ID0+IHFyL1swLTldKy9zbXgsCiAgICApOwoKICAgIHJldHVybjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTYW1wbGUgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdzYW1wbGUnKTsKICAgIG15ICRSZWZlcmVuY2UgPSAkU2VsZi0+R2V0T3B0aW9uKCdyZWZlcmVuY2UnKTsKICAgIG15ICRTYW1wbGVOdGggPSAkU2VsZi0+R2V0T3B0aW9uKCdzYW1wbGUtbnRoJykgfHwgMTA7CiAgICBteSAkUmVJbXBvcnQgID0gJFNlbGYtPkdldE9wdGlvbigncmVpbXBvcnQnKTsKICAgIG15ICRQdXJnZSAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdwdXJnZScpOwogICAgbXkgJFVzZUNhc2VzICA9ICRTZWxmLT5HZXRPcHRpb24oJ3VzZS1jYXNlJyk7CiAgICBteSAkQmF0Y2hTaXplID0gJFNlbGYtPkdldE9wdGlvbignYmF0Y2gtc2l6ZScpIHx8IDU7CgogICAgbXkgJFRhcmdldHMgPSAkU2VsZi0+R2V0T3B0aW9uKCd0YXJnZXQnKSB8fCAidGRmIjsKCiAgICBteSAkSW1wb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCcpOwoKICAgIGlmICggJFRhcmdldHMgPX4gL3QvICkgewoKICAgICAgICBpZiAoICRSZUltcG9ydCB8fCAkUHVyZ2UgKSB7CiAgICAgICAgICAgICRJbXBvcnRPYmplY3QtPlB1cmdlVGlja2V0cygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJFB1cmdlICkgewogICAgICAgICAgICAkSW1wb3J0T2JqZWN0LT5NaWdyYXRlVGlja2V0cygKICAgICAgICAgICAgICAgIFNhbXBsZSAgICA9PiAkU2FtcGxlLAogICAgICAgICAgICAgICAgU2FtcGxlTnRoID0+ICRTYW1wbGVOdGgsCiAgICAgICAgICAgICAgICBSZWZlcmVuY2UgPT4gJFJlZmVyZW5jZSwKICAgICAgICAgICAgICAgIFVzZUNhc2VzICA9PiAkVXNlQ2FzZXMsCiAgICAgICAgICAgICAgICBDb25zb2xlICAgPT4gJFNlbGYsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJFRhcmdldHMgPX4gL2YvICkgewoKICAgICAgICBpZiAoICRSZUltcG9ydCB8fCAkUHVyZ2UgKSB7CiAgICAgICAgICAgICRJbXBvcnRPYmplY3QtPlB1cmdlRkFRcygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJFB1cmdlICkgewogICAgICAgICAgICAkSW1wb3J0T2JqZWN0LT5NaWdyYXRlRkFRcygKICAgICAgICAgICAgICAgIFVzZUNhc2VzID0+ICRVc2VDYXNlcywKICAgICAgICAgICAgICAgIENvbnNvbGUgID0+ICRTZWxmLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRUYXJnZXRzID1+IC9kLyApIHsKCiAgICAgICAgaWYgKCAkUmVJbXBvcnQgfHwgJFB1cmdlICkgewogICAgICAgICAgICAkSW1wb3J0T2JqZWN0LT5QdXJnZURvY3MoKTsKICAgICAgICB9CgogICAgICAgIGlmICggISRQdXJnZSApIHsKICAgICAgICAgICAgJEltcG9ydE9iamVjdC0+TWlncmF0ZURvY3MoCiAgICAgICAgICAgICAgICBVc2VDYXNlcyAgPT4gJFVzZUNhc2VzLAogICAgICAgICAgICAgICAgQ29uc29sZSAgID0+ICRTZWxmLAogICAgICAgICAgICAgICAgQmF0Y2hTaXplID0+ICRCYXRjaFNpemUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkU2VsZi0+RXhpdENvZGVPaygpOwp9CgoxOwo=</File>
        <File Location="Kernel/System/Console/Command/Maint/AI/Scoring.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6QUk6OlNjb3Jpbmc7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgUGF0aDo6Q2xhc3MgcXcoZmlsZSk7CnVzZSBGaWxlOjpGaW5kICBxdyhmaW5kKTsKdXNlIExXUDo6VXNlckFnZW50Owp1c2UgRmlsZTo6QmFzZW5hbWUgICAgICAgIHF3KGJhc2VuYW1lIGRpcm5hbWUpOwp1c2UgSFRUUDo6UmVxdWVzdDo6Q29tbW9uIHF3eyBQT1NUIH07CnVzZSBKU09OOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHBhcmVudCBxdyhLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6QmFzZUNvbW1hbmQpOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6Rm9yZWFjaFRvRm9yKQoKIyBJbmZvcm0gdGhlIG9iamVjdCBtYW5hZ2VyIGFib3V0IHRoZSBoYXJkIGRlcGVuZGVuY2llcy4KIyBUaGlzIG1vZHVsZSBtdXN0IGJlIGRpc2NhcmRlZCB3aGVuIG9uZSBvZiB0aGUgaGFyZCBkZXBlbmRlbmNpZXMgaGFzIGJlZW4gZGlzY2FyZGVkLgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpSZXF1ZXN0ZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPntUaWNrZXRTYW1wbGV9ID0gW107CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdEbyBhIHF1YWxpdHkgZXZhbHVhdGlvbiBhbmQgd3JpdGUgdGhlIGNvcmluZyByZXN1bHQgaW50byBhIGZpbGUnKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3NhbXBsZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgIlNwZWNpZnkgd2ZpbGUgcGF0aCB0byBzYW1wbGUuanNvbiBmaWxlIHdpdGggdGhlIFRpY2tldElEcyB0byBzYW1wbGUuIFRoaXMgZmlsZSBjYW4gYmUgcHJvZHVjZWQgYnkgdGhlICdNYWludDo6QUk6OkltcG9ydCcgY29uc29sZSBjb21tYW5kIHVzaW5nIHRoZSAtLXNhbXBsZSBvcHRpb24uIiwKICAgICAgICBSZXF1aXJlZCAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggPT4gcXIvLiovc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3Jlc3VsdCcsCiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgIlNwZWNpZnkgdGhlIGZpbGUgcGF0aCBmb3IgdGhlIHNjb3Jpbmcgb3V0cHV0IHNob3VsZCBiZSB3cml0dGVuIHRvIGluIENTViAodGFiIHNlcGFyYXRlZCkgZm9ybWF0LiIsCiAgICAgICAgUmVxdWlyZWQgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ID0+IHFyLy4qL3NteCwKICAgICk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdqc29uJywKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAid2hlbiBzY29yaW5nLCByZXBvcnQgdmVyYm9zZWx5IGZvciBlYWNoIHRpY2tldCBwcm9jZXNzZWQgaW4gdGhlIHNwZWNpZmllZCBKU09OIGZpbGUuIiwKICAgICAgICBSZXF1aXJlZCAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggPT4gcXIvLiovc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2xpbWl0JywKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAid2hlbiBzY29yaW5nLCBtYXggbnVtYmVyIG9mIHRpY2tldCBpZHMgdG8gdGFrZSBmcm9tIHNhbXBsZS4iLAogICAgICAgIFJlcXVpcmVkID0+IDAsCiAgICAgICAgSGFzVmFsdWUgPT4gMSwKCiAgICAgICAgVmFsdWVSZWdleCA9PiBxci9eWzAtOV0rJC9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAndXNlLWNhc2UnLAogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICJVc2UgY2FzZSB0byB1c2UgZm9yIHNhbXBsaW5nLiBEZWZhdWx0cyB0byAnRGVmYXVsdCcuIiwKICAgICAgICBSZXF1aXJlZCAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggPT4gcXIvLiovc214LAogICAgKTsKCiAgICByZXR1cm47Cn0KCnN1YiBQcmVSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2FtcGxlID0gJFNlbGYtPkdldE9wdGlvbignc2FtcGxlJyk7CiAgICBpZiAoJFNhbXBsZSkgewoKICAgICAgICBpZiAoICEtZSAkU2FtcGxlICkgewogICAgICAgICAgICAkU2VsZi0+UHJpbnQoIjxyZWQ+c2FtcGxlIHBhcmFtZXRlciBuZWVkcyBhIHZhbGlkIHBhdGggdG8gYSBzYW1wbGUuanNvbiBmaWxlIGNvbnRhaW5pbmcgVGlja2V0SURzLjwvcmVkPlxuIik7CiAgICAgICAgICAgIGRpZTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayB3aGV0aGVyIHRoZSBBSSB3ZWIgc2VydmljZSBpcyBlbmFibGVkIGFuZCBpZiBub3QsIGFjdGl2YXRlIGl0CiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CgogICAgbXkgJEFJV2Vic2VydmljZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlR2V0KAogICAgICAgIE5hbWUgPT4gJ09UT0JPLUFJJywKICAgICk7CgogICAgaWYgKCAhJEFJV2Vic2VydmljZSApIHsKICAgICAgICAkU2VsZi0+UHJpbnQoIjxyZWQ+T1RPQk8tQUkgd2Vic2VydmljZSBub3QgZm91bmQhIFVuYWJsZSB0byBjb250aW51ZS48L3JlZD5cbiIpOwogICAgICAgIGRpZTsKICAgIH0KCiAgICAjIFNldCB0aGUgd2Vic2VydmljZSBpZAogICAgJFNlbGYtPntXZWJzZXJ2aWNlSUR9ID0gJEFJV2Vic2VydmljZS0+e0lEfTsKCiAgICBpZiAoICRBSVdlYnNlcnZpY2UtPntWYWxpZElEfSAhPSAxICkgewogICAgICAgICRTZWxmLT5QcmludCgiPHJlZD5PVE9CTy1BSSB3ZWJzZXJ2aWNlIG5vdCBhY3RpdmUhIFVuYWJsZSB0byBjb250aW51ZS48L3JlZD5cbiIpOwogICAgICAgIGRpZTsKICAgIH0KCiAgICBteSAkU2FtcGxlICAgICA9ICRTZWxmLT5HZXRPcHRpb24oJ3NhbXBsZScpOwogICAgbXkgJE91dHB1dCAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdyZXN1bHQnKSB8fCAxMDsKICAgIG15ICRKU09OT3V0cHV0ID0gJFNlbGYtPkdldE9wdGlvbignanNvbicpOwogICAgbXkgJExpbWl0ICAgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCdsaW1pdCcpOwogICAgbXkgJFVzZUNhc2UgICAgPSAkU2VsZi0+R2V0T3B0aW9uKCd1c2UtY2FzZScpIC8vICdEZWZhdWx0JzsKCiAgICBteSAkSlNPTiAgICAgICAgICAgID0gZmlsZSgkU2FtcGxlKS0+c2x1cnAoKTsKICAgIG15ICRTYW1wbGVUaWNrZXRJRHMgPSBkZWNvZGVfanNvbigkSlNPTik7CgogICAgJFNlbGYtPkRvU2NvcmluZygKICAgICAgICBTYW1wbGVUaWNrZXRJRHMgPT4gJFNhbXBsZVRpY2tldElEcywKICAgICAgICBPdXRwdXRGaWxlICAgICAgPT4gJE91dHB1dCwKICAgICAgICBKU09OT3V0cHV0ICAgICAgPT4gJEpTT05PdXRwdXQsCiAgICAgICAgTGltaXQgICAgICAgICAgID0+ICRMaW1pdCB8fCBzY2FsYXIgJFNhbXBsZVRpY2tldElEcy0+eyRVc2VDYXNlfS0+QCosCiAgICAgICAgVXNlQ2FzZSAgICAgICAgID0+ICRVc2VDYXNlLAogICAgKTsKCiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKfQoKc3ViIERvU2NvcmluZyB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkT3RvYm9BSU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpPdG9ib0FJJyk7CiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKCiAgICBteSAkT3V0cHV0Q1NWRmlsZUhhbmRsZTsKICAgIG15ICRTYW1wbGVUaWNrZXRJRHMgPSAkUGFyYW17U2FtcGxlVGlja2V0SURzfTsKICAgIG15ICRKU09OT3V0cHV0ICAgICAgPSAkUGFyYW17SlNPTk91dHB1dH07CiAgICBteSAkTGltaXQgICAgICAgICAgID0gJFBhcmFte0xpbWl0fTsKICAgIG15ICRVc2VDYXNlICAgICAgICAgPSAkUGFyYW17VXNlQ2FzZX07CgogICAgIyMgbm8gY3JpdGljKE9UT0JPOjpQcm9oaWJpdE9wZW4gSW5wdXRPdXRwdXQ6OlJlcXVpcmVCcmllZk9wZW4pCiAgICBvcGVuKCAkT3V0cHV0Q1NWRmlsZUhhbmRsZSwgJz4nLCAkUGFyYW17T3V0cHV0RmlsZX0gKSB8fCBkaWUoImZhaWxlZCB0byBvcGVuIGZpbGUgJyRQYXJhbXtPdXRwdXRGaWxlfSciKTsKCiAgICBteSAkSlNPTk91dHB1dEZpbGVIYW5kbGU7CiAgICBpZiAoJEpTT05PdXRwdXQpIHsKICAgICAgICBvcGVuKCAkSlNPTk91dHB1dEZpbGVIYW5kbGUsICc+JywgJFBhcmFte0pTT05PdXRwdXR9ICkgfHwgZGllKCJmYWlsZWQgdG8gb3BlbiBmaWxlICckUGFyYW17SlNPTk91dHB1dH0nIik7CiAgICB9CgogICAgbXkgJEZpcnN0bGluZSAgPSAxOwogICAgbXkgJE51bVNjb3JlcyAgPSAwOwogICAgbXkgJFNhbXBsZVNpemUgPSBzY2FsYXIgJFNhbXBsZVRpY2tldElEcy0+eyRVc2VDYXNlfS0+QCo7CgogICAgbXkgJFZlcmJvc2VKU09OID0gewogICAgICAgIERhdGEgPT4gW10sCiAgICB9OwoKICAgIGlmICgkSlNPTk91dHB1dCkgewogICAgICAgICRWZXJib3NlSlNPTi0+e1NhbXBsZVNpemV9ID0gJFNhbXBsZVNpemU7CiAgICB9CgogICAgbXkgJENvdW50ID0gMDsKICAgIFRJQ0tFVElEOgogICAgZm9yIG15ICRUaWNrZXRJRCAoICRTYW1wbGVUaWNrZXRJRHMtPnskVXNlQ2FzZX0tPkAqICkgewoKICAgICAgICBteSAkVmVyYm9zZUpTT05JdGVtID0ge307CgogICAgICAgIGxhc3QgVElDS0VUSUQgaWYgKCAkQ291bnQgPj0gJExpbWl0ICk7CiAgICAgICAgJENvdW50Kys7CgogICAgICAgIG15ICRBcnRpY2xlSUQ7CiAgICAgICAgbXkgQEFydGljbGVzID0gJEFydGljbGVPYmplY3QtPkFydGljbGVMaXN0KAogICAgICAgICAgICBUaWNrZXRJRCAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgU2VuZGVyVHlwZSA9PiAnY3VzdG9tZXInLAogICAgICAgICAgICBPbmx5Rmlyc3QgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBpZiAoQEFydGljbGVzKSB7CiAgICAgICAgICAgICRBcnRpY2xlSUQgPSAkQXJ0aWNsZXNbMF17QXJ0aWNsZUlEfTsKICAgICAgICB9CgogICAgICAgIGlmICgkQXJ0aWNsZUlEKSB7CgogICAgICAgICAgICAkU2VsZi0+UHJpbnQoIlRpY2tldElEOiAkVGlja2V0SURcbiIpOwoKICAgICAgICAgICAgaWYgKCRKU09OT3V0cHV0KSB7CgogICAgICAgICAgICAgICAgJFZlcmJvc2VKU09OSXRlbS0+e1RpY2tldElEfSA9ICRUaWNrZXRJRDsKCiAgICAgICAgICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFZlcmJvc2VKU09OSXRlbS0+e1F1ZXN0aW9ufSA9ICRBcnRpY2xle1N1YmplY3R9IC4gIlxyXG4iIC4gJEFydGljbGV7Qm9keX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRSZXN1bHQgPSAkT3RvYm9BSU9iamVjdC0+R2V0QW5zd2VyKAogICAgICAgICAgICAgICAgT2JqZWN0SUQgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICBQZXJzaXN0ICAgPT4gMCwKICAgICAgICAgICAgICAgIERvU2NvcmluZyA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkUmVzdWx0KSAmJiAkUmVzdWx0LT57U3VjY2Vzc30gPT0gMSApIHsKICAgICAgICAgICAgICAgIGlmICgkSlNPTk91dHB1dCkgewoKICAgICAgICAgICAgICAgICAgICAkVmVyYm9zZUpTT05JdGVtLT57QW5zd2VyfSA9ICRSZXN1bHQtPntEYXRhfS0+e0Fuc3dlcn07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJE51bVNjb3JlcysrOwogICAgICAgICAgICAgICAgbXkgQExpbmVJdGVtcyA9ICgKICAgICAgICAgICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICRTY29yZUpTT04gPSAkUmVzdWx0LT57RGF0YX0tPntTY29yZX07CiAgICAgICAgICAgICAgICBteSAkU2NvcmVzICAgID0gZnJvbV9qc29uKCRTY29yZUpTT04pOwogICAgICAgICAgICAgICAgbXkgJFJlYXNvbmluZyA9IGRlbGV0ZSAkU2NvcmVzLT57cmVhc29uaW5nfTsKCiAgICAgICAgICAgICAgICBpZiAoJEpTT05PdXRwdXQpIHsKCiAgICAgICAgICAgICAgICAgICAgJFZlcmJvc2VKU09OSXRlbS0+e1JlYXNvbmluZ30gPSAkUmVhc29uaW5nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkRmlyc3RsaW5lKSB7CgogICAgICAgICAgICAgICAgICAgIG15IEBLZXlzID0gc29ydCBrZXlzICRTY29yZXMtPiUqOwogICAgICAgICAgICAgICAgICAgIG15ICRMaW5lID0gam9pbiAiOyIsIEBLZXlzOwoKICAgICAgICAgICAgICAgICAgICBwcmludCAkT3V0cHV0Q1NWRmlsZUhhbmRsZSAiVGlja2V0SUQ7JExpbmVcclxuIjsKICAgICAgICAgICAgICAgICAgICAkRmlyc3RsaW5lID0gMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAkU2NvcmVzLT4lKiApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJFNjb3JlID0gJFNjb3Jlcy0+eyRLZXl9OwoKICAgICAgICAgICAgICAgICAgICAkU2NvcmUgPX4gcy9mYWxzZS8wL2k7CiAgICAgICAgICAgICAgICAgICAgJFNjb3JlID1+IHMvdHJ1ZS8xL2k7CgogICAgICAgICAgICAgICAgICAgIHB1c2ggQExpbmVJdGVtcywgJFNjb3JlOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJEpTT05PdXRwdXQpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICRWZXJib3NlSlNPTkl0ZW0tPnskS2V5fSA9ICRTY29yZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJExpbmUgPSBqb2luICI7IiwgQExpbmVJdGVtczsKCiAgICAgICAgICAgICAgICBwcmludCAkT3V0cHV0Q1NWRmlsZUhhbmRsZSAiJExpbmVcclxuIjsKCiAgICAgICAgICAgICAgICBwdXNoICRWZXJib3NlSlNPTi0+e0RhdGF9LT5AKiwgJFZlcmJvc2VKU09OSXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT5QcmludCggIjxyZWQ+RXJyb3I6ICIgLiAkUmVzdWx0LT57RXJyb3J9IC4gIjwvcmVkPlxuIiApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGNsb3NlKCRPdXRwdXRDU1ZGaWxlSGFuZGxlKTsKCiAgICBpZiAoJEpTT05PdXRwdXQpIHsKICAgICAgICAkVmVyYm9zZUpTT04tPntTY29yZWR9ID0gJE51bVNjb3JlczsKICAgICAgICBwcmludCAkSlNPTk91dHB1dEZpbGVIYW5kbGUgZW5jb2RlX2pzb24oJFZlcmJvc2VKU09OKTsKICAgICAgICBjbG9zZSgkSlNPTk91dHB1dEZpbGVIYW5kbGUpOwogICAgfQoKICAgIHJldHVybjsKfQoKMTsK</File>
        <File Location="Kernel/System/Console/Command/Maint/AI/GetAnswer.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpNYWludDo6QUk6OkdldEFuc3dlcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSBwYXJlbnQgcXcoS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkJhc2VDb21tYW5kKTsKCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlBlcmw6OkZvcmVhY2hUb0ZvcikKCiMgSW5mb3JtIHRoZSBvYmplY3QgbWFuYWdlciBhYm91dCB0aGUgaGFyZCBkZXBlbmRlbmNpZXMuCiMgVGhpcyBtb2R1bGUgbXVzdCBiZSBkaXNjYXJkZWQgd2hlbiBvbmUgb2YgdGhlIGhhcmQgZGVwZW5kZW5jaWVzIGhhcyBiZWVuIGRpc2NhcmRlZC4Kb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdSZXRyaWV2ZSBhbiBBSSBnZW5lcmF0ZWQgQW5zd2VyIGZyb20gdGhlIG90b2JvLWFpLXNlcnZpY2VzIGNvbnRhaW5lci4nKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2FydGljbGUtaWQnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdBcnRpY2xlSUQnLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9eXGQrJC9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAndGlja2V0LWlkJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGlja2V0SUQnLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9eXGQrJC9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAncXVlc3Rpb24nLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdRdWVzdGlvbicsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAxLAogICAgICAgIFZhbHVlUmVnZXggID0+IHFyL14uKyQvc214LAogICAgKTsKICAgICRTZWxmLT5BZGRPcHRpb24oCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3JhZycsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gInRoZSByYWcgdG8gaW52b2tlLCBkZWZhdWx0cyB0byAnT1RPQk9BSTo6RGVmYXVsdFJBRycgc3lzY29uZmlnIHNldHRpbmcuIiwKICAgICAgICBSZXF1aXJlZCAgICA9PiAwLAogICAgICAgIEhhc1ZhbHVlICAgID0+IDEsCiAgICAgICAgVmFsdWVSZWdleCAgPT4gcXIvXi4rJC9zbXgsCiAgICApOwoKICAgIHJldHVybjsKfQoKc3ViIFByZVJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgd2hldGhlciBvdG9iby1haSB3ZWIgc2VydmljZSBpcyBlbmFibGVkIGFuZCBpZiBub3QsIGFjdGl2YXRlIGl0CiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CgogICAgbXkgJEFJV2Vic2VydmljZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlR2V0KAogICAgICAgIE5hbWUgPT4gJ09UT0JPLUFJJywKICAgICk7CgogICAgaWYgKCAhJEFJV2Vic2VydmljZSApIHsKICAgICAgICAkU2VsZi0+UHJpbnQoIjxyZWQ+T1RPQk8tQUkgd2Vic2VydmljZSBub3QgZm91bmQhIFVuYWJsZSB0byBjb250aW51ZS48L3JlZD5cbiIpOwogICAgICAgIGRpZTsKICAgIH0KCiAgICAjIFNldCB0aGUgd2Vic2VydmljZSBpZAogICAgJFNlbGYtPntXZWJzZXJ2aWNlSUR9ID0gJEFJV2Vic2VydmljZS0+e0lEfTsKCiAgICBpZiAoICRBSVdlYnNlcnZpY2UtPntWYWxpZElEfSAhPSAxICkgewogICAgICAgICRTZWxmLT5QcmludCgiPHJlZD5PVE9CTy1BSSB3ZWJzZXJ2aWNlIGlzIG5vdCBhY3RpdmF0ZWQhIFVuYWJsZSB0byBjb250aW51ZS48L3JlZD5cbiIpOwogICAgICAgIGRpZTsKICAgIH0KCiAgICByZXR1cm47Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkT3RvYm9BSU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpPdG9ib0FJJyk7CiAgICBteSAkUmVzdWx0OwogICAgbXkgJFJBRyA9ICRTZWxmLT5HZXRPcHRpb24oJ3JhZycpOwoKICAgIG15ICRRdWVzdGlvbiA9ICRTZWxmLT5HZXRPcHRpb24oJ3F1ZXN0aW9uJyk7CiAgICBpZiAoJFF1ZXN0aW9uKSB7CgogICAgICAgICRSZXN1bHQgPSAkT3RvYm9BSU9iamVjdC0+R2V0QW5zd2VyKAogICAgICAgICAgICBRdWVzdGlvbiA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgIFJBRyAgICAgID0+ICRSQUcsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICBteSAkVGlja2V0SUQgID0gJFNlbGYtPkdldE9wdGlvbigndGlja2V0LWlkJyk7CiAgICAgICAgbXkgJEFydGljbGVJRCA9ICRTZWxmLT5HZXRPcHRpb24oJ2FydGljbGUtaWQnKTsKCiAgICAgICAgaWYgKCAhJEFydGljbGVJRCApIHsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwogICAgICAgICAgICBteSBAQXJ0aWNsZXMgICAgICA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgU2VuZGVyVHlwZSA9PiAnY3VzdG9tZXInLAogICAgICAgICAgICAgICAgT25seUZpcnN0ICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoQEFydGljbGVzKSB7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEFydGljbGVzWzBde0FydGljbGVJRH07CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBpZiAoICEkQXJ0aWNsZUlEICkgewoKICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8cmVkPkVpdGhlciBRdWVzdGlvbiBvciBBcnRpY2xlSUQgb3IgVGlja2V0SUQgcGFyYW1ldGVyIGlzIHJlcXVpcmVkLjwvcmVkPlxuIik7CiAgICAgICAgICAgIGRpZTsKICAgICAgICB9CgogICAgICAgICRSZXN1bHQgPSAkT3RvYm9BSU9iamVjdC0+R2V0QW5zd2VyKAogICAgICAgICAgICBPYmplY3RJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgICk7CiAgICB9CgogICAgbXkgJE1haW5PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwogICAgbXkgJER1bXAgICAgICAgPSAkTWFpbk9iamVjdC0+RHVtcCgkUmVzdWx0KTsKCiAgICAkU2VsZi0+UHJpbnQoIiREdW1wXG4iKTsKCiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKfQoKMTsK</File>
        <File Location="Kernel/System/Ticket/Event/OTOBOAIIncrementalSynchronization.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpPVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSTo6SW1wb3J0JwopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEV2ZW50IERhdGEpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgcGFyYW0gaW4gZGF0YQogICAgaWYgKCAhJFBhcmFte0RhdGF9e1RpY2tldElEfSAmJiAoICEkUGFyYW17RGF0YX17TWVyZ2VUaWNrZXRJRH0gfHwgISRQYXJhbXtEYXRhfXtNYWluVGlja2V0SUR9ICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFRpY2tldElEKHMpIGluIERhdGEhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG9ubHkgZXhlY3V0ZSB0aGlzIGhhbmRsZXIgb25jZSBmb3IgZWFjaCB3ZWIgcmVxdWVzdCwgYXMgbXVsdGlwbGUgZXZlbnRzIG1heSBiZQogICAgIyBmaXJlZCBwZXIgb25lIHVzZXIgYWN0aW9uLCBmb3IgZXhhbXBsZSBBcnRpY2xlQ3JlYXRlIGFuZCBUaWNrZXRDdXN0b21lclVwZGF0ZQogICAgbXkgJENhY2hlS2V5ID0gJ19PVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb246OkFscmVhZHlQcm9jZXNzZWQnOwoKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkSW1wb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCcpOwoKICAgIGlmICggJFBhcmFte0RhdGF9e1RpY2tldElEfSApIHsKCiAgICAgICAgcmV0dXJuIGlmICggJFRpY2tldE9iamVjdC0+eyRDYWNoZUtleX0tPnsgJFBhcmFte0RhdGF9e1RpY2tldElEfSB9ICk7CgogICAgICAgICMgcmVpbXBvcnQgdGlja2V0CiAgICAgICAgJEltcG9ydE9iamVjdC0+UHVyZ2VUaWNrZXRzKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17RGF0YX17VGlja2V0SUR9CiAgICAgICAgKTsKICAgICAgICAkSW1wb3J0T2JqZWN0LT5NaWdyYXRlVGlja2V0c0FzeW5jKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17RGF0YX17VGlja2V0SUR9CiAgICAgICAgKTsKCiAgICAgICAgIyBzdG9yZSBpbmZvcm1hdGlvbiB0aGF0IHRpY2tldCB3YXMgcHJvY2Vzc2VkIG9uIHRpY2tldG9iamVjdAogICAgICAgICRUaWNrZXRPYmplY3QtPnskQ2FjaGVLZXl9LT57ICRQYXJhbXtEYXRhfXtUaWNrZXRJRH0gfSA9IDE7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgcmV0dXJuCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPnskQ2FjaGVLZXl9LT57ICRQYXJhbXtEYXRhfXtNZXJnZVRpY2tldElEfSB9CiAgICAgICAgICAgICAgICAmJiAkVGlja2V0T2JqZWN0LT57JENhY2hlS2V5fS0+eyAkUGFyYW17RGF0YX17TWFpblRpY2tldElEfSB9CiAgICAgICAgICAgICk7CgogICAgICAgICMgcmVpbXBvcnQgbWVyZ2UgdGlja2V0CiAgICAgICAgJEltcG9ydE9iamVjdC0+UHVyZ2VUaWNrZXRzKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17RGF0YX17TWVyZ2VUaWNrZXRJRH0KICAgICAgICApOwogICAgICAgICRJbXBvcnRPYmplY3QtPk1pZ3JhdGVUaWNrZXRzQXN5bmMoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtEYXRhfXtNZXJnZVRpY2tldElEfQogICAgICAgICk7CgogICAgICAgICMgcmVpbXBvcnQgbWFpbiB0aWNrZXQKICAgICAgICAkSW1wb3J0T2JqZWN0LT5QdXJnZVRpY2tldHMoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtEYXRhfXtNYWluVGlja2V0SUR9CiAgICAgICAgKTsKICAgICAgICAkSW1wb3J0T2JqZWN0LT5NaWdyYXRlVGlja2V0c0FzeW5jKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17RGF0YX17TWFpblRpY2tldElEfQogICAgICAgICk7CgogICAgICAgICMgc3RvcmUgaW5mb3JtYXRpb24gdGhhdCB0aWNrZXRzIHdlcmUgcHJvY2Vzc2VkIG9uIHRpY2tldG9iamVjdAogICAgICAgICRUaWNrZXRPYmplY3QtPnskQ2FjaGVLZXl9LT57ICRQYXJhbXtEYXRhfXtNZXJnZVRpY2tldElEfSB9ID0gMTsKICAgICAgICAkVGlja2V0T2JqZWN0LT57JENhY2hlS2V5fS0+eyAkUGFyYW17RGF0YX17TWFpblRpY2tldElEfSB9ICA9IDE7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Kernel/System/FAQ/Event/OTOBOAIIncrementalSynchronization.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGQVE6OkV2ZW50OjpPVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RkFRJywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSTo6SW1wb3J0JwopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEV2ZW50IERhdGEpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgcGFyYW0gaW4gZGF0YQogICAgZm9yIG15ICRJRE5hbWUgKHF3KEl0ZW1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17RGF0YX17JElETmFtZX0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRJRE5hbWUgaW4gRGF0YSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgb25seSBleGVjdXRlIHRoaXMgaGFuZGxlciBvbmNlIGZvciBlYWNoIHdlYiByZXF1ZXN0LCBpbXBsZW1lbnRpbmcgdGhlIHNhbWUgdHJhbnNhY3Rpb24KICAgICMgZnVuY3Rpb25hbGl0eSBhcyBmb3IgdGlja2V0cywgZXZlbiB0aG91Z2ggdGhlcmUgYXJlIGN1cnJlbnRseSBubyBvcHRpb25hbCBldmVudCB0eXBlcyBmb3IgZmFxcwogICAgbXkgJENhY2hlS2V5ID0gJ19PVE9CT0FJSW5jcmVtZW50YWxTeW5jaHJvbml6YXRpb246OkFscmVhZHlQcm9jZXNzZWQnOwoKICAgIG15ICRGQVFPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RkFRJyk7CiAgICBteSAkSW1wb3J0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUk6OkltcG9ydCcpOwoKICAgIHJldHVybiBpZiAoICRGQVFPYmplY3QtPnskQ2FjaGVLZXl9LT57ICRQYXJhbXtEYXRhfXtJdGVtSUR9IH0gKTsKCiAgICAkSW1wb3J0T2JqZWN0LT5QdXJnZUZBUXMoCiAgICAgICAgRkFRSUQgPT4gJFBhcmFte0RhdGF9e0l0ZW1JRH0KICAgICk7CiAgICAkSW1wb3J0T2JqZWN0LT5NaWdyYXRlRkFRc0FzeW5jKAogICAgICAgIEZBUUlEID0+ICRQYXJhbXtEYXRhfXtJdGVtSUR9CiAgICApOwoKICAgICMgc3RvcmUgaW5mb3JtYXRpb24gdGhhdCBmYXEgaXRlbSB3YXMgcHJvY2Vzc2VkIG9uIGZhcW9iamVjdAogICAgJEZBUU9iamVjdC0+eyRDYWNoZUtleX0tPnsgJFBhcmFte0RhdGF9e0l0ZW1JRH0gfSA9IDE7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="Kernel/System/Ticket/Event/PopulateOTOBOAIDynamicField.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpQb3B1bGF0ZU9UT0JPQUlEeW5hbWljRmllbGQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwp1c2UgTGlzdDo6VXRpbCBxdyhmaXJzdCk7CgojIENQQU4gbW9kdWxlcwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6T3RvYm9BSScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyaWNJbnRlcmZhY2U6OldlYnNlcnZpY2UnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KERhdGEgRXZlbnQgQ29uZmlnIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBwYXJhbSBpbiBkYXRhCiAgICBmb3IgbXkgJElETmFtZSAocXcoVGlja2V0SUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9eyRJRE5hbWV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkSUROYW1lIGluIERhdGEhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CgogICAgbXkgJEFJV2Vic2VydmljZSA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlR2V0KAogICAgICAgIE5hbWUgPT4gJ09UT0JPLUFJJywKICAgICk7CgogICAgaWYgKCAhJEFJV2Vic2VydmljZSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk9UT0JPLUFJIHdlYnNlcnZpY2Ugbm90IGZvdW5kISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAkQUlXZWJzZXJ2aWNlLT57VmFsaWRJRH0gIT0gMSApIHsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggJFBhcmFte0V2ZW50fSBlcSAnVGlja2V0UXVldWVVcGRhdGUnICkgewogICAgICAgICRTZWxmLT5fUHVyZ2VBSUR5bmFtaWNGaWVsZHMoIFRpY2tldElEID0+ICRQYXJhbXtEYXRhfXtUaWNrZXRJRH0gKTsKICAgIH0KCiAgICAjIGdldCBuZWNlc3Nhcnkgb2JqZWN0cwogICAgbXkgJEFydGljbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBoYW5kbGUgbWlzc2luZyBhcnRpY2xlIGRhdGEgYnkgZmV0Y2hpbmcgbGFzdCBjdXN0b21lciBhcnRpY2xlCiAgICBteSAkQXJ0aWNsZUlEOwogICAgaWYgKCAkUGFyYW17RGF0YX17QXJ0aWNsZUlEfSApIHsKICAgICAgICAkQXJ0aWNsZUlEID0gJFBhcmFte0RhdGF9e0FydGljbGVJRH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSBAQXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgIFRpY2tldElEICAgPT4gJFBhcmFte0RhdGF9e1RpY2tldElEfSwKICAgICAgICAgICAgU2VuZGVyVHlwZSA9PiAnY3VzdG9tZXInLAogICAgICAgICAgICBPbmx5TGFzdCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBpZiAoQEFydGljbGVzKSB7CiAgICAgICAgICAgICRBcnRpY2xlSUQgPSAkQXJ0aWNsZXNbMF17QXJ0aWNsZUlEfTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhJEFydGljbGVJRCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIEFydGljbGVJRCBpbiBEYXRhIGFuZCBmb3VuZCBubyBjdXN0b21lciBhcnRpY2xlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJVRpY2tldE5ldyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0R2V0KAogICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtEYXRhfXtUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgcXVldWUgcmVzdHJpY3Rpb24KICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkUGFyYW17Q29uZmlnfXtRdWV1ZXN9ICkgKSB7CiAgICAgICAgcmV0dXJuIHVubGVzcyBmaXJzdCB7ICRfIGVxICRUaWNrZXROZXd7UXVldWV9IH0gJFBhcmFte0NvbmZpZ317UXVldWVzfS0+QCo7CiAgICB9CgogICAgIyBjaGVjayBzZW5kZXJ0eXBlIC0gb25seSBhdXRvLXBvcHVsYXRlIGN1c3RvbWVyIGFydGljbGVzCiAgICBteSAlU2VuZGVyTG9va3VwID0gbWFwIHsKICAgICAgICAkXyA9PiAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZVNlbmRlclR5cGVMb29rdXAoIFNlbmRlclR5cGUgPT4gJF8gKQogICAgfSBxdy9hZ2VudCBjdXN0b21lciBzeXN0ZW0vOwoKICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICBUaWNrZXRJRCAgPT4gJFBhcmFte0RhdGF9e1RpY2tldElEfSwKICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICk7CgogICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgVGlja2V0SUQgID0+ICRQYXJhbXtEYXRhfXtUaWNrZXRJRH0sCiAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICApOwoKICAgIHJldHVybiBpZiAoICRBcnRpY2xle1NlbmRlclR5cGVJRH0gIT0gJFNlbmRlckxvb2t1cHsnY3VzdG9tZXInfSApOwoKICAgICMgbG9vcCBwcm90ZWN0aW9uOiBvbmx5IGV4ZWN1dGUgdGhpcyBoYW5kbGVyIG9uY2UgZm9yIGVhY2ggYXJ0aWNsZQogICAgbXkgJENhY2hlS2V5ID0gJ19Qb3B1bGF0ZU9UT0JPQUlEeW5hbWljRmllbGQ6OkFscmVhZHlQcm9jZXNzZWQnOwogICAgcmV0dXJuIGlmICggJEFydGljbGVPYmplY3QtPnskQ2FjaGVLZXl9eyRBcnRpY2xlSUR9ICk7CgogICAgIyBwcmVwb3B1bGF0ZSBBSSBkeW5hbWljIGZpZWxkIHdpdGggZGVmYXVsdCBhbnN3ZXIKICAgIG15ICREeW5hbWljRmllbGROYW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdPVE9CT0FJOjpEeW5hbWljRmllbGRPVE9CT0FJJykgfHwgJ09UT0JPQUknOwogICAgbXkgJE9UT0JPQUlERkNvbmZpZyAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBOYW1lID0+ICREeW5hbWljRmllbGROYW1lLAogICAgKTsKICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRPVE9CT0FJREZDb25maWcpICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRHluYW1pY0ZpZWxkICckRHluYW1pY0ZpZWxkTmFtZScgbm90IGZvdW5kIG9uIHRoZSBzeXN0ZW0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGlmIGEgdmFsdWUgZXhpc3RzLCBhYm9ydAogICAgIyAgIHZhbHVlIGVpdGhlciBiZWluZyB0aGUgcGxhY2Vob2xkZXIgb3IgYW4gYWN0dWFsIHZhbHVlCiAgICAjICAgaW4gYm90aCBjYXNlcyB3ZSBkbyBub3Qgd2FudCB0byB0cmlnZ2VyIGEgbmV3IHJlcXVlc3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwogICAgbXkgJEN1cnJlbnRWYWx1ZSAgICAgICAgICAgICAgPSAnJzsKICAgIG15ICRPdmVyd3JpdGVGbGFnICAgICAgICAgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdPVE9CT0FJOjpPdmVyd3JpdGVQcmV2aW91c1Jlc3BvbnNlJykgfHwgMDsKICAgIGlmICggISRPdmVyd3JpdGVGbGFnICkgewogICAgICAgICRDdXJyZW50VmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkT1RPQk9BSURGQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIGlmICRDdXJyZW50VmFsdWU7CgogICAgbXkgJFBsYWNlaG9sZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpQbGFjZWhvbGRlcicpIHx8ICc8fHdhaXRpbmcgZm9yIEFJIGFuc3dlcnw+JzsKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+VmFsdWVTZXQoCiAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRPVE9CT0FJREZDb25maWcsCiAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRQbGFjZWhvbGRlciwKICAgICAgICBEb1dyaXRlICAgICAgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgcmVzdHJpY3QgcG9wdWxhdGlvbiB0byBSQUcgbWFwcGluZyBzZXR0aW5nCiAgICBteSAkUXVldWVUb1JBR01hcHBpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ09UT0JPQUk6OlF1ZXVlVG9SQUdNYXBwaW5nJyk7CiAgICByZXR1cm4gaWYgKCAkUXVldWVUb1JBR01hcHBpbmcgJiYgISRRdWV1ZVRvUkFHTWFwcGluZy0+eyAkVGlja2V0TmV3e1F1ZXVlfSB9ICk7CgogICAgIyB0cmlnZ2VyIGFzeW5jaHJvbm91c2x5IGZldGNoaW5nIEFJIGFuc3dlcgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok90b2JvQUknKS0+R2V0QW5zd2VyQXN5bmMoCiAgICAgICAgT2JqZWN0SUQgPT4gJEFydGljbGVJRCwKICAgICk7CgogICAgJEFydGljbGVPYmplY3QtPnskQ2FjaGVLZXl9eyRBcnRpY2xlSUR9ID0gMTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIF9QdXJnZUFJRHluYW1pY0ZpZWxkcyB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQXJ0aWNsZU9iamVjdCAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgIG15ICRDb25maWdPYmplY3QgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgKTsKCiAgICBteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICRDb25maWdPYmplY3QtPkdldCgnT1RPQk9BSTo6RHluYW1pY0ZpZWxkT1RPQk9BSScpIHx8ICdPVE9CT0FJJzsKICAgIG15ICRPVE9CT0FJREZDb25maWcgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgTmFtZSA9PiAkRHluYW1pY0ZpZWxkTmFtZSwKICAgICk7CgogICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZXMpIHsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkT1RPQk9BSURGQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgIERvV3JpdGUgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkZhaWxlZCB0byBjbGVhciBPVE9CTyBBSSBEeW5hbWljRmllbGQgZm9yIEFydGljbGUgJEFydGljbGUtPntBcnRpY2xlSUR9LiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNsZWFyZWQgT1RPQk8gQUkgRHluYW1pY0ZpZWxkIGZvciBBcnRpY2xlICRBcnRpY2xlLT57QXJ0aWNsZUlEfS4iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCjE7Cg==</File>
        <File Location="Kernel/GenericInterface/Invoker/OTOBOAI/GetAnswer.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6T1RPQk9BSTo6R2V0QW5zd2VyOwoKdXNlIHY1LjI0Owp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIGNvcmUgbW9kdWxlcwp1c2UgTUlNRTo6QmFzZTY0IHF3KGVuY29kZV9iYXNlNjQpOwoKIyBDUEFOIG1vZHVsZXMKdXNlIFVSSTo6RXNjYXBlIHF3KHVyaV91bmVzY2FwZSk7CgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWZvciBzdG9wd29yZHMgYWkKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok9UT0JPQUk6OkdldEFuc3dlcgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpJbnZva2VyLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0gYmxlc3Mge30sICRUeXBlOwoKICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtcyBhbmQgc3RvcmUgdGhlbSBpbiAkU2VsZgogICAgZm9yIG15ICROZWVkZWQgKHF3L0RlYnVnZ2VyT2JqZWN0IFdlYnNlcnZpY2VJRC8pIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICRTZWxmLT57JE5lZWRlZH0gPSAkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgUHJlcGFyZVJlcXVlc3QoKQoKcHJlcGFyZSB0aGUgaW52b2NhdGlvbiBvZiB0aGUgY29uZmlndXJlZCByZW1vdGUgd2ViIHNlcnZpY2UuIFRoaXMgd2lsbCBxdWVyeSB0aGUKb3RvYm8tYWktZG9ja2VyIGNvbnRhaW5lciBmb3IgYW4gQW5zd2VyLgoKICAgIG15ICRSZXN1bHQgPSAkSW52b2tlck9iamVjdC0+UHJlcGFyZVJlcXVlc3QoCiAgICAgICAgRGF0YSA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkCiAgICAgICAgICAgIFF1ZXN0aW9uICA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgIFJBRyAgICAgICA9PiAkUkFHLCAgICAgICAgICAgICAgICAgICMgdGhlIFJBRyBlbmRwb2ludCwgb3IgdW5kZWYgZm9yIGRlZmF1bHQKICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgaW5wdXQgPT4gewogICAgICAgICAgICAgICAgcXVlc3Rpb24gICA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgICAgICBkb19zY29yaW5nID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyktPlRydWUoKSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY29uZmlnID0+IHt9LAogICAgICAgICAgICBrd2FyZ3MgPT4ge30sCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUHJlcGFyZVJlcXVlc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUkFHICAgICAgID0gJFBhcmFte0RhdGF9e1JBR30gLy8gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdPVE9CT0FJOjpEZWZhdWx0UkFHJyk7CiAgICBteSAkUXVlc3Rpb24gID0gJFBhcmFte0RhdGF9e1F1ZXN0aW9ufTsKICAgIG15ICREb1Njb3JpbmcgPSAkUGFyYW17RGF0YX17RG9TY29yaW5nfQogICAgICAgID8gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkpTT04nKS0+VHJ1ZSgpCiAgICAgICAgOiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpLT5GYWxzZSgpOwoKICAgICMgY2hlY2sgbmVlZGVkCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvUXVlc3Rpb24vKSB7CiAgICAgICAgaWYgKCAhJFBhcmFte0RhdGF9eyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgaW5wdXQgPT4gewogICAgICAgICAgICAgICAgcXVlc3Rpb24gICA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgICAgICBkb19zY29yaW5nID0+ICREb1Njb3JpbmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJBRyAgICA9PiAkUkFHLAogICAgICAgICAgICBjb25maWcgPT4ge30sCiAgICAgICAgICAgIGt3YXJncyA9PiB7fSwKICAgICAgICB9LAogICAgfTsKCn0KCj1oZWFkMiBIYW5kbGVSZXNwb25zZSgpCgpoYW5kbGUgcmVzcG9uc2UgZGF0YSBvZiB0aGUgY29uZmlndXJlZCByZW1vdGUgd2ViIHNlcnZpY2UuClRoaXMgd2lsbCBqdXN0IHJldHVybiB0aGUgZGF0YSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgoKICAgIG15ICRSZXN1bHQgPSAkSW52b2tlck9iamVjdC0+SGFuZGxlUmVzcG9uc2UoCiAgICAgICAgUmVzcG9uc2VTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICMgc3VjY2VzcyBzdGF0dXMgb2YgdGhlIHJlbW90ZSB3ZWIgc2VydmljZQogICAgICAgIFJlc3BvbnNlRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAjIGluIGNhc2Ugb2Ygd2ViIHNlcnZpY2UgZXJyb3IKICAgICAgICBEYXRhID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBheWxvYWQKICAgICAgICAgICAgLi4uCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEKICAgICAgICBFcnJvck1lc3NhZ2UgICAgPT4gJycsICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIEFuc3dlciA9PiAkUGFyYW17RGF0YX17b3V0cHV0fXtnZW5lcmF0aW9ufSwKICAgICAgICAgICAgU2NvcmUgID0+ICRQYXJhbXtEYXRhfXtvdXRwdXR9e3Njb3JlfSwKICAgICAgICB9LAogICAgfTsKCj1jdXQKCnN1YiBIYW5kbGVSZXNwb25zZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSByZXNwb25zZSwgZm9yd2FyZCBpdAogICAgaWYgKCAhJFBhcmFte1Jlc3BvbnNlU3VjY2Vzc30gKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUGFyYW17UmVzcG9uc2VFcnJvck1lc3NhZ2V9LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIEFuc3dlciA9PiAkUGFyYW17RGF0YX17b3V0cHV0fXtnZW5lcmF0aW9ufSwKICAgICAgICAgICAgU2NvcmUgID0+ICRQYXJhbXtEYXRhfXtvdXRwdXR9e3Njb3JlfSwKICAgICAgICB9LAogICAgfTsKfQoKMTsK</File>
        <File Location="Kernel/GenericInterface/Invoker/OTOBOAI/IngestMany.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6T1RPQk9BSTo6SW5nZXN0TWFueTsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBjb3JlIG1vZHVsZXMKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKCiMgQ1BBTiBtb2R1bGVzCnVzZSBVUkk6OkVzY2FwZSBxdyh1cmlfdW5lc2NhcGUpOwoKIyBPVE9CTyBtb2R1bGVzCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6Okludm9rZXI6Ok9UT0JPQUk6OkluZ2VzdE1hbnkKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlci0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IGJsZXNzIHt9LCAkVHlwZTsKCiAgICAjIGNoZWNrIG5lZWRlZCBwYXJhbXMgYW5kIHN0b3JlIHRoZW0gaW4gJFNlbGYKICAgIGZvciBteSAkTmVlZGVkIChxdy9EZWJ1Z2dlck9iamVjdCBXZWJzZXJ2aWNlSUQvKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFByZXBhcmVSZXF1ZXN0KCkKCnByZXBhcmUgdGhlIGludm9jYXRpb24gb2YgdGhlIGNvbmZpZ3VyZWQgcmVtb3RlIHdlYiBzZXJ2aWNlLiBUaGlzIHdpbGwgaW5nZXN0IGRhdGEKaW50byB0aGUgT3RvYm8gQUkgdmVjdG9yIERCLgoKICAgIG15ICRSZXN1bHQgPSAkSW52b2tlck9iamVjdC0+UHJlcGFyZVJlcXVlc3QoCiAgICAgICAgRGF0YSA9PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkCiAgICAgICAgICAgIENvbnRlbnQgPT4gJENvbnRlbnQsICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkCiAgICAgICAgICAgIFR5cGUgICAgPT4gJ2ZhcScsICAgICAgICAgICAgICAgICAgICMgb25lIG9mIGZhcXx0aWNrZXRfcGFpcnN8dGlja2V0X2NodW5rc3xkb2MKICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgID0+IHsKICAgICAgICAgICAgdHlwZSAgICA9PiAkUGFyYW17RGF0YX17VHlwZX0sCiAgICAgICAgICAgIGNvbnRlbnQgPT4gJFBhcmFte0RhdGF9e0NvbnRlbnR9LAogICAgICAgICAgICAkVHlwZVNldHRpbmdzeyAkUGFyYW17RGF0YX17VHlwZX0gfS0+JSosCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgUHJlcGFyZVJlcXVlc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBJCiAgICBmb3IgbXkgJE5lZWRlZCAocXcvQ29udGVudCBUeXBlLykgewogICAgICAgIGlmICggISRQYXJhbXtEYXRhfXskTmVlZGVkfSApIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJEpTT05PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpOwoKICAgIG15ICVUeXBlU2V0dGluZ3MgPSAoCiAgICAgICAgZmFxcyA9PiB7CiAgICAgICAgICAgIGVtYmVkX2NvbnRlbnRfdHlwZXMgPT4gWydxdWVzdGlvbiddLAogICAgICAgICAgICBzdG9yZV9mdWxsdGV4dCAgICAgID0+ICRKU09OT2JqZWN0LT5UcnVlKCksCiAgICAgICAgICAgIGZ1bGx0ZXh0X3R5cGVzICAgICAgPT4gWydhbnN3ZXInXSwKICAgICAgICB9LAogICAgICAgIGRvY3MgPT4gewogICAgICAgICAgICBlbWJlZF9jb250ZW50X3R5cGVzID0+IFsndGV4dCddLAogICAgICAgICAgICBzdG9yZV9mdWxsdGV4dCAgICAgID0+ICRKU09OT2JqZWN0LT5GYWxzZSgpLAogICAgICAgICAgICBmdWxsdGV4dF90eXBlcyAgICAgID0+IFsndGV4dCddLAogICAgICAgIH0sCiAgICAgICAgdGlja2V0X3BhaXJzID0+IHsKICAgICAgICAgICAgZW1iZWRfY29udGVudF90eXBlcyA9PiBbJ3F1ZXN0aW9uJ10sCiAgICAgICAgICAgIHN0b3JlX2Z1bGx0ZXh0ICAgICAgPT4gJEpTT05PYmplY3QtPlRydWUoKSwKICAgICAgICAgICAgZnVsbHRleHRfdHlwZXMgICAgICA9PiBbJ2Fuc3dlciddLAogICAgICAgIH0sCiAgICAgICAgdGlja2V0X2NodW5rcyA9PiB7CiAgICAgICAgICAgIGVtYmVkX2NvbnRlbnRfdHlwZXMgPT4gWyd0ZXh0J10sCiAgICAgICAgICAgIHN0b3JlX2Z1bGx0ZXh0ICAgICAgPT4gJEpTT05PYmplY3QtPkZhbHNlKCksCiAgICAgICAgICAgIGZ1bGx0ZXh0X3R5cGVzICAgICAgPT4gWyd0ZXh0J10sCiAgICAgICAgfSwKICAgICk7CgogICAgaWYgKCAhJFR5cGVTZXR0aW5nc3sgJFBhcmFte0RhdGF9e1R5cGV9IH0gKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAiVHlwZSAkUGFyYW17RGF0YX17VHlwZX0gbm90IHN1cHBvcnRlZC4iLAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBTdWNjZXNzID0+IDEsCiAgICAgICAgRGF0YSAgICA9PiB7CiAgICAgICAgICAgIGhhc19sYWJlbHMgPT4gJEpTT05PYmplY3QtPlRydWUoKSwKICAgICAgICAgICAgdHlwZSAgICAgICA9PiAkUGFyYW17RGF0YX17VHlwZX0sCiAgICAgICAgICAgIGNvbnRlbnQgICAgPT4gJFBhcmFte0RhdGF9e0NvbnRlbnR9LAogICAgICAgICAgICAkVHlwZVNldHRpbmdzeyAkUGFyYW17RGF0YX17VHlwZX0gfS0+JSosCiAgICAgICAgfSwKICAgIH07Cn0KCj1oZWFkMiBIYW5kbGVSZXNwb25zZSgpCgpoYW5kbGUgcmVzcG9uc2UgZGF0YSBvZiB0aGUgY29uZmlndXJlZCByZW1vdGUgd2ViIHNlcnZpY2UuClRoaXMgd2lsbCBqdXN0IHJldHVybiB0aGUgZGF0YSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgoKICAgIG15ICRSZXN1bHQgPSAkSW52b2tlck9iamVjdC0+SGFuZGxlUmVzcG9uc2UoCiAgICAgICAgUmVzcG9uc2VTdWNjZXNzICAgICAgPT4gMSwgICAgICAgICAgICAgICMgc3VjY2VzcyBzdGF0dXMgb2YgdGhlIHJlbW90ZSB3ZWIgc2VydmljZQogICAgICAgIFJlc3BvbnNlRXJyb3JNZXNzYWdlID0+ICcnLCAgICAgICAgICAgICAjIGluIGNhc2Ugb2Ygd2ViIHNlcnZpY2UgZXJyb3IKICAgICAgICBEYXRhID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBheWxvYWQKICAgICAgICAgICAgLi4uCiAgICAgICAgfSwKICAgICk7CgogICAgJFJlc3VsdCA9IHsKICAgICAgICBTdWNjZXNzICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgIyAwIG9yIDEKICAgICAgICBFcnJvck1lc3NhZ2UgICAgPT4gJycsICAgICAgICAgICAgICAgICAgIyBpbiBjYXNlIG9mIGVycm9yCiAgICAgICAgRGF0YSAgICAgICAgICAgID0+IHsgICAgICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkIGFmdGVyIEludm9rZXIKICAgICAgICAgICAgLi4uCiAgICAgICAgfSwKICAgIH07Cgo9Y3V0CgpzdWIgSGFuZGxlUmVzcG9uc2UgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgcmVzcG9uc2UsIGZvcndhcmQgaXQKICAgIGlmICggISRQYXJhbXtSZXNwb25zZVN1Y2Nlc3N9ICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJFBhcmFte1Jlc3BvbnNlRXJyb3JNZXNzYWdlfSwKICAgICAgICB9OwogICAgfQoKICAgICMgZXh0cmEgaGFuZGxpbmcgZm9yIGVycm9ycyBmcm9tIHB5dGhvbiBhaSBjb250YWluZXIKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtEYXRhfSApICYmIGV4aXN0cyggJFBhcmFte0RhdGF9e3N1Y2Nlc3N9ICkgKSB7CiAgICAgICAgaWYgKCAkUGFyYW17RGF0YX17c3VjY2Vzc30gPT0gMCApIHsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSA9PiAkUGFyYW17UmVzcG9uc2VFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBEYXRhICAgID0+ICRQYXJhbXtEYXRhfSwKICAgIH07Cn0KCjE7Cg==</File>
        <File Location="Kernel/GenericInterface/Invoker/OTOBOAI/Purge.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6T1RPQk9BSTo6UHVyZ2U7Cgp1c2UgdjUuMjQ7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgY29yZSBtb2R1bGVzCnVzZSBNSU1FOjpCYXNlNjQgcXcoZW5jb2RlX2Jhc2U2NCk7CgojIENQQU4gbW9kdWxlcwp1c2UgVVJJOjpFc2NhcGUgcXcodXJpX3VuZXNjYXBlKTsKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9Zm9yIHN0b3B3b3JkcyBwb3N0Z3JlcyBhaSBmdWxsdGV4dAoKPWhlYWQxIE5BTUUKCktlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlcjo6T1RPQk9BSTo6UHVyZ2UKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCnVzdWFsbHksIHlvdSB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzCmJ5IHVzaW5nIEtlcm5lbDo6R2VuZXJpY0ludGVyZmFjZTo6SW52b2tlci0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IGJsZXNzIHt9LCAkVHlwZTsKCiAgICAjIGNoZWNrIG5lZWRlZCBwYXJhbXMgYW5kIHN0b3JlIHRoZW0gaW4gJFNlbGYKICAgIGZvciBteSAkTmVlZGVkIChxdy9EZWJ1Z2dlck9iamVjdCBXZWJzZXJ2aWNlSUQvKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgU3VjY2VzcyAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gIk5lZWQgJE5lZWRlZCEiCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9OwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIFByZXBhcmVSZXF1ZXN0KCkKCnByZXBhcmUgdGhlIGludm9jYXRpb24gb2YgdGhlIGNvbmZpZ3VyZWQgcmVtb3RlIHdlYiBzZXJ2aWNlLiBUaGlzIHdpbGwKY2FsbCB0aGUgUHVyZ2UgZW5kcG9pbnQgb24gdGhlIG90b2JvLWFpLWRvY2tlciBjb250YWluZXIgdG8KcmVzZXQgdGhlIG90b2JvIEFJIHZlY3RvciBkYiBhbmQgdGhlIGZ1bGx0ZXh0IHBvc3RncmVzIGRiLgpDYWxsIHRoaXMgYmVmb3JlIGRvaW5nIGEgcmUtaW1wb3J0IHNvIHlvdSBjYW4gc3RhcnQgb3ZlciBmcm9tIHNjcmF0Y2guCgogICAgbXkgJFJlc3VsdCA9ICRJbnZva2VyT2JqZWN0LT5QcmVwYXJlUmVxdWVzdCgKICAgICAgICBEYXRhID0+IHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGF0YSBwYXlsb2FkCiAgICApOwoKICAgICRSZXN1bHQgPSB7CiAgICAgICAgU3VjY2VzcyAgICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICMgMCBvciAxCiAgICAgICAgRXJyb3JNZXNzYWdlICAgID0+ICcnLCAgICAgICAgICAgICAgICAgICMgaW4gY2FzZSBvZiBlcnJvcgogICAgICAgIERhdGEgICAgICAgICAgICA9PiB7fSAgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBheWxvYWQgYWZ0ZXIgSW52b2tlcgogICAgfTsKCj1jdXQKCnN1YiBQcmVwYXJlUmVxdWVzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAogICAgICAgIERhdGEgICAgPT4gJFBhcmFte0RhdGF9LAogICAgfTsKfQoKPWhlYWQyIEhhbmRsZVJlc3BvbnNlKCkKCmhhbmRsZSByZXNwb25zZSBkYXRhIG9mIHRoZSBjb25maWd1cmVkIHJlbW90ZSB3ZWIgc2VydmljZS4KVGhpcyB3aWxsIGp1c3QgcmV0dXJuIHRoZSBkYXRhIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCgogICAgbXkgJFJlc3VsdCA9ICRJbnZva2VyT2JqZWN0LT5IYW5kbGVSZXNwb25zZSgKICAgICAgICBSZXNwb25zZVN1Y2Nlc3MgICAgICA9PiAxLCAgICAgICAgICAgICAgIyBzdWNjZXNzIHN0YXR1cyBvZiB0aGUgcmVtb3RlIHdlYiBzZXJ2aWNlCiAgICAgICAgUmVzcG9uc2VFcnJvck1lc3NhZ2UgPT4gJycsICAgICAgICAgICAgICMgaW4gY2FzZSBvZiB3ZWIgc2VydmljZSBlcnJvcgogICAgICAgIERhdGEgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRhdGEgcGF5bG9hZAogICAgICAgICAgICAuLi4KICAgICAgICB9LAogICAgKTsKCiAgICAkUmVzdWx0ID0gewogICAgICAgIFN1Y2Nlc3MgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAjIDAgb3IgMQogICAgICAgIEVycm9yTWVzc2FnZSAgICA9PiAnJywgICAgICAgICAgICAgICAgICAjIGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICBEYXRhICAgICAgICAgICAgPT4geyAgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBheWxvYWQgYWZ0ZXIgSW52b2tlcgogICAgICAgICAgICBzdWNjZXNzID0+ICd0cnVlJwogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIEhhbmRsZVJlc3BvbnNlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHJlc3BvbnNlLCBmb3J3YXJkIGl0CiAgICBpZiAoICEkUGFyYW17UmVzcG9uc2VTdWNjZXNzfSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRQYXJhbXtSZXNwb25zZUVycm9yTWVzc2FnZX0sCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIFN1Y2Nlc3MgPT4gMSwKICAgICAgICBEYXRhICAgID0+ICRQYXJhbXtEYXRhfSwKICAgIH07Cn0KCjE7Cg==</File>
        <File Location="var/httpd/htdocs/js/Core.Agent.OtoboAIWidget.js" Permission="660" Encode="Base64">Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyNiBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uaW8vCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuQWdlbnQgPSBDb3JlLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgQ29yZS5BZ2VudC5PdG9ib0FJV2lkZ2V0CiAqIEBtZW1iZXJvZiBDb3JlLkFnZW50CiAqIEBhdXRob3IKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIE90b2JvQUlXaWRnZXQuCiAqLwpDb3JlLkFnZW50Lk90b2JvQUlXaWRnZXQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5PdG9ib0FJV2lkZ2V0CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBJbml0aWFsaXplcyB0aGUgT3RvYm9BSVdpZGdldCBtb2R1bGUuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgIHZhciBUaW1lcjsKICAgICAgICB2YXIgVGltZW91dDsKCiAgICAgICAgZnVuY3Rpb24gU2V0SW5pdGlhbFN0YXRlICgpIHsKICAgICAgICAgICAgJCgnI1JlcXVlc3QnKS50b2dnbGVDbGFzcygnT3RvYm9BSUVtcHR5UXVlc3Rpb25FcnJvcicsIGZhbHNlKTsKICAgICAgICAgICAgJCgnI090b2JvQUlMb2FkZXInKS5oaWRlKCk7CiAgICAgICAgICAgICQoJyNDYW5jZWxRdWVzdGlvbicpLmhpZGUoKTsKICAgICAgICAgICAgJCgnI1N1Ym1pdFF1ZXN0aW9uJykuc2hvdygpOwogICAgICAgICAgICBjbGVhckludGVydmFsKFRpbWVyKTsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KFRpbWVvdXQpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gU2V0UmVxdWVzdFBlbmRpbmdTdGF0ZSAoKSB7CiAgICAgICAgICAgICQoJyNTdWJtaXRRdWVzdGlvbicpLmhpZGUoKTsKICAgICAgICAgICAgJCgnI0NhbmNlbFF1ZXN0aW9uJykuc2hvdygpOwogICAgICAgICAgICAkKCcjUmVwbHlCb3gnKS5oaWRlKCk7CiAgICAgICAgICAgICQoJyNSZXBseScpLnZhbCgnJyk7CiAgICAgICAgICAgICQoJyNSZXBseScpLnRvZ2dsZUNsYXNzKCdPdG9ib0FJUmVzcG9uc2VFcnJvcicsIGZhbHNlKTsKICAgICAgICAgICAgJCgnI090b2JvQUlMb2FkZXInKS5zaG93KCk7CiAgICAgICAgICAgICQoJyNSZXF1ZXN0JykudG9nZ2xlQ2xhc3MoJ090b2JvQUlFbXB0eVF1ZXN0aW9uRXJyb3InLCBmYWxzZSk7CgogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gU3RhcnRQb2xsaW5nICgpIHsKICAgICAgICAgICAgdmFyIFBvbGxpbmdJbnRlcnZhbCA9IENvcmUuQ29uZmlnLkdldCgnUG9sbGluZ0ludGVydmFsJyk7CiAgICAgICAgICAgIHZhciBUaW1lb3V0SW50ZXJ2YWwgPSBDb3JlLkNvbmZpZy5HZXQoJ1RpbWVvdXRJbnRlcnZhbCcpOwogICAgICAgICAgICBUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAkKCcjUmVwbHknKS50b2dnbGVDbGFzcygnT3RvYm9BSVJlc3BvbnNlRXJyb3InLCB0cnVlKTsKICAgICAgICAgICAgICAgICQoJyNSZXBseScpLnZhbChDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnWW91ciByZXF1ZXN0IGhhcyB0aW1lZCBvdXQnKSk7CiAgICAgICAgICAgICAgICAkKCcjUmVwbHlCb3gnKS5zaG93KCk7CiAgICAgICAgICAgICAgICBTZXRJbml0aWFsU3RhdGUoKTsKICAgICAgICAgICAgfSwgVGltZW91dEludGVydmFsICogMTAwMCk7CiAgICAgICAgICAgIFRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIERhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgQWN0aW9uOiAnT3RvYm9BSURhc2hib2FyZCcsCiAgICAgICAgICAgICAgICAgICAgU3ViYWN0aW9uOiAnUG9sbEFJQW5zd2VyJywKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbjogJCgnI1JlcXVlc3QnKS52YWwoKQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLCBEYXRhLCBmdW5jdGlvbiAoUmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoUmVzcG9uc2UuU3RhdHVzID09PSAnc3VjY2VzcycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5JykudmFsKFJlc3BvbnNlLlZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5Qm94Jykuc2hvdygpOwogICAgICAgICAgICAgICAgICAgICAgICBTZXRJbml0aWFsU3RhdGUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoUmVzcG9uc2UuU3RhdHVzID09PSAnZmFpbCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5JykudG9nZ2xlQ2xhc3MoJ090b2JvQUlSZXNwb25zZUVycm9yJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNSZXBseScpLnZhbChDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnWW91ciByZXF1ZXN0IGhhcyBmYWlsZWQnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNSZXBseUJveCcpLnNob3coKTsKICAgICAgICAgICAgICAgICAgICAgICAgU2V0SW5pdGlhbFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sIFBvbGxpbmdJbnRlcnZhbCAqIDEwMDApOwogICAgICAgIH0KCiAgICAgICAgJCgnI1N1Ym1pdFF1ZXN0aW9uJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgaWYgKCEkKCcjUmVxdWVzdCcpLnZhbCgpLnRyaW0oKSkgewogICAgICAgICAgICAgICAgJCgnI1JlcXVlc3QnKS50b2dnbGVDbGFzcygnT3RvYm9BSUVtcHR5UXVlc3Rpb25FcnJvcicsIHRydWUpOwogICAgICAgICAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBTZXRSZXF1ZXN0UGVuZGluZ1N0YXRlKCk7CiAgICAgICAgICAgIHZhciBEYXRhID0gewogICAgICAgICAgICAgICAgQWN0aW9uOiAnT3RvYm9BSURhc2hib2FyZCcsCiAgICAgICAgICAgICAgICBTdWJhY3Rpb246ICdHZXRBSUFuc3dlcicsCiAgICAgICAgICAgICAgICBRdWVzdGlvbjogJCgnI1JlcXVlc3QnKS52YWwoKQogICAgICAgICAgICB9OwogICAgICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSwgRGF0YSwgZnVuY3Rpb24gKFJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICBpZiAoUmVzcG9uc2UuU3RhdHVzID09PSAnc3VjY2VzcycpIHsKICAgICAgICAgICAgICAgICAgICAkKCcjUmVwbHknKS52YWwoUmVzcG9uc2UuVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICQoJyNSZXBseUJveCcpLnNob3coKTsKICAgICAgICAgICAgICAgICAgICBTZXRJbml0aWFsU3RhdGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKFJlc3BvbnNlLlN0YXR1cyA9PT0gJ29uZ29pbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5JykudG9nZ2xlQ2xhc3MoJ090b2JvQUlSZXNwb25zZUVycm9yJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5JykudmFsKCdZb3UgYWxyZWFkeSBoYXZlIHRoZSBmb2xsb3dpbmcgcmVxdWVzdCBnb2luZyBvbjogIicgKyBSZXNwb25zZS5WYWx1ZSArICciJyk7CiAgICAgICAgICAgICAgICAgICAgJCgnI1JlcGx5Qm94Jykuc2hvdygpOwogICAgICAgICAgICAgICAgICAgIFNldEluaXRpYWxTdGF0ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgU3RhcnRQb2xsaW5nKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgICAgIH0pOwoKICAgICAgICAkKCcjQ2FuY2VsUXVlc3Rpb24nKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBEYXRhID0gewogICAgICAgICAgICAgICAgQWN0aW9uOiAnT3RvYm9BSURhc2hib2FyZCcsCiAgICAgICAgICAgICAgICBTdWJhY3Rpb246ICdDYW5jZWxBSVJlcXVlc3QnLAogICAgICAgICAgICB9OwogICAgICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSwgRGF0YSwgZnVuY3Rpb24gKCkge30pOwogICAgICAgICAgICAkKCcjUmVwbHknKS50b2dnbGVDbGFzcygnT3RvYm9BSVJlc3BvbnNlRXJyb3InLCB0cnVlKTsKICAgICAgICAgICAgJCgnI1JlcGx5JykudmFsKENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdZb3VyIHJlcXVlc3Qgd2FzIGNhbmNlbGVkJykpOwogICAgICAgICAgICAkKCcjUmVwbHlCb3gnKS5zaG93KCk7CiAgICAgICAgICAgIFNldEluaXRpYWxTdGF0ZSgpOwogICAgICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgICAgIH0pOwoKICAgICAgICBpZiAoJCgnI1JlcXVlc3QnKS52YWwoKSkgewogICAgICAgICAgICBTZXRSZXF1ZXN0UGVuZGluZ1N0YXRlKCk7CiAgICAgICAgICAgIFN0YXJ0UG9sbGluZygpOwogICAgICAgIH0KICAgIH07CgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnQVBQX01PRFVMRScpOwoKICAgIHJldHVybiBUYXJnZXROUzsKCn0oQ29yZS5BZ2VudC5PdG9ib0FJV2lkZ2V0IHx8IHt9KSk7Cg==</File>
        <File Location="var/httpd/htdocs/skins/Agent/default/css/OtoboAIDashboard.css" Permission="660" Encode="Base64">LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIFdpZGdldHMKICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLk90b2JvQUlSZXNwb25zZUVycm9yIHsKICBjb2xvcjogZGFya3JlZDsKfQoKI0NhbmNlbFF1ZXN0aW9uIHsKICBkaXNwbGF5OiBub25lOwp9CgojT3RvYm9BSUxvYWRlciB7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICBtYXJnaW4tbGVmdDogMTBweDsKICBkaXNwbGF5OiBub25lOwp9CgouT3RvYm9BSVRleHRBcmVhIHsKICBwYWRkaW5nOiAxMHB4OwogIHdpZHRoOiA3MCU7Cn0KCi5PdG9ib0FJVGV4dEFyZWFbcmVhZG9ubHldIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOwp9CgoKI1JlcGx5Qm94IHsKICBkaXNwbGF5OiBub25lOwp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8K</File>
        <File Location="var/packagesetup/OTOBOAI.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpPVE9CT0FJOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBjb3JlIG1vZHVsZXMKCiMgQ1BBTiBtb2R1bGVzCgojIE9UT0JPIG1vZHVsZXMKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzSGFzaFJlZldpdGhEYXRhKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3RhbmRhcmRUZW1wbGF0ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCik7Cgo9aGVhZDEgTkFNRQoKdmFyOjpwYWNrYWdlc2V0dXA6Ok9UT0JPQUkgLSBjb2RlIHRvIGV4ZWN1dGUgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWN1dAoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29kZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ3Zhcjo6cGFja2FnZXNldHVwOjpPVE9CT0FJJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgc2V0IGR5bmFtaWMgZmllbGQgbmFtZSBoZXJlCiAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZE5hbWV9ID0gJ09UT0JPQUknOwoKICAgICMgYWx3YXlzIGRpc2NhcmQgdGhlIGNvbmZpZyBvYmplY3QgYmVmb3JlIHBhY2thZ2UgY29kZSBpcyBleGVjdXRlZCwKICAgICMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbmZpZyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIG5ld2x5LCBzbyB0aGF0IGl0CiAgICAjIHdpbGwgdXNlIHRoZSByZWNlbnRseSB3cml0dGVuIG5ldyBjb25maWcgZnJvbSB0aGUgcGFja2FnZQogICAgJEtlcm5lbDo6T00tPk9iamVjdHNEaXNjYXJkKAogICAgICAgIE9iamVjdHMgPT4gWydLZXJuZWw6OkNvbmZpZyddLAogICAgKTsKCiAgICAkU2VsZi0+e0ludm9rZXJ9ID0gewogICAgICAgIEluZ2VzdE1hbnkgPT4gewogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnSW1wb3J0IGNvbnRlbnQgdG8gb3VyIHJvYm90byBhaS4nLAogICAgICAgICAgICBFdmVudHMgICAgICA9PiBbCgogICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICBBc3luY2hyb25vdXMgPT4gJzAnLAogICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgRXZlbnQgICAgICAgID0+ICdUaWNrZXRDcmVhdGUnLAogICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBUeXBlID0+ICdPVE9CT0FJOjpJbmdlc3RNYW55JywKICAgICAgICB9LAogICAgICAgIEdldEFuc3dlciA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdHZXQgYW4gYW5zd2VyIGJhc2VkIG9uIHRoZSBpbmdlc3RlZCBkYXRhLicsCiAgICAgICAgICAgIEV2ZW50cyAgICAgID0+IFsKICAgICAgICAgICAgXSwKICAgICAgICAgICAgVHlwZSA9PiAnT1RPQk9BSTo6R2V0QW5zd2VyJywKICAgICAgICB9LAogICAgICAgIFB1cmdlID0+IHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1B1cmdlIHRoZSBvdG9iby1haSB2ZWN0b3Igc3RvcmUuJywKICAgICAgICAgICAgRXZlbnRzICAgICAgPT4gWwogICAgICAgICAgICBdLAogICAgICAgICAgICBUeXBlID0+ICdPVE9CT0FJOjpQdXJnZScsCiAgICAgICAgfSwKICAgICAgICBEZWxldGVCeUlEID0+IHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1B1cmdlIGEgc2luZ2xlIGl0ZW0gdGhlIG90b2JvLWFpIHZlY3RvciBzdG9yZS4nLAogICAgICAgICAgICBFdmVudHMgICAgICA9PiBbCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFR5cGUgPT4gJ09UT0JPQUk6OlB1cmdlJywKICAgICAgICB9LAogICAgICAgIFF1ZXJ5RW1iZWRkaW5ncyA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdFeGVjdXRlIFNpbWlsYXJpdHkgU2VhcmNoIHVzaW5nIHRoZSBvdG9iby1haSB2ZWN0b3Igc3RvcmUuJywKICAgICAgICAgICAgRXZlbnRzICAgICAgPT4gWwogICAgICAgICAgICBdLAogICAgICAgICAgICBUeXBlID0+ICdPVE9CT0FJOjpRdWVyeUVtYmVkZGluZ3MnLAogICAgICAgIH0sCiAgICB9OwoKICAgICRTZWxmLT57SW52b2tlckNvbnRyb2xsZXJNYXBwaW5nfSA9IHsKICAgICAgICBJbmdlc3RNYW55ID0+IHsKICAgICAgICAgICAgQ29tbWFuZCAgICA9PiAnUFVUJywKICAgICAgICAgICAgQ29udHJvbGxlciA9PiAnL290b2JvLWFpL2VtYmVkZGluZy9pbmdlc3QtbWFueScsCiAgICAgICAgfSwKICAgICAgICBHZXRBbnN3ZXIgPT4gewogICAgICAgICAgICBDb21tYW5kICAgID0+ICdQT1NUJywKICAgICAgICAgICAgQ29udHJvbGxlciA9PiAnL290b2JvLWFpLzpSQUcvaW52b2tlJywKICAgICAgICB9LAogICAgICAgIFB1cmdlID0+IHsKICAgICAgICAgICAgQ29tbWFuZCAgICA9PiAnREVMRVRFJywKICAgICAgICAgICAgQ29udHJvbGxlciA9PiAnL290b2JvLWFpL2VtYmVkZGluZy9wdXJnZS86Q29sbGVjdGlvbicsCiAgICAgICAgfSwKICAgICAgICBEZWxldGVCeUlEID0+IHsKICAgICAgICAgICAgQ29tbWFuZCAgICA9PiAnUE9TVCcsCiAgICAgICAgICAgIENvbnRyb2xsZXIgPT4gJy9vdG9iby1haS9lbWJlZGRpbmcvZGVsZXRlJywKICAgICAgICB9LAogICAgICAgIFF1ZXJ5RW1iZWRkaW5ncyA9PiB7CiAgICAgICAgICAgIENvbW1hbmQgICAgPT4gJ1BPU1QnLAogICAgICAgICAgICBDb250cm9sbGVyID0+ICcvb3RvYm8tYWkvZW1iZWRkaW5nL3F1ZXJ5JywKICAgICAgICB9LAogICAgfTsKCiAgICAkU2VsZi0+e09wZXJhdGlvbn0gPSB7CgogICAgICAgIEFydGljbGVERlVwZGF0ZSA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdBcnRpY2xlREZVcGRhdGUnLAogICAgICAgICAgICBJbmNsdWRlVGlja2V0RGF0YSA9PiAnMCcsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgID0+ICdUaWNrZXQ6OkFydGljbGVERlVwZGF0ZScKICAgICAgICB9LAogICAgICAgIFRpY2tldEdldCA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdSZXRyaWV2ZSBhIFRpY2tldCcsCiAgICAgICAgICAgIEluY2x1ZGVUaWNrZXREYXRhID0+ICcwJywKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgPT4gJ1RpY2tldDo6VGlja2V0R2V0QUknLAogICAgICAgICAgICBNYXBwaW5nT3V0Ym91bmQgICA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgPT4gJ1hTTFQnLAogICAgICAgICAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgICAgICAgICBEYXRhSW5jbHVkZSA9PiBbXSwKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZSAgICA9PiAkU2VsZi0+X1RpY2tldEdldFhTTFQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgVGlja2V0VXBkYXRlID0+IHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgICAgPT4gJ1VwZGF0ZSBhIFRpY2tldCcsCiAgICAgICAgICAgIEluY2x1ZGVUaWNrZXREYXRhID0+ICcwJywKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgPT4gJ1RpY2tldDo6VGlja2V0VXBkYXRlJywKICAgICAgICB9LAogICAgICAgIFRpY2tldExpbmsgPT4gewogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICA9PiAnTGluayBhIHRpY2tldCB0byBhIHRhcmdldCBvYmplY3QuJywKICAgICAgICAgICAgSW5jbHVkZVRpY2tldERhdGEgPT4gJzAnLAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnVGlja2V0OjpMaW5rJywKICAgICAgICB9LAogICAgICAgIFRpY2tldFVubGluayA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdVbmxpbmsgYSB0aWNrZXQgdG8gYSB0YXJnZXQgb2JqZWN0LicsCiAgICAgICAgICAgIEluY2x1ZGVUaWNrZXREYXRhID0+ICcwJywKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgPT4gJ1RpY2tldDo6VW5MaW5rJywKICAgICAgICB9LAogICAgICAgIEZBUVNlYXJjaCA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdTZWFyY2ggRkFRcyB3aXRoIEVTJywKICAgICAgICAgICAgSW5jbHVkZVRpY2tldERhdGEgPT4gJzAnLAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnRWxhc3RpY1NlYXJjaDo6RkFRU2VhcmNoJywKICAgICAgICAgICAgTWFwcGluZ091dGJvdW5kICAgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgID0+ICdYU0xUJywKICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRGF0YUluY2x1ZGUgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGUgICAgPT4gJFNlbGYtPl9GQVFTZWFyY2hYU0xUKCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIFRpY2tldFNlYXJjaCA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdTZWFyY2ggVGlja2V0cyB3aXRoIEVTJywKICAgICAgICAgICAgSW5jbHVkZVRpY2tldERhdGEgPT4gJzAnLAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnRWxhc3RpY1NlYXJjaDo6VGlja2V0U2VhcmNoJywKICAgICAgICAgICAgTWFwcGluZ091dGJvdW5kICAgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgID0+ICdYU0xUJywKICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRGF0YUluY2x1ZGUgPT4gW10sCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGUgICAgPT4gJFNlbGYtPl9UaWNrZXRTZWFyY2hYU0xUKCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIFF1ZXJ5RW1iZWRkaW5ncyA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgID0+ICdGaW5kIHNpbWlsYXIgaXRlbXMgaW4gdmVjdG9yIGRiJywKICAgICAgICAgICAgSW5jbHVkZVRpY2tldERhdGEgPT4gJzAnLAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgICA9PiAnVGlja2V0OjpRdWVyeUVtYmVkZGluZ3MnLAogICAgICAgIH0sCiAgICB9OwoKICAgICRTZWxmLT57Um91dGVPcGVyYXRpb25NYXBwaW5nfSA9IHsKICAgICAgICBBcnRpY2xlREZVcGRhdGUgPT4gewogICAgICAgICAgICBSZXF1ZXN0TWV0aG9kID0+IFsnUFVUJ10sCiAgICAgICAgICAgIFJvdXRlICAgICAgICAgPT4gJy9UaWNrZXQvOlRpY2tldElEL0FydGljbGUvREYnCiAgICAgICAgfSwKICAgICAgICBUaWNrZXRHZXQgPT4gewogICAgICAgICAgICBSZXF1ZXN0TWV0aG9kID0+IFsnR0VUJ10sCiAgICAgICAgICAgIFJvdXRlICAgICAgICAgPT4gJy9UaWNrZXQvOlRpY2tldElEJywKICAgICAgICB9LAogICAgICAgIFRpY2tldFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFJlcXVlc3RNZXRob2QgPT4gWydQVVQnXSwKICAgICAgICAgICAgUm91dGUgICAgICAgICA9PiAnL1RpY2tldC86VGlja2V0SUQnLAogICAgICAgIH0sCiAgICAgICAgRkFRU2VhcmNoID0+IHsKICAgICAgICAgICAgUmVxdWVzdE1ldGhvZCA9PiBbJ0dFVCddLAogICAgICAgICAgICBSb3V0ZSAgICAgICAgID0+ICcvRkFRJywKICAgICAgICB9LAogICAgICAgIFRpY2tldFNlYXJjaCA9PiB7CiAgICAgICAgICAgIFJlcXVlc3RNZXRob2QgPT4gWydHRVQnXSwKICAgICAgICAgICAgUm91dGUgICAgICAgICA9PiAnL1RpY2tldCcsCiAgICAgICAgfSwKICAgICAgICBRdWVyeUVtYmVkZGluZ3MgPT4gewogICAgICAgICAgICBSZXF1ZXN0TWV0aG9kID0+IFsnR0VUJ10sCiAgICAgICAgICAgIFJvdXRlICAgICAgICAgPT4gJy9UaWNrZXQvOlRpY2tldElEL0VtYmVkZGluZ3MvOkNvbGxlY3Rpb24nLAogICAgICAgIH0sCiAgICAgICAgVGlja2V0TGluayA9PiB7CiAgICAgICAgICAgIFJlcXVlc3RNZXRob2QgPT4gWydQVVQnXSwKICAgICAgICAgICAgUm91dGUgICAgICAgICA9PiAnL1RpY2tldC86VGlja2V0SUQvTGluay86VGFyZ2V0VHlwZS86TGlua1R5cGUvOlRhcmdldElEJywKICAgICAgICB9LAogICAgICAgIFRpY2tldFVubGluayA9PiB7CiAgICAgICAgICAgIFJlcXVlc3RNZXRob2QgPT4gWydERUxFVEUnXSwKICAgICAgICAgICAgUm91dGUgICAgICAgICA9PiAnL1RpY2tldC86VGlja2V0SUQvTGluay86VGFyZ2V0VHlwZS86TGlua1R5cGUvOlRhcmdldElEJywKICAgICAgICB9LAogICAgfTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBDb2RlSW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlSW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVJbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjcmVhdGUgT1RPQk9BSSBkeW5hbWljIGZpZWxkCiAgICAkU2VsZi0+X0NyZWF0ZUFJRHluYW1pY0ZpZWxkKCk7CgogICAgIyBjcmVhdGUgQUkgYW5zd2VyIHRlbXBsYXRlCiAgICAkU2VsZi0+X0NyZWF0ZUFJQW5zd2VyVGVtcGxhdGUoKTsKCiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CiAgICBteSAkSUQgICAgICAgICAgICAgICA9ICRXZWJzZXJ2aWNlT2JqZWN0LT5XZWJzZXJ2aWNlQWRkKAogICAgICAgIE5hbWUgICA9PiAnT1RPQk8tQUknLAogICAgICAgIENvbmZpZyA9PiB7CgogICAgICAgICAgICAjIFdlYnNlcnZpY2UgQ29uZmlnCiAgICAgICAgICAgIERlYnVnZ2VyID0+IHsKICAgICAgICAgICAgICAgIERlYnVnVGhyZXNob2xkID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBUZXN0TW9kZSAgICAgICA9PiAnMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICcnLAogICAgICAgICAgICBQcm92aWRlciAgICA9PiB7CiAgICAgICAgICAgICAgICBPcGVyYXRpb24gPT4gJFNlbGYtPntPcGVyYXRpb259LAogICAgICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSGVhZGVycyAgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgIEtlZXBBbGl2ZSAgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoICAgICAgICAgICAgID0+ICcxMDAwMDAnLAogICAgICAgICAgICAgICAgICAgICAgICBPdXRib3VuZEhlYWRlcnMgICAgICAgPT4ge30sCiAgICAgICAgICAgICAgICAgICAgICAgIFJvdXRlT3BlcmF0aW9uTWFwcGluZyA9PiAkU2VsZi0+e1JvdXRlT3BlcmF0aW9uTWFwcGluZ30sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdIVFRQOjpSRVNUJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlbW90ZVN5c3RlbSA9PiAnJywKICAgICAgICAgICAgUmVxdWVzdGVyICAgID0+IHsKICAgICAgICAgICAgICAgIEludm9rZXIgICA9PiAkU2VsZi0+e0ludm9rZXJ9LAogICAgICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0Q29tbWFuZCAgICAgICAgICAgPT4gJ1BPU1QnLAogICAgICAgICAgICAgICAgICAgICAgICBIb3N0ICAgICAgICAgICAgICAgICAgICAgPT4gJ2h0dHA6Ly9yYWc6ODAwMCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZXJDb250cm9sbGVyTWFwcGluZyA9PiAkU2VsZi0+e0ludm9rZXJDb250cm9sbGVyTWFwcGluZ30sCiAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVvdXQgICAgICAgICAgICAgICAgICA9PiAnMzAwJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0hUVFA6OlJFU1QnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBFTyBXZWJzZXJ2aWNlIENvbmZpZwogICAgICAgIH0sCiAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgaWYgKCAhJElEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IGluc3RhbGwgdGhlIE9UT0JPQUkgd2Vic2VydmljZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICRTZWxmLT5fVXBkYXRlQXJ0aWNsZUFjdGlvbnMoIENoYW5uZWwgPT4gJ0VtYWlsJyApOwogICAgJFNlbGYtPl9VcGRhdGVBcnRpY2xlQWN0aW9ucyggQ2hhbm5lbCA9PiAnUGhvbmUnICk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZSgpCgpydW4gdGhlIGNvZGUgdXBncmFkZSBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZSgpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFdlYnNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0ludGVyZmFjZTo6V2Vic2VydmljZScpOwogICAgbXkgJFdlYnNlcnZpY2UgICAgICAgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUdldCgKICAgICAgICBOYW1lID0+ICdPVE9CTy1BSScsCiAgICApOwoKICAgIGlmICggISRXZWJzZXJ2aWNlICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRGlkIG5vdCBmaW5kIHRoZSBPVE9CT0FJIHdlYnNlcnZpY2UhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHVwZ3JhZGUgd2Vic2VydmljZSBhcyBuZWNlc3NhcnkKICAgICRXZWJzZXJ2aWNlLT57Q29uZmlnfSA9IHsKCiAgICAgICAgIyBXZWJzZXJ2aWNlIENvbmZpZwogICAgICAgIERlYnVnZ2VyID0+IHsKICAgICAgICAgICAgRGVidWdUaHJlc2hvbGQgPT4gJFdlYnNlcnZpY2UtPntDb25maWd9LT57RGVidWdnZXJ9LT57RGVidWdUaHJlc2hvbGR9IC8vICdlcnJvcicsCiAgICAgICAgICAgIFRlc3RNb2RlICAgICAgID0+ICcwJywKICAgICAgICB9LAogICAgICAgIERlc2NyaXB0aW9uID0+ICRXZWJzZXJ2aWNlLT57Q29uZmlnfS0+e0Rlc2NyaXB0aW9ufSAvLyAnZXJyb3InLAogICAgICAgIFByb3ZpZGVyICAgID0+IHsKICAgICAgICAgICAgT3BlcmF0aW9uID0+ICRTZWxmLT57T3BlcmF0aW9ufSwKICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbEhlYWRlcnMgICAgID0+ICRXZWJzZXJ2aWNlLT57Q29uZmlnfS0+e1Byb3ZpZGVyfS0+e1RyYW5zcG9ydH0tPntDb25maWd9LT57QWRkaXRpb25hbEhlYWRlcnN9LAogICAgICAgICAgICAgICAgICAgIEtlZXBBbGl2ZSAgICAgICAgICAgICA9PiAkV2Vic2VydmljZS0+e0NvbmZpZ30tPntQcm92aWRlcn0tPntUcmFuc3BvcnR9LT57Q29uZmlnfS0+e0tlZXBBbGl2ZX0sCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoICAgICAgICAgICAgID0+ICRXZWJzZXJ2aWNlLT57Q29uZmlnfS0+e1Byb3ZpZGVyfS0+e1RyYW5zcG9ydH0tPntDb25maWd9LT57TWF4TGVuZ3RofSwKICAgICAgICAgICAgICAgICAgICBPdXRib3VuZEhlYWRlcnMgICAgICAgPT4gJFdlYnNlcnZpY2UtPntDb25maWd9LT57UHJvdmlkZXJ9LT57VHJhbnNwb3J0fS0+e0NvbmZpZ30tPntPdXRib3VuZEhlYWRlcnN9LAogICAgICAgICAgICAgICAgICAgIFJvdXRlT3BlcmF0aW9uTWFwcGluZyA9PiAkU2VsZi0+e1JvdXRlT3BlcmF0aW9uTWFwcGluZ30sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgVHlwZSA9PiAnSFRUUDo6UkVTVCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZW1vdGVTeXN0ZW0gPT4gJFdlYnNlcnZpY2UtPntDb25maWd9LT57UmVtb3RlU3lzdGVtfSwKICAgICAgICBSZXF1ZXN0ZXIgICAgPT4gewogICAgICAgICAgICBJbnZva2VyICAgPT4gJFNlbGYtPntJbnZva2VyfSwKICAgICAgICAgICAgVHJhbnNwb3J0ID0+IHsKICAgICAgICAgICAgICAgIENvbmZpZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgRGVmYXVsdENvbW1hbmQgPT4gJ1BPU1QnLAogICAgICAgICAgICAgICAgICAgIEhvc3QgICAgICAgICAgID0+ICRXZWJzZXJ2aWNlLT57Q29uZmlnfS0+e1JlcXVlc3Rlcn0tPntUcmFuc3BvcnR9LT57Q29uZmlnfS0+e0hvc3R9ID09ICdodHRwOi8vb3RvYm8tYWk6ODAwMCcKICAgICAgICAgICAgICAgICAgICA/CiAgICAgICAgICAgICAgICAgICAgICAgICdodHRwOi8vcmFnOjgwMDAnCiAgICAgICAgICAgICAgICAgICAgOiAkV2Vic2VydmljZS0+e0NvbmZpZ30tPntSZXF1ZXN0ZXJ9LT57VHJhbnNwb3J0fS0+e0NvbmZpZ30tPntIb3N0fSwKICAgICAgICAgICAgICAgICAgICBJbnZva2VyQ29udHJvbGxlck1hcHBpbmcgPT4gJFNlbGYtPntJbnZva2VyQ29udHJvbGxlck1hcHBpbmd9LAogICAgICAgICAgICAgICAgICAgIFRpbWVvdXQgICAgICAgICAgICAgICAgICA9PiAkV2Vic2VydmljZS0+e0NvbmZpZ30tPntSZXF1ZXN0ZXJ9LT57VHJhbnNwb3J0fS0+e0NvbmZpZ30tPntUaW1lb3V0fSwKICAgICAgICAgICAgICAgICAgICBPdXRib3VuZEhlYWRlcnMgICAgICAgICAgPT4gJFdlYnNlcnZpY2UtPntDb25maWd9LT57UmVxdWVzdGVyfS0+e1RyYW5zcG9ydH0tPntDb25maWd9LT57T3V0Ym91bmRIZWFkZXJzfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBUeXBlID0+ICdIVFRQOjpSRVNUJywKICAgICAgICAgICAgfSwKICAgICAgICB9CiAgICB9OwoKICAgIG15ICRTdWNjZXNzID0gJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VVcGRhdGUoCiAgICAgICAgJXskV2Vic2VydmljZX0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IHVwZGF0ZSB0aGUgT1RPQk9BSSB3ZWJzZXJ2aWNlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJFNlbGYtPl9VcGRhdGVBcnRpY2xlQWN0aW9ucyggQ2hhbm5lbCA9PiAnRW1haWwnICk7CiAgICAkU2VsZi0+X1VwZGF0ZUFydGljbGVBY3Rpb25zKCBDaGFubmVsID0+ICdQaG9uZScgKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVVbmluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIHVuaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVW5pbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZVVuaW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5fQ2xlYW51cEFydGljbGVBY3Rpb25zKCBDaGFubmVsID0+ICdQaG9uZScgKTsKICAgICRTZWxmLT5fQ2xlYW51cEFydGljbGVBY3Rpb25zKCBDaGFubmVsID0+ICdFbWFpbCcgKTsKCiAgICBteSAkV2Vic2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmljSW50ZXJmYWNlOjpXZWJzZXJ2aWNlJyk7CgogICAgbXkgJFdlYnNlcnZpY2UgPSAkV2Vic2VydmljZU9iamVjdC0+V2Vic2VydmljZUdldCgKICAgICAgICBOYW1lID0+ICdPVE9CTy1BSScsCiAgICApOwogICAgJFdlYnNlcnZpY2VPYmplY3QtPldlYnNlcnZpY2VEZWxldGUoCiAgICAgICAgSUQgICAgID0+ICRXZWJzZXJ2aWNlLT57SUR9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGRlbGV0ZSBPVE9CT0FJIGR5bmFtaWMgZmllbGQKICAgICRTZWxmLT5fRGVsZXRlQUlEeW5hbWljRmllbGQoKTsKCiAgICAjIGRlbGV0ZSBBbnN3ZXIgdGVtcGxhdGUKICAgICRTZWxmLT5fRGVsZXRlQUlBbnN3ZXJUZW1wbGF0ZSgpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0NyZWF0ZUFJRHluYW1pY0ZpZWxkKCkKCmNyZWF0ZXMgdGhlIGR5bmFtaWMgZmllbGQgbmVlZGVkIGZvciB0aGUgQUkgcmVzcG9uc2UgZnVuY3Rpb25hbGl0eQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0NyZWF0ZUFJRHluYW1pY0ZpZWxkKCk7Cgo9Y3V0CgpzdWIgX0NyZWF0ZUFJRHluYW1pY0ZpZWxkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFZhbGlkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMb29rdXAoCiAgICAgICAgVmFsaWQgPT4gJ3ZhbGlkJywKICAgICk7CgogICAgIyBnZXQgYWxsIGN1cnJlbnQgZHluYW1pYyBmaWVsZHMKICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgICMgZ2V0IHRoZSBsaXN0IG9mIG9yZGVyIG51bWJlcnMgKGlzIGFscmVhZHkgc29ydGVkKS4KICAgIG15IEBEeW5hbWljZmllbGRPcmRlckxpc3Q7CiAgICBmb3IgbXkgJER5bmFtaWNmaWVsZCAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewogICAgICAgIHB1c2ggQER5bmFtaWNmaWVsZE9yZGVyTGlzdCwgJER5bmFtaWNmaWVsZC0+e0ZpZWxkT3JkZXJ9OwogICAgfQoKICAgICMgZ2V0IHRoZSBsYXN0IGVsZW1lbnQgZnJvbSB0aGUgb3JkZXIgbGlzdCBhbmQgYWRkIDEKICAgIG15ICROZXh0T3JkZXJOdW1iZXIgPSAxOwogICAgaWYgKEBEeW5hbWljZmllbGRPcmRlckxpc3QpIHsKICAgICAgICAkTmV4dE9yZGVyTnVtYmVyID0gJER5bmFtaWNmaWVsZE9yZGVyTGlzdFstMV0gKyAxOwogICAgfQoKICAgICMgY3JlYXRlIGEgZHluYW1pYyBmaWVsZHMgbG9va3VwIHRhYmxlCiAgICBteSAlRHluYW1pY0ZpZWxkTG9va3VwOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiByZWYgJER5bmFtaWNGaWVsZCBuZSAnSEFTSCc7CiAgICAgICAgJER5bmFtaWNGaWVsZExvb2t1cHsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgfQoKICAgICMgY2hlY2sgaWYgdGhlIGR5bmFtaWMgZmllbGQgYWxyZWFkeSBleGlzdHMKICAgIGlmICggcmVmICREeW5hbWljRmllbGRMb29rdXB7ICRTZWxmLT57RHluYW1pY0ZpZWxkTmFtZX0gfSBuZSAnSEFTSCcgKSB7CgogICAgICAgICMgY3JlYXRlIGEgbmV3IGZpZWxkCiAgICAgICAgbXkgJEZpZWxkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZE5hbWV9LAogICAgICAgICAgICBMYWJlbCAgICAgID0+ICdPVE9CTyBBSScsCiAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJ1RleHRBcmVhQUknLAogICAgICAgICAgICBGaWVsZE9yZGVyID0+ICROZXh0T3JkZXJOdW1iZXIsCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ0FydGljbGUnLAogICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PiAnJywKICAgICAgICAgICAgICAgIFJlZ0V4TGlzdCAgICA9PiBbXSwKICAgICAgICAgICAgICAgIFRvb2x0aXAgICAgICA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgSW50ZXJuYWxGaWVsZCA9PiAxLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+ICRWYWxpZElELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJEZpZWxkSUQgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgY3JlYXRlIGR5bmFtaWMgZmllbGQgJFNlbGYtPntEeW5hbWljRmllbGROYW1lfS4gUGxlYXNlIHJldmlldyB0aGUgbG9ncy4iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRHluYW1pYyBmaWVsZCB3aXRoIG5hbWUgJFNlbGYtPntEeW5hbWljRmllbGROYW1lfSBhbHJlYWR5IGV4aXN0cy4iLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfRGVsZXRlQUlEeW5hbWljRmllbGQoKQoKRGVsZXRlcyB0aGUgZHluYW1pYyBmaWVsZCBmb3IgQUkgZnVuY3Rpb25hbGl0eS4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9EZWxldGVBSUR5bmFtaWNGaWVsZCgpOwoKPWN1dAoKc3ViIF9EZWxldGVBSUR5bmFtaWNGaWVsZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lY2Vzc2FyeSBvYmplY3RzCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwogICAgbXkgJExvZ09iamVjdCAgICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBydW5uaW5nIHByZS11bmluc3RhbGwsIHNvIHdlIGRvIGhhdmUgdGhlIHN5c2NvbmZpZyBhdCBoYW5kCiAgICBteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnT1RPQk9BSTo6RHluYW1pY0ZpZWxkT1RPQk9BSScpIHx8ICRTZWxmLT57RHluYW1pY0ZpZWxkTmFtZX07CgogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBOYW1lID0+ICREeW5hbWljRmllbGROYW1lLAogICAgKTsKCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICdQcmlvcml0eScgPT4gJ2Vycm9yJywKICAgICAgICAgICAgJ01lc3NhZ2UnICA9PiAiRHluYW1pY0ZpZWxkICckRHluYW1pY0ZpZWxkTmFtZScgbm90IGZvdW5kIG9uIHRoZSBzeXN0ZW0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkVmFsdWVzRGVsZXRlU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5BbGxWYWx1ZXNEZWxldGUoCiAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgIGlmICggISRWYWx1ZXNEZWxldGVTdWNjZXNzICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgJ1ByaW9yaXR5JyA9PiAnZXJyb3InLAogICAgICAgICAgICAnTWVzc2FnZScgID0+ICJDb3VsZCBub3QgZGVsZXRlIHZhbHVlcyBmb3IgRHluYW1pY0ZpZWxkICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSEiLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGREZWxldGUoCiAgICAgICAgSUQgICAgID0+ICREeW5hbWljRmllbGRDb25maWctPntJRH0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgJ1ByaW9yaXR5JyA9PiAnZXJyb3InLAogICAgICAgICAgICAnTWVzc2FnZScgID0+ICJDb3VsZCBub3QgZGVsZXRlIER5bmFtaWNGaWVsZCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0hIiwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX0NyZWF0ZUFJQW5zd2VyVGVtcGxhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBhbGwgdmFsaWQgcXVldWVzCiAgICBteSAkUXVldWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKTsKICAgIG15ICVRdWV1ZURhdGEgICA9ICRRdWV1ZU9iamVjdC0+UXVldWVMaXN0KCBWYWxpZCA9PiAxICk7CgogICAgIyBhZGQgZW5nbGlzaCB0ZW1wbGF0ZQogICAgewogICAgICAgIG15ICRUZW1wbGF0ZUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YW5kYXJkVGVtcGxhdGUnKS0+U3RhbmRhcmRUZW1wbGF0ZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdPVE9CT0FJIEFuc3dlciBUZW1wbGF0ZScsCiAgICAgICAgICAgIFRlbXBsYXRlICAgICA9PiAnPE9UT0JPX0FJQW5zd2VyXycgLiAkU2VsZi0+e0R5bmFtaWNGaWVsZE5hbWV9IC4gJz4nLAogICAgICAgICAgICBDb250ZW50VHlwZSAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgnLAogICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJ0Fuc3dlcicsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCB0ZW1wbGF0ZSB0byBldmVyeSB2YWxpZCBxdWV1ZQogICAgICAgIGZvciBteSAkUXVldWVJRCAoIGtleXMgJVF1ZXVlRGF0YSApIHsKICAgICAgICAgICAgJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQoCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9EZWxldGVBSUFuc3dlclRlbXBsYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFN0YW5kYXJkVGVtcGxhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhbmRhcmRUZW1wbGF0ZScpOwoKICAgICMgZGVsZXRlIHRlbXBsYXRlCiAgICBmb3IgbXkgJFRlbXBsYXRlTmFtZSAoICgnT1RPQk9BSSBBbnN3ZXIgVGVtcGxhdGUnKSApIHsKICAgICAgICBteSAkVGVtcGxhdGVJRCA9ICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5TdGFuZGFyZFRlbXBsYXRlTG9va3VwKAogICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlID0+ICRUZW1wbGF0ZU5hbWUsCiAgICAgICAgKTsKCiAgICAgICAgIyBhbHNvIGNsZWFucyB1cCB0aGUgcXVldWUgcmVsYXRpb25zIGJlZm9yZSBkZWxldGluZwogICAgICAgICRTdGFuZGFyZFRlbXBsYXRlT2JqZWN0LT5TdGFuZGFyZFRlbXBsYXRlRGVsZXRlKAogICAgICAgICAgICBJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX1VwZGF0ZUFydGljbGVBY3Rpb25zIHsKCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwogICAgbXkgJENoYW5uZWwgPSAkUGFyYW17Q2hhbm5lbH07CgogICAgIyB3ZSBvbmx5IGRvIHRoaXMgb24gcmVsLTExLjAKICAgICMgZm9yIHJlbC0xMV8xIHdlIGNhbiBqdXN0IHVzZSBYTUwKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRNYWluT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpOwoKICAgIG15ICRSZWxlYXNlSW5mbyA9ICRNYWluT2JqZWN0LT5HZXRSZWxlYXNlSW5mbygKICAgICAgICBEaXJlY3RvcnkgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdIb21lJyksCiAgICAgICAgRmlsZW5hbWUgID0+ICdSRUxFQVNFJywKICAgICk7CgogICAgbXkgJFZlcnNpb24gPSAkUmVsZWFzZUluZm8tPntWZXJzaW9ufTsKICAgIGlmICggJFZlcnNpb24gIX4gL14xMVwuMC8gKSB7CgogICAgICAgIHJldHVybiAkU2VsZi0+X0NsZWFudXBBcnRpY2xlQWN0aW9ucyggQ2hhbm5lbCA9PiAkQ2hhbm5lbCApOwogICAgfQoKICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CgogICAgbXkgJVNldHRpbmcgPSAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nR2V0KAogICAgICAgIE5hbWUgICAgID0+ICJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zIyMjJENoYW5uZWwiLCAgICAjIChyZXF1aXJlZCkgU2V0dGluZyBuYW1lCiAgICAgICAgRGVwbG95ZWQgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBHZXQgZGVwbG95ZWQgc2V0dGluZyB2YWx1ZS4gRGVmYXVsdCAwLgogICAgKTsKCiAgICByZXR1cm4gaWYgISVTZXR0aW5nOwoKICAgIG15ICRFZmZlY3RpdmVWYWx1ZSA9ICRTZXR0aW5ne0VmZmVjdGl2ZVZhbHVlfTsKCiAgICBpZiAoICEkRWZmZWN0aXZlVmFsdWUtPntBZ2VudFRpY2tldEFJQ2hhdH0gKSB7CgogICAgICAgIG15ICRFeGNsdXNpdmVMb2NrR1VJRCA9ICRTeXNDb25maWdPYmplY3QtPlNldHRpbmdMb2NrKAogICAgICAgICAgICBMb2NrQWxsID0+IDEsCiAgICAgICAgICAgIEZvcmNlICAgPT4gMSwgICAgIyAob3B0aW9uYWwpIEZvcmNlIGxvY2tpbmcgKGRvIG5vdCBjaGVjayBpZiBpdCdzIGFscmVhZHkgbG9ja2VkIGJ5IGFub3RoZXIgdXNlcikuIERlZmF1bHQ6IDAuCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwgICAgIyAocmVxdWlyZWQpCiAgICAgICAgKTsKCiAgICAgICAgJEVmZmVjdGl2ZVZhbHVlLT57QWdlbnRUaWNrZXRBSUNoYXR9ID0gewogICAgICAgICAgICAnUHJpbycgICA9PiAnMTAwNycsCiAgICAgICAgICAgICdNb2R1bGUnID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6QXJ0aWNsZUFjdGlvbjo6QWdlbnRUaWNrZXRBSUNoYXQnLAogICAgICAgICAgICAnVmFsaWQnICA9PiAnMScKICAgICAgICB9OwoKICAgICAgICBteSAlUmVzdWx0ID0gJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ1VwZGF0ZSgKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gIlRpY2tldDo6RnJvbnRlbmQ6OkFydGljbGU6OkFjdGlvbnMjIyMkQ2hhbm5lbCIsICAgICMgKHJlcXVpcmVkKSBzZXR0aW5nIG5hbWUKICAgICAgICAgICAgSXNWYWxpZCAgICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSAxIG9yIDAsIG1vZGlmaWVkIDAKICAgICAgICAgICAgRWZmZWN0aXZlVmFsdWUgICAgPT4gJEVmZmVjdGl2ZVZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvbmx5IG5lZWRlZCB3aGVuIElzVmFsaWQgaXMgdHVybmVkIG9uCiAgICAgICAgICAgIEV4Y2x1c2l2ZUxvY2tHVUlEID0+ICRFeGNsdXNpdmVMb2NrR1VJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKHJlcXVpcmVkKSBVc2VySUQKICAgICAgICAgICAgTm9WYWxpZGF0aW9uICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBubyB2YWx1ZSB0eXBlIHZhbGlkYXRpb24uCiAgICAgICAgKTsKCiAgICAgICAgJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ1VubG9jaygKICAgICAgICAgICAgVW5sb2NrQWxsID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgJFN5c0NvbmZpZ09iamVjdC0+Q29uZmlndXJhdGlvbkRlcGxveSgKICAgICAgICAgICAgQ29tbWVudHMgICAgPT4gIm90b2JvLWFpIHBhY2thZ2UgaW5zdGFsbCIsCiAgICAgICAgICAgIEFsbFNldHRpbmdzID0+IDEsCiAgICAgICAgICAgIEZvcmNlICAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgX0NsZWFudXBBcnRpY2xlQWN0aW9ucyB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgIG15ICRDaGFubmVsID0gJFBhcmFte0NoYW5uZWx9OwoKICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CgogICAgbXkgJVNldHRpbmcgPSAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nR2V0KAogICAgICAgIE5hbWUgICAgID0+ICJUaWNrZXQ6OkZyb250ZW5kOjpBcnRpY2xlOjpBY3Rpb25zIyMjJENoYW5uZWwiLCAgICAjIChyZXF1aXJlZCkgU2V0dGluZyBuYW1lCiAgICAgICAgRGVwbG95ZWQgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBHZXQgZGVwbG95ZWQgc2V0dGluZyB2YWx1ZS4gRGVmYXVsdCAwLgogICAgICAgIE5vTG9nICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybiBpZiAhJVNldHRpbmc7CgogICAgbXkgJEVmZmVjdGl2ZVZhbHVlID0gJFNldHRpbmd7RWZmZWN0aXZlVmFsdWV9OwoKICAgIGlmICggJEVmZmVjdGl2ZVZhbHVlLT57QWdlbnRUaWNrZXRBSUNoYXR9ICkgewoKICAgICAgICBteSAkRXhjbHVzaXZlTG9ja0dVSUQgPSAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nTG9jaygKICAgICAgICAgICAgTG9ja0FsbCA9PiAxLAogICAgICAgICAgICBGb3JjZSAgID0+IDEsICAgICMgKG9wdGlvbmFsKSBGb3JjZSBsb2NraW5nIChkbyBub3QgY2hlY2sgaWYgaXQncyBhbHJlYWR5IGxvY2tlZCBieSBhbm90aGVyIHVzZXIpLiBEZWZhdWx0OiAwLgogICAgICAgICAgICBVc2VySUQgID0+IDEsICAgICMgKHJlcXVpcmVkKQogICAgICAgICk7CgogICAgICAgIGRlbGV0ZSAkRWZmZWN0aXZlVmFsdWUtPntBZ2VudFRpY2tldEFJQ2hhdH07CgogICAgICAgIG15ICVSZXN1bHQgPSAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nVXBkYXRlKAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICA9PiAiVGlja2V0OjpGcm9udGVuZDo6QXJ0aWNsZTo6QWN0aW9ucyMjIyRDaGFubmVsIiwgICAgIyAocmVxdWlyZWQpIHNldHRpbmcgbmFtZQogICAgICAgICAgICBJc1ZhbGlkICAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIDEgb3IgMCwgbW9kaWZpZWQgMAogICAgICAgICAgICBFZmZlY3RpdmVWYWx1ZSAgICA9PiAkRWZmZWN0aXZlVmFsdWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9ubHkgbmVlZGVkIHdoZW4gSXNWYWxpZCBpcyB0dXJuZWQgb24KICAgICAgICAgICAgRXhjbHVzaXZlTG9ja0dVSUQgPT4gJEV4Y2x1c2l2ZUxvY2tHVUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAocmVxdWlyZWQpIFVzZXJJRAogICAgICAgICAgICBOb1ZhbGlkYXRpb24gICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG5vIHZhbHVlIHR5cGUgdmFsaWRhdGlvbi4KICAgICAgICApOwoKICAgICAgICAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nVW5sb2NrKAogICAgICAgICAgICBVbmxvY2tBbGwgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU3lzQ29uZmlnT2JqZWN0LT5Db25maWd1cmF0aW9uRGVwbG95KAogICAgICAgICAgICBDb21tZW50cyAgICA9PiAib3RvYm8tYWkgcGFja2FnZSBpbnN0YWxsIiwKICAgICAgICAgICAgQWxsU2V0dGluZ3MgPT4gMSwKICAgICAgICAgICAgRm9yY2UgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICApOwoKICAgIH0KCiAgICByZXR1cm47Cn0KCnN1YiBfRkFRU2VhcmNoWFNMVCB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkWFNMVCA9IDw8J1hTTFQnOwo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CiAgIDx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiBpbmRlbnQ9InllcyIvPgoKICAgPCEtLSBuby1vcCBmYWxsYmFjayB0ZW1wbGF0ZSB0byBkcm9wIHVud2FudGVkIGNvbnRlbnQgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiPjwveHNsOnRlbXBsYXRlPgoKICAgPCEtLSBhbHdheXMgY29weSBmdWxsIEVycm9yIGluZm8gLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkVycm9yIj4KICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9Ii4iIC8+CiAgIDwveHNsOnRlbXBsYXRlPgoKICAgPCEtLSBGQVEgbWFwcGluZyAtLT4KICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iYW5vbiI+CiAgICAgICA8ZmFxPgogICAgICAgICAgIDxmYXFfaWQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ikl0ZW1JRCIvPjwvZmFxX2lkPgogICAgICAgICAgIDx0aXRsZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGl0bGUiLz48L3RpdGxlPgogICAgICAgICAgIDxzeW1wdGhvbT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRmllbGQxIiAvPjwvc3ltcHRob20+CiAgICAgICAgICAgPHByb2JsZW0+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkZpZWxkMSIgLz48L3Byb2JsZW0+CiAgICAgICAgICAgPHNvbHV0aW9uPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJGaWVsZDEiIC8+PC9zb2x1dGlvbj4KICAgICAgIDwvZmFxPgogICAgPC94c2w6dGVtcGxhdGU+CgogICA8IS0tIG1haW4gdGVtcGxhdGUgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii9Sb290RWxlbWVudCI+CiAgICAgPFJvb3RFbGVtZW50PgogICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+CiAgICAgPC9Sb290RWxlbWVudD4KICAgIDwveHNsOnRlbXBsYXRlPgoKPC94c2w6c3R5bGVzaGVldD4KWFNMVAoKICAgIHJldHVybiAkWFNMVDsKfQoKc3ViIF9UaWNrZXRHZXRYU0xUIHsKCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRYU0xUID0gPDwnWFNMVCc7Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cjx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KICAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ4bWwiIGluZGVudD0ieWVzIi8+CgogICA8IS0tIG5vLW9wIGZhbGxiYWNrIHRlbXBsYXRlIHRvIGRyb3AgdW53YW50ZWQgY29udGVudCAtLT4KICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iKiI+PC94c2w6dGVtcGxhdGU+CgogICA8IS0tIGFsd2F5cyBjb3B5IGZ1bGwgRXJyb3IgaW5mbyAtLT4KICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iRXJyb3IiPgogICAgICAgPHhzbDpjb3B5LW9mIHNlbGVjdD0iLiIgLz4KICAgPC94c2w6dGVtcGxhdGU+CgogICA8IS0tIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGR5bmFtaWMgZmllbGRzCiAgICAgICAgYnkgZGVmYXVsdCBvbmx5IHRoZSBPVE9CT0FJIGZpZWxkIGlzIGtlcHQKICAgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkR5bmFtaWNGaWVsZCI+CiAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9ImRmbmFtZSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4vTmFtZSIgLz48L3hzbDp2YXJpYWJsZT4KICAgICAgIDx4c2w6Y2hvb3NlPgogICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSJzdGFydHMtd2l0aCgkZGZuYW1lLCdPVE9CT0FJJykiPgogICAgICAgICAgICAgICA8Z2VuZXJhdGVkX2Fuc3dlcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iLi9WYWx1ZSIgLz48L2dlbmVyYXRlZF9hbnN3ZXI+CiAgICAgICAgICAgPC94c2w6d2hlbj4KICAgICAgICAgICA8eHNsOm90aGVyd2lzZT48L3hzbDpvdGhlcndpc2U+CiAgICAgICA8L3hzbDpjaG9vc2U+CiAgIDwveHNsOnRlbXBsYXRlPgoKICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iTGlua3NbVGFyZ2V0VHlwZT0nVGlja2V0J10iPgogICAgICAgPGxpbmtlZD4KICAgICAgICAgICA8dGlja2V0PgogICAgICAgICAgICA8dGlja2V0X2lkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJUYXJnZXRJRCIgLz48L3RpY2tldF9pZD4KICAgICAgICAgICAgPHR5cGU+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkxpbmtUeXBlIiAvPjwvdHlwZT4KICAgICAgICAgICAgPGRpcmVjdGlvbj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRGlyZWN0aW9uIi8+PC9kaXJlY3Rpb24+CiAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJEYXRhIj4KICAgICAgICAgICAgICAgPHRpY2tldF9udW1iZXI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlRpY2tldE51bWJlciIvPjwvdGlja2V0X251bWJlcj4KICAgICAgICAgICAgICAgPHRpdGxlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJUaXRsZSIvPjwvdGl0bGU+CiAgICAgICAgICAgICAgIDxzdGF0ZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdGUiLz48L3N0YXRlPgogICAgICAgICAgICAgICA8cHJpb3JpdHk+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlByaW9yaXR5Ii8+PC9wcmlvcml0eT4KICAgICAgICAgICAgICAgPHF1ZXVlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJRdWV1ZSIvPjwvcXVldWU+CiAgICAgICAgICAgICAgIDxjdXN0b21lcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQ3VzdG9tZXJVc2VySUQiLz48L2N1c3RvbWVyPgogICAgICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyAvPgogICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD4KICAgICAgICA8L3RpY2tldD4KICAgICAgIDwvbGlua2VkPgogICA8L3hzbDp0ZW1wbGF0ZT4KCiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkxpbmtzW1RhcmdldFR5cGU9J0ZBUSddIj4KICAgICAgIDxsaW5rZWQ+CiAgICAgICAgICAgPGZhcT4KICAgICAgICAgICAgPGZhcV9pZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGFyZ2V0SUQiIC8+PC9mYXFfaWQ+CiAgICAgICAgICAgIDx0eXBlPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJMaW5rVHlwZSIgLz48L3R5cGU+CiAgICAgICAgICAgIDx0aXRsZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRGF0YS9UaXRsZSIgLz48L3RpdGxlPgogICAgICAgICAgICA8c3lwdGhvbT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRGF0YS9GaWVsZDEiIC8+PC9zeXB0aG9tPnhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkN1c3RvbWVyVXNlcklEIi8+CiAgICAgICAgICAgIDxwcm9ibGVtPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJEYXRhL0ZpZWxkMiIgLz48L3Byb2JsZW0+CiAgICAgICAgICAgIDxzb2x1dGlvbj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRGF0YS9GaWVsZDMiIC8+PC9zb2x1dGlvbj4KICAgICAgICAgICAgPGRpcmVjdGlvbj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRGlyZWN0aW9uIi8+PC9kaXJlY3Rpb24+CiAgICAgICAgICAgPC9mYXE+CiAgICAgICA8L2xpbmtlZD4KICAgPC94c2w6dGVtcGxhdGU+CgogICAgPCEtLSBBcnRpY2xlIG1hcHBpbmcgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkFydGljbGUiPgogICAgICAgPGFydGljbGU+CiAgICAgICAgICAgPGFydGljbGVfaWQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkFydGljbGVJRCIvPjwvYXJ0aWNsZV9pZD4KICAgICAgICAgICA8ZnJvbT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iRnJvbSIvPjwvZnJvbT4KICAgICAgICAgICA8dG8+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IlRvIi8+PC90bz4KICAgICAgICAgICA8c3ViamVjdD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3ViamVjdCIvPjwvc3ViamVjdD4KICAgICAgICAgICA8Ym9keT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQm9keSIvPjwvYm9keT4KICAgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9IkNyZWF0ZWQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJDcmVhdGVUaW1lIiAvPjwveHNsOnZhcmlhYmxlPgogICAgICAgICAgIDx4c2w6Y2hvb3NlPgogICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0ibm90KCRDcmVhdGVkID0gJycpIj4KICAgICAgICAgICAgICAgICAgIDxjcmVhdGVkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSckQ3JlYXRlZCcgLz48L2NyZWF0ZWQ+CiAgICAgICAgICAgICAgIDwveHNsOndoZW4+CiAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPgogICAgICAgICAgICAgICAgICAgPGNyZWF0ZWQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkNyZWF0ZWQiIC8+PC9jcmVhdGVkPgogICAgICAgICAgICAgICA8L3hzbDpvdGhlcndpc2U+CiAgICAgICAgICAgPC94c2w6Y2hvb3NlPgogICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT0iQ2hhbm5lbCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkNvbW11bmljYXRpb25DaGFubmVsSUQiIC8+PC94c2w6dmFyaWFibGU+CiAgICAgICAgICAgPGNoYW5uZWw+CiAgICAgICAgICAgIDx4c2w6Y2hvb3NlPgogICAgICAgICAgICAgICA8eHNsOndoZW4gdGVzdD0iJENoYW5uZWwgPSAnMSciPkVtYWlsPC94c2w6d2hlbj4KICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRDaGFubmVsID0gJzInIj5QaG9uZTwveHNsOndoZW4+CiAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkQ2hhbm5lbCA9ICczJyI+SW50ZXJuYWw8L3hzbDp3aGVuPgogICAgICAgICAgICAgICA8eHNsOm90aGVyd2lzZT5PdGhlcjwveHNsOm90aGVyd2lzZT4KICAgICAgICAgICAgPC94c2w6Y2hvb3NlPgogICAgICAgICAgIDwvY2hhbm5lbD4KICAgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9IlNlbmRlclR5cGUiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTZW5kZXJUeXBlSUQiIC8+PC94c2w6dmFyaWFibGU+CiAgICAgICAgICAgPHNlbmRlcl90eXBlPgogICAgICAgICAgICA8eHNsOmNob29zZT4KICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRTZW5kZXJUeXBlID0gJzEnIj5hZ2VudDwveHNsOndoZW4+CiAgICAgICAgICAgICAgIDx4c2w6d2hlbiB0ZXN0PSIkU2VuZGVyVHlwZSA9ICcyJyI+c3lzdGVtPC94c2w6d2hlbj4KICAgICAgICAgICAgICAgPHhzbDp3aGVuIHRlc3Q9IiRTZW5kZXJUeXBlID0gJzMnIj5jdXN0b21lcjwveHNsOndoZW4+CiAgICAgICAgICAgICAgIDx4c2w6b3RoZXJ3aXNlPk90aGVyPC94c2w6b3RoZXJ3aXNlPgogICAgICAgICAgICA8L3hzbDpjaG9vc2U+CiAgICAgICAgICAgPC9zZW5kZXJfdHlwZT4KICAgICAgICAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcyAvPgogICAgICAgPC9hcnRpY2xlPgogICA8L3hzbDp0ZW1wbGF0ZT4KCiAgIDwhLS0gVGlja2V0IG1hcHBpbmcgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbmFtZT0iVGlja2V0IiBtYXRjaD0iVGlja2V0Ij4KICAgICAgIDx0aWNrZXQ+CiAgICAgICAgICAgPHRpY2tldF9pZD48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGlja2V0SUQiLz48L3RpY2tldF9pZD4KICAgICAgICAgICA8dGlja2V0X251bWJlcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGlja2V0TnVtYmVyIi8+PC90aWNrZXRfbnVtYmVyPgogICAgICAgICAgIDx0aXRsZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGl0bGUiLz48L3RpdGxlPgogICAgICAgICAgIDxzdGF0ZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iU3RhdGUiLz48L3N0YXRlPgogICAgICAgICAgIDxwcmlvcml0eT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iUHJpb3JpdHkiLz48L3ByaW9yaXR5PgogICAgICAgICAgIDxxdWV1ZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iUXVldWUiLz48L3F1ZXVlPgogICAgICAgICAgIDxjdXN0b21lcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQ3VzdG9tZXJVc2VySUQiLz48L2N1c3RvbWVyPgogICAgICAgICAgIDxvd25lcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iT3duZXIiLz48L293bmVyPgogICAgICAgICAgIDxjcmVhdGVkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJDcmVhdGVkIi8+PC9jcmVhdGVkPgogICAgICAgICAgIDxjaGFuZ2VkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJDaGFuZ2VkIi8+PC9jaGFuZ2VkPgogICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIC8+CiAgICAgICA8L3RpY2tldD4KICAgIDwveHNsOnRlbXBsYXRlPgoKICAgPCEtLSBtYWluIHRlbXBsYXRlIC0tPgogICA8eHNsOnRlbXBsYXRlIG1hdGNoPSIvUm9vdEVsZW1lbnQiPgogICAgIDxSb290RWxlbWVudD4KICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgogICAgIDwvUm9vdEVsZW1lbnQ+CiAgICA8L3hzbDp0ZW1wbGF0ZT4KCjwveHNsOnN0eWxlc2hlZXQ+ClhTTFQKCiAgICByZXR1cm4gJFhTTFQ7Cn0KCnN1YiBfVGlja2V0U2VhcmNoWFNMVCB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkWFNMVCA9IDw8J1hTTFQnOwo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CiAgIDx4c2w6b3V0cHV0IG1ldGhvZD0ieG1sIiBpbmRlbnQ9InllcyIvPgoKICAgPCEtLSBuby1vcCBmYWxsYmFjayB0ZW1wbGF0ZSB0byBkcm9wIHVud2FudGVkIGNvbnRlbnQgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IioiPjwveHNsOnRlbXBsYXRlPgoKICAgPCEtLSBhbHdheXMgY29weSBmdWxsIEVycm9yIGluZm8gLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IkVycm9yIj4KICAgICAgIDx4c2w6Y29weS1vZiBzZWxlY3Q9Ii4iIC8+CiAgIDwveHNsOnRlbXBsYXRlPgoKICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iVG8iPgogICAgICAgPHRvPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+PC90bz4KICAgPC94c2w6dGVtcGxhdGU+CgogICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJBcnRpY2xlc0V4dGVybmFsIj4KICAgICAgIDxhcnRpY2xlPgogICAgICAgICAgIDxzdWJqZWN0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJTdWJqZWN0Ii8+PC9zdWJqZWN0PgogICAgICAgICAgIDxmcm9tPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJGcm9tIi8+PC9mcm9tPgogICAgICAgICAgIDxib2R5Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJCb2R5Ii8+PC9ib2R5PgogICAgICAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KICAgICAgIDwvYXJ0aWNsZT4KICAgPC94c2w6dGVtcGxhdGU+CiAgIDwhLS0gdGlja2V0IG1hcHBpbmcgLS0+CiAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9ImFub24iPgogICAgICAgPHRpY2tldD4KICAgICAgICAgICA8dGlja2V0X2lkPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJUaWNrZXRJRCIvPjwvdGlja2V0X2lkPgogICAgICAgICAgIDx0aXRsZT48eHNsOnZhbHVlLW9mIHNlbGVjdD0iVGl0bGUiLz48L3RpdGxlPgogICAgICAgICAgIDx0aWNrZXRfbnVtYmVyPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJUaWNrZXROdW1iZXIiIC8+PC90aWNrZXRfbnVtYmVyPgogICAgICAgICAgIDxjdXN0b21lcj48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQ3VzdG9tZXJJRCIgLz48L2N1c3RvbWVyPgogICAgICAgICAgIDxjdXN0b21lcl91c2VyPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJDdXN0b21lclVzZXJJRCIgLz48L2N1c3RvbWVyX3VzZXI+CiAgICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPgogICAgICAgPC90aWNrZXQ+CiAgICA8L3hzbDp0ZW1wbGF0ZT4KCiAgIDwhLS0gbWFpbiB0ZW1wbGF0ZSAtLT4KICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iL1Jvb3RFbGVtZW50Ij4KICAgICA8Um9vdEVsZW1lbnQ+CiAgICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzLz4KICAgICA8L1Jvb3RFbGVtZW50PgogICAgPC94c2w6dGVtcGxhdGU+Cgo8L3hzbDpzdHlsZXNoZWV0PgpYU0xUCgogICAgcmV0dXJuICRYU0xUOwp9CgoxOwo=</File>
        <File Location="var/webservices/metadata/OtoboAIProvider.yml" Permission="660" Encode="Base64">LS0tIApjb21wb25lbnRzOgoKICBzY2hlbWFzOgogICAgQXJ0aWNsZURGVXBkYXRlUmVxdWVzdDoKICAgICAgYWxsT2Y6CiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlZGVudGlhbHMnCiAgICAgICAgLSB0eXBlOiBvYmplY3QKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIER5bmFtaWNGaWVsZDoKICAgICAgICAgICAgICAkcmVmIDogJyMvY29tcG9uZW50cy9zY2hlbWFzL0R5bmFtaWNGaWVsZHMnCiAgICAgICAgICAgIFRpY2tldElEOgogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgVGlja2V0SUQgdG8gdXBkYXRlCiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgIEFydGljbGVJRDoKICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogVGhlIEFydGljbGVJRCB0byB1cGRhdGUKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIHJlcXVpcmVkOgogICAgICAgICAgICAtIFRpY2tldElECgogICAgQXJ0aWNsZURGVXBkYXRlUmVzcG9uc2U6CiAgICAgIGFsbE9mOgogICAgICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0FwaUVycm9yJwogICAgICAgIC0gdHlwZTogb2JqZWN0CiAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICBUaWNrZXRJRDoKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgQXJ0aWNsZUlEOgogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICBTdWNjZXNzOgogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwoKICAgIEVTU2VhcmNoUmVxdWVzdDoKICAgICAgYWxsT2Y6CiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlZGVudGlhbHMnCiAgICAgICAgLSB0eXBlOiBvYmplY3QKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIEZ1bGx0ZXh0OgogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgZnVsbHRleHQgc2VhcmNoIHRlcm0KICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgTGltaXQ6CiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIHNlYXJjaCByZXN1bHRzCiAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgIC0gUXVlcnkKCgogICAgRVNGQVFTZWFyY2hSZXNwb25zZToKICAgICAgYWxsT2Y6CiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQXBpRXJyb3InCiAgICAgICAgLSB0eXBlOiBvYmplY3QKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIGZhcToKICAgICAgICAgICAgICB0eXBlOiBhcnJheQogICAgICAgICAgICAgIGl0ZW1zOgogICAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgICBJdGVtSUQ6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogaW50ZWdlcgogICAgICAgICAgICAgICAgICBUaXRsZToKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgICAgRmllbGQxOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgICBGaWVsZDI6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgIEZpZWxkMzoKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKCiAgICBFU1RpY2tldFNlYXJjaFJlc3BvbnNlOgogICAgICBhbGxPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9BcGlFcnJvcicKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgdGlja2V0OgogICAgICAgICAgICAgIHR5cGU6IGFycmF5CiAgICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgICAgIEN1c3RvbWVySUQ6CiAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgICBUaWNrZXRJRDoKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgICAgVGlja2V0TnVtYmVyOgogICAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgICBUaXRsZToKICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICAgICAgQXJ0aWNsZToKICAgICAgICAgICAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgICAgICAgU3ViamVjdDoKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICBCb2R5OiAKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICBGcm9tOiAKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICBUbzoKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCgogICAgUXVlcnlFbWJlZGRpbmdzUmVxdWVzdDoKICAgICAgYWxsT2Y6CiAgICAgICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQ3JlZGVudGlhbHMnCiAgICAgICAgLSB0eXBlOiBvYmplY3QKICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgIFRpY2tldElEOgogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaWNrZXRJRAogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICBBcnRpY2xlSUQ6CiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IEFydGljbGVJRAogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICBDb2xsZWN0aW9uOgogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBDb2xsZWN0aW9uCiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgZW51bToKICAgICAgICAgICAgICAgIC0gZmFxcwogICAgICAgICAgICAgICAgLSB0aWNrZXRfcGFpcnMKICAgICAgICAgICAgICAgIC0gdGlja2V0X2NodW5rcwogICAgICAgICAgICAgICAgLSBkb2NzCgogICAgUXVlcnlFbWJlZGRpbmdzUmVzcG9uc2U6CiAgICAgIGFsbE9mOgogICAgICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0FwaUVycm9yJwogICAgICAgIC0gdHlwZTogYXJyYXkKICAgICAgICAgIGl0ZW1zOiAgICAgICAgICAgIAogICAgICAgICAgICAgIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgICBwYWdlX2NvbnRlbnQ6CiAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgaWQ6CiAgICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgICAgbWV0YWRhdGE6CiAgICAgICAgICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgICAgIGZ1bGx0ZXh0OgogICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgc291cmNlX2lkOgogICAgICAgICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgbGFiZWw6CiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKCgogICAgVGlja2V0TGlua1JlcXVlc3Q6CiAgICAgIGFsbE9mOgogICAgICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9zY2hlbWFzL0NyZWRlbnRpYWxzJwogICAgICAgIC0gdHlwZTogb2JqZWN0CiAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICBUaWNrZXRJRDoKICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogVGlja2V0SUQKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgVGFyZ2V0VHlwZToKICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogVGFyZ2V0IE9iamVjdCBUeXBlCiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgICAgZW51bToKICAgICAgICAgICAgICAgIC0gVGlja2V0CiAgICAgICAgICAgICAgICAtIEZBUQogICAgICAgICAgICAgICAgLSBDb25maWdJdGVtICAgICAgICAgICAgICAgIAogICAgICAgICAgICBMaW5rVHlwZToKICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogVGFyZ2V0IExpbmsgVHlwZQogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGVudW06CiAgICAgICAgICAgICAgICAtIE5vcm1hbAogICAgICAgICAgICAgICAgLSBQYXJlbnRDaGlsZAogICAgICAgICAgICAgICAgLSBMb2NhdGlvbk9mCiAgICAgICAgICAgICAgICAtIEluY2x1ZGVzCiAgICAgICAgICAgICAgICAtIEFsdGVybmF0aXZlVG8KICAgICAgICAgICAgICAgIC0gQ29ubmVjdGVkVG8KICAgICAgICAgICAgICAgIC0gRGVwZW5kc09uCiAgICAgICAgICAgICAgICAtIFJlbGV2YW50VG8gICAgICAgICAgICAgICAgCiAgICAgICAgICAgIFRhcmdldElEOgogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBUYXJnZXQgT2JqZWN0IElECiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCgogICAgVGlja2V0TGlua1Jlc3BvbnNlOgogICAgICBhbGxPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9BcGlFcnJvcicKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgU3VjY2VzczoKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKCiAgICBUaWNrZXRVbmxpbmtSZXF1ZXN0OgogICAgICBhbGxPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9DcmVkZW50aWFscycKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgVGlja2V0SUQ6CiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFRpY2tldElECiAgICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICAgIFRhcmdldFR5cGU6CiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFRhcmdldCBPYmplY3QgVHlwZQogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgICAgIGVudW06CiAgICAgICAgICAgICAgICAtIFRpY2tldAogICAgICAgICAgICAgICAgLSBGQVEKICAgICAgICAgICAgICAgIC0gQ29uZmlnSXRlbSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgTGlua1R5cGU6CiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFRhcmdldCBMaW5rIFR5cGUKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgICAgICBlbnVtOgogICAgICAgICAgICAgICAgLSBOb3JtYWwKICAgICAgICAgICAgICAgIC0gUGFyZW50Q2hpbGQKICAgICAgICAgICAgICAgIC0gTG9jYXRpb25PZgogICAgICAgICAgICAgICAgLSBJbmNsdWRlcwogICAgICAgICAgICAgICAgLSBBbHRlcm5hdGl2ZVRvCiAgICAgICAgICAgICAgICAtIENvbm5lY3RlZFRvCiAgICAgICAgICAgICAgICAtIERlcGVuZHNPbgogICAgICAgICAgICAgICAgLSBSZWxldmFudFRvICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICBUYXJnZXRJRDoKICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogVGFyZ2V0IE9iamVjdCBJRAogICAgICAgICAgICAgIHR5cGU6IHN0cmluZwoKICAgIFRpY2tldFVubGlua1Jlc3BvbnNlOgogICAgICBhbGxPZjoKICAgICAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9BcGlFcnJvcicKICAgICAgICAtIHR5cGU6IG9iamVjdAogICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgU3VjY2VzczoKICAgICAgICAgICAgICB0eXBlOiBzdHJpbmcKCgpUaWNrZXQ6OkFydGljbGVERlVwZGF0ZTogCiAgUXVlcnlQYXJhbXM6CiAgICBHRVQ6CiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9Vc2VyTG9naW4nCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9QYXNzd29yZCcKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1Nlc3Npb25JRCcgIAogICAgLSBkZXNjcmlwdGlvbjogQXJ0aWNsZUlECiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBBcnRpY2xlSUQKICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgIHNjaGVtYToKICAgICAgICB0eXBlOiBzdHJpbmcgICAgCiAgICBQVVQ6CiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9Vc2VyTG9naW4nCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9QYXNzd29yZCcKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1Nlc3Npb25JRCcgIAogICAgLSBkZXNjcmlwdGlvbjogQXJ0aWNsZUlECiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBBcnRpY2xlSUQKICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgIHNjaGVtYToKICAgICAgICB0eXBlOiBzdHJpbmcgICAgCiAgUmVxdWVzdEJvZHk6CiAgICBjb250ZW50OgogICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgU2ltcGxlOgogICAgICAgICAgICB2YWx1ZToKICAgICAgICAgICAgICBUaWNrZXRJRDogMQogICAgICAgICAgICAgIER5bmFtaWNGaWVsZDoKICAgICAgICAgICAgICAtIE5hbWU6IE15RHluYW1pY0ZpZWxkTmFtZQogICAgICAgICAgICAgICAgVmFsdWU6IFNvbWVWYWx1ZQogICAgICAgICAgV2l0aEFydGljbGVJRDoKICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgVGlja2V0SUQ6IDEKICAgICAgICAgICAgICBBcnRpY2xlSUQ6IDE4CiAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkOgogICAgICAgICAgICAgIC0gTmFtZTogTXlEeW5hbWljRmllbGROYW1lCiAgICAgICAgICAgICAgICBWYWx1ZTogU29tZVZhbHVlCiAgICAgICAgc2NoZW1hOgogICAgICAgICAgJHJlZiA6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9BcnRpY2xlREZVcGRhdGVSZXF1ZXN0JwogICAgcmVxdWlyZWQ6IHRydWUKICBSZXNwb25zZXM6CiAgICAyMDA6CiAgICAgIGNvbnRlbnQ6CiAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgICBmb286CiAgICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgICBBcnRpY2xlSUQ6IDcKICAgICAgICAgICAgICAgIFRpY2tldElEOiA3CiAgICAgICAgICAgICAgICBTdWNlc3MgOiAxCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWYgOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvQXJ0aWNsZURGVXBkYXRlUmVzcG9uc2UnCiAgICAgIGRlc2NyaXB0aW9uOiAyMDAgcmVzcG9uc2UKCkVsYXN0aWNTZWFyY2g6OkZBUVNlYXJjaDoKICBRdWVyeVBhcmFtczogCiAgICBHRVQ6CiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9Vc2VyTG9naW4nCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9QYXNzd29yZCcKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1Nlc3Npb25JRCcKICAgIC0gZGVzY3JpcHRpb246IEZ1bGx0ZXh0IHF1ZXJ5IHRlcm0KICAgICAgaW46IHF1ZXJ5CiAgICAgIG5hbWU6IEZ1bGx0ZXh0CiAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgIHNjaGVtYToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgIC0gZGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIHNlYXJjaCByZXN1bHRzCiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBMaW1pdAogICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgc2NoZW1hOgogICAgICAgIHR5cGU6IGludGVnZXIKICBSZXF1ZXN0Qm9keToKICAgIGNvbnRlbnQ6CiAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBTaW1wbGU6CiAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgIFF1ZXJ5OiAnV2hvIGxldCB0aGUgZG9ncyBvdXQ/JwogICAgICAgIHNjaGVtYToKICAgICAgICAgICRyZWYgOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvRVNTZWFyY2hSZXF1ZXN0JwogICAgcmVxdWlyZWQ6IHRydWUKICBSZXNwb25zZXM6CiAgICAyMDA6CiAgICAgIGNvbnRlbnQ6CiAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgICBmYXFzOgogICAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgICAgLSBmYXE6CiAgICAgICAgICAgICAgICAgIGZhcV9pZDogMgogICAgICAgICAgICAgICAgICBzeW1wdGhvbSA6ICJBIHN5bXB0aG9tIgogICAgICAgICAgICAgICAgICBwcm9ibGVtOiAiQSBwcm9ibGVtIgogICAgICAgICAgICAgICAgICBzb2x1dGlvbjogIlRoZSBzb2x1dGlvbiIKICAgICAgICAgICAgICAgICAgdGl0bGU6ICJzb21lIHRpdGxlIgogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAkcmVmIDogJyMvY29tcG9uZW50cy9zY2hlbWFzL0VTRkFRU2VhcmNoUmVzcG9uc2UnCiAgICAgIGRlc2NyaXB0aW9uOiAyMDAgcmVzcG9uc2UKCkVsYXN0aWNTZWFyY2g6OlRpY2tldFNlYXJjaDoKICBRdWVyeVBhcmFtczogCiAgICBHRVQ6CiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9Vc2VyTG9naW4nCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9QYXNzd29yZCcKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1Nlc3Npb25JRCcKICAgIC0gZGVzY3JpcHRpb246IEZ1bGx0ZXh0IHF1ZXJ5IHRlcm0KICAgICAgaW46IHF1ZXJ5CiAgICAgIG5hbWU6IEZ1bGx0ZXh0CiAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgIHNjaGVtYToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgIC0gZGVzY3JpcHRpb246IE1heGltdW0gbnVtYmVyIG9mIHNlYXJjaCByZXN1bHRzCiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBMaW1pdAogICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgc2NoZW1hOgogICAgICAgIHR5cGU6IGludGVnZXIKICBSZXF1ZXN0Qm9keToKICAgIGNvbnRlbnQ6CiAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBTaW1wbGU6CiAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgIFF1ZXJ5OiAnV2hvIGxldCB0aGUgZG9ncyBvdXQ/JwogICAgICAgIHNjaGVtYToKICAgICAgICAgICRyZWYgOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvRVNTZWFyY2hSZXF1ZXN0JwogICAgcmVxdWlyZWQ6IHRydWUKICBSZXNwb25zZXM6CiAgICAyMDA6CiAgICAgIGNvbnRlbnQ6CiAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgICBmYXFzOgogICAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgICAgLSB0aWNrZXQgCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWYgOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvRVNUaWNrZXRTZWFyY2hSZXNwb25zZScKICAgICAgZGVzY3JpcHRpb246IDIwMCByZXNwb25zZQoKVGlja2V0OjpRdWVyeUVtYmVkZGluZ3M6CiAgUXVlcnlQYXJhbXM6IAogICAgR0VUOgogICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3BhcmFtZXRlcnMvVXNlckxvZ2luJwogICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3BhcmFtZXRlcnMvUGFzc3dvcmQnCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9TZXNzaW9uSUQnCiAgICAtIGRlc2NyaXB0aW9uOiBUaWNrZXRJRAogICAgICBpbjogcXVlcnkKICAgICAgbmFtZTogVGlja2V0SUQKICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgc2NoZW1hOgogICAgICAgIHR5cGU6IHN0cmluZwogICAgLSBkZXNjcmlwdGlvbjogQXJ0aWNsZUlECiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBBcnRpY2xlSUQKICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICAgIHNjaGVtYToKICAgICAgICB0eXBlOiBzdHJpbmcKICAgIC0gZGVzY3JpcHRpb246IENvbGxlY3Rpb24gbmFtZQogICAgICBpbjogcXVlcnkKICAgICAgbmFtZTogQ29sbGVjdGlvbgogICAgICByZXF1aXJlZDogdHJ1ZQogICAgICBzY2hlbWE6CiAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgZW51bToKICAgICAgICAgIC0gZmFxcwogICAgICAgICAgLSB0aWNrZXRfcGFpcnMKICAgICAgICAgIC0gdGlja2V0X2NodW5rcwogICAgICAgICAgLSBkb2NzCiAgICAtIGRlc2NyaXB0aW9uOiBRdWVyeSBmb3Igc2ltaWxhciBpdGVtIHNlYXJjaC4gaWYgb21pdHRlZCwgc3ViamVjdCArIGJvZHkgb2YgdGhlIHJlZmVyZW5jZWQgYXJ0aWNsZSBpcyB1c2VkCiAgICAgIGluOiBxdWVyeQogICAgICBuYW1lOiBRdWVyeQogICAgICByZXF1aXJlZDogZmFsc2UKICAgICAgc2NoZW1hOgogICAgICAgIHR5cGU6IHN0cmluZwoKICBSZXF1ZXN0Qm9keToKICAgIGNvbnRlbnQ6CiAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBTaW1wbGU6CiAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgIFRpY2tldElEOiAxLAogICAgICAgICAgICAgIEFydGljbGVJRDogMSwKICAgICAgICAgICAgICBDb2xsZWN0aW9uczogZmFxcywKICAgICAgICBzY2hlbWE6CiAgICAgICAgICAkcmVmIDogJyMvY29tcG9uZW50cy9zY2hlbWFzL1F1ZXJ5RW1iZWRkaW5nc1JlcXVlc3QnCiAgICByZXF1aXJlZDogdHJ1ZQogIFJlc3BvbnNlczoKICAgIDIwMDoKICAgICAgY29udGVudDoKICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICAgIGZhcXM6CiAgICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgICAtIGlkOiA8dXVpZD4KICAgICAgICAgICAgICAgICAgcGFnZV9jb250ZW50OiAnZW1iZWRkZWQgdGV4dCcKICAgICAgICAgICAgICAgICAgdHlwZTogRG9jdW1lbnQKICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6CiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGRlZmF1bHQKICAgICAgICAgICAgICAgICAgICBzb3VyY2VfaWQ6IDEKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZiA6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9RdWVyeUVtYmVkZGluZ3NSZXNwb25zZScKICAgICAgZGVzY3JpcHRpb246IDIwMCByZXNwb25zZQoKClRpY2tldDo6TGluazoKICBRdWVyeVBhcmFtczoKICAgIFBVVDoKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1VzZXJMb2dpbicKICAgIC0gJHJlZjogJyMvY29tcG9uZW50cy9wYXJhbWV0ZXJzL1Bhc3N3b3JkJwogICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3BhcmFtZXRlcnMvU2Vzc2lvbklEJyAgICAKICBSZXF1ZXN0Qm9keToKICAgIGNvbnRlbnQ6CiAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgZXhhbXBsZXM6CiAgICAgICAgICBTaW1wbGU6CiAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgIFRpY2tldElEOiAxLAogICAgICAgICAgICAgIFRhcmdldFR5cGU6IFRpY2tldAogICAgICAgICAgICAgIExpbmtUeXBlOiBOb3JtYWwKICAgICAgICAgICAgICBUYXJnZXRJRDogMiwKICAgICAgICAgIFBhcmVudENoaWxkOgogICAgICAgICAgICB2YWx1ZToKICAgICAgICAgICAgICBUaWNrZXRJRDogMSwKICAgICAgICAgICAgICBUYXJnZXRUeXBlOiBUaWNrZXQKICAgICAgICAgICAgICBMaW5rVHlwZTogUGFyZW50Q2hpbGQKICAgICAgICAgICAgICBUYXJnZXRJRDogMiwKICAgICAgICBzY2hlbWE6CiAgICAgICAgICAkcmVmIDogJyMvY29tcG9uZW50cy9zY2hlbWFzL1RpY2tldExpbmtSZXF1ZXN0JwogICAgcmVxdWlyZWQ6IHRydWUKICBSZXNwb25zZXM6CiAgICAyMDA6CiAgICAgIGNvbnRlbnQ6CiAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgIGV4YW1wbGVzOgogICAgICAgICAgICBTdWNjZXNzIDogMQogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAkcmVmIDogJyMvY29tcG9uZW50cy9zY2hlbWFzL1RpY2tldExpbmtSZXNwb25zZScKICAgICAgZGVzY3JpcHRpb246IDIwMCByZXNwb25zZQoKClRpY2tldDo6VW5MaW5rOgogIFF1ZXJ5UGFyYW1zOgogICAgREVMRVRFOgogICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3BhcmFtZXRlcnMvVXNlckxvZ2luJwogICAgLSAkcmVmOiAnIy9jb21wb25lbnRzL3BhcmFtZXRlcnMvUGFzc3dvcmQnCiAgICAtICRyZWY6ICcjL2NvbXBvbmVudHMvcGFyYW1ldGVycy9TZXNzaW9uSUQnICAgIAogIFJlcXVlc3RCb2R5OgogICAgY29udGVudDoKICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICBleGFtcGxlczoKICAgICAgICAgIFNpbXBsZToKICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgVGlja2V0SUQ6IDEsCiAgICAgICAgICAgICAgVGFyZ2V0VHlwZTogVGlja2V0CiAgICAgICAgICAgICAgTGlua1R5cGU6IE5vcm1hbAogICAgICAgICAgICAgIFRhcmdldElEOiAyLAogICAgICAgICAgUGFyZW50Q2hpbGQ6CiAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgIFRpY2tldElEOiAxLAogICAgICAgICAgICAgIFRhcmdldFR5cGU6IFRpY2tldAogICAgICAgICAgICAgIExpbmtUeXBlOiBQYXJlbnRDaGlsZAogICAgICAgICAgICAgIFRhcmdldElEOiAyLAogICAgICAgIHNjaGVtYToKICAgICAgICAgICRyZWYgOiAnIy9jb21wb25lbnRzL3NjaGVtYXMvVGlja2V0VW5saW5rUmVxdWVzdCcKICAgIHJlcXVpcmVkOiB0cnVlCiAgUmVzcG9uc2VzOgogICAgMjAwOgogICAgICBjb250ZW50OgogICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICBleGFtcGxlczoKICAgICAgICAgICAgU3VjY2VzcyA6IDEKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZiA6ICcjL2NvbXBvbmVudHMvc2NoZW1hcy9UaWNrZXRVbmxpbmtSZXNwb25zZScKICAgICAgZGVzY3JpcHRpb246IDIwMCByZXNwb25zZQoKCg==</File>
        <File Location="doc/en/OTOBO-AI.pdf" Permission="644" Encode="Base64">JVBERi0xLjUKJeTw7fgKNCAwIG9iago8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCA4MjgvSGVpZ2h0IDI1My9Db2xvclNwYWNlL0RldmljZUdyYXkvQml0c1BlckNvbXBvbmVudAo4L0RlY29kZVBhcm1zPDwvQml0c1BlckNvbXBvbmVudCA4L0NvbG9ycyAxL0NvbHVtbnMgODI4L1ByZWRpY3RvciAyPj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aAoyNDQzPj4Kc3RyZWFtCnja7d2LddpYAgZgUkGYCqKtIGwFZisIqWCYCsJUsGwFw1QwuIJlKli5gpUrGKhgTQVZJ465AoORhB7X6PvOmXMSGzsaSf/VfWswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgF5LktEwSR7/kC3WNf3K8TSp/LOr5cN1nufZ5PxnsodsnTV5EE9XJh2s19mDW/+yUzke34S/bcf1XLflz5f89P34Gq/qMP1Y8JPb1WrV1FHkr8wmS9NMBKpdzcnk0+FlS+q4bef/vOzn70dXeLbTmxIf3i4WjZQfk38ffGGTLlNJKP/wPvZw+HVRw69+eH/hL/jH9V3P0X/LfX47XzRwFNmRZ99muVyLQwnT+YejX//XvIb201+X/oY6jiK2ouo/ZX/iblL/o+fr8S/fzqXn0uTEkp1fF7JTX+vzfHakp/BlnJ+uev+yrOEfWH+48Bf8PZOdRsKz+nTyW7/P9bud7SGYfzn9zc2ojhP4okVatrYyHshOI+F57Si205V0vH72lq88FDaTeq7V7LeLojN5kJ06y7J8bf2PV77559Sj5xWnuo/vBoOHbL2q69wlk+GJ7+z+/bv0VL3iKsccQnZuT7csRsPkoGS7ndZ8HMl08PhUTz40WnZeZX1t+bK+u02ztMUh5q919kq8yey83gGfjKd7rdGmuutHyXj8saH27lVG58XQdpND2LJTJTvfPrr42E7b78jg+OD3mZwcK2rSgzHLu2X7pYzsFHiS5GfONDtOnEynTdcSrzE6d/O0g6OQnSJhyIWn8Xv5cLBPeM5FZzNNOzkM2Sn0IMnNfnvXeFV+NnsvPMXbOp3dubJTKDtJtrudPzffIk2WN8Jz2t4swPtpZ32RslOsARNqba2cqNk8/+jR23aq9Tm4nXU3BiY7xbIT5l23M8titMq3eq5wInv19uAfMdTXZKfEfbmbFLhJ2q/U17OO6yrkas9dP5Blp2B2Qm/Bu3aOcLjKNXqucUphNfk1ix3XZWWnYHbC7Kl3bR1jfpb1FS4DqdYQ/C2eZmBfsxOuQbzZyVfbtqO14DyeknWosXU+5aKv2QlRiDc7e+H5cyI5e31s3VdjZSfi7OwNoOtr21sCHUH3iewUvCcXXzrITr5DVnfB3mMngqJEdsr2s22HbR5nrr/Agyf32IlhroXslB3fabf8zzWOPXjCYyeKAS/ZKZadUOS13L2Tq7X1/cGTK0eiuFtlp9gdGW7hzy2vTgwzH/s+JzRcg00ykJ03k50wnP1Ty7WF3K4kP/V7Zk4oReIYKZadQtkJN3D7rY5wy/R7PnWoNkcyvU92Sq59a//+DVWVfo+PhqkgkWziIDtFshM+3UWRF/bi73WlLXTXR7JP7dee1gfCXqkFLkSur6uLIiYMy/a60vY1rp6C3LDF39b9rDyfH+ocLsJodic17bDurs89baHJGcu+W8/lb+/2AXuuAZztstnb9bibDp5dAXeVbxEr3dyJZpzrqULQv62PfywtO1NmJJNpfmOJjob2w3h6jxs84SS8i+aYksd6QJr28GJMHgvxg1esTcf7VenR/hZ6tW/lXlBob/V4asGuq9PcpHgfRSc18PKqko2zPi8f/Rpbc4cX1df4ouO+2TsHlp/HfHWOR6fDVc/qK+U3mKCTq3PcZr7s6tB2w4KyIztvMTuPd+60o0fPbl5Duwvv4rw679yq8Xl4f+4TXb0DtJPNEuIS+hpl5+31FXzXzayYMC7Y2xtH8RG3vV3CYwqPCkuk2RmPs2zdw6sxHI8O3+w6PXin8bF36HbRVJWdKOtsT9O1ejhu8L0g287OPEaGo/F4f8S0i+mg6mwxFh/Pc3R7F57nOkCB7QeG01n++dPBCjSV/Vx2Ilm9kxt169kahOH/fvxhkxQq+PPvkmq/1qaPOsbxnb6ufQuXolihMVqG+dTtD1AaG41xTo411wWLsfy+6q2XfObkxDinT3aKBiG3r3rryzfNBY2x/JCdwg+R0NnVdqsjLLru8Rzi+Na+yU7xCthu6XPbe4Na+7ZXdH1eyc5by064ei2fLGuu9x6+sVRcZad4dsLyzZar3LtJqn3e6yOchU0iO28tO62/J/6HsJdcr5cbx7u3oeyUuXqtNldDlS2Wmn4nQqsvkh4T2SmRnY6mxoTNsHs9/X43FSSWcXzZqZSdVmcw7bLT83dd7x77kcwfk51K2Wm1r3j3z/b7HSK7eVSxFCHtZOfbuph0cVH/6nQ6yi78FW81O8/vCux1L9v3e2Dx7UREs4dtK9l5auxetL/Z0wucNuO6ntaVpuV2tRRgtPrWwXc/fuh5dgbD6fAhjWUJQivZee4gueDiP28lUNvASqXshA0NWm60D0fjQbYaEJU2srN76V/lOZShe7KuZmKl7OjwouXshP02KzZ2c1OY62poVMrO7n/EduK0nZ1q4UmysGizy+yE8f2+v62dtrIThuMrhSe/6qy2jTaqZCeM7/e8s5jWsrO3WW3p2y6/2rm+o6yQnTAVtG+bO9BZdnJ9u+XDk2vr1NnOqJCd0FPQ+4EWWsvOXq2tXGPhaTis7hpblezkNg31Bhhay06+yfJYbE+KVnnyr5iu9+VRpbOz7Phl1/Q0O3tdZY8337xYwb33iul6W+gls9NMowvZKdtseXz0zM7fscl8f2v1Wju3SmVn/0g8dmg1O4fhGdzNX79nh7PZ++aiUyI7yWRy0+CBIDulwzO4W5yeoTWaHb7Oo+Y7NmTn9rXGV5KMDl9o1fNFNHSQnf02w1PtZ7lKj5b00xefnNUbnQIvSDzBbGbaz85guLp58bVtmmb5l+CMRqPJy5fe1P969qrZER26yM7BIGkuGtngIRsMR0ffFfWtdjep/YatmB3RoaPsHPY6F9PEoVXLTjRLFokpOy2NlQ/nX0r+xP20iYWCVbJTdFiKfthtttjafnHjxccI7tewQ2thtzMPHY60QNqc3jidF624bReLpu7X7GOpj29X87W7hb061NNMs82k1R0UiqWnweQcGW56xSZd2SyAl2aTWjdvKlpzm/58rp2zWDV6UMP56OZceB8LlPU6yzxxiOuJN5l8Oh2c5coNC6fjMx4fKfvvszQVHDjf8BiOH/97+nM6yB5SpwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDL/B9n0iy4KZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8L0NvbG9yU3BhY2UvRGV2aWNlUkdCL1NNYXNrIDQgMCBSL1R5cGUvWE9iamVjdC9TdWJ0eXBlL0ltYWdlL1dpZHRoIDgyOC9IZWlnaHQgMjUzL0JpdHNQZXJDb21wb25lbnQKOC9EZWNvZGVQYXJtczw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvcnMgMy9Db2x1bW5zIDgyOC9QcmVkaWN0b3IgMTU+Pi9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoCjE4NDg+PgpzdHJlYW0KeNrt3Gtu2zoQgNG48JK6/xVkT6qBAEZao7FEkeLM8Bz0133gOpRIfqJyfdu27QMAgNh+GQIAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQBAtAEAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgAg2gAAEG0AAIg2AADRBgCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAABEGwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AADRBgCAaAMAQLQBABRzNwSF3W6/f/4Htu1zzR88rKpXBNPHzW8Zp8P9sG2bUVh5wa034fMWmyUYc8cUsJ7zAydtqy+1j3+30jzPXmzAcxYvniANq5mhK8/vtKWf1TLFSg0lbzxz4eTWYADrcdJmhTUmQOhJ7dzIAPLFSVvWRyjjAHgew64h2jDxUvI0CboNO4how2RDeoJuM4yINubNsWKJoHjAYmg1cwog2lBsum34JxedwDWrmW5LmQS+XHeFXJMC4y6EsWWRBWfQrd6w0Jl0HTcIg5mLr/yoOSHNQyCF52Ll4Kd5kff96qKNlMVm7gGpK2TP6qcz+oav8UzE77QVKTa/DgVU6g+aN4KGMXTMKdq4qNjkGqDbODmGuk20MXbOyDXAakmvDcKoijY8jAJY33Kkm24TbfSfKlY0AEZsGbpNtNFtknglCugMdJtoI0GxGS4AdLBow3wDoPI+snMrcdgm2mifGIoNgIDbE6LNlFBsAAxhTxFtmF0AlNpZHLaJNkwGAJwIINpMKgDotMU4XxBt7JoGig0AEG0A5H6y5TyHbaKNDhPAMRsAQboN0YYpBEACDttEGwC0JIIn276Mp2jD8woAINo88QB4suWqrcd1EW0AcKwMPNmyrLshyPWsA1ByaXKQA285aQv3EImdDFa7mfevjSadBU20ARYyuHoKPFrt64/JmIJzh+m8HhUH7Lo0/6xWLhZVl6DmW92ODqINJDWEvtWvyTVzELweBcBTE8ZZtAGAkgDRlotf+ACsbBZPEG0AVE5D6QaiLQrn/4C16226GXBEGwAkoNsQbQDQ6OIXBbqNZfmeNmjZKrzOZoX7fP+t/voF1KM/pDmIaAN2PdnbM3Crv3Zbl/+iboP/8XoUGjcV72hwq5/3CK/nH5cARFvu5RJXDRa5mY/WmwmIaAOAmXnk1A1E2/yHSIMA0HHBdNiGaAMAD7og2gBAt8Xj5FK0AcCobtMZiDY84gAAog0ASMXbatHmjgfAyjmftz2iDXMGABBtAMB4zjtFGwCc5R0Fog0PKwBAFHdDIOmgr9djj6Q3dpkfBOxNNThpc/fD2ND5yPn2qswPYlHFMIo2Os+Nx18xYShZbBlzR5xhb7I3BeT1qGca4ECxPf6uyYu9iSmctAEhYsiHBBBtgCRSbG4bEG0AJTZgZQCINoDoebT/I/mNH3cLiDYgvf1BE2onVmyL3HUg2gASd5uDnMhcHfjOV34Ak7fkWSclR4PAiY5ig7mctAGdHY2bKXuzYgueazsvkOvCUpy0AUO67VAVXXnk1tCIyiBsTINoA7i62y5It7YgUGxhW82lQbQBTOu2QenWfH4jC86P4bi7y0VBtAFM7rbviXBmbz7ZGbIAEG2AbmsMr7ch1etASLEFv6kMAqINYNQW2yWnrnlJpwkUGwTkKz8Ae+1fH1ITuItAtAF23E8fDz0NbbweBSaEkf8VERcIjnLSBjaSOUMXZ/Rcx8iD4IANnpy0AZNDYeKpmxoQkZDIbds2owDvp8pLWNhURo+wJih/FVwXEG2AaNAEQDVejwKBPKOqb71pNUC0AYytt7aGU2mAaAOY33AAC/KVHwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AABEGwCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAAAQbQAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAACiDQBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAADRBgAg2gAAEG0AAKINAIBI/gCkqoRBCmVuZHN0cmVhbQplbmRvYmoKOCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDI5OT4+CnN0cmVhbQp42nVRy07EMAy88xX+gXht52lplQPiIbghekMc2t2WCyu0J34fJ1sWEKDGsl3HMx4HjsBA9jFksUOwO1h2a/byrz8CqiYP75Y5xZAiHCCk8pm8wiM8/NHFWtAovHbGRC1hAUmKYs05Y4qpDbC5OxBcvRnI5QCbGwYJmEtmGBbwoaBv15k9RhEY9k9boiKV1fw0V6GeE9lpXkKwwCzG+jzcd0DOKBxDA3SMKURwkrFoXOFGrXFLzDNxnCpTj6vzVlo88cinXEqrzLtuIov5afVzizufE8U2bxCkWH4StA2Me2I/n8hUDTTrKmDiZisNBSVOoTq2PlpMDn3JYdQYpckpttbsjTQSenuk83pcbiKo8Z0HN2aTIzJ+/2MSThXu+NfDr6d8uPgAcJt9XQplbmRzdHJlYW0KZW5kb2JqCjEyIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzQ+PgpzdHJlYW0KeNpTKFQwVDAAQkMFcyMgMlBIzgXy3IE4nSAdyAUAh+oMRwplbmRzdHJlYW0KZW5kb2JqCjI5IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggODE5Pj4Kc3RyZWFtCnja7ZlLb9swDIDv+xX6A9ZIUS8CgQ8DtgK7dctt2CGJ7V7WQ3fZ3x8lO36oCVK03mU1UseyaoikzI8PRz0pVCAfVMHIH6jTo1zdyfHw7Pxprz5+QYVWk/VG7TtFbLRhp6oQdABW++bHDsAgQDQAwQMcWwDCaXzE+uf+q/q8V6ANRPmmYOXbRq++3V2Y/D3KZc3e+CQWVIWBNZnYS8T2VFeI5JPwWFdRprAFPKCcAZAZ0JKcvcw1/VhsRe9HZZYmTqLEUB2fiWvXMUJU0Ma686pNXbG3u7RJgI2tedebcGhqN1jkbV2ZkP7BXBscZjkCHt1go8yb8e7hnO2WLepXfJHRhkypYAevNJtma4v3sLWyNJI2o+VgTDc8Rpe0BBvr2FuJYg10NFlzavunl56qixeNmQvkoG2ghUARVleWeRg5gG30vka3nCYR4AiXbjrz/3NkXIED4zQ6X5KQaDVRsIeDr+1AQIpl4vHnSwq1gTHU3QYBtI+xkHh1qzY8NiiuQrHw2X+DBQWNiCUWrWBBlDKCFBNI7ZTzci4MYKzNeT4DkjJEyvdNzppmSKcpd5CvK9r1WdEmhk6y8pmrKbXe3BK0oq8v9d0Aeg8QLDz0zRCUpaFjDYangrPiIAURnFyO9anEPeeAXNVd8dWyqqOs+WLtzqxZ1QXQHO2o9ryu834obXO+avqSlf3NHZcliVyx9obYNloP6Ehc+u4Mi3WAllaZYex4RMPApm+Wh150yk7uWA9M983edJPNR98O+ZzwXtrPOVvq0NkVwSewOrowmjcHn6Cws/U5cIXdEANmTV7RnvdpGw6cit4cOMgPPe+8z/V9bfyShO2ihG8qFN6iyX/Csjzd4NwzdzzJcVyXZzJehzB7NVJxKhoBBFHoegdOzi0V5k08JR9jekWxXDNr3a7JKMnu0KjxAtFQhqJmajmvmDAXEUkCSyFig2obvQZh1k5y1NJbCxbW6zPJpbciroQivX4hkA4RmmbKM7mfxJvvjy+CMZezkbGN3kLGwmevoDGcn5Qmlnv/pJzlvROkrHqUijBOl7/Ud3V/qWp02lspjH0IOsbzjx+WSln3H/4CZnvMhQplbmRzdHJlYW0KZW5kb2JqCjMyIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTEwPj4Kc3RyZWFtCnjaUyhUMFQwAEJDBXMjIDJQSM4F8tyBOB0nXaigZ2xpYapQDuTpmpmZ6pkbmyjkKpiYWSC4OQrBCoEKTiEK+m6GCpZ6lmZGZgohaWAN5uZ6FhYWCiEp0TYGhibGIGwXG+Kl4BoCtyGQCwBXxB/VCmVuZHN0cmVhbQplbmRvYmoKMzUgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNDQ+PgpzdHJlYW0KeNplUMFOwzAMvfMV/oEG23GcRJpyQAIkbhO9IQ7taHdhh532+3PSdgxQbD0/Jc6zH5yBAO0QRLZAOJyMvVoeb/jUw+MLQXZZWaGfwYs4UgFOTrKH/utjh5i4UDYcp8LYOKJFRRaxwjIEZB5Kx7G+HHKRHRJNSGEshK0unber2SMNtHBO9WY6tGSeDccVp1qXz/4Nnns4g/M5BbjY0CwuYoQTiKaNfMM77H8v5e+WQugq2daxcW3FZTrVqrfpbD/c63WqwUUvq+KNLpr/DKwNMbqU0qrGtBgWtRqI6OmnHqkpi4rzUay3tZgZfwfaP1wBQ+Vm3gplbmRzdHJlYW0KZW5kb2JqCjM4IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMjIxPj4Kc3RyZWFtCnjabVDLagMxDLz3K/QD60iy/ILgQyEt5BbqW+lhN/H20hxy6u9Ha2eTQIstZsaSYDxwAQLUQxBYL8LxrOpd6/uOrwU2bwTJJM8eyqyPHI0kC+X0uUWMnCkpTjUzNY2od0EWUaLlHDKPeeCIOjGmLFskqkhuyoSN58Fqa7ZII3XdhqkeWzHPitMN68LzV9nDrsAFjE3Rwe/iTEzAAGcQH1fxAx9w+POt563Be2eCldveXfbNfwIYfAgmxtgjoHpqXoScEQ7a78kw9TSCX9JBtPTgE632V0OHlyt6EliVCmVuZHN0cmVhbQplbmRvYmoKNDIgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA3NDE+PgpzdHJlYW0KeNqFVk1v2zAMve9X6A9EI/VpAYEPA7YCu3XLbdghiZ1e2kN32d8fSVG2nDpYG8eRTL33+EhFMe8GDdA/muzoBeb6RqMnul4+3N+NLSV585dGh2JDiubNhDS0wav5aZ7Nl5P5/A1NsSW5ZE43E5y3wWdzcNkOJZrT9OsI4BAgAv0FgHMCuMwAnubOZfx9+i4QGKwPyTEGfSwuEIS3BVEhBgeQEy+TJV9PW4XJWZdyk6ijjcaOwOdoMSVzQEg2NY1D1XTBqvdcSHNc9fLnKkI1+y7twwIZs81DUExah54unMeDd1HSGLHIk9GBpkUvntcI9ihGHWEh9psnBACMw+iPdeizLF+BMdDsGdvoPPXE6b/EoWJluk1+PIQiGGOdBkqMwSsJ9Q2NVyIJygsKh0j4uroUEtPlsYq+zipc5D4UL5wLEyDc5O5CqKAEwZ9FYiXUFK5Txa+svUGkR6A4tBpEvdgEswAWLUvnUZROo1Pv44XZpAmo8RBtia3PIYxMe4kjcnV8Ji9CZ+EkWDzEPB6cI78hlDVAxSMq1Xnaei4rHHkj3UlsoQI4fwPnbhwwHKVVmUtHqpkuEcdY15oU2yExGzvqDOZFAt3bbKsu9R93k5q6J3T42AvcJJLBpsLOleNdPs2am+81XufKp7nowm2MT62CtZhQeTrZnSmtqxswl3wLRXY4VM/Sbsm3qWS/k0p2HZ/UncN4Z3f42mTac/lOcgfRWPYTaOD93g2Vi2zTgmoTKq6YVOvWqr2yb1X43XzTuV45tJi+O/q2dsc7Cc0P9zghBEqEe7uZn23xvn2/6oYnMXoogHWY6D34Qu9+GMyPp53JPy/1WOi/w7FYX/jkokOB+u9RfcWrOYhvurfaE64bP2VHL/F+7+9u6SZbT92PogIJhnCvarNfpYrMpTPSUmt9lxouayR6R83ic6eITllfhqinbIo2+7Acszp89FuAjmGOyvRTgDyvyuf5nuH50z+mAubOCmVuZHN0cmVhbQplbmRvYmoKNDUgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNTE+PgpzdHJlYW0KeNptUbFuxCAM3fsV/gGobcCAFDFUait1OzVb1SG5I7f0hpv6+3UIiSq1wtbzAxvxHnAHAtRFEFkD4XxT9qp5PfBphMcXgmyzsMC46CYn67OD8fIxICYulBXnWpgaR9RYkb3XQjMEZJ6K4YTaMeXiBySqSGEuhK0uxunR4pAm2nhrpnpuybwozh3rWpfP8Q2eR7iDdTkF+F5f5m3ECDfwknbyBe9w+iPr95QRCTY63+cOuk3+Y4CRGG1KabOA6tLe4kK2or5gd4ZViKubqCwq7FJC152z6ot52LUVI8GvI6mY1HuaD7j2Ivnjiq3WvyKR3YFd0+nhB8cwZ5IKZW5kc3RyZWFtCmVuZG9iago0OCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDQ4ND4+CnN0cmVhbQp42rWUPW/bMBCG9/4K/gGxd7zjFxBwKNAG6JZWW9HBluQszZAu/ft9SVFJLCdABsc2TR9F38fDl2ceDRvCm010+JCZHmDdYtxfzI/G5hzE/IM1ZKvBmwejIW3GH/PT3Jkvo/n8jU22ObhgxpNRJ1YlmsFFm7I34/zrhsgxkSe8lOgQiI4LkWDtkMvv8XtzwWpFg6s+mC1lgQuxmbm7OC5lYMKPeSmKKbn216/jeabBWRfilmq3znJ9EUiIbEps4DjYsAXiwjXAosX5Zj/nG7WgsHxTM+8VJKIJpXn/vBa1z71SeOypPkG2DFyE5ATfEtj8uH1l8e/9K0mjSI7r85YwLzM5d8I8XYS5QjgcQvBxF5M0FVDgnAs7mCchDkrMC/GEAW3hGbFP+5RaAHkhGJTjcAybYxwr5/W4HTUb6qG2DvKulju1sZZ8XOdZrkzYSbaRLgjPH0I4YJ/uYuKaNJlXspBSJbmZEhuaBvvA7wIcos3aL6NTvTIsoWi9xj2s5UNgeZsrrLOY9ZaxYKg0TbqqEwgWpcIOK7aqx8MMrWx3GPBWpUoog1R7LoNWshN6zUa7uuNG+z2kRbyNmd8kjV4lOfneqwI2iz41q26+1VlrMxOHfRGtNaWO+0T7GHef/gMuI0jUCmVuZHN0cmVhbQplbmRvYmoKNTEgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNjc+PgpzdHJlYW0KeNptUMtOxDAMvPMV/oEE23laWuWABEjcVvSGOLTblAt72BO/j9O01UqgxBo79iSZgRsQoC6CxLoRLletXjW+Dnwa4PGFQKxEjjAsesjZenEwzB8nxMyFRHGqhWmtEXU3ZO810QgBmcdiOKNOjFL8CYkqUpgK4ZoX47S1OKSRer0OU72swbwoThvWlpfP4Q2eB7iBdZID/LSfeZswwRV8zHvxDe9w/iPrnmViDDY5v/GOsjP/McDElGzOuVtAC61/cSg2O213Y1h1uNo1SVRdcwmbbBGVl6TJm5ukYmLwzUOlzL60RnPhjhH9zlBu87nfk5GmgORdP+djesP+rKF+4+7Y7sH54Rden3LqCmVuZHN0cmVhbQplbmRvYmoKNTggMCBvYmoKPDwvVHlwZS9YT2JqZWN0L1N1YnR5cGUvSW1hZ2UvV2lkdGggNjY0L0hlaWdodCAxNTYvQ29sb3JTcGFjZS9EZXZpY2VHcmF5L0JpdHNQZXJDb21wb25lbnQKOC9EZWNvZGVQYXJtczw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvcnMgMS9Db2x1bW5zIDY2NC9QcmVkaWN0b3IgMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGgKMzAzPj4Kc3RyZWFtCnja7dIBDQAADMKw+zfNbZDQSliWgz6RAF+CL/El+BJfgi/Bl/gSfIkvwZf4EnwJvsSX4Et8Cb7El+BL8CW+BF/iS/AlvgRfgi/xJfgSX4Iv8SX4EnyJL8GX+BJ8iS/Bl+BLfAm+xJfgS3wJvgRf4kvwJb4EX+JL8CX4El+CL/El+BJfgi/Bl/gSfIkvwZfgS3wJvsSX4Et8Cb4EX+JL8CW+BF/iS/Al+BJfgi/xJfgSX4IvwZf4EnyJL8GX+BJ8Cb7El+BLfAm+xJfgS/AlvgRf4kvwJb4EX4Iv8SX4El+CL/El+BJ8iS/Bl/gSfIkvwZfgS3wJvsSX4Et8KQG+BF/iS/AlvgRfgi/xJfgSX4Iv8SX4EnyJL8GX+BJ8iS/Bl+BLfAm+xJfgS4Y8z+GbZQplbmRzdHJlYW0KZW5kb2JqCjU5IDAgb2JqCjw8L0NvbG9yU3BhY2UvRGV2aWNlUkdCL1NNYXNrIDU4IDAgUi9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCA2NjQvSGVpZ2h0CjE1Ni9CaXRzUGVyQ29tcG9uZW50IDgvRGVjb2RlUGFybXM8PC9CaXRzUGVyQ29tcG9uZW50IDgvQ29sb3JzIDMvQ29sdW1ucyA2NjQvUHJlZGljdG9yCjE1Pj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMzAxOD4+CnN0cmVhbQp42u3dd0ATZx8H8LvLHqyw91K2KIKCqAxFRXDgqquOurW21Vq11Wqt1WrdWuuqtY66RREQN4gCIoIi4gAElL13du7uvYCDERTXa62/j/6hyc1fcvd9nucuCUqSJAIAAB8rUiHDUSad9hFtsrw4/mKJQa8OFmxS+ODqXwm648Y7aKHwUoI3RIcSAAA+Ziid+bGdxxjalgbpEXtPiQkC5Rv1GmgLKQ4gyAEA4GM68ep37vlFZ6gDeDcwKAEAAAAAQQ4AAAAACHIAAAAAQJADAAAAEOQAAAAAgCAHAAAAAAQ5AAAAACDIAQAAAAhyAAAAAECQAwAAAACCHAAAAIAgBwAAAAAEOQAAAAAgyAEAAAAAQQ4AAABAkAMAAAAAghwAAAAAEOQAAAAAgCAHAAAA/htoy5Yte/25iOyIY1uP3Iy+mtzw90r07ZgCta4dBPS2zf747LE/ktmC9Ih9j7Q9bNUxRJYRFZfFNTPmoy0mJqtunP3znrqbZUXIhgSpi7UBo8Xiim/vOlxs1tmAh77ebpCVqX+vDz9frOnqqMV4yVQp0XsO3izRsbPRfvftHjwrduPhEgtXI7WnG48/CD4UUmnuYsZGX39pirTodVGku6PWa22o9HFi6AOuramKNRKFSTuOllq46MsT6l+FdvyXLpnIOX9ib6ZOl1dM9qpduEx0cdKitbmEeVeu3WaZWqhBqxQA8Cmiv9FcmKlP4Oxu5NOTd3VW2PH7jPY6zDbPruPsEaQQGKHdAzFB/dkXr8wrLDKnFqgivAgFQShwhCZwC3DkqVwHjhM4ir/2XpCV97PL9LT52VmPxJYdOE2fe7EpipzUAm3vwF4WtMYrpNHeUWzgOEngjTdeoUBwBfGmMYiTildUgsQJkoa92HqiMiGmzmqgOoa0Wlvi+avwyr1RkASCt1LJd7YLTTcQNXDSibmQXjnaXguFIxoAAEHextm4fC1uw2m3Iibkbk0799HOGmRO/JYo9QnjHTRQBM9N2B7JHzfeQb0u93JoQnK+mGALOvTx6mfPx+QVD2+mXEuvkiAMLUtnjcF2ZHxkTJ5IHn5WLaif2f3Tpx/I68/QcqFUL3BuX4unJ+zKpHMPLSyNtDl4eerN8CvZxVKmTjvHgP52esq4EGdeOnfiTpmQoe02wLe3NdW5lBUkxEfE55VJGfoOLgP6tdNttq9kzb0HQsuuXjqJV+5mSJ2cWSj10M3zh4oMjAvup1aRLB1L/+EegvuRkTlSacmVqxqBHuUXj9VYO5bfva3hOdOPlRwRezWtfi+snAcOcjBmIrLih+GhdzJr6AZOpoyHdU6zejkxSOHjlPALD59U4lxjG7+Bne002toCwKtzIsOT7uYLSXXDrv7de1godyonLiYivqBSjnJ0zH0Gd+ukQ0PkVcnnY6MfVuF8PWdTOdnKvGRh0q5LtG7GhVeyDUZ+4WLwbCvkTx484Jl9rsxxsvbRrdAL6bk1OI2n7dzHq48dr21bpaK10LKSuinh+8o7fR1kxlR2ohO2nSQGfelhUJZ+PuJOWqmcqW3qGeDuZviipSYvuXfkSLbxkH6+pnRR8xqiVTfOvXgt/M2tsaikIjs/Q+qdlx+6MVI+cMwwWxoc3gAACPJXkj+Jio6RWgf5WukwUULZe8OJFz056t9EVnRshpbHuAABmXfnxKV7ubbuuveToiqMhnzho4PU3gq7ci29/fCu3bpkXSrt4u1hRGfo+E/2IElElnc16rLUyuJFR5lQdl1JBC9IPnappsMg/4Fq4rsR0RFJRuPNEaI857FLr9GTWTV3rp+4mulm5chKu340EfMZGmjOrEk5G3MiRmu6T5ORcaI8+4HQyMtWX7OGn5CaI3Zuz1X2O/HS1Nx2w/1n6BCPLl6KSrKd5unu8Sgix8nXy5wmKVaU38moDfAebaElpQK+vMlejLKvvnoyleji84UlLe/aldA6dTsq0KrTT53M0fH3m2yAFCXEhZ1+qD/OoU0dR6Iy7vj1wvbdx/bnS3NSwk5e15rh6yhJvxAv7zB8gKM6URgXffZ6cYeBBqVx0RdLjQd+3lNHlh95Ml6hb6NyXgccl+c/SjXzHDlMX7dRf7wwrYhv5sKlNokoiz+fye7WZ5oVU5J963jUQ2cbV/02bJUTV9Xmt6jklHYGnMScPIWZFZ0sfpBLWHQ1IAsvH7td27nH+ME8UUZiyNGbWrO6Wzwb5jlz7CG3p6+HIQOpTmtRQ3tS8eK1oKGopSktOK2ql6EWRhN0DuxBGL4ixZOSkuDgBwBAkCPC9PiQ2/SuIzq106S1lk0kgUhqa0WIkZl9l3FmKA9DUGu3scYcfR2molaEoYRYqKCx2UwMobG5HGpz6DwNLiJKj4nK1e01ypLKvMqmyyu+/1hm3bWzuRaXpuHq24Uvx6hVoxwjF2c9HS6maaXNS5NIEHl+Sr5mx/6ORhpMVM3N1TDpel6lt7b2i60ky+49kbZzteTQ6HZm2vHZacL2LvX9T7qptZuVQJNGWhmrx1RIMLYutW0Yi8dlIBLqaX1LdxttLTqKt9gLRf6je4jpYGozmIiaq/n1B8oNr0vPKjC2HWgj0KAjGh7Wt3blZosdtJomH1lxb8/K+883jWrF6BtQqZp9T2jk42akx8NIvqNT4vm0XNzJymLgaDN1fXWGrJaOIdI6CUlUpKZKrH0c2+lz6CTbw/HhozLV8zrwEJSh5+xqpM9v9GKR4vwiRODIVv4b03Ad0hvTFWig0jJqEqlE1DKeVW5VK33fZpWkG5pYMmPTCgkr46qHmaSVnwG9ICkDNQ3obKjPwYiODvZJV+/nE1SQk5LCC4cfZ+l3m+qkxaUjtSpqaG/R6LWg/qmhpya+WSZDtNgIx6i9GdKG3rirqysc/wCATzrIieqMsLA8QU8/DzNO60vBzD09XK7eD//zlpCt6+DZta8bi4nX3L8YfbwEZ2tqsJVZQTbP/tqsM2dLLfv62Quok3SzZ8maGilPT52jPFNjfBNLZwJDSxCUy9PkKLuZGJ2GkVQWyqrr5MU3o3anNGQWyeZpyRpfrSUqU+9XVFVHb76v/I9MQqamizu5KPOMyVfjKxeOMlXsFcpSV1OrTw60xV6QNUIRx0DAVD7L0ubzlC0QsrZaLM+5c/DPe09Xy9cg5LKH4eEXsnEEE3iO6eVCLUrLbuSYDvpPe8n4o3PhScr9FNaK8i7uPx35tD3EMVYQCKooSo4PTq8heeo6NDnCpXZVXCvlaOuylRuFMnV1+WhZK/NSzysviDRtclGzi5ncp8MeqDjv/vlThbUYV1uTwEltFc0y1UtWHZvNK8nQs7VEz6dVKji5GbhxHzMGmSES8/R0G144tpYWX55ZS1ALI/LzqzoZcdKyssTtOjNU1pBs/FpQaBwWQywSkggbVb4H4MAGAECQvwpeeSMkocjcbYyrDrfpaZN8GhBSKcKnppNSHbdePi6+kuqC7MhzsfFmAQYxsRmanqP661Jh/ORiWPMhTqL2VtjNSvvu/u2fn6WbYLGZYuHTUFaUPkmoELhrUP/Bmlx5RuksFs24m+9ge+U1V1JaWyzi6jSagijOeiBrFzTFxVRZAKImOfrwvRyhi41yVkrr+02tp/5ZRfrl5nuBshgsiURMIuooQogk4oatZTHY1s6j/Azr1yMtL5EL1JjcXv0mKKOIxlZDkTJqThpPS+3ZjeY4u/4fKJvJUbfoN9q5PuDx2tIa1IBRl5JwoUh36JgeOiwMT7u2K0u5Vi5LXF1HIHo0ZVdWKG5tXmW7AkWbj5ygdCZD0XBvGVF2PyJG4ji8n6MmA6tLO3pcpGL3VS65tVo1ryTd1MZAHpmTyc5XWLmaMhGUw2QJRUIC0VReoBcLRXQ2C0MUCM3MqX9v8wLZ2cgr+Q6DjFXVUHlv47PXov79psBxBp0BN7sBAD49b3brtTw3Ojq6zqJPL2td5otzJ8pgMqpKC6hukaLqVlK+VBnpikeXz4feEbE0BQYGPCZKkgQpk5F0noa2Jo8tLXiYI316VZ3E62/dJkpuXIuWtOvT3UhNdRsDM2xvQDy4m1KBk4rq5Ms3H5Sr7g1atNMtTs4oQdlqXDz7yrWoLHmj9gZZdO+J1NSkvQ5fU5P6q25kZ6yZl/2wtu0VULEXNGNTc0l2fLoIJ8RZCVkl9X1gDWtjtcfp96rpfHWm6EHCqfgKAkUYXJ6GBl9Dg8NqvfyYnrElmZOYKWWpcelV6RGhGRUYiUvlJJOnraNc2MO0cpwgCEzQzpKWdu1+gYSqR87VWxWE6nmfvkQtwparraGoqqp/CeQyGcrU1KE2DS1/kFemIAiyLVv1Gu8bpqmZufjRhdsya3s9Kv9phmYWePa1O9VyEq9IvZMiNrAxqV8cg63OU7fvbq+Vnni9kFBZw+bvyCohoqVRf8lCVlFQWi6GQxsAAD3yl3XHy27frpCKqk5tf3Tq2WM0y25ff2blbhlzccfhM3JU10ZXS3nvObO9e4e0S5e33MAxtpp5FzdXXSati8Pd8+e33GGpG5g6OujGXI9LsvfV1mdfDQ29NNxDkVAsltae3p1ZHzP8ziP8nZqunG3ZKbDrrSv/HLsgowksHXp3UsdqVPQGBZ26+NfeuvjX0ZM4Q9vSrk+XRh+tJspSH0pNvI3Yz6uga2Klfi/1oci6rSVgWKvYi14+/pUXLoduOMu1dDEyYogZGEI3cAjwlUaFnbouJLl65t69rTXa2GtkGvYMdIq8Evl7pAxT03Hyc7NhozQHx47pSX9tTuVq6jrZWGjH3Ap/YDaoh6fnpaTjv9+RsHQ7d7BQL1Y5b6urMbPQiMutImy1Md12ntbUy3cskqdu7mxmw0o9e6lwpuMrt+p13jksAxszxd1CM3uT+mYVx9gn0D4y+sLmi3KGwNAl0NXm2d0DVJGY+rZeHTJPXMpwGaOihlVN35EFebUGFvWfS8BLrx2KlA8YM9wOBtgBAJ8Eqo9MvkGSi6pE0qbzoQy2Bp8uF4nFMoVUSrL5TISg8dWYGC4XCqVyQjkSymCzeVQnFJfVCWUKEsVoDBYdF0sQjjqHJhXWSREWn40IRRLqqadph7H4XKZCVIuzNLiksErO0OAwUWoBEpFYgZMItQAuj0HDpTVClKfOVJ65X/ybVEgkIilOdStpTBaXy2h0XsfF1WKCy+e9GBUmJDVCOYvPQ8T161JOS0pFNfX/ltXVKZ9iIIRU9PxZFXvBqbl1sVCzaztDFiJ/fPNQomD0pI56KELIpSKxXHmBm0Z1xVmMZl1YhaRKhKqps55vnlxYK6bx1NkYNadIKJNR+4nR2Fy28jI4iUvqJBICwTAak4nKxXKMx+MxSJlIIqamQ2lsFibD6eo8uop5G1ep8dhCbebJE5XdJrgZYST18olkyqUzWAxEIpUzOBosBTUX1RVGnu97yyU33htRnRDhUJM1rtXzSjZMUKtgqj/bDBKXi0RSOU69O+hsHltZBbm4SsrQ5NeHskRYK2eqqzGQFjVs8looCsL2Z9uM7m7LefrmJHlqPMbL3sFJSUlwsxsA4FMOcqCSNDc+/mJyhYQgUJ6+ay9XN1POR/BlY6Q879q1ZL3ugXasj/MSM1lz59oFqdPgrgJGm+eBIAcA/GfQoQTvDsvIxX2EA65sGlG9VR774/jKUJRh1KWTogJ/7a9g+9cEOSmw8dbTYsAbEAAAQQ7eEo3FVmN9fJuNcbRMDT7e38/B1Iz0UBrcsA4AgCAHny6U9jHfGYbR4OdSAACfLjgDAgAAABDkAAAAAIAgBwAAAAAEOQAAAABBDgAAAAAIcgAAAAC8P7Rly5ZBFcCnprCw0MjI6NXTEYVbfAd3m7xnb6XLTH+D+g9rEpnrZxl6H6j2G9KrcJeD5XcHmL0n9dB4ny3iF2vsa/r665ElTDMZPfRvWcB0NyPl3OLDw/ydx1/njw7wFLz+h+/lyV9bjwwK5o6d6KQFH90HAHrkAPzLEY+vHr8hJxEi9/SVeOmH2gpU4DlgydIRfc3gaAUAqABfCANAa/DMk1EJCj2/PrzoyzHB8bO8vZmtTap4Erto+u9/30a6TPGi7zgSHfhryf4eLGlByLKNS/+5my0VeIydtHWVn63s/GCDFVFd+g4WJpzOZNgEjP6xb+7qRWdTFQZ9F/144BtbHiK+t2/bV6ujEwtRC68Bq/6YFGiKVsSF/7K84qveQb4Zm6z6hJl9PcXu6tEjaaRV38/37BvZhU9WJgTPmXv8zN1qrp37V+vmzvPSbFvmt1wXjSy9/duXf2y7/LiMVLPpOXDtrol99DHR/TNzpu09kSKzGdvLUPFs7pZ7h0Z9prU0rN+0P4yur6kdlri/Nx/eRABAjxyAD5fj+SdPPMRNvX74tXcHrDQ0+F6rfXI89/dxy9bHMHpP66t/IexMVcMPEckTV/4wcv3jdrPmbv3KNH3riqCldxt+J73u5oM6v6Gfd5TfPrJlxNJcj+mDe3JyQ37cF1KF1F7YGjgloth93PZ1/bRv/DNi5JEHiuZthvgDV/CAoVO70R+E7Fp8sIwoujR1wO+nCfcV26cHIvE/DFm1L49oPrRQlrpn1f6VK6m/h0LS8IYHVa1LHr18xY9hYs/vvt44x646Yv/sjQ8VouRFg9f+9UAz6Lsg5zsXQguJl++d7NKh5TFMB3tt6CUAAD1yAD5ojqddOX6bNJ3p3b2jxhCnv5eFXolb6+Kr6rv08YzowzdkJlPn7P3FlTGWea/jzjRl4GYcP/aE7DBm7uedrUj9h8E31h6PTFxoRz3D7jdh7+p+7NC8Q9cinebM3zBX73r1tYtbKwrLJNeOROcynNbO8/YR4NyEyyP2RZ1M/2xUk7XROn7zw18/WpHJeGTXA0+yi0vPXzpbwQtYM3KgD9NPmnh46vUjEZUTp2mjTYI8efuy5KbHvUzVuoaOn/B9xHBNC3155uXbDBQvKqgQxVw/mo26r/5p93cmyDjuA/utCa3t3VJnZefAenjIzcmd4EdsAIAgB+DD5viD4KgUBd2+7Na61dgTNofMjzkZ96Wvr4pDhigsKSQwKxsTJhVjlpZ2PFQZ5HhZXgEuFx7wsjjQMBnKLsmXKYOcocZjKxMPwxBUTZ1LJS6t4UdfyLr8AhEhvTWv07B5T+fBcwuada9RTS2+cmo2i42SYgIvzi+Xk7UnJo868SzpC/LLcaRJh5hu9/n1O9Pd6vP7+Gf9Pzvd2rowuvzmr9OCrxXTDGy05MqRBbI2r7iS5PSz11MO3xlb2muhCa3uXf262lvYQIoDAEEOwAemyD5+IluO4CmH/055+pAo9GTqWt9OLadFBZoClMh7XKxA9OkFedmi+qF1TF2ghbE85mafDzJESUlVVY2cqcmKOfySlaIcgYCB8b2OFS4bxkVwUU15HckVMIrvvGQeTFOghmF6X106usWbjsjF5ZUSjK/+6gNb5bo08jZ0OxbLHRie940/cra/+ZrrCMrVVGMh4kdpZUSgEVpW+Li69b3jJZxULhmDK3YAQJAD8KFzPCUq+AFpOmtzxu+dlaPpirTFnab/phxd72Te8ihy9B7R8cBPezZNF/hwzh+LkyPKm7wYtkMH6+/YfWzeet4AdsqWpaHZ/X66u+Plq2V7D+mmc/z6qm9PyntIz6z566go4GzyHIuXBrJ+P6+evE1Hlu10nm5ZeHTvL+f5i2N3/eTyyl1Uta7EQQSBEJVPLgdHJEYeipIhLILg9PT007wcsmr5LGkP5oXjkVKE1tre/Q2fSAPgA4CmMwAt4bdPXEkj1P36Ozy9Jk638u+jixTEBsfJVLWHrb/dN3+SY83pjacfuvXuo9GQZxzfVb/tmax7a/3a6csT2SPmRez01XtF0qE6w+eFbfRmX94z9cvDt4wH7w//8pV3fmOWg/afnOxTF7Vg6padOe1/OL5qsUtbGuiq1qVpNe2Xod3Y6bt/PX3fxS9AGxVduxnL9169/TN/k+LDK4/GWnn3N3jjvQMAvBcoSZJQBfCpSUpKcnV1fWeLq7u7dfGFNEOPeV+7MeN29Q8Mls/fmbLCFsa7AAD/B3CqAeCt8ay62Uv2/7zEerEcYQlcR83eOc8GDi0AAAQ5AB8JlOc6Y3HCjO/FNRKUz2PDBSsAAAQ5AB8hGkedB1UAAPyfQd8BAAAAgCAHAAAAAAQ5AAAAAF4LXCMHQIUr0behCACANvLxdvmAa4cgB0C1bh5OqPIbTuBbTgAALT39ChaCQOJvpEKPHIB/IyrF0XokiWAYxDkAoD7AyRdBThDEv+GnBSDIAWg9yuvVH6gQ5ACAp038+jhXfi8q1cQniA//7agQ5AC8rOmt/KlR5YGLPj+AAQCAIJ7G+fMx9g8I7loHoPXDA2uIcLR+mB3qAQB4fnJAnt1D8+FPDRDkAAAAwMfcqoASAPBy0BcHAPybTw4Q5AC0jeLhIkcfuvmGSMlLp0oNmbI4rpxEFHf2uHbdm4q/ziqkseMNF+ytaOslt+frksf9Yd/jUAYOLxIA0CMHALRCnhQVIrZ3Z8Qdj5G+ZDKy8snVxGLpG6wAl8vojt8fm9ZPva2N/OfrojsO+ntzbxPaSycmSXgRAfhPgrvWAWhT7/fmiWvYqB/WImtGn7gj9uvKoaL92mbHZcaXLg43w5R94o5L9M8e0Fw27UJOPqPfRE7YHCqby88vmjtsf1opt92M7ctX9tVEFaXnV6xf8HdqPilwHzdj+zJPMzJhmm2Yw0rBkcX54y8PTRx92itl1aALK7ssuC2rbz9UFcmCToQdGCiNXbdm9pakbCGmZd9j2V/fjte8Ou35umY+njJf/dSVMe3JlstPmuVwVHMycmjd3VqGdo/5iw7Oc+DD6wkA9MgB+LTI7h0P43w22qHrcC/1iMhokeqpUAO/Xbv6mnWbcH6vvwmGKO5FR1vNTc4/GfcN/c9Vl3II4snuX8eHm66PP1WY+G2nyFXj/shVDodLE3ZdtNmd/Nssk4bjERWMWpKZczI3Jzhxk7uh4+Dpvkwi88zCzYrZV0Oqyo8c8kpfsjlF3nRd9Vpd/uEH/leLInLP+RWvOhhWAy8nABDkAHxipNejzuj2Hu1Aozv7DtW+cfyKuE1Hl37PryeacTB2Oy8HU2FdLVF98XSaxzfjexsyGHqdFsx1uR92s5CgptML+tLfSaP5yDiec27G/Nyxuyf3UEMwswEnk5dOtGRIq2tEJFZTLVQxUE62snya2ZhvvM0YKNexYxctscpZAQAfLxhaB+DV/fHY49ceJwk9DQ8p/1Nbyz5+uy7Ak9U0RVvGI6ano99whKH1X/FKVJdU8k1NOQ3XwLmm+toVFWWECULTNjFscV1cnrN96u7KWet+cK1fD1F2Yfnm387kE7rGDrw6Ul/VZqpevjmCaRrqNTyGwh34AECQA/DpEd85dkZracKxH52UnWZF8m7XwMjIWs/+yvh++q1OeEVVFWnQfMZmuYmp62rVJeSJSUSNelxSUFqh6SSo//7XFt/lLktet2otbVzkN5bM+lZC0T9b56W6XbyzwZmP1h1ebB6mcgSg1eXDawjAfxgMrQPwCqLoyAh19wC7p0PfdCfPfuoJxy4JUTUe51HqjRICET/eve161fMuuVQmVTl6jWr6DbS5/vvBq6W4ovzu+o1JNoFdjVUdgnVxeybtEqzYOcj6aUubVEjlqKa2LhclKh/uPJAilSsULdfV5uUDAKBHDsAnJOr4dU6/lR2eHyv09oF9WSNO3BTuH/DjwJ++6zR4ppjm/Flnu2zlkzQL205PtvqM4l/5QUW72XLaon1F679yCyoiNd3GLjz4tRkNKWoxmSxq5+mUcsZS75FL69fXccH64DFfzApf42a1X8fCccKYAOcl22YGu/3d9dm6vn3J8kvhFQTgvw2FT5eCT1BSUpKrq+tLJrgSfduzWwcaDav/9bOXDk2T8johyeMzYfwagE8KQVD5SeI4EXf9ro+3C/TIAfg3olq5r747DGXw4XPZAHx6J4d/D7iABgAAAHzEIMgBaLXN3fDFpg0/PAwAAA198fruuPL8QBD/io45DK0D8PKDVnmgQpYDAFSdG/4VY+wQ5AC0iiAIDENJUvkXgd8zBQC8ODk0BDiBoh8+ySHIAWjtQEUwrOFwJeE7VQAALbrkVOOebGjlv2Sq6pvBM6bvO51SJW6a+CjK1O3QY9HO+V935b/l+QWCHADV4m+kQhEAAG9Fkb5u6gnagh1lo425zeKalDw69Jv/tMM9E6d2frsohiAHQIUP+6lQAMB/BF6QnmszfGiLFFd2ydnthnl1/joqC0feMsjhrnUAAADgfXnZ11GgCPIurrBDkAMAAAAfMRhaBwAAAN4nSdwEw4X7q5v2xjX7hWZ1hyAHAAAA/vXYnvsqru1r+bg0aj8EOQDvybKf90ARAABtPWP8NOkDrh2CHIB/45EJAPhvtPtRtPVvf3tHX1EBN7sBAAAA7wfN2MY0Pex0gbhllpOSrJDY22Zm1jTokQMAAAD/TvT23+0aPn36dO2xKr7ZTcep++Jdozq9dQ5DkAMAAADvCarRdfiR28Pf6zpgaB0AAAD4iEGQAwAAABDkAAAAAIAgB+AjJo0db7hgbwUpPb1cb9ilOigIWXt26aptKbjqJ0vCAszXXJBBmQB4W3CzGwDvCNPx+2P6Wur/4l8ux+UylMF89613UibDmcyWJxN5XmLyfV8S3hoAQJAD8IF7lrHr1szekpQtxLTseyz769sJduj5aWM2sL3lYWdv1XFsA8Zs/31IZ/bDdaNPeaWsHv1sPvHd40FDLrvvX/+zJ7v0ysFZ34VGZ8t0uwas2jFlsHH6951W0/b9vdKVhhBFW/xmJn5zcP9gbusbITk7Zexqp9+j5hhhCH576eRRwnl319vmnNg566fLSWV0C+/BG7aO9dYj76+cOVb63c3lNnQET/9t9kjh3Js/Vs2yDXNYKTiyOH/8tTWzTFokuSz38LdrlgZnViBaXafP3f+Tmy6KlzTbYHM6oiiJWLZu4f4HZWwj7ylf/jHfqW7LnOH5/UakH9xrNi95s03KH5u/2nwjrZrbYcSkHet6V69bsjy2RJz+tfbeLT/3aPVUQ1bfXeK/InH0qpCvrbAnsUtn7Tx4o4wwdflyw3ff+3LOq9jrDkx4TwLQCAytA/AKROaZhZsVs6+GVJUfOeSVvmRzSv14sCQyOO+z8BOlmavHV/4z9pdUSdO5FE8uTfks1HzjymWePDLnzIRx1+03/FlQtH+nW/L0yaezsPYBfrJL53NxavmF8eHpnYJ8Vac4KSyI3PXnxssKzwDnRxcSS6j+Lf4k/KzEf7AdlnJo1FcZvnv2Fz354yedCyNnXSpurfcrTdh10WZ38m8qUhwhK4N3zLnnEZJ5pjjpC619f+5+gBMtN5jAM7b+MjXWafedkMcXhqHb16xNVG57xv7zVV9tvr25c13IpmF/chdFBpdk/BKUtX30b1luP/6ytLveqD9fluKI5PH2sSsu9Fp05CsrtiJr3cgNd/wW3y0Kif9FcHjcxuOlrO7N99q27sKRJbtvPxZBRx8ACHIA2niQmA04mbx0oiVDWl0jIrGaamF9htCsx42f7MhhqLebvqQv7eTlG/JG2V+euCBoTWS3mRsGamMIWXQm6pb36O+9tBgMzZ7zh3kmx0dX0Lv0dym6eDOXIEvOxd7v6dVLvXm+1mUm7pj/g5v7z7ueGHk4ctR9urmn3IisIvGMuDOVXYPcsYzw2OIBY+a4qzPY+gMWDXG4ci26tSvzmF7Ql/5OGiq/QQrF6DSi9MnNlFKpgd+h7J0/OGAqNris6Myp3N5zR7hr0VgWvVfvndhPp74M3QYs7K3LQiWRxxLsvpwwwJRJ17CZ9W33igs3s/BXjXTgJcEzF373yHvLso6aKII/iA6u8PrhS1tNOtM0YOzU9skRN+Rqzfeaqd7B0Tzz5GduU4cuOH05Swx5DgAMrQPwyi552YXlm387k0/oGjvw6kj9p9loYqbbEIw0c2OTypuljXJLFhuf/6WX3pFTR3M9JpuSxYXlwot/eDjvfvq0eTtMTHI8u3llhl4q9mOGP+o20k2jUcDV3jn/09ITUcJ2w6eMP7PC3oDV8LBrf+cdZ68K3TPjSvpO6sYiE8tq9Ux1G8aZMV19U3p1SRXRJCmf/4umbWLY6sV7jSGz/8nYsXzs+C9rdHp+Pn7Dyt7SlhssrCwo0zQzYT7dY28/c4R4gqBaxtocZYlqCovEN1fPcd76dC0CczPpqzKWLE+6TAQFyC9vj/jcfbA6XlRWWBQ7zS2J8fR5XW9CgWo122uEbthhyqoOU34qiT0Wtm38tAU6HnOXT/rcmQPvUwBBDgBQreifrfNS3S7e2eDMR+sOLzYPexrv+TlUdutiCILnFRWoawgaDW+x+k7Zt8E7QTjpy18Shu3sqiVQ1x4yPnFHV2UiKyof3KrTVw5xuwS4bzpx6gqa5DBkN79xzIpzM+IeyIwH2rq5mumxnvectfr6m6yKiDr5qNRvYQc2gmrrqJU+LpMh1lSIkRWlBXI1bQ3lRpBPf6KBrCivJtjPut1Ya0FO1hXWmU/6PnYRrSojcfXEX+bs77ij5QabIsWa1WnFCirFqT1+FHo83nhgT+Vi65eLcQVabJ+p20+O4SuXWJmbWMi3p5PxLy0sKui9YfdXrieKXJceSug3w1WgoWMVuDdxamflaUman/JYZslBUHbTvX6Grduxe0fvexmpIal38qVjnTkovFPBpwqG1gF4BYVUjmpq63JRovLhzgMpUrlCoXwYf/TPwf1pErzu8Z4V52r69ejS6BYslM1mY2r+S8bbh+7aeFth6t/dNOKf9XHVClJ0Z/PyfksSa5W/esTv1d86dsXeWNee/QSNYwjVG/BV/N0NP7pU/vPFtE4BGzaGZVfi9WMA/dz1w3dvyHAN6kElLK19gKdO+OGtt4SEvOzcqlN3e/b0UUPVNNj5N+/nyBD5kyu/HyvCX71/ZNGxdb5TwtNEmKaxvj4Po9HpZi03GDMKCNQ9t+lUci0hz7u6fN6Ze3jje854voOdEjbuO5cvI8V5+2Z8N+NEef2y5VJZqx1zlM5kMzDjMVO/4Z5ZtDsfc+reX3FhxV+ZNThefm3v0IGHk+Qt95p6PWpSQ4/ODpzkMelcUcfx51K2r+2vCSkOoEcOAGiV8ZgvZoWvcbPar2PhOGFMgPOSbTODO45B6F0HWlz6fNyiHMLUb9Sx37qqITeaN5PN/H+dFdJ38dlJZ4Yf/KN61vQvjIoJbZc+m3cMMlc2oVHdPt0cZt/hDnLXbhlELB2Pzyd5fD6uOPHq7m1bvq9btmO0Bs3ava/O7h2dvbzrb4yjdxp7dFPNzLGfr6mkmfYcdHhnH0MUI0eOm3ZqXTfTvySEwQh/mzbc4I1ZT5n5bdz6XuZ/KVgajkO+3j5Om85qucE0ZN6yLeVrR9kfrKTr95r7w/ddaFXXXyzE6PMF/+Rv/Lb7sHEyrv3Aifvnt6OjMgc3rR8nTtU5tntVz9ZPNQyrr1b2+nviX6dGLfnp+NQFs5fYLamlGTlN/Wv+0Pr2TdO9JkuObJ97xXDqLxs2dtZiwLsTAOpUQpJwswj45CQlJbm6ur5kgmU/73np75HLz08bucV9T/jkt+oLkpWXRjie87+1dopB2xZDFP/uNz3hm0MHXvZBtYZhBHGtnKXG+U8MubV9rwH4EF51uoAeOQD/Ubhc9OifiLhOPlv025biCnlVcviBdNdFvm3IMzpHreXBLXu4a374bXnTB2m6gQvHDTB5f5FP5Ibu/+1cWbNBfobLwPVTbRnvdq8B+CRBkAPwBmgdp85bqMN9i+64InbRtFERJt/u6WPUtqUIw9d0+OqR97KfAtTfdJ1Mu2mb7f7vtcJMB03cOugNZ34Hew0ABDkAoGU4GXTpbvB2h57X2n8K1r7GDLygxblBn1yhP829BuD1zkdQAgAAAACCHAAAAAAQ5AAAAAB4HXCNHADVlv28B4oAAIAgB+DjTPEP+qlQAABoOxhaBwAAACDIAQAAAABBDgAAAAAIcgAAAACCHAAAAAD/enDXOgBtQpJIebl4xYrbZ8/m5uYKJRIF/HBg26EowmbTTU15/fub/viji7Y2B4WfEAcAghyA/1eEk8XF4unTr507lyuTEVCQN2sGicWK9PRq6u/27ff9/U137uypr0/FOeQ5ABDkALxPOE6GhGTPmBFTViZu6FtCTd6STIaHhj6OiyvesaNHUJAljQYlBeCtwDVyAFqlUBCbN98dNSqyPsVRSPF3RFlJqqRUYanyUkWGigAAQQ7Au0eSCNUXX7gwvj5pIMLffZxThaXKSxUZ7jYAAIIcgHevqEg4c2asQgEh8x5R5aWKTJUaSgEABDkA7xJBkM+ui0Nf/P32y6kiU6WmCg61AACCHIB3pqJCcu5cLtTh/4MqNVVwqAMAEOQAvDMrVtySychWuuMkgyPn85v+5clZ8BGQN+2UU6WmCg6FAODNwLkHABXOns2jArvl48x2GTv2xo/tIGW0iHhCyr3+V49Ri8zy4S7s10ZSBd+0CeoAAPTIAXhHcnPrVD0sG/hD/ATnZylO0grTBY/KaA2Bj7FE3afHfefxIsYxU8fL2T16MZ+3Akz3FATOMHztjWF4etw70Y7fxqlZFv+kNVopRb39yfvdujPesBSafTzi04eu8sGU2180YvWkLsmlvgNZ/5+CAwCgRw7AG5FI8PoeedN+NyrX05M/fwjPtR/VzeNm/8iSA1n8hkcxsYHuh7hpi47RcaLV++vrHs8OyK2UP98LBCWRNm8lZtfHtOy3sEVXqAZK4UL3s3iFfGskViF7zS18xUrJ+oIDACDIAXhH6j/ZjKpIo8b/Jag/CEmgjfKpbd84irI8vum+YaquLpt4HJI4/YfsLEJtxCbvH3vzOCyk9HziuK8ysxR05yndd35vrCOuuxotZSJl1GyGfTpvW2XtqIkJ72UsnHHrQhFnZkQvs4gK93HYpl4xoc/7tDRuvxX+qwYITMjSlaMjt2WabY7Q29QxvnLB4N9NigkfcwsOUhwcN+y7Apd1A1b1olFzcI001U6dt1zEOxat+avLjRsKRGtCv2tOt7uGmKwdqWYn9FuSFSNe7kV+EbaulqzS73jlKjLZ506ere3W3Z28BPKHl6p0HUvH9L6bxRF8saH7t948Lim6vDZm7p5K88XNVppTrCLPUfgoOQAQ5AC8S1QgtxotBDP1vGVsIUqU6xcRCP7EaM8eBhslrH0ye1u26M/q2xzJNJc+C1gtrfIEBOH3dtvWt3Rcl8h7cv7ofYHbJpUOumE9UStziPODLFSw9Jr3GNusVWiHPxdg63yOHC/hTwsOGi3PRPWsNq7RPBF0YsgTzG52n9B1Fu7jihGGTn/zW708CioaXZjHdHWNbpzyXCBpt3Bg6ETdP5e8eMato9Tb7cgdhvmeW44DV+fsnhdyTnkJoN3BcJuYjQUypH2z7ZfHJs8/Zv196sXlV9nzmz1H05i5rYN4aYjNZaTXlsFhjFJqSZ0XeE8qju1hX1KnbbLpss+3N0OCW660VHXBAQAQ5AC8M2w2TSxuZbBXobVnYY9Nj58lz13buXNtqZ55l5+LfeY0/2ITojh9lG1MZMNANNN0z2NnKu3s/YzNrHU2nTajHmMYsexEWsiO5FFLDHqNchxurz/Qkn6ehRl1N9YITwzJo/K55sCfuT9PQBiuJr5GAr3d/Scqe9Bq2pq61rRihBBdPlVU0fT2OrI6/2i4iNr6x4/q6BaNv8qcuBeadVeIkLTq9EKMzUaVlw842vP3d5L8FLEtjUAEr9PW0TXqq5e/PFpKtXiuHsp5otwzvk9vDRNG1xPdlFcldHQ1nzgzglWuVFXB4V0HAAQ5AO+MqSk/Pb1K9cfPGGVf777gXYoRJWaLv7XNdLm779siDoqbdK6hIW1KI6lYcW9nVL8NNVT+YhymJqbg+ve4+ivz8KbMuOBS0q2nhnLEXvmraw3T4xJc2RKQ4LVxyUOHZFQpD1y6gI9UKZhdSEVti7vESLFC1Mpwgljc9Eo6yu631jso9lqfEFGzOwKYrFZ/zARlYUyEQOkY7fmwBUkSDVsqqju6OOL7m8r/sTTYTJHMdEGLlapAUgWHdx0AbwbuWgdAhYAA01a/0w3FLbrmDg58Msi3UhtDMIOywMAngwPzXA3Jtg0PE2nn8tXHOPTQotJSfeqxIZv6MEy76klOJa/d/+R6qZqzNUajkYXR+TWB9gOMUITOGzLRVAdFZEk5UTZ2M1yoxje908KA6KU6b90MRy0neq23fDjh5+KGxgApx+WaahZUO4KhPniQTpP73ElcKudYmlMtFbrTYDM7OkIUFcWITEZ2Z6Io03OkuQWV6oTo0nnZgFlmRlSLxtDyz+u+I3XbuiX1BQcAQI8cgHdk8WKX7dvvS6XNxqybDgrTCQaK0Bhko+Zwm+7Zkibcnra/xx83RmmQisenrk8KlRanpKQc8rsVKC5Iy78ajU7/xX5fYOq0jT12Xhm5UiiMC81NsUeQmpzFs3V3/T08g0vW3EubNblIhnDfaicZBnOXmelJ+Afj7Kj/yW/dGTozb/s+u20Jn/1MQx4lVdU23hlCeHJr/okdw++TmPRO2UMFgijK131xb/tfQ+4zhDGXyrIqZbUkWbbt6pqNXpcfetBkoku/RO8vQNq1YUNYLIwqOLzrAHjDJjkJd4uCT09SUpKrq+vLes0EOWzYxZCQx00flg/cefTUaMnT5CaxunK2lCsWcJ/1xXH1dX2HL7j5kQ90oRiPi4iEKr/9HGXxaLhQQeU4gvGHLG0v2X77bDFqNt0/wiHZ5ZtC+RutMCjIIji4D4bBDW8AQI8cgHeECpXt23vExxcXFYkajbEzzq7wWq93Y7ybiE+v/4AaR8YmaSIhFeqovI5/ZZfnmsSP/3IVSQhb/TUyUipUPO+jJ95m/RkS9IOUQKoL500veqMUJw0MuFSpIcUBgCAH4B3T1+f+8Uf3UaMi5fIXA+yKXLOFQ8wWQnXqMzj3dLz/6bdaBINBo4pMlRqqCcCbdzygBACohKLIoEEWa9d2ZTLhMHkvqMJS5aWKDB8iBwB65AC8n8ODjs2e3cHMTG3OnLicnDr4bfJ32Js3M+Nv2uRJpTiNBlUFAIIcgPeGipmgIIvu3Q2++y4+NPRJdbUMavKWNDSYgwaZr1vnoavLRqEzDgAEOQDvGxU2enqcfft8q6qkK1feiokpKi2VFBeLhc9v+wKvwuPR9fU5VHL36GGweHFnTU0WJDgAEOQA/J/jHNHSYq1b1w1KAQD4V4G7eAAAAAAIcgAAAABAkAMAAAAAghwAAACAIAcAAAAABDkAAAAA3h/4+Bn4RCUlJUERAAAQ5AB8lF7+G6YAAPARgaF1AAAAAIIcAAAAABDkAAAAAHgt/wNFXevoCmVuZHN0cmVhbQplbmRvYmoKNjAgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxOTM4Pj4Kc3RyZWFtCnjarVnJjhs3EL3nK/oHRHNfAEGHILGR3JzMLchBoyWXGIF9ye+nFhaXVmtGnozlnlazydrrVZFavi5m0fAxS7LwXy+nL/D0Ca6/bu5fF1VKdMu/8LQrysewfFl8zPLw9/L78nn58Wn58NEsRZVo4/J0Xbx1yru07GxSuYTl6fzHXmtrtA4a/nmtj1Hr54vWDsaO5fDn069EwnjlfLRIY2dguVPFmLocp+PyY+FlztCyn59mKaNVNiYRsz5Ncg5MvLXKJJhndFSxMjqFQ0F+BkU9BPjqS2P34aMbFN01AiGplH0X1Ti4vNPmaA4759JemwI6X2EE6JqQD27Pjy4drIbX5oITYx01iS9envf4TZvnQGToAteZUmD8LAxcG5URXAPv/b5PR5liJLY8iaT1XS5rSBhcqK09wqxg0QYgMbwRkxxzfUkkrpWoaURtPuxyZYuEUfLomTDO7FKDlrQe2MFdtGUxO/06rs/ng7VVQKQLdMJ+VDsSc7j0tnBIHIVB09zagueSpyGWjFElSPjGI1/JHyCu3X6wLA6gUEDHlH1XEu8glbF7UZGERU/TAgx9L9Y23a1kIDNNjESJfEO61pkYHiJ3eBbBTmfSjcxGI5Q04DnPwWzttamYVHF2FbfMlyjVEeQF9MskfbakLiyjCIZnNDuN1xmY6iGIEJBRQsiLF1jSqrXYER072oHziIOGcgXVZgFxmovydGmCNxJ+NusYf5UUmKMIlAjwEVSMmW6iCgby3BpAFF0T3UKUv7bQelV0Wi1cWfotxgQINGfwb9A9EptyZsuqD+APTbSOk3+CMLYqWpMyGhLGxOrDFhew8vq4IZ1WwPsNhhwXvoMhn01LVDZmzR6yE2dmC6rUAW1ESly6EblnNrCgTJ/p9hXGW0YTLjTGaYYmJi0eacn5GhayshULH3aLz0q/xSvDOkSayv0WNMciJTC6VkyiFN9AhM3oNmPZ49A7pQSqtRPZZwys4QDSiO7Kmgh/vSvw1+W8/PZpY/DbllWLcgWtE6MCNzCLW4VJqosnpVdQPobcbQ29q9uLrvYgMCDRSqrZMbYXwyYjYcxJahjP9GUM3AtVDCkvgxCQshbNZaFNA+7RsA3Xg2LDqUmDKuV0UFHAE1AeWcD9dMPmHdhh7xriimcLixqSkL63vPGDfOjzjbpnX7LhvtQ5p0Ip0pjKI3emk6/GThoX+qCydlWOEOaaxh1gb3KoaSsbrWrIynsPBJnO0HmUzCqhBxGRBFJWoYZkQRgnQmBgONfxhtEwDTjn7KpJcrWGcIw3AJWp0pbxyFTdnd9v1CTnHixrRP7sWyP8HJo0UdKdqxqPTkJT7Sw1/W6EacK+XHjcVHiQwkOFh3Cqum5qR9+1Fl1iDSRTPX0FT0eUMeg2VziM3dL/QEao4gl0crhxClkwqGYYXiVKcwZ9RaALnFq9X42PLtFXRoOh48O5WCa4RW6OIiXJLbi3g4toyhy8Ay28W+8Z2cRmNBBquyiU7vnrOzAhBmXgQTChPs6Y8HZMo3ARCPXaQ/9ZbiD0/aG0s7VR5RRWvPX5cjCCPfqKMVi+Ixteqmyops0qx96IYC2d6umwL8CLk7px2qqnw1aox97d5qXGU4OaHlJjNI2BtC6it23nw4k8d+sCETzv7uaQNOvOcPtZuA1nDILVdoUvStfHtwDeQ3x8f6s5LKMW2O17SqKM2Micsd+sW6PBQTjSUTiYm2h81S9Ctp5PDB0R7WxzL58MqDCfqIAIaHFjxhZKiCFfKUIUcAOLhsqDpWW/xRWL6JeNAwKRAhaYsB+MIocR/ETgRsZoXTQVPqLbKyG3FGFwiHMG+sfYegpzgm0p2hfuGGEeFAzEL4L43sqTx9O79g6k1Q5mW3BLdPw9GpzF1U+4zKcxyTAPe6orcCtcykAd2gLcJtsqE845ymjnKSPRds5r2hYslWlWgDex8B32oXRHfqi5txtdlwWhrc5iou/KjhRVzG/Yik0LW6/m7Eu9Gr8d2h4aGE4iccTzSVwZzm7cZeoRX4RRR6kR45gINWMTnSmujsjWMt0GILSutIGRACT3wG4zWA6nAIok5ASxzyGSaEMIIpBjA7gtXiSAeC0HgayTYOJ19plpe1iTMDjqegwa5zbcb7JTCSrg4P5dwIOT7caKzlPDPbvf6r9z2QD9VHNDDrCbmCe+WGSIdI8nqO7KSqJJnG4K3woPtI3rO4aGGSWsYZVGaqGr/VurfxHBpfixmb9DQBr5YStPBoMImTZgW4HgnXKpI9EdHasF/Jnf+NMdt8WiTCpCrZ+rbHG2CgSfIJAi4khlhkwfK5ykUuPwyM/VLRuG1yr6Mhm+nl/f8rcwt/jXFCcg9TopwJE1kOpqjCK5sCGRs7AVTqNB7uckEO8RT6QBgrgeJBYoJUFdf9zG1HgVTO3fg+/PPjKyp0jpuZF4vqi+2xXY3VmTVbGlHvnInpqPUquh6956fdjNfYGeEnY6b5VT8mEDTj9NQWcPGFUoOPVidMFE9ZF+qnIJhCz4A9yHX76Y5ad/hrYfNgqu5FB/1IKdQYJclF+16uO9n9+iVVA1YV5KKmfZXF3tuoR8/uE/LA4r6gplbmRzdHJlYW0KZW5kb2JqCjcxIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNDE0NT4+CnN0cmVhbQp42t0cy44jue2er3Buu0Baq7dKQKMPAbIBcksytyAHt+3ey+5h95LfDymSelX51W0Hi8yMx5ZKoiiKL1FU7X7dmZ2Gv2aXLPzTu8MvUPorfH6q33/+tvvhR7PLKkcbd98+oNIuyme3+3b816vWi30zGb7fT2/WlLLW8A+/rffwAz4haGv3by920dBin9/8qzbmpE14fzO6/H57cfDow2mzN1Qujc3pUD7WfsD3O3+f8Pfbv7/9bfeXb7tfd8rlJez+g5h5lXTa/bLzcZHCz7t/7v7eTQv//uOv/OO3n7C/z4sp/V+ySsZzfy6M/TfI8WKNymZheqSoDZDS7I8yS2tzwfWHH13XzwW1RCQ/dXuHObkTU8IBQc3h+GaYJECmADXvQZ4vUHI8UM5Q45FW++MMQ0qeAZlEdC99SgtfKC4QwjvXVOSxqbEVD1oyROboBZFhWELEUG3OBC4Cqi4xEUJHBGucsi5UKphjYRYNnbRPWjv4Tukc9Wq/wlwuxI4qjCpOEYuHE83GJMFaf8gccpmd4H7ghZjIgFPKkamoeV3LqOETo+KEgME9zMfsXgzwTwg0FXwauDuuN66UTRax0G8vhrmACFyQw4bRc6MibfuIRMQah0u6FLnE1aFlQxkS2bkiDd4om4OIA5c25MGN8hCdSjAvWlKQ9tCGPxyJskiVAwp5DMxbyCNIJxtxGaOnmSHDYnskMK4WPe05jmo6LkNtVJdsz+MVKkVsjTSThUTeFhnDEUuvI+NL7IuyUZAc5K2h4ZkfGpkLiJeCBWBAei8mGMUvb86UNcIR9H45P32cdpm+pvUW5LAVQrckZePsBdEVdfS7KdTLVTTrFAvnFCSsESqBciVKptfKg6ICQKUX3tET167oXFj2PRDL0uSqPlnrAZ+V79SAfQcOBiMSDakAe6RPgHLM9G0dfZsDENRuqIiUQP0vTUV8sEQg/f0r07GgyRI7GyFq4EgmfZVJ6QUkRrWBDIS6mpmcH1bhbNJ7ibzWTr1lBTtzWDBBnKqaIujuVRpRR1kKFofKh7kJ/RnRNVEFg3bPqeiz0G2Z+w39U6/NQZ+BwR36X1iztq74HFW+PTS1H/fdc0t1aB6QJ0o7WEgQY2rL7fGZwMEy/kY+8idqA5alfhI8D46+8eMR7gfBcwuPBf18RljMX73hBxKrGBuDeS8ODoIXJnLVk8HVd7ESU1kT4X/vMvzvlqVo4VXlbxseh0tOmWQmOr+fRmVkqzIi+e+5GznOMFMCglt8YTbW1eigovYs8r0StdeU6Gh0zvCfj2qxHjVLgLoweUbVU4l6rdI2xIsa4hNWsFhj2AYXapTnYk6rnS5tBueq1AxeTukpNkp0RYVeF5/WQ56IBnSFcAV1HBy0j0g2wb3LOpFiAwKSgTGipwriIXdo1kU/daRh96EMWr0/IVnn/pi0rfY7vVNUWWSztHiGP4z6OsHlhkiNtU0ALo8mV5vw+9EjG7bGGqtAmwiynQC+ia9MJGFLveEJ58L7swXEERNg4eATMjvHhw0MglYxVGU0uhQL+zx1McBwDM5YYUxySl2MygS/Yd6Z+deomwR+YaxDn1uEbeJvGW6vfPUF2Mx2yrQYvOrxlJIwcjeRW+ycCUktevm8oRsA3MShLlEdiNrv27rZxcEqTNYt2C3rhrUPtG7BKwM/J+KunOcvWzWvF4Bvp4E+oX1vNmsxw77InTFrsOI3mrWcJ7NWulazRqXZrFFtb9aopjdrVDObtQp9ZdboyQ1mrWDcCDsQ1G+Ys+T9ljnLZ82ZkOST5ixeM2dZ32jOsOFZc5ayvcucPU9ZbGhdk0Hu0nLRhBUyXDJh+WsWLJm4bcGyvsmCccOL1urF+UXFomA6CzfQ+mZLFciQfN5UVf0BvrVTzqM2Sio7uxUVXHopYjdfeBAUg62B1GXpIiIcBenid+xGC6sy4EvBDGoBsH2/123hCBqxxWxg1x+bGsivLVzmzVJ32AJXomSMHWkAlPy167/kq+P085H4IyzuEBmSwE7Bu+0OmCJEs6Nn/tOEQ+M8qpcAXYXT6Qb4vUi4tirSTYVz5GAfUMat1LGT8bpQH2r5xKF1RNWXmExTXUWz5140tGDRxqixCaq4QbC8zVMQo9OmwgYEbbAxTpiMJtOTiCOqDaDph+rBN30u+ja8Vul5WRzufawmHUXjXLNJzIxx2ST5eUanGVaT7VjkMJJz5FAQonUmSCbRvM6NIP/cvjZ7UyNoi72myhJsOkw7QkD1hepK1H1RW5kjaO8tmlbU2h5/b6i0RQ8qrYZtJ1LIeY5nx4Ontca6qzkvjdjKdISlPpdDZjXmgMP350gEihm48B6jcDkIupjbh1xFO7GzLTPWLXLHmnTDBJlgVbB5MkHXdq8OeDzxGhYzjuvMVtbp5s/j8+A5gsow+r2B821fIHsDaY/WWeA0PrnirnzgIQ3hhH38oc0DzSr+Ljgjbltm1IGHnOpOw33ccUJhY4DtapQjCinecGaXknLx3jM7D32awIXAhkObziMXPQaKue2LqNRMjbaXDaqej6J4UyM95XyAFTvVxjYNrhFvoTC8YUxHLKpPPjgAnTXVIpkwKB156bwJhILPK7Xd5lPNOGHr+zNJqe2ME408mIxOi8yaSQYZ4nSawvsr/78zyS+8qGdU9XzQ1qmsdAP1KJ4vTCAx/E471ppzvlcbpmjG0r7fjDUowwHVmZEu+yj3CF4GmXWpCh4Xp8P2spOHfT/senWhcgkDzJW/bYuoc7BlSm2/DPZ1PNrDSeUHu0gUqxeXVH9ITd856FXnq0EAnE9YFDgYk/Kwudvj2t55KeuY3XSalF2na/i8mYEMy11qru/NCzy9z3IsBlq6DnJqJ3fimdRdxbHH3MXzKDx0cbJfeaEVDOFK3j15JyUqMJ/dDfRrC9DiJeencuGUf8pyOOf5oaYo6zXsBVGriDZkgvfHdSAvYfifhWisBCGSZJ4X2EouaYeeNPCfw6yeX3fQLCMzwlgk0mMR2mD4GsQ5ORWQOaH0M5SCsqY4hD5FfmBgpwpb1FYBQ3Qln1TK8Kd0r5VZ+RBTbhBxv1+atRFr1QFA1sLPMmCt0Q2cbsMdoOCgtZb2/KXLzA7/9/P7AM0rLEAc0DEALHdA3YRfHadYlZdMnBKiv5dTrEqY2sWU9MrDvG1BOfCTSkqpIFJKySdeAy4uKgYwJw1W0N0wQTPhepLhcNwN295FJZp9N/nbZW0+IxgUf9gtQHcAyYo/a5yOBMYO5GKXCF0n5b5+ypit+NsGVBvVAiwxgfZm0w71HZ1VYDTnjsl0kXucpcehgXMobN/XbGHjndJuBTSsQuOfAw5WE09rpqlqjnPuadNSYqOJPmXjs6dvyxsb3OSUzQmnk8yboFv6YRunzx2i0HPPmzPcqJX+qW60v0oIu8DmxplbyHwfL+Wglk/xkjbATHNH9/ElXnI6gjQ/iZccntO6GbgRidwTX0nqEa5l6jbCfQzdggMU0MG4lLPYoWvEnTbiThfkQNeBDjKurIPKBnUxUBU8aUDtuz99T3vQ3LUySnOQ/Ls/fv8ImhiwOrEfFhd/v73ljx9t2y+/MXQgZR85TIHfp7fHoJdUyDOCX2b6kt1olbP5dn4PYFTnbl/kdhNBpPMM9EHcbo0KZgW8P5iR8E4NJ/GaYzgHeZqS795eYjmcFE4v3N4Fq7bko+jCwAfTpe4x3LCglPhbCHYXOxjMpUr+E0wBPr3SYdWTA12f5Qurs0KBfxZjgCXJK+g2fQb61zCxATzS9Twfwy3WgcoA329eVeZ4CXZyAsSXR4P9vV2P9qi5RPidzWrNjo+BnjI42eb3wBEZTyCeRUR2dSbgbP/783P/WL3lHPy2+UnTct4rp/OTeMOFAD7H8izcIz5fQY+5HRpgSIosEB4tgDfd2SPx07fl+IzXNe5dMBcpTuPbZf8Vzr/D27NO2WX537t7bdxXynhAz7fsdFKTBPEBJBPiQTuZmFUurtSAxIMYKoGbZlbA7WOAL1GBc/QkzLNRPqyAO9mRfNCaoMfV71DQkrnDY7wrH6BReNL0TADimRX0tpOSvCXSxSLldnnY6jWv6hnza17VOL/DnAj1mNE8bGWzfdZcglVLsBtrtfazGYxWi2VXu6+phztmcGYwuduswCdc7gc5NGASk3mSGqihmOcQX1ygATjq5dTr4kPN5PuyDbZWpSU/aTp4jhd8fhYvNefnWbzUXJRxhEdBB5/Urq3hxy1nit4ncGhDvYtNB2zzqVh3OvXibOhP721/AREPwOTos2TcWrn4OGS/4a1ZOx+REaTpIJEAXDtI5FZT7o3kCZeMAdtdbJTD/LG2IfHQI0dn401HjjJ2zXEoJZxDub8ZVwuxkQ445rzSef1E+9zOOIeb2HdcMhTwm9cU+/wAIQMivbrgeCXZsbv/uhGyuDMrgI5SrbB8Bnn3kkF5OvE7AeQdAcdztzi+MqxdSlLuODa6zJtiU7ISxoSFszmMtwh5MFlpuXfXEgdiuJQ4wFeB2/rWq8ZlXXW3XObszeEhT69j9i4TbkxljJfUybnbzgMvxYmx1/Pwt+TndBev67RqemGBeUMmdW14OT22g9qyCq5QIq5yXM9ljU5s41/PZIPaWE4xr18weHtJ5SJPKfHdocQ5etHI07oBP7SA78XMUSAICElFYDt7zdv5SmapqVcyvdu6klna+KHH+NKJbvEGdi1WwpvXwd70N07c/EqHD9iMJDOn3tcBsB3fDpE3czBC90kK5fwnjRlVUxroWWOszSqHbmL/Wcm3Ln2mXp9EyFnu9ZZTvbFaWpxifU1Lfp0SAM9kJ5p5ffWwvjVZsEhO6lHdzP5bZ/PdkhguvWuO/pEa8u+yyj4YVqYtXfIK4s3kU5Kf5A2N8zDjaz5mcW5JmgTvFPsbSmNesZO3AQhzb+SA4225evH0poO7bbmnNpfyfN3pjNT7aIfXLES87qxP4AbqLvPKJVOzPilVvrx+JZnbrlbV7pLBZrvESbEaum98XpLSrYzEslaGPtSXwjCvJxEifkGJKPAXa5IKS5gW3jWlUK1dy/fNZ9kVnho92c1SM+SsUU3/4ojippv5RgbVCNYndw0nwQOVpfju9Zocv97EscEkD8yl8k1PTO6uzDQ8R4zMbQm3hNCUNFfd6/Gm3yRHZwh4EbGt+zqdFekvgooGbal9QzphqZGxkE394LXPjEXtt+452plx5brBTABCxHY+Yb9roStgJKsO3aniyZIr2K5otDtr/Cqk9gqScc+wkWXcbQjaxmArB7kTWs7mtr3g3pORHHIETeQkI1mK168CRL2oGNOddwGCUdBu8/1dybrX0axSbZ8uS2160tHzlcnFB3ZDcRIAsU/U+Y79HwHtb8kQiMu3ZKjXJ2/JFIxvvyXjsi2vVdtyaPlc/sV7r3SedtHnrtPed0/lzrcNGczY9J+7xBJhe6l9fc+WFOcX19F3/7o7sLRBJVdfWCdF6rnJ6ympRWJMhi8qu8UizHZ117Q4S561nSTdn9hbjgEVyIFvQi4rR3ze4P79D/8FRc2PnwplbmRzdHJlYW0KZW5kb2JqCjc0IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzk3NT4+CnN0cmVhbQp42uUdy47ktvGer1BuMZBh+KYIDPYQIDGQm5O9BTnM9PT4sj5sLvn9FN8sSmqJEjs2ENvjHqpVxSJZVawXOdP3iU0U/mWT4fAfnW6/QOtH+Pl58fl9ItZqMf0HWi+WSK2mXyap59T4Nv1j+mn689fpT39lkyVWcz19/ZwkF0QKM71wQ2arpq8f/3yllDNKFYV/JKVvmtL3O6UCnr3ZL//6+jePgkkipOYOhyLGMMAgiGUsYpDzFwsfM6f0pjLgX75iOjUnXJtEaGwhSqtuBFPQgZ5eGNVEV5S6ToyjMv6u3xy1X174TOs3ZPhxY3Jvw7cAEcejqil5yR0pQ8ws04jeKWUf8Cng5x564R/hh93gGS9tAe8KEd7x37n3oW1EfM7SdFDCuEL///uPKw///XNmhRdBxAwLJowhAvgCeOL7BK9ZR7+k4bWmCe8I+IB5NoIopfzjb9BShDM2Q0MaHb9gMOGCVw/EdKtanDJiLPzj4ctTYCOljS04OZXxxdJpeXYDtKX1LfVaHtEKJ616vUFLAABNIPGD+hHe/m/G+QkyklgicETFELD8yukF91FxDid2to5zNLFG9HIOJwYGx+OMSiJh9NxPqYrf5ClND8KUphYMLi5GanOiFUh+wQbzUvXkWnEC0dT5iYqwfs66ZivMQjUJx2VwS/m6aZPSvSc8bNUEKK/K1DSDhtHSaRjQfGwGxVb0rUx6JeuFhJnI/OOpKs01zExDn7ZFr02LdgHIGVFsAaiiNnWfjkbFi97qokvOsMDzAr3dpUsJkIcFIH8PNCW96n+3TreepM8yEEFzgj6rySyWgMrR8+VFWfvEnaNrhJzDpqZES6lkFzmOCxA1kLRdvCuQmhi2hKRhpG49lfJYXvKrwKYW+CiyNS1zpVmYX9c2zHPCC3z/Gmf+nlt+vlNL3GJf9zS74X1vQThsFGPZXIt9+Te1lIKGY0rCcMCSEfBSGI+YAwWem2/LdaFOEylQajAXYWnQk9WerAWbqu3IDS9M8/4iccANW1ODYZhi4NIQbeYW/xH2AdVA1QIyCNpZarQgMztFjbaEWbOYaVEYy0QW5ZHpdGZR9ySrszesLC4JvdCaULFgtAN6DbYozmcC0p1G8hFG42hLYsM/PB4F5oezykG/2NH8IcAn8Own3Pwep18AW6kWbvi2AaaM8OzSSd1MifbMguDiphF4YvCmkTjNnpUM8ImYFQ3J13cPUC/K7KPd3s4QoNfdLCq4KGqXFtgpBM3Y/rD7DECu4Xe7QBt2nIszOsNCCbbLk71oLSwUewJaReYz4g1+Em8FiL9dZnPBDBiqo7lccPBoFsM8wOUCVDDTLSDibpNE//QW4Vh1Hs3hQsPC8vkZHC5mMAL1PJoVwYUGn9EMR2th7bk5weIW1p6u8XjwKk7zuGSScKlHM7lklmi+jza44YAw/JJQzZMEv9yZKJ/OQ3e+KFfAXtJj+sMffwiBOlu9xgjVgMF9/fsfuojfnHQwYoxGPbvFAjnTyRQTRf6CKXFyFRRMkrd7cVdX2U1LotQT0FpixQG02xYSAuRBW73kb2u3TrFgC+FpDlO/bXGeFoe05DO4E1yPkoYUiNlDuxmIwYDDDZvMfnvD7lP7mf0w2hFqP9vMCPVlzp7BQzLj0aaA0h7azYASBuRnt/cSauhlRDY7NbyAdP7FOidGn+QziDYzhijneo6VUitA/avhUrqDdltKEeBQwyxFPneH3CehWfAx2hESmrU5Qn1dQpPgD0abBH8H7bZoI8ABEtrLhEVCMRfaNS58JJ3zIOkUFIwzKUZL5x7aTenEgE8x45Jh1HRlB4nSYLRJlPbQbgoLBrzO891Lm3m+GcL77to+aUfyxQKUj1qhzPM7aLd5HgGmhIa4nXUWYe8/Qs/JfOBgtGnP7J69tCtiwAH8jfB18TdeR5szNtH9r1Y2Br1CvD237iX7wHP6S8SUmUs1eZ/iHmLOLMKXnETElsfv0+DesNDBzsBPVkMfQhAll8zzuVzlU9jhd77EzsJsuU8uwmcbL+efa7MQZ4CG98X7ECqlZOD3qgNz8Dg8gnFqoniLk89vWzj7Qy+Cgxui2bnQy05wpcIdM2TGRO++yoOZW+DtyO2iSvW+VdmxoNdenhAQEMKQmQ+3ZR5j3VbrCG6ZIr+g2WvMXO9SlFV3S9EAbdk5OUVZojF8Bv7wGT4VZslJuTG5IGN9/vqS+FxxMivedO5Uik9+HlhaI4lwhZMIQcrNy5ghjsHeJBk3Xxrg9XUqSaj8ts7QdNagNQFHdksvbQI4wZUGDBI3hG2cvO2g3RY4DHgfkMPupiUlsTFgXYri/bzrctdLWBE8zAOfaJY6i2KsJdRldNdmHsVRHtWq+GQyxuB0QKrBKOIZ5ChIl7cPnB3A6+KgVAQU3i17jp//nKf32GJ+3ket/e+Lyg5b9Yv3rjMJnJhpacZ5WHDB2jVimNOPsI0T3B2024KLAJPTLysDYoDA9BJXBAZB6sg8jnE887DKhc3KPzNMw7xpE0gGEa57W2fM2hlIppZjTrc5RrZnVTFJLkDJDkQUiFSnpo/m97DpQYERW94Za8CaEOp4igFbcL8G1VDWDBdIaXEx+Iu72pTwcniBAowFMafqxLEFGS0Mz448xfmvH1XQkvojIgcLzmksONeohD+X4AtJZPNEw87h68hTTT7snLKux/dtX0rufyvF5L5JCwoa8d88Fd9+U7QsS/6riX1c8n9yBRQq+c91+0I2bbWo4xemruOHVhwwGq4focp1/GJ9qGEIaKj/+3p9yVxE1jyrXh+j76jXx4DD6/Ub9Mfr9Zv5ela9fjd9Kb3aAJ6u199TmX3VcNQStz811F2vskzFm3t4t03qBnKtRj+Xcrpijvzm+vxU1oRRxV1vQjuVIb6W0Kp2105Xg1vC3AE/CSrXqR3sWC0ToUu5VaCNnPOPMaSAoiquxcd2unwRbK3HS9EZBnRqwUQLzeFK0l5KfF2IN1mF7tPpAfaRQmhnXVgFHDSrdrzHCsmli64r/tsoJAcGgrVn/ZXkGPBppeTd9KWcXgN4upj8scSe9xa9ey9bOq/rNgo2hxD7eB9oWwSZ5Mb7QbeLRRzueAvYQfvL2os3BR+H43VnPvgJNsyV8o2cXOccEFvQtWw856RK+X7OScXwDedEveylbCFBQ2p3hbREz3b4XDj9TvV8Yi5y/XgzF1HDp3m4pBtzDXU/damIuoG8p132aghusPxJDutAn4A3RVy65VqCg2a0XpPrq3XoCgxFqobzMjgGhM8H8B6PJsmZEWp+hUL00vFomcoeXt3DsAKMwVhjdcYO1s1qZASXas9zqfKvX3uumCBWmtEh9D20m0EFDDjUIEpLibsYduxhNNpY3beHdtOax4DXEw/dS5oTD82a8pIX4zG35ZzXkiN3Z0dTHtq/Qeu0AZch/SAVdkWLS2uSIWRrR8S5cMWtTVk1cVs9en/SWEjnuLoXLRsLS/4H2U+VKHYrGAE/8kwyJG1XqNehyRDF4RHVT0mGVLhjAKTMlTDBvVTv9TUK2+EQP4NVGMNhKi3PdymdV13c0ISCenWlJsaodhwHuCWXk2JI5z6L+XQOHJwos8TZkQNPoT6MIdXC1PJubgtJ6z3FHF0+3FfIj3up36U2uWAr1Kb0JcM3JlTaaU+70DqkV/jstGaRdCazNid4JdgMCkzpWctRRgPCNs5o2EG7bTQgwAO+8NWtsJfQshXidQhFKzlei/Pgp2/bicHw/ulMFxs0kFvzeN/fsJOyLIVD1yLNJVaf2uJsJD57l3i025H4ro2VE8p5g3vsxio1mbl4zsZacKe7ge5J4RUzyagQnQ08kLkjrk8yrJrrZj5DaXSfsZZrSCo34LQqzVFbPMrjqtRfzchHqVKEbZwq3UG7rUoR4FC3Pzno3bRlxw0DXg2kpewFRjvscN9gtCntvId2M+3c8O31TbB3GcsmiIfAcClYOWOS0rzpYjW3QbK88qdrp8PVUg0VSQ01HHUxvD9YukPw/4x0x7tuMGDwbM76uu4mXHWCFsFgbxRrmiZVrOJK1drQeORLrJoWJ3ziFAZH9I3duvVMjHzOCZcK97b+rmbTz+AVrZ7jVKjjjuRxQ3E8MRHiG6hYg1X32eWS0WoXqJ/c8TWGfZ5w1lOIsp7jFdnE2F2NyxXZOc3bvQA54dpQuRmfW6cWZhG0EvyIeDNk/eDRRVcNwW6J94MM+WAfhl63InMd8UFmSpZtYSqvfM4E1mJ+CVE5Vom41PRzVEjC/NpUhVdHFVcYoU/IctS86my9rHFbcVSg7OMCQ2bTqkK4zo7dNj4nnLWY531LCbZIu1iKDV0eWXeELi+2XU2v7bDsanq34/znl6qEKKqehD1+4S+icFH6dkhZXNF80fTpIz4rzIZ2t+ftBWDWFaO4oWMb50eUixEQbbcBspPLBh7LTtfRjxTwKRjHqmQwz7Wyz1HKBXeUrVoXJE9pjEWXVDPqsifzuKB1uB5gbCZCLefldsiIYO5sg11Cv9Xh2P+BPshlgKdGUQK9i1Gc0AwnvenkWCISkqmYHfgVh7pfebo7oefFoonLt2SCRan1Au+BbVpIYCN3GUKzAM/fqCUFmqk4IaPuBk6hl0xjr7jMoKrVgpqhqlVTRnQolRmuWivcm9eUXAg4pbAn7kbiI3rnxSL53xh9MF87otoaTBNlzKCoNsY2LKq9h3Yzqo0Bx0a1Y3AadzGsqmg02sQtO2g39/aGTy5HkbuXNPsazZruVhWV9Kq5tUrZQebjzLR4BCHeXHwEI0p0MgQLSnVJreDHlR+7053zmQULV1WbxQyr6tDIfWVGLkRMUU9j1T8XRInnVBFVuHf+HkZ9POxxRVa47/DBMauRPFJkCY2kx2/HkIZXx+zuNc3bdTz14f4Sf2/hH4TehkpNOhiAx3XoSEG8O76BXESZ11d+z7buvGer5c6xMuWdIHVJpnoj61HiSs99FWbpIB1GkGoFqhsrVs6Qsdc1VnWw+NoUfzaQVnYg3T0pea6ELRfcNdNh6zOpx51AjEWFUsAq0bPtkcg4K6cLGfOZpIaG439LAwPWNw4+ujvwglFe5Bz13JHjybW+De1DD0qk6FrDIvvUlT15IWtthruvaCrd/9fgXfdmTlQiI7wH9J3HJCZDrKEsWUzcRYY0kCpTpSQXd8pcCQHsbUyDr/T2QRlQ7X9/V/AdfP/m/nCrEa/prdRy77D7FwO/fgBLShApgE/fWmDRT8AkzBfmvgFMXGzesfh9IsLdlxz+Bi1woREy/xHa2Nz6e7kazCunL4wh8xw9Pfa5KPz+6Xf/BZUxhJEKZW5kc3RyZWFtCmVuZG9iago3NyAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDM4NDI+PgpzdHJlYW0KeNrlHbmOK8cx91fQmQWYrb4PYMHAgCXAmeyXGQ64JFeJFOgl/n1X9d09nJ2r+WTY0uPOWdXVdfc5p99O7EThf3YyHP7R0+1XuPoRfj/n41++nL7/gZ0ccZrr05cPuMktkU6cvtz/+Uap5Rfm4Pj+uHDmrymFf3jkUsIJ/JSinF8vZ24pvHF1F/lGGXtQpt4vjPrzy1nAow9B2ZWFa/8ye9z8j/MPOL7H4wPPL//68rfTX7+cfjsR4aw6/Rspk8RQc/r1JLVNF7+c/nH66Xm1xMkQZyjDagnFiJGnsyPWxrpxAQUxShmwhmkNpN0pkyKcv6tQBWaAVAPEMwF3nfNcCBASn3C4ctUTqJqCwy2iwhcR1ZVVL3s+COMZi4Vw8ZFqm+tBGFfN37//+OTm15+ziM+CCGtOZ0Y1UZyhrH87wWsOBStpeK27hHcEHICfRhAFYsTbv8CVIpwxCxfS6PiAESEFr26I0626cpJIAKXlRPi/ESweqC/v9juV+gGKktgVuFUxC1ijkPl4qLjKibMucJVxvpWrnBg0jlg/oBHqx30FVXySK5huhAqmK5eqt6lygeiK5vXq1BtSQAlvh5Ov0bTsSUIZTKBpQWkMWMQFYcKb1p/+/B2q8/c/uOotRqgGBPj4j9/12l60HipDkBzBIonVjVS4OllwV1p6tJQYXRcObkYJSs21N6kJKNfEOtfB6ivA88sZrBSvABO7g5O7eS9HpaNUiPRUYDksHDUcjcll7qgIAz7urQoDICP0k7pIejkrhx5cA+0SaEcvzqE+0kTKr6k+Sh+h36IeyFX0UzDW9PPIy+VT1E4QbSao7bKEKZgcAHRs+VSo+FQi1S6wR1VC3UQ113DuWE+1W6baOLD+CSBrlQ1/SCf8Q+ozUiBHBnEhjdVlotFURQmI9Uz3NmAiC6L+LNErlALbtk+Vr6FtG/8Eennbo5XsoDIJy+B8Ge0TQAMe16xTpn1VlswRTMM20yY5iIBOAB9zMpzx6g1KyQiTHUpup7a8O2AISajjhwLGXDgoqN+CWFBEaDFJVCKqd7CmneJSjjBj+9KWDVxB7nE6SxAZWHmA4m4nDbHCDbLDNsIgcRBuEevUczGiWA+no9MStjgvPKJ28tsBa4EkSbCekVP2b8RqKdHODMeqCaQHi1gncI4RqXo4ft2rLJCQMiW3CzYH91ayPBgXStNnFFHKkAfFnIPdc26RjDDmJDHYXkM+UjIub6CPJsNSMRqliCSiCd8WsrSDYWerqEJg6WUlVaBP8bpe5jahclvgBiaAE+kNPzAPc4I5L73K8WuiJW9RD3X8CoyBvcTvZ8yoFY/AeUztYgYcU5Kghzs5n5x+XRQqPQpYL1tSci81ONLk9cOFdE5G71g0nMtAdcjbi/XkFGvZEs7eXfoOAmjiukFxR2u440bHnQWss3GnhaMxzjjkxd6MTBA6oYjr5YTMQlvfPqHouO/eypzsu9s6fBSvmjQFNaf47hn+bbMWrjixineFb7AXbiQRhnUIkuaHGiSK0Tq8HaGV3EJkeeISN8YDAee8V4HVWZ4xAG0HWVuDbJi1LWCdtbYW7uGj+E4ecwKN3u2UCEO06uGSxFND/rjFbSUrW1wr/I+GQ9vsiDkHwVg8ZXobzOaExilRpkeQsjefk2ejDNYTMzi0pXvI9SSvI0+Ck7cSsTzvXc75eIzC11BSOM8x7VaiXi63RL6DLei2mmut1VpirRlkrQ2yYda6gHXWWhs4dQvS8Bl7zKuP28lW0rKdNIA6ag1qjNea1OnV+PqsKZ3WJp+fWgqhy+xzjYS6P+o3EC9qpSmZFit88jou+lZK6pJ7HtbWpN0po6+ZMTTtBhdipX5J3l1Qv1X9K6IkpCLf29vXIohxtitp1q7r4cwz4xIa0blT7L0WYRT/Pfy8s+PlGlUxuak597R3nE44CHrSfetxOg4ND+PgPw9f7kK+qjTE4IyTQ0MnvFgKLfdwCK9c/ZJKLbdohZNWpd6+0cjgf3s9p2ORlUJ8PhYpHIOcmn3zsUioXBRGusb0S9sKG/ClKgmvIgMb1nlGRVjPs03cClyomLB/cLMcF5Ox2hehT5FQZZNTO5lDwpgg36LXZnWUbwFDbhiOSOPuBD01Zzv0K9Kq6LY7fr2XQJs7x4502qVu0s30OU2smAKqkMbGVGNwxNg2isgUYU70FB5OJ3N7YAnvE0gFfmkKOe0uOOdXQT0d6xpCucM3p14xKQ2NiDIEWdKwNOCe3khvp2QvdrLubGJxRxiDZIZBS184vdinOrVeBdkQdna0GIwouhAaTn2HZElQZ3SnT0NFTN9d3aCq9fMZf7tO53Mmt5GOvk+zNn73EKGN1PQfDvMwqQsAG7rcbBgtT30ALeBwD5MGmzbTlzp8O0BVN5QHeZikQ3vbrXm6REvrcV9DIWlnK/B+4v0ayKEDPrmLckm0m/FawsUL8GpBNGM7VDHPSOls5XpccyzISbDxmuMgSjG2R3OcInbiFmYc6N6eYWgvSDdcwLnHeTReiNeC7vKx0hE95SYqTux536s4QoOYuB2uOMIwwqndoTh5/LeFrKdehUCXRheH8CH3/gzmgxTQWtMr8G6Y5wkJAPq1Xf1In1K/1MtUlfxWUsTU/7zbjtMYX4v+sLmlNtNgtKlFtYR2drZSCxh7fc/lKUjZVHMOfTdpk18HxZ/PCY/2m3MQCKPDh7mW0M62qVvAoblH5npTxGEd0ZIo9QK0jjixAu1s8twCHh9w2CzSMkm5leniRCZsw1Xtp2ZSUxh06Cc2rZhGvrellObsbhVDTlg6vr1milKeD9WWtnFysaSW2CmWJ7OLNwy15NmyNc6hYy1cSQiD5iWDLRXuPK2/n9If24wf9ZDZC3WyLF5oaFuhk2XlwrRWkwkeJg7wtVaINW+nDWKC1lppGprD6VU6Tzz1vToVjHk2tSpzxPcke43XwQDaO18/aYV0bHmy3GsHckEhxzU98i19CZIX+af+BH0dQ5zjxEypm1b9icULIu0EMk8XmO/R2TO5vS5jrAeAlg3lrxlurXBPpj01PZbJ8qvpMF2P4tFVGowaotyEpuNZW/YoC3ifQFoi1ATy81U/ij/LdPfyxFrCnewpWD0LhUO+hEteB6XTDbZx6fQC2vl0ugEc2iOT0+mmiHHp9GC0KZ1eQDufTrd6cjyd3irSkk63Ml1Mp6cDH6uS651zUFMQbojcMAdVMANN+UktqzrEWomlrvnPZ8R5F03LW2E++J7wpiD1pqqjeGx4s5o44PpLwlvBXSVzpSFWD6almYgl+Ytp7j5dSet0WhKej+0/IZ8TzibQOBaFJmFyPFa6TCXjsha/ENP1aqmKmLtWq1G3zVnIYzAtbe30uenSiH299pL7BXFdWevjnzOgvmJU/GuwjYt/C2jn418L2DS+h3jxrYQVL95AGlEN6j+WfVw9izJF9dCwiD6c1b7us/70OPdyZ7eDH6uYaNEWd5/GDjoMolqDQ5tINml+H5n/2ZQ6dsGt70t50YrbgrtrcvNuOmhsdu+TbkrF2uK81xKrh+JbYNzFxmcsqM33vZNHUjNoStjaySPcheHiFsOzySNlukeVO7SdO+1Kt/kuvY2OXWhiuZtIe61jFwyCEB+15rnFNsyxL6Gddewd4KjhqTTg06I/Po6UFq+PRZsNdAHtbGuo05HD4XCzOHM4bCF3hcOduZqfOcImtMf8zKj1W4h0GB6xYXFLabUPiCkrxf5R27gQMbdVTNp5RIt5B+Sdnzm0yDkOXre1wFCegou8HVnprKBd53oujQ25ENXDFMkDmyJR7GxVHP6YuBlPc+d5PAouMhe/3ON/pLg0hN6Utz4sSEaMGLVIssU2LiwsoJ0PCy3gyFXJHePWL0ue0jTA0W5lUHG0bTW+8crktvQ9S5NbDL/H2uSWgvWGBzzAjHiQ4TXYxhneAtp5w2sBRyxQ3kxLmp3cAo5foryZsGJ8rQ4MWaT8jPPbVim3GP53lyl39VxtuDgHWOlRhttgG2e4C2jnDbcBfM1a5c3EFYNpIP/fVys33BibOkN41Uy9preq4H71guW2qPUWbhV4QjnKwhts4yx8Ae28hTeA1U5Ne/fsilF2Kz05kW65nQZCyvzuo95mK2HF27Scuvd7WrW0zjTGp/zdmCunhSMtNVtyZb+QY1KdJy3Sw7E1z3Jsy1q1zCEukOjU4aNsYOhZnacpPJldd2S2WJ7r2FE+ZrqYZJJwqdfXbkypaSh6uU7bMihlCLdqWcr1juoaKda4kbHQaVvj7ubXvCU+sEtI7OP2C76lCOvNfTHs8RG3qr+9ojiO+3bLrkzKWdmp/qH9BvLmLewu79yF8bS/frXzvNa467xrN+XHfezxiDvW83gPceJoM3s+yC3aDTWkBrpsbjGzC5N+y3u/831Cd71fzgLdD8PNCJAa3Eqf6Uiyer+49GUA/1a3gb4woRr4uQCs0nwVURKXs5QWPasNtOATgOgIqIpIhWZeBL6EtzyEL6niC0Agt+7ykgp4VwkNvBJfxzu+CBMQo6A8kkd8Au8lVKFaoSpY3eqLABXxAPkZd8NHDB6JCS6wrlwtiocboMaoRN77IxCEtVYWv/HgNQK3PABDVjGP8Wiu96CUDVuziJK+cfERyIFMMeIXjyTb9G2F9ippOX4+QgaeV19awKdeK1iAox+NNoUXPU91ROgpUu/+tXinrWaiP7AlYEAJ3qUnJMhWJohE5kPnr1y4CFA+86Djw/YbEijyILB8ByDsWymiPJkTvOfmk89FbPM2XpjJuSkIPEK4iXMb7+RKsdwRirvvN2VnJ1c5Jw65A/7wUyScxk+R0OZTJMih+CWSw5xpPJ0SkuR1TfOfQkFBlS+hRHLBFwnu73vyrrY8emettWQLol490FsnmRf/VxS283/4DueP/MMPqYQPq7yHj6rgCDe3l7MpEQDdkCuuOOjmGt+vlIMsIvn+e2XNgfhkYFh7Vtc+Gkasb6mEt8BkvrUFRRdieG3TySEDhIzkB1ebXipefImSjK/2u4ndXXjpGFN/k+astSJGyPhVmnwZvkvzTKm0MSV8RkH5EgS0q7iJjdpoDKgOnmXBZ6sqPvjIHq0VUn0luyThGs8b5+jql2QX6YIH6yr70x/+A/lBTCkKZW5kc3RyZWFtCmVuZG9iago4MCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDE3MTc+PgpzdHJlYW0KeNrVWbuu4zYQ7fMV+oGr8E0JMFQESBZIt8ntghS2JafJFpsmv58ZcoYc6uH1dQwEwV6vLJkczvPMIdV97XSn4J/uooE/1V2/wN0n+PxRrj+8d9//pLuxH4MJ3futs871OrjODL0bbfc+/3ZSajCTHuF6WSaj0r1S8IdX4xx8gY/3ypjz9GYijjyPkzsprRel/WXSKn2f3iz8dLNKn3W+NwP+slzTx5gbXC90XfD79Pv7z92P793Xrrfj4Lu/QWnj+qhi96VzYeCbP7tfu8/VuF6DMao3wcL/Nujul087D//aMV91b3izZ7huDEfzqt1j+igzTG8RDAJna62UvngFvsxuCAHMnuvYC7nAkUvGMS2R5tkledCTB9FbMBWGKO1sHoL3+B2XSqI1iF3KB/2Y/XrJPsUwsXoo0wZcdgLjkpYQJIgNSGWPNwliWw9Z1wdDHpqXpG7Ry2JUI8rS8Z4jYBSG/qx5ODxyyXX4wJyyRByL80E9R5qi2JQ6aRCYkRYB72U5FJMi9a6X10vZmMLdOF04GRKzuOdfpViIMPLJHLsIZ/thMob13ckt+//LrVH3cdDkGuUo3vFj8SxPHzaQZza5pMdQVtGaVsQ0Tg4585x15qZhrdqB0jTlfeSw+EtyTimANrDFAJiTsrLWSs5XORFLUJfSo6UcfVW3tXbO8tDrXIA6eyZlRnWDyZWcUXvOV5AnUPx1ZaEBzc3gnqsLzBVyaGo3aMJ1Icti/h1zoHFzaU1cMwQ5MX/HuKusQho3u5QTlFePpLN2Qz86zud5nrQRwU96QJJYhylxoAH5YLRbBWCiW4FgenJk7MhtOE2j8NUf9oqDlEuutAsriE+9xOgMyggAs23wlGy7lYHNVDInK1+XrnOdWETUWbEyp8CNnxw72OVc1+XHlOepoUhftqCykPrGXfMvskFwQ3dzAgNMBgy47kcfcrxxWml/GYdKTXI3BLNZgqhPdlWq0SQGp89uGk9FEiM4SMoS0AsBnQ1VgmNFH76LygXGaievUIPqF5icGT0kbDLg4BMsKHfi1c3pAfMPzT50+MvgZrT9k2AzCHt9rkvIPfZdviLqSoBxQx5Lya6Mbjzjt555AF+MHnrlo+iXhIFjgUDZ2nZjdB8tZHe87pvIsHJEyVaWHubAlgPiArWtUbbTU+6x/J1HHVLClySN8arn+n6mRRGfKq1JthijhJFjChU3Xq52Sd3GQQJYLs9tp3ooi6LvIZPIKqRyA62xBKrKFARNaGwD39lQSIqrBLMBcRPVhqTohqhrUf4r39Ay3IvqHXdBnNOupo9WO5AvEu+u74slOstGLQhIUwEUU7GU0oanKJzBu25n7FKbDJcli8vVBnIMjhIVxnspP0iLYdiNF6asl53IU0yZrn1MCyMa/3aDJ1k256Kj9mk22IGWyNUAmLwgITUWUqwgc8Sq99RaQ9CdZGL2XFuXTCQEE+naV3Uaq8c+xPB8r7nWdo92uJE8wJuamr/qHGQE0rSrYHSEw+stILMw9tpjuIGHRdZyD2XaEQqRknRSkK81zQvO7vCPJKbU+mYrDnwp2kgBFIxt32BapIBO1XGbJ3L5A3zjjhM2/FsKlnd32Hhwdod4ZqcktI21NmVxFAUa7sRPWLlAFlyXPWDYLeLaUECIdW1j5gcVYIMFn6twzp/o6EkNpPWn2qGqM+rGM5cabJYwsfOu/8HMaZTZLkgHIzvzvOCmqI70AxFNwe54BjSHvH2Q+3PNeuwxLNJQbO34CCNLvLLec4bW7MydA1fj3C6y/+d8Y7UxLS1V1+OL/RM+45aPNiWYc3sdLIO7+ujic7B8Fv5CxfVSaUGh/fEjXN4Z3zvlv8nCLNV3PRGT51uVCNm73bvtgkzPGypNrGG75njf9rE1/YGOnbYp7lS3l+uCPaD227Ov9vz3iAloBYu9Lo987Ec1PHmeu4ofnjledIP8BfoyWBV2VYszXcBPpaJn+1DGDQY2M5xxR9KmIR3rHG7SagYChJ/YCo7At2zRG6ZowwoCHtuo8iBDJxZM5giuxIFt3cLYU0P++HSzORJ7IQ/02vcqDM++XCpIWQ6iyQnKDdVWAT4oyqjdF3cY4/XG+E6meDv20TCDvSx7R0X7VG19DFWxrH37sz7DxvH75vKIJbTnl7F9nfNNCCwsLd8dv+SUvnpih7E69pDbo1VyUQDk2863EHwfgWPn953lNr/x3H+5FPthoCTTy43ep14zxwqeT2S4uy4ZYuOp1GQ5Qt1GcvVul+mxtIk7OW0hXMhNVrFC6WXv2uTP3/0DIGrPMQplbmRzdHJlYW0KZW5kb2JqCjgzIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTY4OD4+CnN0cmVhbQp42tVZS4/bNhC+91foD1jlkBQlAoYOBdoAvaXdW9GDH3IvzSG99O93niQly7tOswVSZB1Z0nA4j29edPe5g87hP+hGj3+uu3zCuw/4+aNcf3jpvv8Jutzn5FP3csOHfupjDt3L9bejc5OfIeP1vMwe+N45/KOrjxG/4GcYnPen+eAnhxSnPMejA1gcDOcZHH+fDwFf3YKDE8g9E8Ny4Y/3N7ye9brQ9/n3l5+7H1+6z10f8jR0f5NksR/d2H3qYprs5s/u1+7jnVquB1TH9T4F/D8k6H75sPPwr2IAgD4PgxcLHMgcagFYbiqWiXk10d5z0wA9DMNqZ4cmYpORKVN0gC6ElFCKzB93JlM6B2ERGhjnAyQU+Tyw7bO6ISOtB7rO3h+Nzxyc+BVZNL4ZcNMxyj1uxtcwzt5VZlWA+8V3tvlSm7RIPITUe4j/Y3Pgi6V8KDQGXeduIlcMTZiMHFdwujIZyUVkoy9hRh8Sg0iZzTVsDc5mDGszJtdPmALEjI+FyCIDio7hOZJpTlczJz0JxyJfXMmn5CqlkV6vYl/2hVuphabXJeRU73QJC1LVm8cjaUhh99Ww2sT3gK/HRwG+/CcB7vo8Teut971NxsitNTmtGvoJV2GpyKBnhGRg571v+IGHPkHexN/rEkh54Dh1nBAKBtSxbURQzucacAPJ/1RSsOR4jUW+1pJDhiqh8JY4ftcge+EBEdPMmCw+EqHb2IDX75RxSAt1l8a+xEom1UNqsJ3void7Nc8TTlSO+HZlSFgZ0qhoz5Ae70lP4g4XVORApV1VkEzIgX1pVZwPMfMz5YIPL4U3yX+NdBeOtbQ35pPdOCmbvJo9LIvnRLlHzWIbP6mbZWPIjWVIL1lt2aTZkdJ1jAwKcjyFp/qd/FesDQsnnUPymIJ8vDiXTsovyhVl8RF3wujRnciMctfKKU9ICkq0tJpsZqbFPRsthbbqIQgzqzf8FT207sLU9sb8oZy0SIhmnN61FAaRUnVMqmPM1WfEm4jRPaqnu9OT3ovPBY+mvVYHW1RgsAj5SjGpC0q5NpxVUnaIa9bDw60aBq2LB3WxYI3XnAepuWE0nCAPN6EltH1g28RxEBq9I2Q/spKnUAmjCT1WrFCTEqLstbOSC0/73m/fX/m9DzeTI6jH/DQfpuNbXmb/udwgYh0RraAVaryAnjI0+W7lHzbfmxbNLWrAVXyzlQivTWfGICInVCBbY/SqiraRpt891xdFhm0mCUPYYJkjk+nMICKcajGEDfQGeE0t4yVZo3CuPSXtzd8xDXIvSIyvUaPTefM11HBQ2WOUMon5jr9wmuJURZYAV9gKBIbQOuOBIcDdbdPQxlIJW34pNWoVJLFJK9Dqpm2lfCTGq8AqHeHGy2ynpluv9bZ2rIR3Mm7kMvGFQSELalDcJS0HbwdFZSJxZnnOXH8p0/IMwFAQHoV6vwAUPtYeCK35s9Dw+9Fb3FjZEPG3+VrmLK7KTVcgzUdu45T4PCzH2mZo9orUxY1VCDW6JFCYtC1OqQ2GPW8T4B92NjJdiO/XJceGng0064LSXvEUg20m4aXEtsECbGhxcapFem+KooryCptHDDxluzG13SfjwC2BSkErcfVY+1TTiSXGSzMWy3S36lhV2SfqCQ/PtA4fDcfa2LC3YTWtfdX04cPUD8XZu4Pnl04DdVaPE2u2PgNYdfdlXNEVe/l3uM+/zwwcqHrvwY55xgfNoYzEpQXmO4t6bg1s/LinY6H0QIOFsuVbjz874beHfQafvUohTFsgL3V02ksH74MUHKpHSN8KUnCCBOvrJQhrJcFCUA5xTrtz1gy1HjyBpeDRNGP8F1gqrburWtXEFerJ2COoSOI91+RVxq/CP4ZymKNPTSqii+7Y5KWl2azJ3HfT4npwHTfdmKa2pgq15aCRfIPdNudbFSANTDw6C3C4ybuBFjuffhrHbwW0dHhZTjWvQeFI6d7FdYWx3oRy3mkSvLWzHflckfMMfsexH0Kshy95pwdTJKz6D/bzZakYE3w+TnUF54ojbj+gxWZ+XRulsj0tXqS4suveM6lFcL0L3xA+2u6/ViFCyLsmtBhin/K2x7vf9mHst/lsnYN2Cp+NByXyCxaaLvgeFyXPGIeSiqS73uNCKw13JpseNGzM0v7mdUgJixsGiPzqVW7ld6894CSMqGma7HT7Un6yCiDnnM4OdKEqkO/dx6fQejqOg+gQj7X1M/m1Dcyl+cwtUVzPuVpcNsp+/O4f05xcvAplbmRzdHJlYW0KZW5kb2JqCjg4IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNTg0Pj4Kc3RyZWFtCnjatVW7jtswEOzzFfwBM9xdciUCgooAyQHpLnEXpLBP0jW54q7J72eWohRbtoM8LrbXFElpZvYlumdHLuBLrmH8gnt4wuwO9ngxPjufs4r7jtku+6jJPbmo7TL55j67e/du795+IJd9Vla3n1xk8VEat+PGtzm5/fClC4EphBTwiSEcNITjGIJg7ZD7r/uPBYKil6hsGLhUFkCIz0QVIraAAMYw2KPlsff7c5XKnrVZZNbZmc4TkkjwI7HbUVCvlcT0MYYWfw/JdC5Ea3g8wdEAaMG/KLlPd1cWXx6vUEIiNfN+oaMJbDwFGh8uaF6BjqPnJm44LRWE1JNqoANiOUkgZALXNzXUsTDISa7hD+LkJeeKjXSmboYHNMkIaFjOPcpBujmuRzJbVmKGlBgoTFYhtyRcpYarFJtKjWoynOJOhKUjQptXPM9kEYuSLWJtO4dxu/hyhUmC15Q2dKtroIH1efaa28Pi/RoIOFa2LM8mrOG/ivNZOw1jT7GbFQD/dRxl9SnQhqo4ark0y1YyZHSBJRVbc/2Hrv5bF7Fm30i77aLhv3SR+ibShhNvoZ65W8q7hKW6bJ211XEto2Kdo3F98ZQaOqafnWNQgLbk7kRlbq94s734d9prXkXilv1f+3FCjndUsTnSxzqOdn2Jyu3ciGiDuUyrwAIrWm8z4Uzd0kg9hXqvQZTHqexVEYY0DoW8jBMqMcYq7FivbV224cchIblN9ZDQhDzG9ZSo01vHWcqeGpxF2qAr2qXkCufF2XD/5gfYIp1nCmVuZHN0cmVhbQplbmRvYmoKMjEwIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNTA3Pj4Kc3RyZWFtCnjaXZTRbqMwEEXf+Qo/drWqgg3YiRQhAYYKrXa3u2k/gICTojYGGfKQv1+Y61SrIgXpMOOZuTe2N0Wta9vPbPPshvZgZnbqbefMNFxda9jRnHsbcMG6vp090bu9NGOwKX4246/mYtjm71NWP/34/ufat+9TY7vHfPjoHl9fKi5ZZ05IfbmNhgnPtT7cptlcansa2H4fsKXIUnma3Y09ZN1wNN/Wb79dZ1xvz+zhtTjQl8N1HD/MxdiZhUGaUjmO2dqhM9PYtMY19myCfbg8KdtXy5MGxnZf4rHCsuOpfWscpcdL+vLm6UoiBAkQB0WgLSgminwsIYp9TIJ2IEWU+JpbUALaEckMVBApP4sGSVBJtBWgiihDbClNhO4JNGTonkBDjjkTaMhLEDQUmCWBBq1B0KB9JjSUmCzB1FVEJKkfDysQ9eMcamUEUqAYhJqS+vEIGqQE+UwF8pnkGY99P+rOE6iVOSgHkYNcYk6pQb4DOcgVHJTkIN8hpkIQaioo2sFBBUUZHFRQlMElBUU5HFRQVPgYFBXQoKBIQ4OCIo05FRSVdyegcdm2fn/y+269725eklxeYX0U+mzEky+bWwgIibKUCJtNFCCMJyIQ/kRBVokY5YX+f5j1NK13wOcV0F6dW84kXRR02teD2VvzeZeMw7iuot8/d08VSQplbmRzdHJlYW0KZW5kb2JqCjIxMSAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDU3MD4+CnN0cmVhbQp42l2U0W6bQBBF3/mKfUxVRWYX2DWShQQsqFbVNI2TD8CwdlFjQIAf/PeFuRO3CpKxzs4yM/eyzCbf233XzmLzPPb1wc3i1HbN6Kb+OtZOHN257TypRNPWMxPd60s1eJv8RzU8VRcnNt+zJ/vt5euva1v/maqueXxx5+t7NT6+vZZSi8adsPv1NjihmPf2cJtmd9l3p17sdp4Qm+WxdprHm3hIm/7ovqxrP8fGjW13Fg9v+YFWDtdheHcX183C95KE0km0V/eNm4aqdmPVnZ2385crEbtyuRLPdc2neBjjseOp/l2NtD1cti93maykfJACSVAA2oJCooBjEVHIMQ2KQYYo4pxbUASKiXQKyokM92JBGlQQbRWoJEoRW1IToXoEDSmqR9CQoc8IGrICBA3WgtC15Ri6LgIQui7QWYSuS8Q01ZN+CaJ6UkKtDkAGFIJQQZNnMoAGrUG804B4J1WXIdej6jKCWp2BMhA5KDX61BbEFchBaeCgJgdljJjxQchpoCiGgwaKUjhooCiFZwaKMrxNA0U5x6AohwYDRRYaDBRZ9GmgiL3W+u4G+42Vu/JC/1uN6XjzOZYfp/rjK5AF2SL5TQU+70Zcmk9fgaKzrZb/hAj6gxSEM6pyEN62Ik9VgD6DDAQ3VAniM8oEN9QWxFlIlwqRRVlQTr1I1AstiGMFCFnCEoQshrVip0EvAfrc8nfm/+/aOh7WuXYfa/V1HJchQ8OPxtc6adrO3efj0A/rU/T7Cx07P+UKZW5kc3RyZWFtCmVuZG9iagoyMTIgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1NjM+PgpzdHJlYW0KeNpdlM1uo0AQhO88xRwTrSJgmB9HspBsWEc+bDZaO9JeMYwdpBjQgA9++4Wp2hyCZFsfTdNVPe2Oi32579pJxG++rw9uEue2a7wb+5uvnTi5S9tFqRRNW0+k8F1fqyGKi1/V8FpdnYjL/evL9u3H0f19uXtX3PzY+6c/7nL7rPzT+3GXGtG4MzKO98EJSd6Xh/s4ueu+O/divY6EiOe0dpz8XTxsmv7kHpd7v33jfNtdxMN7cQh3Drdh+HRX100iifI8vC6FxLpv3DhUtfNVd3HROpmvXKx385VHrmu+xa1B2ulcf1R+eTwt5seTRKV5oDKQAckMMQlSiJFMIFuALGgLWoFK0HMgzdgGxNgWFTIQtBgStGQb0M9AkvV2yFOBsgR5JImYBsGDIcFDtgJBtTIgqDYkqM6YR50WRJ0kKJt/AlEZKigqI6XwAO+KOp9B1EmCTgXvs5UQI6HzCv1U8GBIUG3QJYVeZyR6YHV6IKHXCh4UHBmQhgeJU9HwoHYgeDAkeMgwPRoe5vRA8GBJ8CDRFw0PEt41zkGi8xqOJLXAg2YFeLAkTgjmU+McJM7IwINGzMCDJcGDhj8DD5bEeUF3DXXCreFcY+oMem1JUJaxArqr4chApyVBp8Y7LXViBi11kqgTjix1kthd9NOiuxr9tPxvkqDaYpYsJwSnYjkT5v8cytUSl2o5+3mZcGssa2XZiV8rsb55Py+nsDjD2ls2VNu5r9069MOSFT7/AGVfQwQKZW5kc3RyZWFtCmVuZG9iagoyMTMgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA0MDA+PgpzdHJlYW0KeNpdk1uLgzAQhd/9FXncZSlek7RQhNa2Syl7YW2hu29Wp12hRon64L9fzQl9WEHhy5yZk0xGN9lv9qrsmPup6zyljl1LVWhq617nxC50K5XjB6wo886S+eZV1jhu8pY171lFzD18p4fzz8uRzq+DpqTXba1n6/pezE7HnS9YQVfIj0NDLLC836RD21G1V9eaLZcOY+7XWL3t9MCeVkV9oedp7UMXpEt1Y0+nJDUrad80d6pIdcxz4tiU87G/vC6obbKcdKZu5Cy98YnZcjc+sUOq+BcPOdIu1/w305PcT0a550V+bGhjSICCELEABKUIQVCGK9AOyshQ6EFpCVUEB0koBWiOGCiyeXOQb2g0crAJk7cA2ZqWUFOsQQtQArK7tlW2oK0hDr8AJ+Lwi3Yg+AlL8AvRF84NSQ8Ev8DWXBviUAo4cHRQwEFaggOHu4CDtISaHB0UK8Qs4QwS/ZQ2T4LQCYm+SOSN1zGNgr3zaSimcX5Mc95rPY6WmXkztNN8lYoev0VTN1OWef8Axj7QsAplbmRzdHJlYW0KZW5kb2JqCjIxNSAwIG9iago8PC9TdWJ0eXBlL1R5cGUxQy9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDM1ND4+CnN0cmVhbQp42mNkYGFhYGRk5PXwCnZ2ddR29vX1NAUJ2G743SfD6vqzifWHDMMPWcYfckw/5Jl/iLPIPfRi+c/DJMvAwPBXEET+4geR3wRApBqQYHQUYmBlZOQTbWqfllhUlF+ekZ+fnZOaVmJgYKxnYGDknF9QWZSZnlGioJGsqWBoaWmuo2BkYGCp4JibWpSZnJin4JtYkpGam1gC5OQoBOcnZ6aWVCpo2GSUlBRY6euXl5frJeYW6+UXpdtp6iiUZ5ZkKASlFqcWlaWmKLjl55Uo+CXmpiqAfaIHJp3zcwtKS1KLFHzzU1KL8oBOZNQBEu0MTIyMLPY/Ovh+xH0vOvzd6zDjd8HDzN8ffu8T7V5a1NPY494ftbF7T/e+/evP9HNMXdK7tL9rcZaDRriO9ruIa2t6FvfL85Uu/OE8bdq07/kL2X4nzmSX42Lx5+GcxMPVw8O9nusp9/rJPDzfH4oAAPGneD0KZW5kc3RyZWFtCmVuZG9iagoyMTYgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyMzQ+PgpzdHJlYW0KeNpdUMFqwzAMvfsrdGwZI7Fhg4EJjHQZgXUbc3vYbo6tpIbFNo5zyN8vdkMPO0igp/ckPRV1e2itiVB8BqcERuiN1QEnNweF0OFgLKEMtFFxq3JWo/SkqI/Sv8sRofhq3l5+Xu/qo/h+uD+fGvoIGvsr47R4BLbV7UEsU8Sxtb0Dzgms2nXgFMMCu2ftOtwn7CNoDMYOsDvXIiNi9v4XR7QRSlJVeRy9nqScxslLhUHaAQkvywp401QErf7X2xRdry4yEM7oymT0iWXuhiZVsndzp+YQ1r35B9lRWm4s3t7knU+qHH9wfW0iCmVuZHN0cmVhbQplbmRvYmoKMjE4IDAgb2JqCjw8L1N1YnR5cGUvVHlwZTFDL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzg4Pj4Kc3RyZWFtCnjaY2RgYWFgZGTkDXLzcY1y13b2DY40BQnYLvjnIsO64udq1h8yDD9kGX/IMf2QZ/4hziL30IvlPw+TLAMDwy9BEPmdH0R+FgCR6kCCMU2IgZWRkVuovmVyYlFRfnlRZnpGiYGBsZ6BgZFzfkElmK+gkaypYGhpaa6jYGRgYKngmJtalJmcmKfgm1iSkZqbWALk5CgE5ydnppZUKmjYZJSUFFjp65eXl+sl5hbr5Rel22nqKJRnlmQoBKUWpxaVpaYouOXnlSj4JeamKoC9oQcmnfNzC0pLUosUfPNTUovygO5jVAQS7QxMjIws6T86+GRYA88t+C51+Lv0fMZf278Xif4WNCz/LdrdyVE1s3um3Pzu/u4J89d+F3h067vA0sk90/u6Z3TPqO9r7vkts9zucc53xtZFXT0l3Ry1td1V8t1d83+Lfhc04PjHz1Zd0J2fv6x7tjxf8eKf9gvZfitPZ5fjYp6m+p+HcxIPVw8P92Guw9yHF/LwADHv94ciAHtViLcKZW5kc3RyZWFtCmVuZG9iagoyMTkgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNTI+PgpzdHJlYW0KeNpdUMtqwzAQvPsr9phSgh+HpgdjSG1SdEhaageSoyytXUEsibV88N/Xkk0OXZBgVjPDaOKSVUwrB/E3GVGjg05pSTiaiQRCi73SUZqBVMJtKNxi4DaKyzO3Fz4gxOfb8cLurw3ePmfCcqLR0J45/lBif21O6RtI7FZBM1uEbMOsqufR4cB0ZyDPI4D4Z/EfHc2wO0rT4ovffZFEUrqH3bWsw6aerH3ggNpBEhVFsEvXhMJIHC0XSFz3GOXJMgXkp2WKCLX8956tqrYTv5w8Ozss7CQ5fBQBva+oCtqN5V18A88CxES0ZAk1hV/6QErjs0lrrFeF8wfHdneHCmVuZHN0cmVhbQplbmRvYmoKMjIyIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTM+PgpzdHJlYW0KeNqr/08d8AMAXstIMQplbmRzdHJlYW0KZW5kb2JqCjIyMyAwIG9iago8PC9MZW5ndGgxIDE5NDA3L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggOTM1Nz4+CnN0cmVhbQp42s18CXAcx3Vod89eWAB73+fszh4AdnEDC5AAiAUWFwGQBMULS4kEQACEJJ4mRYqiJVKWYkuG5ass2/GXbSWW5DiuRB5QkiVb1OUrcvwr+k45/rJdOb6/KpZdTqVcyZfjb3Px3+uZXeyCIHWUonw0MfO6+033u/q91z0DEkoIqSZ3E4G07NjV3JYf/9NOaLkMv7PzZ28Te3uEWUJoAOp/fPjk0rGzCxfPQ/1JQmpdS0fvOHxf31/9gBDTfyckLd68OLdAT8x9hZDNvwb8zM3QoO/TDRLSE4N67OZjt537+D9UfxnqY4QYfn30xPzc+Ef39RIy1EGI5oFjc+dOCp8x7SRk7EXAF4/PHVs8q5mcg/o/EcLGT55aPLkps/0EIRNp6H+EaFgXu0y00LfMpqFlQrnTg6SNIhfEQJQfkRAz3KhaJVOHhxfInxDyeya8vqqDuR+mzSKhn8I+JrDL/BGBvNnPOSjHyXHEZ6+xWkJWuzUPF37Ivrf6BtQjq28o9SIe+bPVTRXtL6yrF8f7EflGxXhKvYQng6xlsmd6OC+KE88Q084JWbdr/7Tc4Zfr8rOHxeU90zKLz33DAPzPz0uH/JGITPIyyUlDl0AGudnBRpmmZXH2cKPM0uKCKL84JWsS+y/VUWNueH5Y1g1PR2Qhnr/hxumIFPEvT4vy1BQ0ZfN+Ue5GqDufF1cU7LkFuQ6a1Joot2B/C2K+ODUtAjXLc6JsnJqehRYR+4wIZRDKzPpn8/m8X6apfF6SydT0Yj7fKAtpEcbRxOeAMm1ualrWSoOyThoEPvIynW2UNWkJ6BIXVrSHBkXsQYr9CgV4lYXZ4XlZaIhAZ05cFpdhgpUWbRyY3Dk9O+WfuyE/LeUjeVHO7pqGPj+yps7fKGvTsj6XukSYIikdVKVBCSQuDc7J7NBhmc4DFbK2oVHWp0UktTo3/4yGHBJxBDk7m0eU2SFOqiF9SV9NcsODDZGS7KvSlbowKqPQFJCQA75nxeFlaQ71wuVF/ChTWfQDkUUqQTvS3JAyRfU1Hpdj8BTxr7FW/lBNmjN0qdoogLL9UiTfEGmUa9MrjA3LC3NDjbIpDYiiKNfkxvFxAKTBvFyLtRugVgu1RtkMw1i4SESQwDzMK5tys+LyrCibQGiNsiU9sXt6RbMwlI/JtYvSuUbZmp7YOT2xS2n0R6Ddzttt6RVizu2ZXjGbczKdG5TNKbRZsOTBlRq81MJFpi7QhBCfml5B4QG3g8ugX5y2ISLBY0XYr/TjI7AUsCUPnIwC/aPQWqmqayhwhRC7BNLKyWTLJUop15U9TVYIG949LZulQXFYrgbjM0pgcIPiLEz/lNVKiYkMDi7Prth0KfnDKX8UxOQA3uypRtmZXqF4d4Gc8e5Orwh496RXNHj3ple0ePelV3R496dX9HgPpFcMeA+mV6rwXp+WinKXdbMgYUlskukBXCCNckNZp6vU+T6lM1XWmSh1nlI6Q2ki16beAX9h4C8EdInAH94jwB/eo8Af3iXgD+8x4A/vceAP7wngD+9J4A/vdcAf3tNpsZebaWMaprXOijnQ7WyOqxKWXhpttSktN6bkRliFzbAARsVraFGa65bQI14Xw4/ct5RUS11yc8OKljqHp8GRIYOt5ZK5urstLXZyetsBjw5fPQmszg0nx3biepJHk6EtUvdKG3Uicx0gAKB4Y4JhVcx1N8qd6SZ3b6OceTNUsOB5QO8CnRBXXGwSR3Hlgyy3Li+PSqPgKqYhRIBnBXeQodTpAJF2g4tyyRZA04DXjHM0uSqXWlxukkSxdxnG21SJIjYpY8kaaAFMUZ5Fp5HdOf0EEwXR/wRLCL78IDpSA/hkiWNLI7CEc+vX4yw6MyVusNzsAlhfbm4Bulluzg/wLDqy9c/MAVng3qURUKYEM4wAf3Djs8B4G0wiKS5TA14ClKAFy9JeNSqMiBzFORFwnVJc5dpcoPvNRTmI0KpNqHKQekFEPaUu2cD7R6RRnBS111sSHzKjSpjsnm4SeyHkIvVqo4h0FVWgi0Nta3l0V5S3kVmrmpLQtvvKKMkVVTWLKcB6lovq3QKOogmlOCJbctNTfgiZYm++aaWJOmCB9lf03uCfqujNbvjs9Z4YSMvdqetNOJiWN6WWgTa0L2Dqmqig0Ca5CZ7IcZbRNos6QbOUYLE0wTpTRh0CvwMhpIj4Nox49N2yW+QCXVSvBF6ozEIieZXGYfCt3amiHEagtikVkVRJqJyUmB4Fpp3KAof0AtayvUnugPU8do32rTAcddjlToDH03IX3CZQbsMgYHEEYmlRUpNpNGF5AsBt6UvgrADYDgBFYEf6EuUtUwDwlp2IMwzADYiDwC7EQWA34iCwJ/0EeL0BgPYCRDm0L/0EVdqmAVLa8ohHEdqPeBy6EfE4dBPicegAzpkD4CDOicAMzonALM6JwBzijABwCHEQmEccBBYQB4FFTtcgQIc5XQgtcboQupnThdAtnC6EbuV0IXSE04XQUU4XQsdAxptLCjzOa/IWAE8oYD+AJ1HovJaF2vsgjKo4pxQQcU5zHKri3AYP95RGPcNr/ImzCohP3K6AiH4OxlER7lBARDivgIjwfsDtLY13J69x9LsUENEvKCCiX4QnVYS7FRARPqCAiHAP4PaVxruX1zj6Hykgon9QARH9Q/CkinCfAiLC/QqICB9OP1GlYcVkdTAlGxZlITZ1rhiHG0FnAqmDnZgI+7Fq4iIRYnw65LbU6IjQkrK1R9qcVocUiXZaMzo3dWU6rR1ShEFzJkkTOqe1TqKXJKmwXepgjP4J02gLh7xa+gWBscIc07DL0pVlSWJntRp25c8FqmF7tVfu1jC2D+ArX8W95Wag4BJzk1pSNyEnpqaz1WAU7glodZJJP6+RGaWWfzIeYXpXKqOTogkgJNPe5nJaL0V9vij+SpLko1/wwbUwj5kBXZ1i06t/w16BsRMruoWhrJ/gaPuwb4YBRHcAWEtq4oLemVrRkSGW6OxUhnU6dNKDgVBECgQlNu0K2AMuuASduNUlxtXfszPsW8RHgiSejQapRqDjRAPcaOhhIgiOCUY5xQ6PZJe0em8qhuNFE8lkRK/j1Hd02TMZd5vLbY+3J9mZqMsWNHQUftyhD1p9fuF3BtFhC+vfKNzy8uJAtS/ist9x3u4MeKqMbK/DxZz2K1//1q8I1x1Iii2B7uwkQOKkM9tmV6gRiEYraBYJqOUAcO2Y0FGtlhxQJBkMBuPBWDICdOiBOuJC8opCbW+Dmj6RkCRne1umk2U6OzjMYrn7D/4O5fuH51N1zfXxx74SarR0bmn8yyfpib1Dtx+UfGzQJ11qHHZ8rv7zddHCxbaWnthLIJU62NnvYS+RJGnJgsVRgRLhAhEYFdidQJt2hmi1jgkgVTNDNJqgZjKRjMajMZ3elyJOhx4ElkxIUZ3O6XC1t3WBftxIMLYngIMMNrDdZovXam3dNHJz98WlvkabyWczW8zbpw89eujAo0v5SbYsOR3OKnfPkeGz590Gl91l8emTu750+vCXbkyCTlGOj4AcLcRL0tl6LjcNRcFpqSAUBWe1EmL1Wj1uJyCaMjqwG+JCYsrEZ1MEZm2nf3ff6Oh9B/8VRfavU/tvzD/2GLt84OFDhx4+oIjqytMfPHz4g4UGXAc4vwPmF0lzNn197fFzlnAsElO0F+Pai6jTR9qUqrNdASRnhP4G18QKkkF3+KSov/Cbn+Pt59R8WnJ7RYWYiM8b/ipevkGK9BiBHj+pzyawhRG6qKUajXCAWziQ5mRIip/4OqVYRKf3pOxrkzpKa1Ql6OVXcf5X494AkjGMFbZVjvhc0V8iLQoFriifG+3lI+x7pJlsyfYkqEYL9swEncB0F/RUR7QanXYRiKAzIJrABJgM9xBBLplm0iglwC4SBrQeXMgVdsKVVWZPYFCZrk6+IkF17JZo+NCZ+a8cOvSV+fmtZnPEY7ZlNmeP9vcfzQaynoNI9aP0vOT7kWTvm3vs0KHH5uoMPrM3bnAPHB+Af0bDPeiKVPn9EcgvTJLZmOobFnVaVuYdgNowCdnjkj2urkKrIrbOSJn80BlFkDp2KBoLeGOFlxJev4QQ7U942eWo/8rzSNcvf8llOojXf/5nn6TQQF4GGmqJPWvhZqQY0EZu9OXiqFJplCvPl9mBjYSzAT6GQBkjB0umaCPWeIcGxqu0QxwzQn+BlvesTyFXewbMK1Ia/Y2Snb3OngPflchKEZvJqCGMjmsggDDHBC0JKk5i8aa4Vu8uE5MVfGlSl0gK1nJpue3gWdvZt+PRQEB6zOgz1fqMj4k+rxj3mUOGn/6TwW9iz8H0z6HZ0U/9ocZMqbmGagsL/ijQlvPGzDWFFbqjxlyi70HgP0hi2YjXyDakLkgC8UQldUlaSRXFOzsbknwmv67wybDXA6A5qKdHwx52WfRc+YZPqjLQvy3s8Yiih436pBpjoYU+7hH58SpfE6/AmjCDzaAmwDOo5g/eSTV/sPqoBtZhTFdm8mDxTazM2sGjvzL90NzcQ/v24XX6nsxsb99MZ+dMX+9s5vePzc4+Nj/Pr7lj2f7judzx/uyxnEIDyqIdZOEAGsCT66gGJKQhuBbZAS1FmWCaTCedECedYWco6Adcm5TQg3mU/GSZbYOvRGfJwwt9+Kbu7pvaH0dVSb7X7HG3O25//HF2uW+pr/fmvue4dsByCrLYHgi0h/++KJduoQbkkiEjZDw7Wu9hWh0dN1CtDryE5gKoC13XBaKDm44uEb1emAF619yGFzWYG+jZBEN0NqZjsXgVLEaNQizoMYGuohS1u5pYSayAAIy53IoT2cLaiSrgjoTiXtjrsdxcIjuR8IquGkttrcvqkaT57ecGFcnn7tje5056w01Bb8yq8ziMV/6nogVFI4GYK9gpel3mWpwn7k7Wxq2LD+5VlLP3wUWrW7CYrBazSWs30i6uJkVliq5WV9kDoKs60k4y2fYIhNk4imIcIgmYtZYukpIvV/1RfX19e31ba3OnFAeH5OELWgm+SgZQ4dN5BAbenSAAtqZFdpe5xhz2OMaa088GPcEU+Hqx46auTKpfJ2gMpmejLlfU9rOf7feZbGZbdf2FWMO3iortPtTXNhNIj1vMYb+eaqKbIoHmwP8uxoNG0DHnhAgaohFAo2h69E7ggs3AaghM8EwC42RQi2uynbRJiQa0PW/KlUhyB9+m6AqITRZXh7sYEFBlsETcIcY1/9rJVn/UYzfXTXZ075za97PBUyP9J+LBqNtc4zsQ7x8endy71DF6dsgYS3mCbqkmEmqLN7bXin/Rf6A1EXaH3FKVU2pOpNImc/POXP9MO/ARAsXsBp1Alp0NodAFSDF4MOWrBoh2EYckxVRHgoG06ETUCBVhbdGo/wuJQCD2BZQbvQy+w+cLX/l37vxrcPEQxW9BjnoW/GoY5wKHxb0/OO4ZUhZ7wGGsOS3FZxR9d9FZcLe1Vxy5sHPnxZFYwBNrGK1PTTSGfOw5SCQ+s+vusbG7d9Fbedr9mZaJurqJFnqrX4njyO/97AVYYkCDE6yPjoPnXItDfPV5kkkNdw9gbAIQkQCHriir6Mrn47rfVok2a9DwW22d0xoyfP8ZQ8jKno96ak1Xnrc7qN3Ghoxmf8RhLyTpT2wOnNsC0n0Y5q4n256OB2sEAknxhByEDYYdNiPcVQlCuOjD/VkX5KOQZJALaq/akc/WApX1pA4sJok5TpFOPbgGYSN63RmVbuFsvfBdXchmE6s+9nGg3xbSfVeo9zpE3afvMYTs9qDh/Q/qIg72QjxQVX3lstVBHXaaKzwHDDmsbKi6KhB32gq9tNvmBPOwFX5AX7I5uVwhCWXDXK7BrM9uBKpBsoyuCTZWB1sa0KteKC5alUS3u4urlw1X/zDq8Ur/w1bvDjjlx5xBT4wdsxb+jtsRZdThcfukwL/9JhTzKX5WgjXYxCKQ7iXJR7JGN+zlqsCNMBCqG4Tq5etQh4ExPKHHZHWmKFplWxcsR0AqORaPYUEK8g9Bxss0+ziCYqQVCPl81hEIEBJIBhJREZPORCxuqAi4FUHPzTMmnonzZd3OanCTGKHePc3DJweyJ3Itu4NR34dvuGEge8POARYBY85DRuAL1o9emJq6OCr5KcSa3MzY2Ozs2NgMl8EAyGCSvQY7rTpyOGv0wk7LqMpAYZExF8YVAdwQGteaHIJoYn5o5Xn9Ekes6AX2gkGA6oJJKQIT+OPxhMJeKRCtywmBTVsZf/Qhhas9geJ+2LO3uRVYGwAWWURhKhnQ8WT7NtTyD0ONhRzyhjxyuwId038BHSfJgsJRfKPNGrrYcPluzZ+V1uEVY8xSGVY+a4JJkiQRhxAbW9t2gs5Kzhd2dxBG24osK8qkF2/2OS0Oe5UxWTOxZ2+u1aNz2mq9we6bOradyebOTbJIZ9oVqTJrtYYDE2MzNYLZIHo9Dd6xi9t3Xhgt2e5r3HYfvNp2g6gtrjgeSTa238h6pA1sOAxzoRUvqbjvtRG/BnuBz1Qa8Xdgl3n3mhErsoiAjkWQxZLCWgKaKSRKF/hHAVqyCJssHVdbGCMTz5eCAvAXKyFqAAW2YUvFJ8rQ8llzJBJJRhLORCIWjfBtGGwLlHCieB+Hfl2CGtNHOsEGmBjzFL5eszdT3+TX2izOUCBwsGX3XUNjZ3ODZ0YKH3dSnWa8GeJKT85sFapCDr/LLY68f9vee4bHzo8+dEzf0FuMO1QGfTeQj07IfuAwZNAznY6fM7hg/4JHShrQrlvdxfqL1q7TE72OXDBQvf7ayGDtKh40Qz/IZKnsCQULVA0RCCiod0iwpYpJVXo/yMFZ2iGvC+zt6rmTYgUJiYqBG3EjcCOu5AxCmaW5eFfAoa3WeSzsfNLdHPZ4woUvcn99COGmiYOhsAfyCp2i527WDXpOkS7yoawpCaLzUkFfDfoTVH/VAIuWwW4OkmNQtwEMFxReRdUMOVhKF7zovOqKyIgHAgDlb4yaz7rSaULSXelMWwtM35CIS3VxY/kGF5OvrsxaOtb5Jlbvin72ttAtrlZBF7QaqzQ3xse3uvLtI6cHB9433D7tj/oe2LMnl9u9O8fdeO78GYfRGddXudwClXoyLeE2ZTU0hKrXuXQ8PwdhVYGtRMn2p8KUaqgqHDfhSxhaZvDUI1xMkv1Zp5Yq2/kljsLKE4UoicThR00USjtAzon1Kv9Nn5tE9aYy3f1Fp+3f1c4idxxZJVyvpKs/167AjKdYfx9rX10FjRLyFHuFRPm3OQJo+xelvaoVeImQgWyV6DboNUrWg/xYleAkCO61nKfUVnJ2+a9D3JH4HlJJi5P6yrBjLa5gvZtZky6f7cnWIuk/tntdkuezX9vj9UYdzzfeskZ14WOv2ON2j/Mjz5MineTbQGfxXMJ1nXOJb0s+b5T/loa78hlFb0Ie7LuT3JmtboS4RMfbYK1uVVy6C9etdsag1wlarXsCUrpyX+4j2IgouhnuGcJrGFkPtkAfwd0ixoFil7qkO0lHXPnhS/qaWr6GztvcmBrWVih+nQFckNwHeja2ggqYn3VbYu3HG4bWbNkOMomSW9GWue5RGnbuniGxRe2zirDm5hbxpmZOZopm/o7s/LvbkbWm7s2DJTb3dVyDQ86VNdahxipY0/zMo1eh11k8+AiXH3z4kUWC7mmprDX/9bd6IJIbu2ti8s6xsTsnJ+4aO1c/3NAwXK9cn704MnIRncfoxanWbQ0N21pbJxsaJlvVfLAb8sEIzwchr/BAXmEszyvWUl63mlMgYShtLy3lFQR7r0oayxGz4VLiWN6pCsKr5BXvSfb4HZ49LqKGNBXZoxJvivuDP1P4VwVCQSB+XhGUSv4q8YTL0qQJNeKUpV3udblZJeJa2lXWh4+VItLVaVe8Mu1aH4EyG6Vd0VLW1bo7IEQ8pbTLDWnXQyiT7wXUvCvmd4cK28oCDV+b9Is87/ryhGybmn4qiMnDuB/uuFDzvDFrRz9cWqql7ETZYYEREHoSPf7segRl+6Ei8B5CNLPKii6mLX61H9c1gRiOS4ULlacryroWSRj8f6y40S0djOicV9sPPVMvusx2wVnjawkXzca9txWCsDschgRRHGj8l7UlXVufQjl4YY/xAsghQw4oZMeucaATnii+GgpqgfroejTQuQA6L0PKZ6vSUjIl8RdHGUwxlAyDn/eUzu3cpVMtYAxdQPHEBxaJ12cyO+2hgabtnd2bt3Z25dvaDwdr7Saby2TbFJsMpJKZsbbNN7YMnorN2Hy2Kns4JHQHQ2aLONDVMppMxC0Ot7na5PJ1ufzmarM4mGndmki3It9muBxly6S+lJPCXkm4VwtBiEF+iU6Ah6LiAU0pJ0UsSC+pjup1F8rRSRky5KQVeIABqHoGznsNSw1g9aTOzlPSGAawmMu5cSZalqkqb93oTndPfMueJkxGmzAijyI06rIbTDXV7/O7/PHOvdQhetzhLOo7i1DhN067RsvtH3y5kblh9W1ROLPxQyl3KXXkbpw3MnpvWWM+W6O8ZYJ4ox5WqRSXXtUqSSTU6OvR248fP8tzZthrRH3MDdnH0fPnjxZ4HtLX09MHEN8jrK4yB9DjI31PuXBTo+ZJJo3ir0tJEm8g7N7SgRCS4yPepNVdPKfj50H8QKjiIIj+u2h4Vu+3VlmDhm/qo167aFj+sCFgZa6wu8ZWWLA68FyHft5icUQctsJ3aI/dQYu0/RxoqyO7no7h2ZW2SJ2HaGEVaMkFvQ6ydchhGK5pJV5jk1ZzL2zJtPeW2mE3BuTWkWQ8aXVY3epLMeWkLZmA9G494Ty/c7v5wdtLEc3ndGGbIWrds9MaNdjCus9pIn5HUHd0hyXpdBu2HdGFXCBif5WpsGBzUhZ7440Y4zxV13jjdnvhZz+O2+w/pKLdztfAaoG+CnzFyKZsFQR5vWZN7rUCrRA7r5flpbGGeGVeWjqRT1YebWFqSl9NuIOOc2eqvCZnwvyRT9TGPUHH+0/Zg56IafkTOxzemO/Tn66pFZ0O21efsDi8kvdzn/VHnC7rV55QbLWb22obeV/W6KOCFndNxVOeWHEjpKoAfM9G+6VYUR3FPdZGaIp22khrPBGL1cVV7azfJIWYskladz6LjVbF6B84Ex0tbo/0UtI5mus43jGVxnXQ1dmxSV0H++65vbpK3RgJpqq+ceNA675uGsOlsUr6u/o2UUjBYH+B57Z7cU9EM0CeBC72T5V9Bru/9C5qC38X5VfflXOGAvxVOZ3B1+ZBOmkBZ2PxW3wuByCaEviu3FWWg6HLzZQF2X+8Y8uWO3bv5tfs1q1Z/DXuf+TIkUf2K9dz58+ePY+/PJ6iU4nws/S6bBzyCjAkfNEDaeoFQXkTVTxidhFnPK4eMa+9OVS8XRfYDFmN4nn6FrPVK1lNn7X62GV898kj108TVQm3JWDYX4VzNsPl/wLf9aQpm4KpwMtqLhSPPpB7jabsHT342aTU0KFT36Qor0bBXotMl2goCUSvb6c/BZ9a+AtfyPbTeCrbEOzx2AKuuMORWGgaXMgMdF38m+PoV0Wv1/7Lup3RxsGk6Ik6zWFHoqn70Ja+D/Tcx/3HG/TnIJsOcmFCNoHNNkJg0ApavQCBQaBaAcInBgh2J1il7gCECEelG24v4UPUhbwTgjLVaq7/lBJcOkgHMBcHS1V2R2uv0dT3L+oLsnL+u4ovN5TVS2f2NA2em4qN+eNRj8Od6gh3SwNNjpDgs7p8xpqHvodhh7aFRM+H6Dd757q2HttsMzuinjpzJNyTyPQaqCHsNrlq/xwFFfF7PA+ize6Hy20gkwDsJUB7Yf6VjBbWKL4gVJKhtfcwoSAm0QkIkvpSJlR8/9WpqJEqy7A90t7JdgNBDRgRC39wJcy01x72RhsKl79E00jCB9CSPiB5XDZ6rweW4V++zL97Ah1dAXoyZCSba6eCHr8gEqigoWBR6DHuBB2A9PUChnDtgeInMmWfOmRIZ6wrFodMZr2sNxJ20V1mSp9kSHrM4vYc6Zu8sDW5y1djCXtt/gaxfiw13u6OeW3O6mSEhjURN42gyP/Dbt/soz/uu3UgdyrncRpjFlvQ7ktk45mhmpoqQ0PQqPkPpx85/mS1qegn6B/YC3x/lMm2gyeFVQoGBGwxYUn9rmXt643KLUxdxVtjNTlXXTyyo1+3g9m3mO2/NTt8dHP7fbfVVPuiQU//EW9bNjw42NwyMNBCv9d/ZAv823bX6NavfT4i+IOuiN52UzZV+OJIR8cI/nK/0rv6e2blfkX53oEduMqdOOJrb6xo6XOuiGrE9FdJXeF3+pDNG9f9svAGN9ab2OWIr9Z05Vkb2KmplhZQSsr3W70gKAvM5yMJCAR92c2+GrTJ8fKjZL6ncaztDIGQZNLvT7YlWxtT/oQ/nkoV9zMlWXVVuFp9QqemSSCwCrH9rLP/SDZ7pH9Oatw839s7v6lZkru6Guq7uupbBgdb8Jfu3NW4aba7e3bTbK9jqKnrpkzmpq62Afv/6qyr78zU1XUWxJ6GVE9PqqFHfScPgvwD+35R7zZ+rKYrO05gM/i1QGCi+DVaud7r68r0XuYju9Z2aBUM7F2v8Q5uCKjzZtA9+/5VGlcMoULvjOD1B8zCzxom1bMRDVU/PuRZKmzLQBdOPAh3wu5KOfgtb89nbTzmhS1BjxMGqu3EmGdTEtXiR4USW1dfDIeDtcHKC70vHLQiBJfCHWswCDCwejv5CTkFkTeQ9Vr5O1WgHv7NK84r2RDFV38u1S5xyXBh6Uv24PxJNBN0+Sx2TcBptVbX1IbSznSbeaTD7rTU6pjZW23VayEnlZxd7Yo+Y3D5JNjoBNlBHsgaB6ihyg8Bt5gR1VvNOshRMXMHiVTTqirHhMlSK+j1hpkaIzMYwhO4Y+Gb0CQ28E5i0N+8wYMqZj4bnYTVNrljcsf2bTDx+MhQf9/mTR1tsUgsLjmlWMSmD6aovrhJWfNv5aC6o1kDMsUUsRxUhtDDkywRaoa9q3vAIfgdniC1POoQAg43ADFszii9WbXX/Ijaa5aw+bnQoyH69ONhtytw1u4Jeao0B8863GGPQXMQ23jHKaVj/ymlYz/vePxx/h0sJS+QZTAbb9ZV/EJV/SoATQk/Uc2sM538msFU2Egb+S3dT4+TWhJSv3ndgyMe4N+8buPfvFZ3qAOq4+FweyBOPY7B6vHfRpVD1whR//5T/avOGXPv/4Hl+zrCf/3spz6B9x+Nfvg7hWjhh9oWzcOAq0drJOpzyt+JancVoqtPa1vW/pJU+WGtbAw8xK/xG+DVKd5ykRjJe/jDPk4m2Gn0V9fo/wE/q77+GL1vjvOO6WsD+p65Dn2vXD03tb/79CAdbwVPaFfw2D++PRrYb6/N43/FD7tR5ePfSB372vV5YXvePu3sFO6xrtH30n+ePfHxv0xCwtfw+5gN+nbjtyXvcNwTsFN8L3V0ggww4dpzXo8eNvSfSyvsl0PsjuvMP47nwet+fs3f6727Mtq0ZkvU9OZ2Jfw3hS6wg4G3Nc/h91b3b8U2ijZAL12fF/pz4n1buv0c/18Rrj33xNuT3TvwxSEIx1f5D/oLYn635mYfvXp80HEdPUq0zEOamRHs+ztkP8uRzSwGPnIT6WWT8Bv7/8uPvytr2UpGKP51TbksnoKc+HdkM33gLQ/TBr9byFHyx1D+4Z0V2kLvqSjfWl+Y8W2VMfbVivLrYhFMb7ls2aB8DMrfblw0jnepHITyK+3UuvLkNcuvyosu/TbLrbpX14redt3y4DsrBo3hZEV5o7xU3fw2y6+MFyrKq6Xy2lst1d287L+qvFb9Ws3kNcrn351SG4VyyZRZVy5tXMxt68r5t1letnSUyv1Ww1sonlLZb33Q+rrtlO2b9rT9Q/bnHXWOe96z8mOnRS3fcr7+VovLgjsxNkxuht3ap4kOdmwNpId8BDzU/bUu/EsJ/p8AHYZdH9XgwbeN7wARpsQGNQVmxEBjKiyQNppWYQ0J0IMqrCU+el6FddD+oAqbSAeVSY6cICfJHeQUuYUsATW3ERH8ZAtphSKS3dCyCPed5Az0z5Mj5DSZI8fJArRNwTMnyK3QP8+fGgCc2wD/BLSfhnodH+02GP007C6boSzBGIhxhhwiTfDUCXIMWpXxTsE4t5NGwJ4DvKOAeRyg23lv8wbzj8D9GLQdBdrrSRrmu10dXSQ3wFin4fcUOQtXpHUE5jrOqdzOnwOexMDVo4pBoOvquQbh6aNwb4feFl56gPvDZBjaejbAbyw9sZHcin17OYWnoR9pE8tGv96IRZkqEj0NWKi5k9B2Gp4/zSXSxHWwBP07gHM8vZh4hrx8w/QKpR/Ly1T5DxhOrhD94JOj7WGBNCD49GZDwmAzCAalNqRr0QV0vGYcvGx6sepFzYtgOFVQrx28TLK88LpAhlZi9P6d03L2/ukVYWFoJYG1bxruBjPL3j+/expR8vDzdK+hzuAwCDUNz9DVD8qaj64wMvSEdkFHhob+H+jfw4gKZW5kc3RyZWFtCmVuZG9iagoyMjYgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMz4+CnN0cmVhbQp42qv/T2XwAAAVq1EQCmVuZHN0cmVhbQplbmRvYmoKMjI3IDAgb2JqCjw8L0xlbmd0aDEgMjA3NDcvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMDEzMT4+CnN0cmVhbQp42t18CXgcR5loVXVP90xPz9Fz6RgdM+qZ0TEzumd0Wh6dtjWyJFs+NLZlaWzJdhJfOM5hB5wQhyQWxwOWZeGRk3gXWN5CKyEkj3jBLxuy7H6BQB4ECFc4NuSDl7dkd2FDQKP3V/XMaCTLjpOXB9/3pqLuquq/q/77/6uqHYQRQmZ0G+JQ49hEQ/Nk8X0x6LkAfzP7bzzp6/wsERHCZdD+2IHjB4/cOHvraWh/ASGL5+DhUwc2/ea/vQsh6zMINTxwaC49i7+W/jpCPYcBPn4IOsS/Eh6E9nloBw4dOXnzg6dsP4D21xCS+MPH9qefV3++FaGN8L6h+Ej65uPcS9ZxhDb/AuB9R9NH5m6+a+xuhEZ5hMi+4yfmjnfER48hNH4Inj+EeOLDH0QGeDZPJqEnqd/xXtSMG6BNH7GfDyEb3HC2icYPDM6iiwj9gXAvLwkI8ffjBh/Cf0Gf4dfJBfYKh97o1w2lHbVTePJzAuMstfP3Z75Fnl76HbTNS7/T2zk4dHSpnfwC+n+f7b99qWlFOzfeq+hfV4ynt/PjaSji09D2ycGUz5d8HFm3JDVhYtek1urValIzB3zz2yc1Ekz/dyMyov371X1ev19DKQ31qwMPAw/6Z/qiGo5ovpkDUY1EfLM+7eK4xod2PVyDpf7B/YOaMDjp17hgauvuSb/q985P+rTxcehKpLw+rZ3W2lMp34IOnZ7VaqAr2/JpjfR5I4W8OD7pA2zm0z5NGp+cgR4ffSbRWpzW4jPemVQq5dVwOJVSNTQ+OZdKRTUu4oNx+GAaMDP0j09qBrVPE9Q+oCOl4ZmoxkdUwMs3u2DY1+ejTyjGXh0DetW4mcH9Glfnh4f9vnnfPEyw0GgIApFbJmfGvemtqUk15U/5tMTEJDzzUtKy80c1Q0QT+8MPI6JzSoCm2qcCx9W+tEb2HdDwfsBCM9RFNTHio6ia+/c/zqN9PjqClphJUZCZAYaqMfKwaEb9g311/jzvTZGVspD0UXAYUOgHumd8g/NqmsqF8Qt5KU81nxeQzGEJ0lHTA/oU5su8rgXgLeRdJq3wJTnCCHrYLHEgbK/qT9X5o5olskDIoDabHohq1ggA+nya3D9MX4eK2pfSLLS1FVoWaEU1GwxjZyzxAQf2w7yatX/GNz/j06zAtKhmjyS3TS7wswOpgGaZU2+OakokuWUyOaF3ev3Q72T9jsgCsvVvn1yw2fo1nO7TbGGqs6DJfQsyvVjgomEPSIILjk8uUOYBtX3zIF86bZ1fhddyda/+nL4CpkB7UkDJBsB/A/SuFNVlBLiAkFMFbvVrqOdhjDGTlTOCFhAZ3Dap2dQ+36BmBuWTVFC4Pt8MTP+oomBkRX198zMLDiGsnQt7q4BNLqDNGY5q7sgCpncP8JneiyILHL0XRxZ4ei+JLBjovTSyINC7N7Ig0ntZZMFI7+WRBRO910bUHN81YQY4rPrqNTxFDSSq1RU89OQfvkN/GC54GMo/PKE/rIggzRJ+C/RVAn0VgJcP6KN3P9BH71VAH72rQB+9B4A+eg8CffQeAvrovRroo/caoI/eIxFfN1PTaASmVWZ8/SDbmX4mSjC9CNXV+ogWDWtRsMIGMIANvstIUU23q9QjXhHCS6lvzIsWe7SGugUDdg9OgiOjBDYVcubSx80RX4zh2wJwePDSScA615yc9iPPF1g0GehR2xeasZsS1woMAIzXRhisIt0e1WKR+qLuqBZ/I1DQ4P0A3gYyQZ6gr963gVo+8HLT/PwGdQO4ikkIEeBZwR3EMXa7gKXt4KI8mh3AePCaQQammfrDc/P1qs/XPQ/jdawE8dXrY2k89ACkT5uhTiOxZfIR4uN83kdIiCtN9VFHagSfrDJodQhMuH+1Pc5QZ6bHDdI/Mwva15+ehcekP+2F+gx1ZKvfSQNa4N7VIRCmCjMMAX1wY7PAeGtMououkwcvAUIwgGYZLhkVRqQUBRkScB3XXeXyXCD7zhwffNBrCGX5oHYDi7ryjzQjez6kbqCTUul159lHiclyGG2brPd1Q8il2Gc7fRSvnAiEILQ2FUZ3XXhrqXVWUirV7XUFmPTnRDVDU4DVJOfE2wOOop5ycUiz90+OeyFk+rpT9Qv12AUGun7F063e8RVPE2u+e6U3eiNae/hKE/ZFtI7wPOBG9QuIuiwoCLReq4c3+hnJVDdzMqFqqYKx1IOd6aMOgN+BEJIDfBNKvOHt0ltKBXVR3Sp4oQIN8aeyOA6Cb20P5/gwBK2OsF/NciJLSZ7oDUC0WzdwSC/Alp31WivY88bL9G+C4bDLqcWgPhzR2uCWpHwbBAb7hiCW5jg1EqEqrCWhujnyMDgrqIxCBdPKWORhzHrGocJ6tlCYQahspTC0MkFhaGUbhaGV7ZFHwOv1Qm0H1DCr7Yw8gvW+SajpfSkKh2ltF4Vjtd0UjtX2UDhWm6Jz9kNlL52TVqbpnLQyQ+eklTSFGYLKPgpDK/spDK3MUhhamWN49UHtAMOL1g4yvGjtEMOL1q5heNHatQwvWruO4UVrhxletHYEeNyZF+BR1tJ6oHpMr66H6nHKdNZKQOsdEEazMCf0KoW5nsHgLMxJeLkrP+oNrMXeuFGv0jdu0qsU/GYYJwtwSq9SgNN6lQLcArDd+fHeyVoM/F16lYKf0asU/FZ4Mwtwm16lAO/WqxTgdoBdlx/vLGsx8Dv0KgV/j16l4HfCm1mAu/QqBbhbr1KAc5FHTDzJJat9Yc04p3GB8ZtzcTgKMuNQDazEfLAeMyMP8iPpsYoiuywgrjHsaPE3uxWX6q+KKXGhCHviMaVV9RPojlfjkOBWalT8sKpmRtVWQvADhDdk9pUY8L0cIZk04ckFdXFeVcmNBp4sfobDPNlhWLyNJ2Qn1Bf/lq4tNwMG54gRWZAzYQd9KEpChxuNBP1E9ITjgloVgjnjLc0et3JOsVgU9gdX/AytZ1oRXrqFjCx9gzyAZBRaEGYHEl4YGKOddFk6TaCGx6AqI3OQE93hBQENkFAsRsd0u12CesxT5Kpxu8iI0yE5nEH4A3ag8qUlci35CipBZag2ESrDPGeDkcgw4gFrHh9AHOdKEsyQdVVXOVWDWBIO0AGrQtXVfpHdY61tmOJehIN+jlzrkCUbn8w8MWx0Wq2g6EajBzqwmBnFnvf5eIvdbHrsMZdV5gSO3Okymxbf9SO8AzEZ7QWk9oCMXKgchVAs0ewCjPAwPOENHD+HgP1TQLUrKWCDAU3pTKyoqAhVBKv9gIcI2CEPRc+f5ai/mTbFeEhV3S3xeIzEY61QV1qIfeTUrsy/U/Zi07bp1sZAb+dPfhIfbJjY3v/Sy3hu18Z9acVCbrMoe8Zj25zfWP86HlifaRwYGOrL/IbKtBFW8ofJV1EtakyAhmEOI+4M4gjmyDsBR8M0MhjKkoAyP414vpwfCVVXhVTApTSM3C7KueqQWiUIbpfH09LcBgws8tB+ytIQCI5xlBwWTVajcXx6y9nkyNnx6TGjyWoSrdUn4tMPTu99IN1+XZjcajeZzYbYyLmdqXPJVoNsNNuNperu89fM/fWUrxxROVO+3g98taNSFEnUMj7ymDLSgDkux0hFQUgpVUqKPQBojQugR8hD2VfATgflH2Mg/sHZ3t6zM0uYshAtHb2x+bot3/42uTB9/8z++6Z01i3e+uDtW86OLX4J+EVxMAEOPtSQiFxZomyPpTLgD+gSDawhUdXvzlUUP36NGsmHmCyPMYN5GPvZ/Sd4tMshW+w6OmBV9j/QC5UgyuIkAE5eqv3QJhwmc/CEnzJgnnclQf3dHEXHi0pUwEcQi3P6tTy9K2++fvxbOukj2Mcmf1GxWClKh8kFxSIrf7DTmZ+jjygyOR26hTyNGlFPoqsa8wbQdULtQjgjYgEZeMEwBzjgaWAR6BLPo2lAppxxqBHVqyFQlWoj1SiP+xLdYeitULJ4W4yiCpi2kGsVW/Rox4Hze/eePxDbX21VzJIxuW37XSMjd20P76y6z+JwWL6CwQReVaTKKgAC0NJik93iMNSOntu+/dxosftp6qZyfDwBfKxE9YmwzBFAN+dC5gQDKXAigHglqnAGVWcwa6yKoPPPn6tk/aCfVkhawQ6LxZG5Fm5WxWG1OPBHnRZgqHXxdmhbcF3meYtDsZIztJV5CZdaHHnZonsBJwsqSXgsmKFEFe3ynvee3BSO/ICLt+fGwkswlgNVJsrYKKAopEBdHUgJtvIw4kpdZXTg/02V4RMWHfuBLrslpwKKZfHevB7+iHwZqZR/PkXiMPV6mEPgVM5AWFnJQBWp7mAomFXGnP5xQjVImytQR+qRcbyIPAOEWB2/lixEln5N1V+xiHYeCxg8BVXNRYYKCWXusWAZH1j8no6f7BCFzE34nI3kcTwNPChDgYS/WCKI4GEeQiBxJXEetTLkDVa7DWLRMmbVuBClIszEep3NYREtfGZCMct2RbYb8eftMrlglxdvsykCT/oWnzXb7WZy1mo3Lz5BWmU782PUXr4B9mIDJaKSAO+RNQ3wYlnTCIVCVTywJrDCGjzuelJgCBAIvrHjY+n0x3bo18TgLWNjtwzq1/88PzV1/uCh83v2nD+089wIOFb9ivK+tDYbo8DzC5gH7vCI2ikBt0H5QdNoPOJ2A1fK3WXeEoB1qCER1CPnT9UCnrQ4cjEJPzDZ1DTZ9qyeAbzSuXFj57PPkgstuzs69sYzv8upTeZvtq3vGc38FGV5spUrAZ7E0RDakBioKSIGAQ8bMVwFAz4DYuIx4c8gAeK6gA+CWcJ/+5EoctOAcpkIYuvv7eqA92PRiBoImsAseR1LEF6Iug8W5iHKt9WTPDvhORAEXob5FSjxFpRlbWtI9zmcyd61M9ixuT7YqlrcNo8kK8rZnXcmdZb3ntx8TXlDoDZRU9VUZJJEm7h4olAK7Xazp85bUuRyCKLkkF1Cgyl9z4wuldRH9ikq51TcbofVIAkmvL5QTLqMwOtCzteM4omWKgjHmOU1EGVAlQ14DnwpN1WY3dTW1jbXNjc1xNQQeKZimuQwf1pNVSi0QmB+nX6d+iKuh+gA5DDPW42SWFY1Gv+x3WJ1geu3duxq6Y9H2jG2Kd9UuwObe16O2AxG0cjbN44Ndej5B5Vp0454Iu1QtnT2NEs4wtUMRDqSVMIYBUDnCcg3RilBHI94Dp1hKoffCVSQabCCsiTLOGgMLTdQO4yhVjUUrQpRH+sBKbJEsIiKh0qnOi/HfJCgEgPbKKogTPL/81ir7JRlafSGjdMNI12JnfGOg/3rrvPZXLIkenc1bdozuXXDro6ua/qlxhbJKrukHQNt4Y6A01m/uSu2taE2pMhmp+ir6W3v7Cl1R7b0tUw06n65CmTTCbKBLDxRQZnPQSpCBaFbDcB4kEtVA1kn4iowlmzw8pNa4Nqz1Fs/y2L+D8FzWCy2xU8wbs7ZLcxdwFwqzHUT+XtUjKoSlS7C4hK4rOUwANdiVFRdzTPbBJFjXe1xlmNOJ7CJzDm4zG95u8lk4zO/4xxmt+nVVww2I/l7xSwaF283mSUTeZcgWeyexYukz2Rmc1cAZZ8Gnx5AzYkGmhX6SyVw6JBbQ3wkHPPrK51nAPx6dSCU9esix9SP4xhCnI6Qh2JUFGe3Fu6jDvIjzmYqEv/u70xukw0ablmyc0992uSEjPtTTxo95Mt2K/h3k+TEn81sdwKetwmCVZFMi0/hh1wYm02ZKdLtZHJZ+iPphrWASuWi+koVo4G6eA4XIBmoCwSobw1m1UZHDjyDk1tmGI16LpEjMdEp20zf+67JJtvEn/6MtqTvPm+GTEj8aVQyWkFwwcwPARlJws242SjJDjnzAxyw2MxGc+brFCe6SCknF2F9UpHwljglwlMJErwswEANrHdAUcR84FuFCSkXfgIZhPKi0SXbTc/+s9kmO8gn5MzXM08y3VmHm02y7LDS1MHqNOs+NQo2JxMzhLMIOvRFCHYGHg8nteLxyUS5AMpalMxZXmVSpInrdJZB3oR/9XOKJwNioaocj6QSrnJIy8sj5eGgSiNmKBg0FkbMWGxlIkfpIQV+lYYw/Ae2RiyZ7eq/bl3Pdb3dsyWK5Z6JhoaJ1taJhvqJGF6CdKiHktgf7Rk6PTJyaqCzoQcyqYa2dHfnTFt8urs73Qa0jgGtUfLzLK0lOVqrKK1AgIeSwk1TqgppLWe0rn5OTTgLpAfjS2gNBkM6rfkI43atSMKAZMdqWu84vG7ddX0d6Yrc0ti7r7OB0RrbVt8wESPmgVMjyVuGOhr6aNpKPsPS7+83dWfU9nRX93Q8NsOIZXYJssU/BtlGmT9dY91GvWhl4cINXouiSBASi2zO6skugLPhMZ9dsyjYnKNMlx/evaXJZpYsRotsaypr293anOoIhN2iYpRF2dq4rWXTifWJk0lidgfcZofRaBFEU/tMZ/dMm2zmraJok5XqssHTI5tObSzUzV9cVjc9b6CbnrdVN5Ur6Ob+7r7rekA3u2ZLC3QTruQXkHROUiEN1SeAtuTpwa4GHIT14nA83d0109Y20wUMyNMLubcZVoS1qD0Rgx5Yp0FeQ8/2DWiOemwmKKZ9LKcp50b8fn+tv8ZDV6p+tj6CnDwnJN0/rcwOi2Bp549BighmI2fubNrd0zhSZJYku+RLxzff2Nd7eF33NX048+P9Vrzd0JyswYrSPd1WU2myS2apurnvptGtt/S2Hx7+wnjSGO1XAUdgI95GXgSsDyS1CpBOEAkiEgV0xohFkW0PeGAZAcKB+IdQEdU4NwEpqTk46IbnQO9cwRs6VCpBI1wtqgmoAYiVqkn0hh2C261r3yURs0UPHrkF4U/V42ZFMR+nUtok2+3ypk3ryhrtksnisZDP1gUP2mXZnkkz/3i/YrbYDq4fVJyy3SAwebSDTzaD9nWjTYmhmlIiGBRAkwyLsGYGMgwGJoXKpBFEwxStnIqGuYQSNBKNgjl1R7tiLTBEOBSMhkz5hQyTCc1W2HaInq9chTMkstL7jk3q5jZeNPGCoLh74qm5ksNdg8cSiWMD668B1/jJnU1NO9vi9BrHS4o1MzZ6rNNRZhNNksCJpuK5HT3xdboqro8kqJuMpdetm4nlNBGjMbj8CuxORdFEnU9fTzJrwpifNjDSC5doVbBCW71Ea9VRVi7xePjDk1QWPX11yfq8j5tpJtw7Upl/YWLw9m6p6a/WG+TTzL/9INyGlpZQL0z3EXI/5FUwOxZBQk9Dr2kB48eXlrSWMMV9O1xeAdz9dO3mKzKKPKILTOa9abTKeghwziqv575UUarFVb45mLUdsQi/4jZZTD9K5pDFfpNsdpi/8f0wNMy/SvxVAZ7tv5ecZtn8+Zd1/wu4oA8BLrm9UM8VVuQfKtwL1YdbnNRlwfVBDtWOTn0x1sDSOj1ieahBGaaNosAZDEVJyLB015fUmuBpKaKdFEQAECIIBRCJ0hX9iDrO3MOUbm7tqA04ROVKze0Kcl1LzG5dfWk6+cp2StL6nLC7E7Wbonmp72np3OZwH+8g3LHdWdkX903UDNZkXr5EEfBFeu2sjbfHI305Hf0PsE0VjT+qq6hOeBGTcl5TK3Oa6oUny51sEZ19kkpY3pwaU/rwvTsdskXpHQhvbswTNAfh+ciuzAsMYVXH/kfL2MOqYTmuVQPuq9b2lW9lbV/dd3LDhpN9+rW7ORWPT7a0TMbjqeZHTw8Onk4mTw8NnU5200BDw018plvHYQx8WxT0isbWrkR7Nhli8VKgWx1FBckNZWcJHnmj9OZSLl0mvelMl+d4VrqvK5/e1G+LEa7/puHkTQNt9ZnXmF29j2Y5Aw3xTH1sb1fnVKx1qqtrbyzrmy+Xty5TUVkQ8pO6U14jb70E5o1zA+Xq89bL5wbYYVk8yfTDupwc9IJHjq7ODXR9PwH0VqAzj3pppMwSW5T3annd1oOrbg6wNMOg5+TMarPIheBlgBXWwThDo69uHRWoPBiqci1vClfpdLpXi7wNb/XZzYZyS3BTQ07GRVPridluh+VPx676/1y2h8mOJGa01UHe8xmgrYWdL6y97q9M5k4aYNkfVqvDVQF6vhDPBtDser96xZ6wuLze92TX+9BRZxEkWera17ihr2tib/1Yc3hnpUkSzZKxuC/U0E8G+1sHwoc2n96412QRBWk0Gq6rs7n7e2t7A/6AaJFNgtFbFonU1CkWX2dj7+bdjAa6OdxC5iFRSSe1KOO8gTecBR/LcfyUwIImlVKOsV5IkihAbutzBSBahsunP5D7BAJVTuqPnYqL0ptLc0KXZj+57OiRsiLBYTBZfB5vXfUmWVHkTVQis2bFLuOvZhZCXoNNsjqlZpAbzYTYkcIxh1m2MZ1b+j3+Nf4j8qIeXZscPCweMMvfcn7Kq3cSfLagM5WQ2UlCaTAYNKy0m2y4YwSwFn5BOZqeOULRGhkc2gzK8UeIpC/tu+aafbiURdWXNiaTG2ld3yNagvguoVK6dvfg/DZH5fI2RykqrVne5qB7C0Kommst2FaIF+EfOPineJtRsvNf5ew2k43/28/yNomYrGaTMdNqNGNYqj9DjLysmE2Z6/Bfmsy6rsL85BmYP5Tb61DL5Uv3OioL9jpCKBisDhXnbIciVE23OXKIFeCVXcuTJxTuvxrsJpOVP3sDRVLh7uMcFpONe89NkKgY33VW8BDJbsVyphXwkky4NfMMoGw24WcE0UIxfgcOO52Z7+L3u/T9Dvwk4SHG+RLlVSV2yImy2x1FBdsdK/Oh3D5obkOtqG05I3rSIVvNH/+4yWZ2iOc/JdC9j3s+KtksNvGT54OS7LQ+/Y+yTTYbn/su3emw/NM/WWxms/E739F1qh1ySyNqRonEuhJs4GXQHUJPAOiJ1BlRIIWZdXle1UoYL5tRE6hUVU0oexKk5PZuqRvI+4GYcKmuZZXt+0rP0cG6TcVuwlmNgpDonEiX7G3buYulKf21SchOiBF0bsPY8U6HzWInRkni1EO71LqWQyncwvTx+Y3Dtf0hXGdRIPuEMEEehbVPFY7Tc10cx2mE9H5uR75f1ftBApg8qeeu3N0sd+Vyuav+Dv7t8jug22kdllQzWJLPcwlqgxyijJ0PeLPnnIxNZeyYE0/TI09Y5NrBedi99lKPCwCtIXrO6SlIJij3WNTSt0RbXjjcFj8yNnakre3I2I6pqR3bp6a2S3sfOnjok3unHjp08KG9PQ+em3/wwflzDzJboB+W/4Z8GXlQccJtlwjeCJ3gCLIZNk1yHcuWn1WpeFtbvOinNqfV4niXKFrAoX1GsoLGy9mzmU3DvEsWrfwBgdA5RoFYCeisQa2JplLQFZrMZ/f5s4tgSjPPFxxR1aDqarWulVrc8iEV6HKO1DwmuT0MUfTj34NzzJyzOoy/bI9v3dS02Wm2mV1GofRQz9yJ7sHHcUunIlsgipmlpe7p+oHRhkaHXRLsxnj30VTb9SPPZvdbniMXII6d0HP06pxaw6qWxxwWuYOg2cIUEgTXSicahZiHOR4W+5i+8E54AQLh5eD1oNCCmluDfnowqifpyycZy3vguZQka83+7LaybsktOJ7u6j0+EB4vszpk2VI33Li1sWksIocMsk36SuZXNGDgcbtNekzAT7TODgxc21VWJllltzkaGW9uG1ZFsBvp23QXmm6hPwN6Sfe8CTs7YyekleyrBgNYNSQZENAPosL974pyllxBaBPzmYWazSliutCwbsMt/hYFvwro9Dvo0fILskPEfWCoSn/mv/wbttPY9SWqPl8CPIz4r2Uw0xM4ATJpW8rgnwA+cTSc2NCCOTEAGNGvPi7DbkEwTAHPl9mtq1QcxQJtalCtvoTXOWbnuF1wiER31HNn5yJdNKw72NV7crhuolIQFdlsLl1X2ZFq2re1MuYvFm1OHCbA7ihleublqtINQfytjoOJoWM9ZaW8TZScJpcHUuSRKYdNdloMHLZLNnrY/qzFofsD/Br5FvAzjPY8WsLYricipQZIFzmeAHH0/JBmGMt6V0qzv7N5iMKHqYSTJcHh8rpAFZVTzYpzvWz2u7zJJLKEf2UKPDsd65jtSR5q2Tg/bTRYHMXj7y+t2N7Uvis41Ng6Wlcz0oKfSFzb1XWwZ+hE3/Z/eChA7Da30f+pvWpt5oapTdHRxoaxxshwVM+Bu5cW8UvsPKU2EQJPQMz6FzxQm9I37/Py8iBXcPVRB9WmnAHg79q4zCu83SQ7QREyX2GafpweyxpMi7eazHYZErLd7HiFQwNLr+FX9W8nUBtal+j0Wqg+gyNCvIHwBwWc/XDBtWJHuK6urKyurS7e1FBWW1YTieSWEMvca1vhi2E5nl/XgR6t4GULfnh9x/6urn0dPY018djueHx3a1vNQyOh9YHA+uBI98COug21tUN12wfwSKo9tqu1dVesc0exe6IltrO5eWesddyDK4e7qtdVVa2r7hpe/Pzm7upEMJio7t6s8zaMXsQR/CKEiYq1v7ei8YN+bxVfFT/OdalqV5VKr+qLVayhX/V1Jl2+3AF5EV3rQpyicYnxhyWR3DSNVm5Oj1OV9vJiNwBaYjROOfRvulg2S90CWdXe5HAoorLygh90OdwON/zncGWmXQ6Pw8UuLG87h+5BvZAcdj3qyO4XSGAdCqP1WG4NDm7JS50rRncUdKUeDYar6OGLJ6tIVO91Yxez6Zv7nvKI22yT3AarTZbsZjngLvWXdATNsK4QONFrN1tNktXh9Zfr/G6F67vRPiC3JOHJcTp7KkhZQFndvIrkoTyhjEJGK+VxBGg7z3hcB7ZfRV1alroyyDM4csxQwHV6hKF/7OMFQROO3LH2UxZjakL+SpfjsjJxXJ4de0AKguJ2K0J8DcbgB92KLijFnRlam0sYGZfO4Ne5SlhblSdKmSIO0+6zlFMnAV8F2as5ltKwQJH1RNTYi+08fkS0mSG9z2wWrdLtCtgzN2Ux22ST6Y+flCUmg86lGZJe+ktkWfGdId21w1NsOmobFmRuzX1n6FmOnuDSh+02C/5XuqmcUR6wyTLQZ2brpthSAu+GPK+E7fvRpEzfQKmooSkRr8eMZcdJD6PZiLjTePrse06JIqB56MaT18pW+SLf8+oH5n+9kVckq6n7hVO3/LBDsJuzZ76lS724l/wDzKPrUFmScqaE6VAJKq7I8yaur41zkYr6GkGttVkO3XjDNZDKG8XTd9x5s2j8yspJ+PW/+cD8/9rA67xCv8SbcRWwo+LKfIqHcipCNWTYbrewj2y+90v6OY5DP6+GbNZLJFgv/w8UIqOLGSySUXTvUgY5FhDkuBnIcdmmLq2AfvuJiDsgzyxFMTT0xaiDLJuvi8PMfqlfIdPsmxRqwU7aje5Y0ZtKmILhIBgy3Te4guZewcY/XqjKVgtT5QfW6COzHYGVKq2ASpet1cnOz4mMPgpyLEVliRKHruf05IfMsu+MRrLOx5E/ctOVpqW5LbsBEKtYC4kDl5svAPPdw+Zb2xdSptFPLQp84XJX3hc6rtIX5tC5Zm10QL7N6AzW8DFQIS/7YhLx+lkQc17baZyYMtBEerPVipDVay1xO5i6ZV1SgUkKK1oDDocFJ+gOYuaipaCOY5A32RWLWXmMVWRZYTreC5dX8S9QEbUna+47ulwWWBai1ouo8RhyC4hgkN6KmosM+FVJznzCajaDDeGRjAb5BFSmseCW7eJXTQ6zZBG/cMHklBVsehporlnay90L65oxGP7f9VMzuw9LJOi1cLzUhwWRG/ayLq6wK6WDNiIRCUgUzphhKYQRLOgPQdsoGPdD7mqalrHJBE5Hksg0W+VLdDvQB++1XtV7bKuQvoz0dxNtiINFGCeduepp9TdTKeqX9uzaPgF0jlYHQqGaAPghi1hekEbSdcnK3VTqGtlGidu18jOrbHa01hfEjlhrPleiIORz923pOdIbjmGuai5e1x/qPdrXPGSVeK8XN2Cvo35L4/Bdu879+NbBDx1t2RyLCIIsEMf6A8O3fXr0A//x0XCiJT5R31Zbv6cHk6e3fWBy6/2z9SGToaQrEUnWJ+7eFY8mvCUin/m2wVRSsuPchtFT/Ueffe+2D++yeTycVeCspkr/oU+lP/Yvt2TusLauTx5rifck5lqz//46+6+qp23dvwVus+Oif37iLz5I79/ecO6pzF1LNYYgfwSa9JRL/9Hvh9i/0zZMwPNvGoLL/5Jb/5GbyEZY+z5Pv8FfuoX13IXK0Z/wR96L9pL3o8bLPn+Wfat65THa3xjmLeMXB/weuwJ+31xj7tfffnyI6+rG5Lp0OPK9N4cDyVyexj/Hj2zT8edE1EjuuzItpBkF3vT4e1DVn422jyOVe5p+A7eqfy+qIg30u663OO4uFP2T0rELjRFy+TmvhA+J/L/FFadROTl8hfnb6fnYqt/z7HuBt5dHRSzr1X8vFdQvZ78f1PEifWvgd6V5Jv60sr8a3cjpAH73lWnB34FV6JuR7QQ9O7vC3B1vjndvmjYF8uHfXOpzIA+sWlOvrnbcJ1E59zE9/pK2S+MwyLgNFk4GeDZKjCgKNlRFgqiNlMCfgLpJDA2g/89+eAcKoydQG3pyDR//KNsTWfn7RxQhEjKST8D680rj3ohi8Fd6Sf+db/DeFPLCnx/wqVgTpz8nr34G6yKqJw7Uyz1z1a/VwF8PmkHzUJ57awXX4DMrysXVBRYDb6YMk8+tKK/lCldx1WV0jfIAlJ+tXfjA21QOQ/mdYc+q8tRly+v/N0VoFz6YLy+IniuW9721YuSNsyvKDwuLqf1NlvOSb0U5nC9nrro8xcpLq4v5BJRvrl1kx9tUTkD5lWVyVfnS2sUaWFWOvsnyOZsxX0ZtX7xiedL2Qyj/liv2VvsB+wWlR7lTed1x2PFpZ+mfrAw5553P5ctrueKadX3EdXFV+Q93Xb5sXVUOub/nsXsm36ZyD5TnrrYUfZOulmF9ei2sqD+M6Ne9dagLvRe85YctHvovxqBmRAdgZY55E3hfB1ul0zpGDmjpdYKsOJCtc6gdN2frPKrC12brBlSK35etC9D/N9m6FbXir6F+dAwdR6fQCXQNOogOoZPIB36+ETVB8aFt0DMH9y3oBni+H12HrkdpdBTNQt84vHMM8J+DfvpWL8CcBPhj0H89tGvYaCdh9Osh6jVAOQhjUIgb0D5UD28dQ0egVx/vBIxzE2SZx6F9EB0GyKNQu4k9bVhj/iG4H4G+w4B7LYrAfDdlR/ehrTDW9fB3At0IV4rrEMx1lGE5yt4Dmnxll47qKwe8Lp2LjncQeg9D+wRqAZhGVrqABwfQIEB0rfFWdNV7a/FwJcQOhvP1AEWx9RXM9Maj53itc/p6gKUSPQ5918Mo1zNO1TPZHITnY8ARuiuffBx9bevkAsYfSGlY/5/XHF9AYt8XNrRUcqiOVh/rNIaMDiNn1FsDQqNQJrCW1HfBetF0kb8ICmWCtqXvAkqwwtocGlgI4Lu3TGqJuycXuNmBhRBtfcl4G6hf4u792yYpSAp+j3Uba4wuIyfXPY6X3qPx718gaOARw6yABgb+D2G6koAKZW5kc3RyZWFtCmVuZG9iagoyMjkgMCBvYmoKPDwvU3VidHlwZS9DSURGb250VHlwZTBDL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNTYzMT4+CnN0cmVhbQp42o1ZCVwT19afADNBQUTioE10JiqKoKKCtog+BUVwAxfAXapIQBQB2RdBlrCIrEnYqoD7ggqi44Jr1YpWq1VxrQutqLV+vpba5Yzvpr/vu5MACe/V3/fyE+LcOfee5f7P/55zERFmZoRIJLL1Vyz2TopWTIuLjomMHrVAERoXvipaeOPJD+AHbrFkeIbgWREvN+EHmfKDzQosRe6WptodqOhf3/1rNjmQIET1vfFvk7l9PrCWg/H/2CRLO2HA23IoYW5CiIjeRF9iADFI1FPEikaKnLur8giODFLMDFZExIbFJjk7jRkzblpkVFJ0WOiaWLnzmDGfjhR+T5CHREbLsalywVa5IjFWERETFhkRIw9Kkk91ks9atXpdZELMujD5qohg+SwnHye5b2QCHgyTD4+MkAcp1qwKD5FHhuiWiItRRMfIQ6Mj46JiHJzk/mvCYuQJkdHr5Pg7WhGuWBWjCJbHRQQrouWxaxRy7wA/f7lXZESsfE7YaqxWIR81Si6PUSjka2Jjo9xGj46NC3WKjA4dHYJlYkaH64ViRgvzRnnN9fUfNWfmtOm+ftOdYhNjdX4EK2JXhYXHOP1t6LsN+kZGr18VTuDPAGIgMYSwI4YR9sRwwoFwJEYQI4lRhBMxmhhDOBMuxDjiM8KVmEBMJCYRk4kphDvhQUwlphGexHTCi/AmZhKziNnEHMKH8CXmEfOJBYQf4U8EEAuJRcRiYgmxjFhOBBKfEyuJVUQQsZoIJkKJMGItEU6sJyKISCKK2EBEEzFEHBFPJBBJRDKx0STfFG8v/vgQPsJGmxGJhFYULXoo+qfJQpMLJj+bykyLTP80czNbYtZASslS8kdqHvWl2EW81ZwxrzV/2yOqx+uePXrO71nX838tFlm0Wi621Fi29lraq93K3+p675jezdZm1jOsD/Rh+qzr02Qz3yZeYiPJkZyU3Ovr3/c0vZB+ZzvGNsT2ZD+6X0S/O/3H9J/Sv7z/Pz/x++S4dKb0rGykbK3s/IDPBxSAh9UWDuw5aOJEfNt2ujJTlcSEUGgJX0OilVRSpjItVaOsZsGSQt7aODLcaGgEVa1RVQkz2EnURbAnoYa6jOzJKUYyY3QyLPKCYBptooCAJvILyiqFi+bAk4P+nE0LB82cZCPf2KE8AGqpu94XnEJmpSX6M+m52coMaboms4zZUlpQXMDseryvtEF279zapayneOu88JIVMtRn/LxxrEQ55fqiN3eu7vnqGiPxnPFWrFds9ZqWHJozIyDGU+YVePjC9ZYTf5w8k53ZwAp+p3Cg4ERgLbhfwJnyjTCKvrXyzGcHmOaDe46clz7zuO7IoHKDPxe1cQFG3jVTr+/fbmVdoYb28f38UwbZgwJcqXuXA+ezxxEe9FviyaBgSAEHCiTNC2eyes9/1Xn+ngOekyRirSE0WI98h6w8/NZ5LmFg/0ixkcYaI41v2yjJoemnr4bdk4Hlu3bowwbl0A5uExyHT3rW3v7d059/eew2hLGyi/8QniCCQ5wp3EfW9IfwoL/CxZ2jh7Gj9kPoKmVJYiGzrih272EpeIi59O1rdzGHdpVv54THwzv3HixiagpVJVXSikz1Rv+VK+YxyEMcEhMdmsek5Gcp06Sp6uyt+UxD3q4NoVL8at6JFZe+0KgrutTXCYpASVdllaYUMKFFMXsahKWbVzb5b8zM2pSqyqnZzBzM2xkVJkwPKo8/FMOsjUmPDxIew2Kj1uUxiZuVOanSTZqsLy6daGpm8Owju3Y3FDFbC9SqSqkVsuY+SDmdo/x8Oz1+HD9I3xmAiZi/woHRg7BL/CCOyz1dXBAjRDo1TYjtu7+kjlTXE94oXsWJrnN8T7x43R90eZZ6kzJ3c5aSmR2weIOXDPW0fw+W7F0xWLx6B6Yvnyz0LWZSClRZFbIqlQaDw0xcrdSkpSozk5gI8anlc3fNlCGZHFmg/qyrGMmgN+oNA25c2910ltmzq2JbmVRQKeJErRz8E6s82EaXZWoylHmbs7KYZYt8YqbKkGjyg9/B5OEDMGm9u2phMZtcWKqslFUK6l6La/TaEpk0cUNQQI2vDElHjET9Ud+fRkO/mzdr68+z+2q+qK6QWm2EfvAP6C+CeBhuyveE3+gj6/cHMxlU8PqIkJADEUfZMurogf1HWPSl2ZH1+/RvIg1v9jXiWNLx0IA3uR4+oSdQs1E5mZRbho3RqEs1xUJy8XGc6DcOXmBXtoGKviyGQcPADNEMijLg+bA2Lswon6IooNvBDAazQZn0IBeHEQxy5ONgCAU97g9y6JY81zn4INDGk07a4K+ONMpTlE7dXTr/kLsMWTjao96YHVDvd8PA4sHV+junMT84d/ED+GCCsJ/o5mA/6emvQgq1P56IU6iTHWwEdhjK/cklcJJ/8dtsYZxhW/Fe3sK5PTRQnKTKrBK2gYF+hteBaCgoxBJMLg4UFqis0gmwWg/xR/hEkok9hKkcOGIy3gbL6Ka8mtRDzPPQiedHyFBfeyfUC9n+aQey12B5ur4coyMnd3OOkl23emqcjwwRE2//nspivNLantSP1S1X3sne3Z83ZitrtZGD2mOQh6Hfm4PdeEdSYDx9M/jLqYeYuw11J65JX7k9GDHCzX2s78GVd0KZqWHBi2ZKHVsnvX/f+t07ZjEcp2f5LnKfMvfCzTtXLz98eNXPkylDJ2iPmXMnus26+uD+jSvPnl9fMIXpzqlDOegr7D4/icZeL/yY15BKVZfp0jURp6sunkbh0sUzNa0rnnDLQdz1VtDXxsEwrC9ZoG/+W7osW7WpiCld56VSyMbOXjiV9XUxKG5DbQ5Giu9Q28o6ecIL2mC+EW/Mv0adO1V/c8fRvLy9zJnswi1bpBWY3HSxfMrBJKzSgYPtWGsurKDBzP3Z0M9DMuMXM7AUssU1mk6H6tEOKk2dWV5SUlhawew4frL8mKz1io/z4BnTHOYH7Dy5jFUpcwuzZemZmekKkMxrAYvvX4GNgHWYw0GjjoIssJpmSBaQnsighUYusMiR2uC3JmuRDNm5PIcB7D0xkC9/B6uXLUGLi5nkgtIsA0Fkq1N1wEwVNwT6V2M6GjoYQ5hlPcTI+Y+h4Pr1zerDAslW6ezHOe7LgS0H77koXb695CR2fDM/SJ9wI10pydNbgQsPYF4ineTIHJm/kQPZcrHu5il2iNg7wN+bQeZGplLUuSPbjtSzBw5W1nFSSTg//GJnDiI/2sl9nJOT+4u3jKTvT/fbfnp7b5wjY9Uaz1skiPgsKKbVuSplEYPaYSJZmJe3JU+WnpGZnlWiVOWxcB05IPxDKvNylFnS9LKM8qKigsIiBgRpVVGxSi01QqYNBztxPM90EMcKPm630b5bGpOIAu0ExcW/f7tbGxdIJQpPZYJ3coNUAMbwTpRiDPFBOqTpag4dfenyY3eXFYlMIBRRT2c2O/muivXFGCrrXgGs0C9VptzGQn9DtgSCmiqvJG9c3LftsuybK6EzWbQl0DAR+lH6fYRyzCe74aDeYe0wg2H8sI6jUc/XwsnIp3SYhFhMvSxlgHKLMe60cYg1em7RWcXqE/LNLzZQ9IsnJ7nGl3QuNo63RC5GE3qiNjTO6Pkv/QKSMciZr6f3xe2MjMJNRNTO2L17d+7cwwhnY7bubDyNTXzCH9P7gs4aLeGCPlD/mOXjtmT5jiYcQ1sjonYQz2q5EH1D9v77Zz+z8OF/xNWdAOerdea+/iVeMDcwkubno3qjGGZrh1PeS5fOZFBfI1U09frGN2+wtQl8698Y2xFNa2zq7Q6Y+VHu4B9y3vEYrIWl/XcZhbWnHkUaZQ17hEK7USEJhQ/EBsxN/mj5OdmAOXeYQT299zb85Nx76PNPXnTtaic92gn02GFKIIVWw0oYC/3I00bYtjWsvINCHriQ5y0+XohifU1HYQbyIiMpY8R1wammA05GCLiKnI1ke2hr/g4BXUn/nFbn6HL+OjgA/sGZXIIzuTyjLD0vL39zHiYDNBHnfC7O+axiTAQ43/HA5qKiLUWy8jJNeSeqWzjeChvyqsP9sG4Jb08hJ7zQWGgnh3dLbuO6xMGQcx58nJrCUPuDbKJwCP8g1do4j+6ihtBj3mw5BpOFf30HSM4aTIB6qnn52flBa+OXBDNn4tbtXClbFZG0LIyVPL1gVB4cRm1dZuDUFxnOqzDcJUnOftV4cHe97HDdmmAW3b5vwIzw9krjgV0Nsvq6tQqcuffFxmmOG4/bwonSlUUOBgje166m0BW+gBzUDXbG0XA0mOHOr6bgiraAvMDXHP43zwWi3c1JTnXhLgxU1CPvZmef0MTZ8xnJ7dvu3TwNNBjRgSOdikAopST7r57a3/BY9vUVxWzMcWFG+Snq0BoUD8WcoLIIY6eE76VX6UxthWhyW075xrTsrOR8JgXFkWPwWBJZnlW2KU3ZOeZmcO8xlYlsSCOgvqBSUDK5SZNZXqFWVxcwX0Ac+Vo3lqFOr6hUCWNb8dhzg80TKQ3YYCH98eYSTwtLjtENdvQV5zl+HN6CJthPw2REgC0ahFhkgvqhCWgC4G9gYSCuhPvBeCaogEYDRyIxIhE1CsQgB/kb/CUG8x8RheyYjr6hRd+q7IZVNEjsf0Z9kWQYLn1Rn/bhIAGbX38GKybIdvhnbnZDXHGl+/zpb78/mzhYR1bf6pvFDupPEqj/Wwr5zCdTcnKy06UZZRkapqoI+h8ntZWIFRtOvRbDni/Aoe/spXFRxA+m37i2DGKQkvrv6r4FeNOBenn/DRtk6zVtwTgGSaEIp9N33/h5dy9F9H1zf9w3K2iwGPUeWU9ZEuW1kJG8e9aNr6qNlQUYdscB4qmZTZfXP8I92NvfwYIN2kw7TXRxGD6pTVd+fPfi5/ZH4x27+tjT10z5wCF0cX7h5hLGC6zDf/1T+mfdb7dxPAtLCgqLpbgST89QKqOSGU9kGozM7aV2hwZ/i8yYkB1lGWUdXNSxWNE1U7gBGfT7tb97gxnTGIureF0tk1uwuTCHvYP6HLBHhFQePsQLWTGbc/I35wrXH+VlKtXebcxdMDkKPX6RWm1qBPdGEYgbf2g8hX9MQcun0ncCLnnN8Pfz9r7k9+3Ny5dvMTAK2dBlWZrM3Nz8/FxG2xtZkWm5OdkZ0gxNpprZoiooKWT43mBFVhaXlGqkEaiUvtt9kZsM+pTvTa8IDg5crjh6+nTj0aYzRxRLGbDWWtErFMErhNEzjY36UaG17Gwrz9Mf7R3F3EaOf8LZ6LJAEoXT4BANE5AJ9MNJ0JkGg1qRNVDRzNhZpDInN1spFVIQF3YFxUzFiVvlB2SSdO7rDdtlx7+uq63AO4B9zMtlE8KTlfEySWLC7D0rZfEpm7PXsxePkcAU/wF9wVUalPf/5NK/1by4x9zNP0ETOpvMaqNqcOQEXAHfXO5/YLIMWY+0w6W0xdvB0Pvx5QM3m1gU7yD+d/ThSpc3F6A23P4fbW/fPv7hl/bHAs7gRTzUY9py5n+kfakypCZTVWmVlarKqgIGn0zqzkF1WmWFurKqawK04gk+VLnwrjStSj9ByMUQDvdDulw8hXPxh46sDqfcYFDkkTknzN8cbDrzjbTVtcWRQQX/XXkRggvPh2tOBrShT82/6vCmP9+Pnj1xkQODKEiGUVTLrYC5ev4/L4LVuoZMRGuy1clVzI4NcZoI2eKlkZ85sb8ic3FyRtamtLKsbewD1DaC6nqC2/hsUVdUZqiTWeQNG6h2MKnfeUq2ozY9dherVBXmq2QVGk1Fx/WMzY9c0kk4ysWdlCzmS2AEfT72RPAuZn1NpHpypTnqWRNWd01689rZZ4+vBc7V3850dEPvDcVhophbFVg9TzZ40gwXt9OBMCiGvbupNnt3irlk976kbeFrpB7TA5zGeJy/mcdszc9Wp8mEaSwyM/Sh+8XLuebo2zKw/OHOO1bPx5imEk5BwynJIz4bzOm7vkeRRQ0zvson96r0xOWD9x9eiAgsYVIKVcoKvUm3dTc4aVnpyUyuuG5N4BcLZA5Tl82adzgUBqewQGw6uW6FdOHMYBdGIv/U60gTqxJLrCuzNJvws84iV/wsXEQwkv26BcvFIcfPJX8jA/L55Ye6Gxve+7+59VmLIjqudPI3b8ndIs1QZ1bornUYq7nxHzIwUFM+DKTxmZCRkZObqmTQk7/mkLnK/JxcfFJklpWVFFepGHjyYQ5ZrC4oLpZ2lWEwkQM34YjiA2igtMsRZQjhPZiojRtslDLFBvQNxo2I21QqRZNeUVWqrhEOPPgN17U4A4YKZ815GqvNyMnLz8liYoM9k/1kXisPnWehFqKM6ugosKC6WmBk4SE21Dy4R3e/tuyn74Fq3K87EA9xNvx0LoSTlPDRto8MWAlFt4rEsBoCSMn3LbdanjdLX49/6uDiMNkzU5NZVl5aWlXMXN369alvZQ9v+XoFJkaOGs2idBRNzhVLSjp6mHZ99fUVrr6qskoTddVXVnaqzuv76BU1dvp0F2evO68YeGVU0iHh4qJD6jCWQtQP44AEsxcvgMKShzsKPN0NWZv+1movJ1ljKL5w/yU2KvNQFSU5Ndffd/0M2eLVx86xcMn47MRvJ3256MnNa/suXmIkM2Y+6GyY+pwT8TzqQ5/7y2yJ2Gp7vFDm822CK5mlOKqO2JWuOgoFaOPIPAr58nHkI91uCkIsGmHwpI6C5doa8isKFHwNWddRTeBlLfGytzqvGpDRzR6uS+xRG5lIIUdoI78x6qNGGIQ4CiZpLck7FLjxliRnWFaw9lFX2etomPGaWqSNQiJ+AOlDITPtgMV8FNlmtLjRtVEtdQmbfJ0CMW8HZlo78gb1FTa+9mPGmxqmnqO80D1nUJOLqfFIPQ3ukV8aNWBGgjVUK7b/PPUSKl6jCvIc9Rz7UWNcYIv4po6dzaTQHPCCz2AsqTJazcSw2hkKDUS2uJ6yxU2LYR+M9Kko+AyNRXNwO5dpdAJ8YljPW+h2HGA0ciBnGUn0735/IPxtoQnHtwITOINN6MLbMQo5oAQ0EhLIxr93eRcF3mg7icI+RgIQRoEnbCd3UVvL1ZWdzTuOQ1ekjVy+SKHxqBW5Qit5wUif2CCxlYJ5WktPNJREku5Faaf0LAo0fDVZ1S3sQmI1YC9Tbd8ZaMEPHRDDZXhDNqD3IwyXwZegWIwuojdkqNgKFzxn8GxSfySnQDH9ixhcpgCBTJHpFEQgF8ZejJwf4l7AFEwfAgHOTFApjUwCUa9hwwKhF5gwL8Vgcgp6tbefQr2QCdN52bIcp7slByXCjct3/LMOWLjjhH/QTJ3d39hYtS0vay9TnidcYparNeWabFVGMatOWKNKkM1btsCTnTfZEPNHqM3VKB6LDfGYBm2A+7TJ/1FVs9P4elpi95/3IDc4Xoa9PexEw2Gx0LinZ2akM/koSyvNJ0FpGEKHxFbCn9ateZnlsIEEQbgJfy4vtEmo5cfXgk1tbS3F9DRz/V/LHlssLbienMUedQH+FBYUqc7WWVruURcKD8LnkmUv/l3fP+n/A4qJC3wKZW5kc3RyZWFtCmVuZG9iagoyMzEgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyOT4+CnN0cmVhbQp42mtgYOCR/r/z9v+6/7d/5n/PYKAUKAAAqjQJeQplbmRzdHJlYW0KZW5kb2JqCjIzMyAwIG9iago8PC9TdWJ0eXBlL0NJREZvbnRUeXBlMEMvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAzMzM1Pj4Kc3RyZWFtCnjadVcLWBTXFZ4F5i7qBhPGsZHVmVUsBOUVH4ka2ogoBhWMCihQrTxWWBb2OcsKy0MIlKiILxQQeSxvFRFfjUBAIUoiNtVqNDFNWj+tb+Mksckdc/m+9s7sGk37ZZdvl7135p5z/vOf/5yREW5uhEwmo6LVaxZnm9RhFpNZbwpYoM9IEZcXCROFSVsVjMAQAisTVC7CZFdhnFuZQjZf4TrShg5OdON++oicRBCyurHi5zevwLGKKfi/sQOKqeLCbcVvCbkLISMUxCvEBIKRyWUTZD4vmAlN0SepI1LUOk7DZc8IDA6eFaY3ZJs0qWmcakZw8Bv+4udc1Qa9SYV9VIlOqtQbObXOrNHrzKqkbNWCQNWSxGSt3mrWalSJuhTVksDIQFWU3ooXNarX9DpVkjotMWODSr9BOsJiVpvMqlST3mIw+wWqotM0ZpVVb9Kq8LdJnaFONKtTVBZditqk4tLUqsUxq6JV4Xodp1qmScZm1aqAAJXKrFar0jjOMC8oiLOkBupNqUEb8DXmoAzHReYg8b6A8OVR0QHLIsIWRa1aFMht5KQ4UtRcoibDHPj/mP9ihcCvicQkwpvwJwKIICKYmEm8Scwh5hOhxAIijFhMRBDLiCjiXWIFsZJYRcQQcUQCsZ5IJJKIZEJDpBM6wkxYiRxXDD9+TSWmiolwIzKJ72R62QWXsS4pLpdcfVzLXZ+6ad3K3S6TAaSd/Apkgn/K35dfcafd49w/dn80yjrqu9GRo78ckzGmV/Gqwqq48lLIS+/DUI+t/DkeWnjZU1kf3ZrXGMOgBMFKogwQXcAZDFXcADsMUNAIRcbmWfTp9pwPWDgB9O9raG/Jb4plOdB4joRFoHEFyYHYfIvesI/rZyErXcGiLTCFRq+DL2E06WHj3+Qf3j3Pe578ARZ/S+UKF7HBAmzQBteBe6GDaGxcaH5OAmMtLszL8tI1WNoqqrdt389Udnft6FBeaM/VsJx8V1JGuVaJJiDZQj+WKg79Kurx0FB1cy9DLeTgKPnpansbi5bcoKl2TfSqnBjl+vT99qPnOy8e7iotPs7iYOEUHk7mPe/zMJ9fyVOnhItwFj2s6Q47wnxwuK6j2+vBnL8hkkE7QZwtS2fcZR5g60eojWB1oUVvrDafZmEvoDg4+ssLD1nkDSvptfEZYQwi4WQMC/XF8FFzMvtnVEunarIXMygMToFKQLndHFTHsRgBWMfLBnhX4fy/6Dau0VBQVPpeEZMcrykNU6JR7574+u9Dw4+GP7Kt28MmVdQWNylbmioH2C/k3bn16VmbirJKmPqUhD0rlWj6FF/kjZQPZ8JQ6Hevf4D1yIWvwuVwggxa4DRXYYwA6KO69g1MNkjNzNyQeiDzCFsLutrbu1h0xa3r553UF3cwOgLFy67ysB272AP30j1y+Dpygy8hHwalgRicXq09+xg7QsnVXLbWuE+EYz2Ac76DMujH+pbTr62KRDIGuQoUdAFPzs/zZz3y+Nk83M5ffezZwcN+Huf96bO8Cw3IHZOGM2KanWFr0Mvg8Po/1CxXoml+UxGN04vGfzMV+g0dqzpyBic4Dbo/SzB8i6Y6Fq2ICg5a+cmVK+c+vn3745W/ZzDAt27d5mVCz1/ptiy7oahg8/sFjDnIVLpWOTO27WOOFfyPAcggl2+RH/JBbr9Fr6KJUDYdBkESqtoGsecwhkY9YGDf0JHPlJ+dS4uukUjj/RiTRnafv/H4igiNsJCG00e0cpHwxgrzGbbulxTRYvrb28QgWV/ofQOsqecONDdVDjKQlPdn7dMbzdZY5g1MmYo1YHVjXquYZka0U8hfgcCX94QJPPWFcFE4Sw9Mq5iLxoSuDGI2rJXHPCuwHlS44oVy68P2Glsle4iFhXA6OF3d2CoVKJreBTpaa84ylOrEtbxmZUuDvV0KqZy/ysse8DAdB3TdmZESuAzwCz+dvHqdNSmZgQXIXb4aV72hEqtAzUhICRB/GatwwNANnMYhthQ0RbMlcCkYPGuv7FEOduREsujtEuyoUzvwdZISeMBsnJdBeMhhaGScmHeDdJQwTkLrGf2wY65CdR/dvKk5mvERqG+BmHPxF4sGpZilu74doXwcv/aZMQKD4AP7/g7WgeE/oMITFkMFcuGpT4TOPlpEgkEe8DYKB04MT7PXUSHyeAHERxKILBWMwoUW+rCxVZNuMKSntxo6OlpbDznTcxM7KMcOYu0SY2fSAZqF8zj6IdkmYe7IgRsQAcjbXlSZx4YsI7FdJ5ASz0dCbBKQDjF1h3NAbfX3wWRBfmlhnpe4yMDR4Ey1E5IQJyTPw8BlEw5i87A6VWF1uj4S4gzDwT1nGA53Z/GeJ3joKv6Nm0h9+NS1jz5kqVUzUC+/tuqj+UnaXE0G05GZXpOizLQW6dNY6qumQHmS0abJsGcf3cKiQrna4qz0W1Ka8O0pLEyUUx8ePlC3t1XZvGeTnkUX7svFzYOWOrW4eeRwTUWLsqWiUCdtvZAa7BDmnFYSXsmXFAYukf/w+/M+0ZrctQkMdak3QLKvteccE+2XSMDpayx9Di5hzom0LoFLANXe33Nof7fyfBsXz6JweQr2FMN3iv2Xk3MLs6Dt8Q88tFllQqfAOPAzgSq4lGzkmg0mc2HsZqYAhZALQSVcTLZlNemMXH6cY80oMcVYaR5k60DxZDLdoVTVmDktYBOaTW4p3lpc6pXZYGnv2G8/wVTCEPIKyEfvkMZ6U3tz077ecmYvXmsVnXEUykaw+wfykIPtKD6OxqeGiUtYI4UgXtbAw59woj+Hx2m4AFFwIvJHgegVNAmFoN9B/A0DoT+k4CQ4h/HdRiOXuYHT/Obdw9Ll9tW9bx7/PRDJGWePOcnDS/ioQZhJQxqBJ2gyeg2RPljuxkMwFYpv8D0cz/iOnx++YsaM8HPXPr909s7NS++GijwXOq0/l6GEmY/QCVBaNJlcmF+g89LVcy17yst21DE3G8mRAB/5c/INOskHb/Ozbs6SekkfP+4GbrIcdsT7EVJFJtoS45lTvyyIKEdB6GqycJYXPC+kFdAXJJ/+wDakhOz3UA7Hsr4l9KLIyNkzo85f/svQp7dvfrLkHUbsfc/6Xj/9a80NeX8TkvV0PO8pwUx1YZx7aDgPecJJKOBnnOWdM6H3XCZyOWmzlRbneunt5ham7W5Lq5KaP3xUf1B58s7h3jaLXcdSpzbFa7nssPo0ZW7BllIzu72J3L1lz9atXnDpj3AanC766szRfegGSWeO3CUl8eDhbLGhuAr/6aPbCxtWMzkg8a8buv9wwv2z4529w17/fv0zNJ5BZvBrPWba8x6TBj0egpO5d5FL3zT3L538+iP8iY6LTH2TeRvOxpVzoVu73lmDM3F/CeepYNxfCLr7d8cS4tU5y9/CpfcXpJTH5zj1sPN/W4yoSBKNcYvxBZTq+oOjTYea2lObla2NjW2sk8RfP4FlT7Ba4anqrq0fJXQx86v/tM26x92yN7exwevPfR3D53sNyRXM6r3Vm5uVTc2Vg+wt+Wlrtc5a9J6pkLGn/XHvGiV6OfBtH7/haPiaiYWeln1Wtdf6FemhEcvajxQyp/JzyzmlgSuIYSPk62qyOmt2ba/fzxg/PJM/oIST7v7tybNR6y50gVro4io0wVfor+N60Fw7s7SipCxvh7ttZ2FFhVdt7/7+kx1F1jZmRxFpqawuanCMXF3iyKXNLSre+B5Tm5K0O16JFLNXvhUylAxVuSwkCmptZi8u1ro0JrGqRcccKLJVG5UGc34Mmy6PaSxoq9pdXrGX2Xi8v/CsEtL3h75+1t1O8j/yUCaWpuBFw5iRKhQjX9OQ2y5NAPd+HKGWyJ83NdtzvYvAE5UsEMQ12ByXigHu5GEgLlSAT2u5jgeeRsOm4s1FOQy3LmFTrHK5cfeHLFwDIyRlbs1vxLNAxC1w2lKt11ty1zAz0+Q/Z7cTacEbl2MhuAWnHMeH52OdxkRxSnXac6m+jRkizQAiBTsR1uBT0atN+XHK5fpGbO2gs6wzm7MOlLGtKAKorkV+P3iouqePod5JeCB3NPqGLHjnsUx4JPxGbKIxDI7LZjYaxSljF0hGAVFwBjkTLEczUmAA2V9lb5W8DwIphtw0XX324c3sDXSHvA8uwojLKIK8C/4J75Ad2+pq2708UCIvROFR43N8uDRCBAGpnTRmn2CRApkRgGbyaFlD7UEv8VTmdZCMt/W12QdLWTgf3YxGBOkrqZGD91qHGokO/AnAHCGK7CiXDOXyQhwv+4f4HIGFEu6nH8ih/3xIoSnIOxRRyJ/xlyP/q1jHveGUa1i2/RnfYtp77eKFC9defMJAmfxJ98XLl7sXezMe4lP6y4JS4YMftol54oP3VU9rvRBRDz3r6+sBM9ptzn8Uo7YqxvCj+TGflpeXle0sq9i2q6xeoThXWbZt1/adFWVlO6oVLwmPxv1I/xcX8naNCmVuZHN0cmVhbQplbmRvYmoKMjM1IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMjQ+PgpzdHJlYW0KeNprYGDgEeCd2PDR60vAhyRBBQAqIwW9CmVuZHN0cmVhbQplbmRvYmoKMjM3IDAgb2JqCjw8L1N1YnR5cGUvQ0lERm9udFR5cGUwQy9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDcwMz4+CnN0cmVhbQp42m1SWU8TURSeaYuyjKjFJjDAeDUoaOy0IWqUJysBAiISqUvikrT0th0oM2UWSwMCtaXQdsrWFrCKtWhFFAKJQCQxUUNifPAn+BN4tqOY6AyGBxK/h3PP/e5ZvntyUESjQVAU1Znh7QYvC2sFlmNYfSNvcVHtykODVCaVRzBCIhDpKCoBlXRMLRVrRAwdwFSXMPXvT9ujZZqXv67klCMI+uqgYt8dXsWOy47qK1ah3N9iJ5D9KgRFCpEipBQBaB5ajp7e08pkY6yw0QZpnuK91aTReLaWcXtZyuHkQbXReP6MYi8CO8MCWSlQpALYw0OaoxiaA1YvuEyCJkt7J+PhOilgoW2gibxKghbGI5MUqGJoYIVOi8sOGPtOCYGDLAccLCO4uVMkMDspDngYthPIJwtd0MJBGxBoG2QB74Sg4UabGdQzNA+aqXa5LQR6PQAchMDJ8+4ag4EXHCTDOgx2OYYzuP4FcQYlT19/rcWsb26srWtpqyP5Hn7nHzbIWygXR/5v8ns4REYlUqWWByhDjaiVUWqQYbQgayqsePDT5dFm59fC60VA0lbqXjT1f8YnI2PRcWI5a8opah2dEqcn8Tl/UpglVtJP5+KrMl88ufQ6sziWm47GY0k8EZgYuH7rXusAYd82+e1d3Y5QSU/Y5+vDB8eDyYVZvjsYHgoHCce2XPB5yB/2+/G7i9T7JzOJx8SuhK318Jos4U42pJsKjvd1edPzY+KEuCsjGhNjcXyjY+l+b7/vIcF9m76JByLDod2qI4PhQT8uxHrTXsIueHm/VeaLAxTt7hjJFUYeBfpw3+TQ9ObHjS8zxErWFFtZyCxHS56JiUQSL1RW9ZBUip2U9w2pUXbvu9aTks6lstpUKrWPyNdc+IPlRbCC1fy1gkxMlBEVxfiHNxiWiUcVX8EmdkDaOvJD9xftTB93CmVuZHN0cmVhbQplbmRvYmoKMjM5IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTQ+PgpzdHJlYW0KeNprYGBgYGwAAAOIAQIKZW5kc3RyZWFtCmVuZG9iagoxMCAwIG9iago8PC9UeXBlL09ialN0bS9OIDIwMC9GaXJzdCAxNzgxL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggNTY3Mz4+CnN0cmVhbQp42u1ca3PbxpL9vr8CVfvhikkJnPcjlVKtbcWO1o/4Ws7mwcvaoiTY4kYSVSSVG//7PT0zAAcgQNGWdjep2lRkAPPsPn2mp2cwhC9YwWXhdMHxv8SDKYRSBfeF1K4QrFAWF15oj4soLDIEykuFYoXXuhCoxwxSTcG5Z4Ww1A7SXcEVMqlNrUwhJdqmZlHOOFFIX3CL+ooX3HFXKOR7ZwsUFcygXzTJ0ZUWuHpTaPQotC+oS4VODEfXThUGzwb9GtRznhcWTTNrC4uuBcOzQ9dcFY4XkuqhitSMFQ4iaQtVbCEtM4WDaA5CegnR8OwhCmMCynHc4AlaQlhU4wxZwkE/jiw0ghvooRQjBAqlITUHOsowlAEEygIuLpDlGKEjoVyA2xaayYBTobkFEABBS4kshSyFxrgG9Jq6gN7aeGQBG+0IXROsQnCKwjDoy5FqOLAkQxquyCKUYmEpFBHQxgMwARTQkBGAFsAaAbRgXSNJW0hqZLAhSkhNUqKIdNANoBlFKqGcUWRHJnFjoBtDLYU+yA4apOGCbsAj73EFOzgYYXRAET2ZQBpkGQ2oOBkP5uEc7VokczDSWEm4ol0LC3PQ0lhPuPIC7EFhkNE4kIQ4YpylwiCFZyQxynjim0QZb6gwqntHcILCjBOcEjeKaK9wAx5wbXADHDjQtlSDYwBYyuegneXgLAcwVnAaMsgSZDrQ2Apwj8P6VgBeDkJbCek41LegGm40bizZGV0oRoVRXREpoIBVsB9HOasAHzFYk4AGAmoQg0N9q0kJg86BBg2fwloasgDWekYDC/xlUIATocmuHMPAKUIXxneG2AZ+ORtSQH5HNoFInhHe1oMgRCCY2WvUwIgEJQh40hpl8K+TZHAisCOLaxKfhGCW5A/jwoc0MgUBxINRJHjPCXroijJh2Dhimie7MLI7tS4k0SZYWJMihKRwIS04JqrnCXgZHIchghKLbBhHnJwHkdbRvz7Yhf71wTAgISeWKgGrSrqSwcJwE+Tjwh0JQWXI30lKoVEnGJnPCPIddEPOwdLoDHnUFHGRBr5yGHMqWBSI0lDDHayhiGsMhiciaOK6IIpqsgsZQwefSZzQcGNFoIIArIIR76QhDhFJJRmfvAC5NCKyhnXIONoI6o+SSLzgyW0QIVDZkYIkgyNJCAntITLxilGv5D0IBNIdw1ziLpAPFhM0zIwEhoKQNhZYC3Lnlv4VhIgN00KwtUOflq4Yj4Ls5mickcVJL3JKTpKqItCGSEJMcnAj5N0cDVMSBLTAAAoMkGAImc1r2AP8IBOT9yBbe/J5wT5QSSiCUJDXIG0Vo8mJE9CSxjQBEKYtmlkcBP722/HPP5z9V3W+xt3JNfwpZsF3R0fj54sbSnqOflPK2+Xi/LRaT8Zvj5+P31d/rFF+9rF6Fi9P4+VkenT0L6j3WYXff7qtxk9ubhbr8end2ZqeXs1vfhs/XSwvquWEQQA2HX8/Phk/m/D48ATVTscvFu8X4+OD88vZ7bpalnwEMd9BlwmGvJauDENW8RIuCGwp4cQfuUfR6pGbUpCVnC9pPhOutNw+Uo8rdDJf3JQi09KZ0mOcYUyVklhvdCmjGPBDj96v6PaLWa6UYU6wJaYYEgOT+qP3K7f6dayUNNiYKyVmDZLDafHIppW5aZV2pQrzMokAN2dZCQ//yLrKbdsqZUpNE7D0JaOwCYJ46x9ZV9XSVagyhGsOA4eiOlsywx9ZVdWjKhclBUFwiyUFMYiYSwSaj6yqzlWFFy4txZhclzTHKQYTOPfIuuptXREClSEKgjU5yQGopXz0freGrDSmdDTtKFtS+CmtL4WtFe74/PFzipC+xPs/cPL4s8jxOYZgFD/Uhvjx3Qn9HVyu17erb8bji8V5uVgvzhblYvlxfD27uZtdjWfzMeclG1c343PIWd2sx/Obi+qP8nJ9fdUYDsyQCOQQLpWCQhLmS1rqYWEF5pr/N9yf3XBK81Iz2xhOGVl689hyfpyvL+/OyvPF9fjdYn1ZLX84PR0HwQ9n88NVtfx9fl6tGtkQIZaWFv++xAoLLp6VtGSUFrM8U/cZc/yc1t/JLnn0SIvw/1NzDcMwPrtanI2X1dUh5//Jxi+r5U11NT79tFpX1+P38/PfqnW6nFaz5flleXv9r6+UaRBTCl4cy0aDcedot4HZkoJ9I00pufpfUeT5k79HNa5nEHvZUQK5ueibKR1LvJLW8JqsTTs4mHsQSWgYG4up/Y09fm5pwRHuHK04wp2nhUa447TV8CheY98eH8m75Mr2dbMtzp/FL355Qw9m6vVsfrVefHNZXV0t/i26yPmi4RxnFMtp2tMrJS3kKV7GwlMj0HL80d3fVv/elbQ7oLASM7ScR/e0zaMhFjP2scF8Nb+er1eTg+PF+eHperZcj7Il6XT8ZnZdtXI9afauLvMVCnmep1CCoIRO+5tVZxa5N+1vcr1qtSZHXrcS1MibHc3r0cEttEOAuN24HvkwKlKJkffZExvRxuh2wzGXp2bFptU6g7ZRN82IEe2mbp7liDZVm2fK1j29ZOg3/bycX6wmPjRGu9h0oU3seDVDosrUgu5ISoJk2qsRbdw2j3pEW1oDTZrUpOs0aUa01du0YUe04ds8uhFt+w406VOT83mnTT+iPeKmkfmIR1o3xWkrfLvRtGz4iuiVr76bxrMCtKlNLea7ErQf3U6jcqKTBgyF3AF8u+dgP3q3ECzGdbr6eBVqWI2wmG4twbp6hBI0MeYCqpBmW2k6pO2ALKy0DlZ3Z1nLOc3zYvQ+IjTeLo0eJO/LoBp9viArpkL9bkpuuG5ZerXR6UulvnRfBowmzYAQTcmvyAFsJXXEaJemrfG6uzyHJPS9ORBRsd4cyKj4vXzokS5yTCROSZmuyVsosYfeartlM6w3/IZSvTrAhSjdmwM/ofaxgN2WxA9LAnej+i0Az6P6LQDvotn9ksgtQfSgHDCdFn2dASkt+zIAlFb3C2G2hBgGAwhr09cXQNK2LwMY6V70CCL/RbTxDR9V4p9Ovk8n32dy7GNRloqKVEQlCptmOExcyBr//Muv9FJYW1lirNzcXV1Nu3mKlgWuzos+KebR2ziLMKrOi+OwrmcxI9QZdiAj2rInww5ltGXLa5g8Qwgsrn1TSQy11sowSpXK9DXY1dT64by8za08PZw3pHH0zPdkbDVm9zPTVt6ONtWONvWONnMjd/PMDrCs3E8Woi8rjRvIY5iveH+eorV60yZX++kgCil1iUuPDmCekhnz2vWUdLSB3ltPkZxmgM2MlVb3ka89BFoZxrjSiYE8zktj+vO0EiVcaW+ecrqUrl9IyWkpNVAvvAjrzyMwue/PE9aViPz78wSWcHZgJHuPqXwgj8vMeO085W2mXycPuPCBetLJTPdOntCl7+NYbju47uNqtV6F8yphwRmWw/P1VfXth+rDB8aUYsxoxqzEFX+oy4zHleFPxXuDcqY62vEu9O1sWd2swxt/kuMN1rHhgER/lyZ1g0WcuUjd29hNSD872vlKsunM5J25/s7QduyI9DtL97bW+WjnO8hOR2+X1e/hREjWqx/olZBzCUlSiY41XURUSQJKI3Qt8gVL6BPKJqXbTTmjj3a+seyXcggOGTulDm0yPdkgCCESLNSxzoTXGzuZKgkoj3a8qH4+X67WDVSvZqsGqvGzxR2EPZRdyiSxdQauZTvA1RsdSPbAHZVAFPFKgAdz+wS+TPUIfJOoLTdtBQwSNaiNxjC9dbpG6UaamWXswNjTnc70TgF7Omyt6za4pxku4p4eEu58IxTPoVYDQ5Unk8sNNLaWNqNP4PV54qwagKe12Mzh4RkDBrGqcVCRnJYd7Xy3XUMhcihUDoXYCDBEtNovNj7jaMcr/LpHnvfI+8Fvkz73Y1YPWCIRn65KpCvkUuCInMU/cqyUpvkmrcat8SYyeiYt2oOo9vtGdv1+GhzZH/5nkqcri4OrnkfIg5nagZxTW7sHimoxIfet1j8AidoVyCRJx339VdDRPeikceIyqBz7cqi0yhzN2WaQ/VUgMsMQ+Rwi/gA28eTdztNEU/ttFfPq2byB8TzmN9BVsWztPXWa+YPXHPLtrY2BIRWj4WsVxQNUTJYKiCNdp+knuD+f5tSkFrmZOlZTaYA18cSHLKYTu9Vyw2rlc5OTD7Rcz/y1e+7KyF0TMVOxbb3dKvphFUWuonqY5UKwUAcONgvia3Xy6M5sxmZtudZYZu1xe5+KnA3rKHMdHzCx6cxEdUAUwusPKV3txzjOh2XNVy7OPEDWjj+0dWDnUxBRbahm9cYutQ2axYm7RxcxrEseRTv7sGmUqF7LHEZ2cnKq5pHe2GC4zXt0kcO6DJlCZgtG3R4Oe4vQeleRhXAuC+Eifk0IxzZi5mGbczuW1zxbQ6WR1Zpd04xaTyn1zFePaFUvy1Ndndq0acZW9Tqn6ixvRWeWz+rks3HDPLFZ9+UW7a6rapYo35na7mNsK9b7ayG2mzz5otf5nDx+YPGVr9VbUa9nu2Gxteq1enyzw6BEZ68jiz16wy+ThV873MH9fd9j+FYY6/OYxe+IWQZ5twcU+ZIoZ0Kz51F1yskMusQsnSZ7dX6PeqZHvWhanwcyXv45dNUsmznP03iv4iiox7RVna2IEALfg4MdxiGPdrz6k+DQ+K1YRvFsvysto7vB3+B26PZ7zUEs8qjI6z8RFj5bKNfRoXogJ/wwDp9BA9pvqtUP91/ikVrnDDYO2+cbNtEetcPW/Q57cOqSG6CN2YR8TZjHt5fGYSdNZEvfLCQM7cgdO8CqHbbk260J6q3t1sH9JdkJ+z9sptSAuMwWd/n0uWszWOXSmXxfzOyxL2ZbE4XZQ261ceLb2wbtH0k0lMyjOD+0a56vr+QuL9D+RUSnk8R7u2OvVeRD72jHL0tq8rZs7vr3N9uoZgSo9+l13khuGh3LvatWi7vlebUqYjwTzlO+nX2s6i4Eq+kWjqmvJvkhpk3teORsj+q8OQwzqc9imXiJp2fiqbAiHgQr4tmvIh73KuJhrSIdUojHrop40qpIh6vaUsWDUntIFY/uTONJ0lX4EWsDZdbcvkq2jls1xVcJerVhTwQ9nMFIJy7SWY2oqeS9YMeDVH1yiI4cur++37d+Y+xJOhjVbkjJPRtKR6A2+Mo+fNW+ein9BfgmSCNd4pGGQqlegNQgQKojSP9oiEeR9qivN+dr4mGkIh7S6eAcj+Hs0V462rPBuXYJk+gJivhGotO83Vfc+NIjaz533fuZIR1Kisc/injaoTCiF8bo0Prksh25+s2YVvt71Le99R3fs75j/fXVUH3XqS83x6yiV4t7Ex07Ob9ve65jJ7/DTqKrVrBT3MUs3M6RpntNHN9LFjESKGzt192ulriNdZMrrYd8TcFatun4dXUxnz1d/BGO9hvMJtbXP9t9tqxm68Xy4NXsffVz8c/5+rK4RD/LZfVhdO8GWVgp17tJd+vLxbKOEET2Dtq1X5Sq9PpSp3fMyqYQihp14ScAF3fn1fLgj4vf57cXH67/KP5xANXoJ/TsH6NRFBlhxfFsXR0cf4MsRDnCcY1oR33N+N8Y+9soavfDbXXzJMQg6eDX8/l6GjB8vbioxj+uqh/u1lfzG0BKia9mZ9XVCvXe3F2vJixEG8dHRyLcLI+OVJ0C8OJxxvCRDGq4bmcTXpChGhsH2z2brWdXi49hZtCOzqlIw+m41MRIP5ViQj/dMMJOFYPX0FPlJ9qKqRUTbcJnRKaOMvzU6YmwesqZoZwp52bikMy5A4+QLlFM49kYODeJK9KpaWenCIsn2uPq2cQIg6udWKanQvCJoa9xKIl7hzJmKqhnyCEc+nFsKjnDlEY/xpG4RxlnILWcCImrUpAFWigL2VBWm4kXAtfYlrTojyuo5idK4sotJgIxVQLPzE+VhFyQTxketLXG4Z7K2CKkQwajJTDh1E5Bn6Wgbyto+iIQhonGkNGYWehLLxpDGfdTrSEbBhZhpSEHfZxCKD+FLhMJmSL0ykboeRHajwgT9JAgQE8fbtEBesEC9JpF6GWCHhYL0AsXoTcmQE9qB+jhkrHuidCTuQh6piLkmGI8ygthkRZ+LJZgVxF2bQLsEk4fAyTCDsEC7CgTYIfJA+wywc4T7NYF2DWkJ9il0xF2mIlglzLBTs8EOwI6q0WCHfCSCZyc0KeJPPomE2hjgwnQJiI7iTL0wQVW0AdTNCIATR9g4GQGglwggBDxcyxe4dlPuONTbdSExgWZzqA9bdVE0s8irUqmYbi6CX1jgP7Ch1hQHyMjUMZAdjiPKZzKxGN8wIwgrKFvAzFCYHPbpO7zN9Vs0nrU7UfftGvEvu1OrRwqSoTatxXifH2rdtUCL0OHuG5g4OxeHMBf29KWi02XXIQ+A9507cN7qhq5pqppaqpDKxmUU7Ml/9TGQhGqqTXxEnroAYlGYLgEeyRopt5MtqHIIOBRdM51usbaXIhaJbmx77SZbemnas1v5J6dHNMzZYjx09mqCrnvXjw5efHy67/fzc9/W81uLg6fLq4uQsXjanW+nN9idg1fownBxslx/Nnoyc2HRQhTPs5X6+WngycXi7NqNP6BfoA3v/l4cHKBCGG+/jRC77e3V9U1BQwMs87xT/Rb2PFP4dM4qcn3ixcnx69nt+O6VhYvtAUZP1mdh9AD8y4dhQwPh3Bo41MI9R+09sUsdft9Nf94mUo9+f3jT/MLhAUY6qG1pxRIHNI3ig4lC1+4Ct9TktPxCaa3+fmTm49XVcHGz69mHxFGGcFD858QSXyLWfFmsaq+ZfV/jrX+O0pfwKG5dQBZgrBC3BVXuaH08/lVRSdVZSdga1mPUth9Zvvu5nxxAfwbJA+/TzBdzNDPIsS9MaZ6v/jxZo7SVSE429VxP21ePn1z/P27rH9Q4e5qttxmjnpE5jARmKMfnznODhNHqYw4EuuGQ8Hp0yo8fJxrgDhmkDN6B2cGYW1oY7ZoYz+DNoPt78Oc9PO/FnX4ntTJZDg+efPi6duvEa+/+LSsnt0tV4tlS8+H8WSLgHGdBPoIx4g+so/u20xxXG2Iwp1JRFE8IwqV2fDE+own9Gk14hd9040+88j7aWJ30MQP0mQnhDU36JM4vhl8RB7JP4Mqu/o4zFiyD3N0j9MRn8+cl7+cvvz5145IjVd9XNrE7bycNmov2livM//CdD0zwaNseEOFhngDIx0K+sgP/WKRY9G4Y2LiOyamYfYMw5hRJ+17NtTRn+Nlhjr4XN7EtWibN/fOknwccF2FL/LFRfNytX52OVsW8OS0LV7fNwJ//++nz7578vWz169P9BYT1D3+YmNW42RNA+Nz74GH3IaHXJVMJWb4xhWwDQ2kTc6DFhAWC7bcNDzNf9ACtjkYz5bLxT8vF4vfrqoP69HGzrlWuwHL8Y0TTAOh7UAo5QZC3G8Ckuevvvv1BTo7/aUHQv4FEG7maTaMnjY96CG0PPThS5L0lVDP2+i5HvSW1HkGXa7N5/mo1z8/eXPyS4f7Ufz/CS9lul7KPWhyE3tOblguR37S29Otye2Qi9oq/Ivmt10g5j7Ktn1UveP53+/SqXcKZW5kc3RyZWFtCmVuZG9iagoyNDIgMCBvYmoKPDwvVHlwZS9PYmpTdG0vTiAxL0ZpcnN0IDUvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMzA+PgpzdHJlYW0KeNozs1QwULCx0Q+pLEjVd8vPK9EPLk0qAXFAIgb6TonFqWBh3whHP89I7ZDUCPfKolTn0qLi/CJdz5LEnMxkXc+U1LySzJJKXQ9917zk/JTMvHR9JDGX1OLk1LyUxLwSkEnF0eYGQDuDYvVD8kPzMoHKUxWMDEHOCLKz4wIA2KIwJQplbmRzdHJlYW0KZW5kb2JqCjI0MyAwIG9iago8PC9UeXBlL1hSZWYvSURbPDM0N2UwMDhkMzUwY2JkYWVjNTliMmRhY2EzNzQyZmVjPjwzNDdlMDA4ZDM1MGNiZGFlYzU5YjJkYWNhMzc0MmZlYz5dL1Jvb3QKMSAwIFIvSW5mbyAyIDAgUi9TaXplIDI0NC9XWzEgMyAyXS9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDU2NT4+CnN0cmVhbQp42jXUWVBOARiH8ffNEoW00Eabj2Tft7Iv2bJL9gjZyZallC07IZUlKpKUsq8hS7pxyYwZN67dGMaNiybfeeZ185v/PGfOnDNnzjkiIk1NHiJeUo138ZyK+IioeGWIUJ7hExW/Uiui6vpj+7xKgK9txTz0wGb4Ep9jc2yBLdETW2Fr9EJvbINt3VdJt6u0w4sqgT+t+GCBStD/O2yPhSrB36z44mX0UwlptO6PV1TCoq0EYJFKeKqVDnhNJTLXSkcsxkAMwtdYqxL13XmGrl+OSbV2VjCW4lt8gyEYiu/wg9vfdtZHleQ8253wpkqat5XOWKaS/dVKGN5SyY2wEo7lKgWhViKwAiMxSqXorx3tgpNxI8ahC0fiKByNXXEMTsUJ2A0n4iSMx2kYjd1xOibgDIzBmTgLZ2MPnIOJGIs9cQrOxXk4H3thb1yIK3A49sERuACTsC+OxXE4HvvhSkzBVbga++MAXIOpuBYH4jpcjxtwEC7CxbgEB+NSXIbLMRmH4FAchpswFzfjNtyCWzEN03EX7sDtuBNP4Uk8iLtxD+7FfZiBmbgfszAbD+BhPIQn8Ajm4FE8hsfxLJ7GM1iF+XgBr+IlvIHXsQQr8Q7eVinOcb7E0gbHsnjH8jp722tUKvKdUplg5Z5KVaZTqhOtPMX7KjWFTq/5Yf0FPlD5/MnpX8Ksv1Jp9LT9UNU/xXade9fbfqQaGWO7wb1zbD92/11LbL/HetXYbOevG5cs8g+2wH+cCmVuZHN0cmVhbQplbmRvYmoKc3RhcnR4cmVmCjgwOTkyCiUlRU9GCg==</File>
    </Filelist>
</otrs_package>