IyEvYmluL2Jhc2gKIyBXSU5FIEluc3RhbGxhdGlvbiBzY3JpcHQKCiMgTWFyIDMxIDE5OTkgLSBPdmUgS+V2ZW4KIyAgRmlyc3QgdmVyc2lvbgojIERlYyA5IDE5OTkgLSBPdmUgS+V2ZW4KIyAgcmVxdWlyZSBYcG0KIyBGZWIgMjUgMjAwMCAtIE92ZSBL5XZlbgojICBhdXRvLWFkZCAvdXNyL2xvY2FsL2xpYiB0byAvZXRjL2xkLnNvLmNvbmYKIyBNYXIgMiAyMDAwIC0gT3ZlIEvldmVuCiMgIHNvdXJjZSByYXRoZXIgdGhhbiBncmVwIGNvbmZpZy5jYWNoZQojICB1c2Ugc291cmNlZCBjb25maWcuY2FjaGUgdG8gc3RhcnQgbGRjb25maWcKIyAgcmVjb25maWd1cmUgaWYgY29uZmlnLmNhY2hlIGRvZXNuJ3QgZXhpc3QKIyBNYXIgMzAgMjAwMCAtIE92ZSBL5XZlbgojICBhdXRvY29uZmlndXJlIG5vLXdpbmRvd3MgaW5zdGFsbHMKIyAgZG8gbm90IGluc3RhbGwgcmVnaXN0cnkgb24gcmVhbC13aW5kb3dzIGluc3RhbGxzCiMgIHNvbWUgc3VwcG9ydCBmb3IgYmluYXJ5IHBhY2thZ2UgaW5zdGFsbHMKIyAgc2V0IGFuZCB0ZWxsIHVzZXIgYWJvdXQgTERfTElCUkFSWV9QQVRIIGlmIG5lY2Vzc2FyeQojICBzZXQgRVhUUkFfTERfTElCUkFSWV9QQVRIIGluIHdpbmUuY29uZgojIEFwciA5IDIwMDAgLSBPdmUgS+V2ZW4KIyAgbWFrZSByb290J3MgcmVnaXN0cnkgZ2xvYmFsIChzeXN0ZW0tZGVmYXVsdCkKCiMgZGVmYXVsdHMgKGNoYW5nZSB0aGVzZSBpZiB5b3UgYXJlIGEgcGFja2FnZXIpCkNPTkZBUkdTPSAgICAgICAgICAgICAgICAgICAgICMgY29uZmlndXJlIGFyZ3MsIGUuZy4gLS1wcmVmaXg9L3VzciAtLXN5c2NvbmZkaXI9L2V0YwpwcmVmaXg9L3Vzci9sb2NhbCAgICAgICAgICAgICAjIGluc3RhbGxhdGlvbiBwcmVmaXgKc3lzY29uZmRpcj0kcHJlZml4L2V0YyAgICAgICAgIyB3aGVyZSB3aW5lLmNvbmYgYW5kIGdsb2JhbCByZWdpc3RyeSBpcyBzdXBwb3NlZCB0byBiZQpsaWJkaXI9JHByZWZpeC9saWIgICAgICAgICAgICAjIHdoZXJlIGxpYndpbmUuc28gd2lsbCBiZSAob3IgaXMpIGluc3RhbGxlZApleGRpcj1kb2N1bWVudGF0aW9uL3NhbXBsZXMgICAjIHdoZXJlIHRoZSBleGFtcGxlIHN5c3RlbS5pbmkgcmVzaWRlcwpDT05GPSRzeXNjb25mZGlyL3dpbmUuY29uZiAgICAjIGRlZmF1bHQgcGF0aCBvZiB0aGUgd2luZS5jb25mCkJJTkRJU1Q9bm8gICAgICAgICAgICAgICAgICAgICMgd2hldGhlciBjYWxsZWQgZnJvbSBhIGJpbmFyeSBwYWNrYWdlIGNvbmZpZyBzY3JpcHQKRE9DT05GPWF1dG8gICAgICAgICAgICAgICAgICAgIyB3aGV0aGVyIHRvIGF1dG9nZW5lcmF0ZSB3aW5lLmNvbmYKRE9XQ0hLPWF1dG8gICAgICAgICAgICAgICAgICAgIyB3aGV0aGVyIHRvIGF1dG9jb25maWd1cmUgZXhpc3Rpbmctd2luZG93cyBpbnN0YWxsYXRpb24KRE9XSU5FPWF1dG8gICAgICAgICAgICAgICAgICAgIyB3aGV0aGVyIHRvIGF1dG9jb25maWd1cmUgbm8td2luZG93cyBpbnN0YWxsYXRpb24KRE9SRUc9YXV0byAgICAgICAgICAgICAgICAgICAgIyB3aGV0aGVyIHRvIGluc3RhbGwgZGVmYXVsdCByZWdpc3RyeQpTWVNSRUc9eWVzICAgICAgICAgICAgICAgICAgICAjIHdoZXRoZXIgdG8gbWFrZSByb290J3MgcmVnaXN0cnkgZ2xvYmFsIChzeXN0ZW0tZGVmYXVsdCkKIyBlbGZkbGxzIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LCBzbyB0aGlzIGhhcyBubyBlZmZlY3QgeWV0CkRMTFBBVEg9JGxpYmRpci93aW5lICAgICAgICAgICMgZGVmYXVsdCBwYXRoIG9mIHRoZSBlbGZkbGwgLnNvIGZpbGVzCiMgb25seSBmb3IgZXhpc3Rpbmctd2luZG93cyBpbnN0YWxscwpXSU5FQ09ORj10b29scy93aW5lY29uZiAgICAgICAjIHRoZSBwYXRoIG9mIHdpbmVjb25mIHBlcmwgc2NyaXB0CiMgb25seSBmb3Igbm8td2luZG93cyBpbnN0YWxscwpXSU5FSU5JPXdpbmUuaW5pICAgICAgICAgICAgICAjIHRoZSBwYXRoIG9mIGRlZmF1bHQgd2luZS5pbmkgKGFsc28gdXNlZCBieSB3aW5lY29uZikKV0lOSU5JPS9kZXYvbnVsbCAgICAgICAgICAgICAgIyB0aGUgcGF0aCBvZiBkZWZhdWx0IHdpbi5pbmkKU1lTVEVNSU5JPSRleGRpci9zeXN0ZW0uaW5pICAgIyB0aGUgcGF0aCBvZiBkZWZhdWx0IHN5c3RlbS5pbmkKUkVHQVBJPXByb2dyYW1zL3JlZ2FwaS9yZWdhcGkgIyB0aGUgcGF0aCBvZiByZWdhcGkgd2luZWxpYiBhcHBsaWNhdGlvbgpERUZSRUc9d2luZWRlZmF1bHQucmVnICAgICAgICAjIHRoZSBwYXRoIG9mIHRoZSByZWdpc3RyeSBmaWxlIHRvIGJlIGZlZCB0byByZWdhcGkKIyBDUk9PVD0vdmFyL3dpbmUgICAgICAgICAgICAgIyB0aGUgcGF0aCBvZiB0aGUgZmFrZSBEcml2ZSBDIChhc2tzIHVzZXIgaWYgbm90IHNldCkKCiMgc3RhcnR1cC4uLgoKZWNobyAiV0lORSBJbnN0YWxsZXIgdjAuMyIKZWNobwoKaWYgWyAiJEJJTkRJU1QiID0gJ25vJyBdCnRoZW4gewoKaWYgISBbIC1mIGNvbmZpZ3VyZSBdCnRoZW4gewogIGVjaG8gIllvdSdyZSBydW5uaW5nIHRoaXMgZnJvbSB0aGUgd3JvbmcgZGlyZWN0b3J5LiIKICBlY2hvICJDaGFuZ2UgdG8gdGhlIFdpbmUgZGlyZWN0b3J5IGFuZCB0cnkgYWdhaW4uIgogIGV4aXQgMQp9CmZpCgojIHJ1biB0aGUgY29uZmlndXJlIHNjcmlwdCwgaWYgbmVjZXNzYXJ5CgppZiBbIC1mIGNvbmZpZy5jYWNoZSBdICYmIFsgLWYgTWFrZWZpbGUgXSAmJiBbIE1ha2VmaWxlIC1udCBjb25maWd1cmUgXQp0aGVuIHsKICBlY2hvICJJIHNlZSB0aGF0IFdJTkUgaGFzIGFscmVhZHkgYmVlbiBjb25maWd1cmVkLCBzbyBJJ2xsIHNraXAgdGhhdC4iCiAgIyBsb2FkIGNvbmZpZ3VyZSByZXN1bHRzCiAgLiAuL2NvbmZpZy5jYWNoZQp9CmVsc2UgewogIGVjaG8gIlJ1bm5pbmcgY29uZmlndXJlLi4uIgogIGVjaG8KICBpZiAhIC4vY29uZmlndXJlICRDT05GQVJHUwogIHRoZW4gewogICAgZWNobwogICAgZWNobyAiQ29uZmlndXJlIGZhaWxlZCwgYWJvcnRpbmcgaW5zdGFsbC4iCiAgICBybSAtZiBjb25maWcuY2FjaGUKICAgIGV4aXQgMQogIH0KICBmaQogICMgbG9hZCBjb25maWd1cmUgcmVzdWx0cwogIC4gLi9jb25maWcuY2FjaGUKICAjIG1ha2Ugc3VyZSBYIHdhcyBmb3VuZAogIGV2YWwgIiRhY19jdl9oYXZlX3giCiAgaWYgWyAiJGhhdmVfeCIgIT0gInllcyIgXQogIHRoZW4gewogICAgZWNobyAiSW5zdGFsbCB0aGUgWCBkZXZlbG9wbWVudCBoZWFkZXJzIGFuZCB0cnkgYWdhaW4uIgogICAgcm0gLWYgY29uZmlnLmNhY2hlCiAgICBleGl0IDEKICB9CiAgZWxpZiBbICIkYWNfY3ZfaGVhZGVyX1gxMV94cG1faCIgIT0gInllcyIgXQogIHRoZW4gewogICAgZWNobyAiSW5zdGFsbCB0aGUgWHBtIGRldmVsb3BtZW50IGhlYWRlcnMgYW5kIHRyeSBhZ2Fpbi4iCiAgICBybSAtZiBjb25maWcuY2FjaGUKICAgIGV4aXQgMQogIH0KICBmaQp9CmZpCgojIG5vdyBkbyB0aGUgY29tcGlsYXRpb24KCmlmIFsgLWYgd2luZSBdICYmIFsgd2luZSAtbnQgTWFrZWZpbGUgXQp0aGVuIHsKICBlY2hvICJIbW0sIGxvb2tzIGxpa2UgV0lORSBpcyBhbHJlYWR5IGNvbXBpbGVkLiBJJ2xsIHNraXAgdGhhdCB0b28sIEkgZ3Vlc3MuIgp9CmVsc2UgewogIGVjaG8gIkNvbXBpbGluZyBXSU5FLiBHcmFiIGEgbHVuY2ggb3IgdHdvLCByZW50IGEgdmlkZW8sIG9yIHdoYXRldmVyLCBpbiB0aGUgbWVhbnRpbWUuLi4iCiAgZWNobwogIGlmICEgeyBtYWtlIGRlcGVuZCAmJiBtYWtlOyB9CiAgdGhlbiB7CiAgICBlY2hvCiAgICBlY2hvICJDb21waWxhdGlvbiBmYWlsZWQsIGFib3J0aW5nIGluc3RhbGwuIgogICAgZXhpdCAxCiAgfQogIGZpCiAgZWNobwp9CmZpCgojIGFuZCBpbnN0YWxsYXRpb24sIGlmIHJvb3QKCmlmIFsgYHdob2FtaWAgIT0gJ3Jvb3QnIF0KdGhlbiB7CiAgZWNobyAiWW91IGFyZW4ndCByb290LCBzbyBJJ2xsIHNraXAgdGhlIG1ha2UgaW5zdGFsbC4iCiAgIyBzZXR1cCB0byBydW4gZnJvbSBjdXJyZW50IGRpcmVjdG9yeQogIERMTFBBVEg9IiRQV0QvZGxscyIKICBpZiBbIC16ICIkTERfTElCUkFSWV9QQVRIIiBdCiAgdGhlbiBMRF9MSUJSQVJZX1BBVEg9IiRQV0Q6JERMTFBBVEgiCiAgZWxzZSBMRF9MSUJSQVJZX1BBVEg9IiRMRF9MSUJSQVJZX1BBVEg6JFBXRDokRExMUEFUSCIKICBmaQogIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEgKICBlY2hvCiAgZWNobyAiTk9URSEgVG8gcnVuIFdpbmUgd2l0aG91dCBpbnN0YWxsaW5nLCB5b3UgbXVzdCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIgogIGVjaG8gIkxEX0xJQlJBUllfUEFUSCB0byAkUFdEOiRETExQQVRIIgogIGVjaG8gImluIHlvdXIgbG9nb24gc2NyaXB0cy4iCn0KZWxzZSB7CiAgZWNobyAiTm93IGluc3RhbGxpbmcgYmluYXJpZXMgb250byB0aGUgc3lzdGVtLi4uIgogIGVjaG8KICBpZiAhIG1ha2UgaW5zdGFsbAogIHRoZW4gewogICAgZWNobwogICAgZWNobyAiSW5zdGFsbGF0aW9uIGZhaWxlZCwgYWJvcnRpbmcuIgogICAgZXhpdCAxCiAgfQogIGZpCiAgaWYgWyAtZiAvZXRjL2xkLnNvLmNvbmYgXSAmJiAhIGdyZXAgLXFzICIkbGliZGlyIiAvZXRjL2xkLnNvLmNvbmYKICB0aGVuIHsKICAgIGVjaG8KICAgIGVjaG8gIiRsaWJkaXIgZGlkbid0IGV4aXN0IGluIHlvdXIgL2V0Yy9sZC5zby5jb25mLCBhZGRpbmcgaXQgbm93Li4uIgogICAgZWNobyAiJGxpYmRpciIgPj4vZXRjL2xkLnNvLmNvbmYKICAgIGVjaG8gIlJlLXJ1bm5pbmcgbGRjb25maWcuLi4iCiAgICBldmFsICIkYWNfY3ZfcGF0aF9MRENPTkZJRyIKICB9CiAgZmkKfQpmaQplY2hvCgp9CmZpICMgQklORElTVAoKIyBub3cgY2hlY2sgd2hldGhlciB3ZSBzaG91bGQgZ2VuZXJhdGUgd2luZS5jb25mCmlmIFsgLXogIiRET0NPTkYiIF0KdGhlbiBET0NPTkY9YXV0bwpmaQoKaWYgWyAiJERPQ09ORiIgPSAnYXV0bycgXQp0aGVuIHsKICAjIHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBzeXN0ZW0gd2luZS5jb25mCiAgaWYgWyAtZiAkQ09ORiBdCiAgdGhlbiBET0NPTkY9bm8KICBmaQp9CmZpCgppZiBbICIkRE9DT05GIiAhPSAnbm8nIF0KdGhlbiB7CiAgaWYgWyBgd2hvYW1pYCAhPSAncm9vdCcgXQogIHRoZW4gewogICAgQ09ORj1+Ly53aW5lcmMKICAgIGlmICEgWyAtZiAkQ09ORiBdCiAgICB0aGVuIHsKICAgICAgaWYgWyAiJERPQ09ORiIgIT0gJ3llcycgXQogICAgICB0aGVuIHsKICAgICAgICBlY2hvICJTaW5jZSB5b3UgYXJlbid0IHJvb3QsIGFuZCB0aGVyZSdzIG5vIHN5c3RlbSB3aW5lLmNvbmYsIEkgYXNzdW1lIgogICAgICAgIGVjaG8gInlvdSB3YW50IGEgdXNlci1zcGVjaWZpYyAud2luZXJjLiBBbSBJIGNvcnJlY3Q/ICh5ZXMvbm8pIgogICAgICAgIHdoaWxlIFsgIiRET0NPTkYiICE9ICd5ZXMnIF0gJiYgWyAiJERPQ09ORiIgIT0gJ25vJyBdCiAgICAgICAgZG8gcmVhZCBET0NPTkYKICAgICAgICBkb25lCiAgICAgIH0KICAgICAgZmkKICAgICAgaWYgWyAiJERPQ09ORiIgPSAnbm8nIF0KICAgICAgdGhlbiB7CiAgICAgICAgZWNobyAiQWJvcnRpbmcgaW5zdGFsbC4gVHJ5IGFnYWluIGFzIHJvb3QgdG8gZ2VuZXJhdGUgYSBzeXN0ZW0gd2luZS5jb25mLiIKICAgICAgICBleGl0IDEKICAgICAgfQogICAgICBmaQogICAgICBlY2hvCiAgICB9CiAgICBmaQogIH0KICBlbHNlIHsKICAgIG1rZGlyIC1wICRzeXNjb25mZGlyCiAgICBET0NPTkY9eWVzCiAgfQogIGZpCn0KZmkKCiMgZ2VuZXJhdGUgd2luZS5jb25mIGZyb20gZXhpc3Rpbmcgd2luZG93cyBpbnN0YWxsLCBpZiBhbnkKaWYgWyAiJERPQ09ORiIgPSAneWVzJyBdCnRoZW4gewogIGlmIFsgIiRET1dDSEsiID0gJ3llcycgXSB8fCBbICIkRE9XQ0hLIiA9ICdhdXRvJyBdCiAgdGhlbiB7CiAgICBlY2hvICJTZWFyY2hpbmcgZm9yIGFuIGV4aXN0aW5nIFdpbmRvd3MgaW5zdGFsbGF0aW9uLi4uIgogICAgaWYgISAkV0lORUNPTkYgPiAkQ09ORiAyPi9kZXYvbnVsbAogICAgdGhlbiB7CiAgICAgIHJtIC1mICRDT05GCiAgICAgIGVjaG8KICAgICAgZWNobyAiV2luZG93cyB3YXMgbm90IGZvdW5kIG9uIHlvdXIgc3lzdGVtLCBzbyBJIGFzc3VtZSB5b3Ugd2FudCBhIFdpbmUtb25seSBpbnN0YWxsYXRpb24uIgogICAgICBlY2hvICJBbSBJIGNvcnJlY3Q/ICh5ZXMvbm8pIgogICAgICB3aGlsZSBbICIkRE9XSU5FIiAhPSAneWVzJyBdICYmIFsgIiRET1dJTkUiICE9ICdubycgXQogICAgICBkbyByZWFkIERPV0lORQogICAgICBkb25lCiAgICAgIGlmIFsgIiRET1dJTkUiID0gJ25vJyBdCiAgICAgIHRoZW4gewogICAgICAgIGVjaG8gIkFib3J0aW5nIGluc3RhbGwuIE1ha2Ugc3VyZSB5b3VyIFdpbmRvd3MgcGFydGl0aW9uIGlzIG1vdW50ZWQgYW5kIHRyeSBhZ2FpbiwiCiAgICAgICAgZWNobyAib3IgY3JlYXRlICRDT05GIG1hbnVhbGx5IGJ5IGNvcHlpbmcgZnJvbSAkV0lORUlOSSBhbmQgYWRhcHRpbmcgdGhlIGRyaXZlIHBhdGhzLiIKICAgICAgICBleGl0IDEKICAgICAgfQogICAgICBmaQogICAgfQogICAgZWxzZSB7CiAgICAgIGVjaG8KICAgICAgZWNobyAiQ3JlYXRlZCAkQ09ORiB1c2luZyB5b3VyIGV4aXN0aW5nIFdpbmRvd3MgaW5zdGFsbGF0aW9uLiIKICAgICAgZWNobyAiWW91IHByb2JhYmx5IHdhbnQgdG8gcmV2aWV3IHRoZSBmaWxlLCB0aG91Z2guIgogICAgICBET1dJTkU9bm8KICAgIH0KICAgIGZpCiAgICBlY2hvCiAgfQogIGVsaWYgWyAiJERPV0lORSIgPSAnYXV0bycgXQogIHRoZW4gRE9XSU5FPXllcwogIGZpCn0KZWxpZiBbICIkRE9XSU5FIiA9ICdhdXRvJyBdCnRoZW4gRE9XSU5FPW5vCmZpCgojIHNldHVwIGEgbm8td2luZG93cyBpbnN0YWxsYXRpb24sIGlmIG5lY2Vzc2FyeQppZiBbICIkRE9XSU5FIiA9ICd5ZXMnIF0KdGhlbiB7CiAgaWYgWyBgd2hvYW1pYCAhPSAncm9vdCcgXQogIHRoZW4gRENST09UPX4vYwogIGVsc2UgRENST09UPS9jCiAgZmkKICBlY2hvICJDb25maWd1cmluZyBXaW5lIHdpdGhvdXQgV2luZG93cy4gU29tZSBmYWtlIFdpbmRvd3MgZGlyZWN0b3JpZXMgbXVzdCBiZSBjcmVhdGVkLCB0byIKICBlY2hvICJob2xkIGFueSAuaW5pIGZpbGVzLCBETExzLCBhbmQgc3RhcnQgbWVudSBlbnRyaWVzIHlvdXIgYXBwbGljYXRpb25zIG1heSBuZWVkIHRvIGluc3RhbGwuIgogIHdoaWxlIFsgLXogIiRDUk9PVCIgXQogIGRvIHsKICAgIGVjaG8gIldoZXJlIHdvdWxkIHlvdSBsaWtlIHlvdXIgZmFrZSBDIGRyaXZlIHRvIGJlIHBsYWNlZD8gKGRlZmF1bHQgaXMgJERDUk9PVCkiCiAgICByZWFkIENST09UCiAgICBpZiBbIC16ICIkQ1JPT1QiIF0KICAgIHRoZW4gQ1JPT1Q9IiREQ1JPT1QiCiAgICBmaQogICAgaWYgISBbIC1kICIkQ1JPT1QiIF0KICAgIHRoZW4gewogICAgICBpZiAhIG1rZGlyIC1wICIkQ1JPT1QiCiAgICAgIHRoZW4gdW5zZXQgQ1JPT1QKICAgICAgZmkKICAgIH0KICAgIGZpCiAgfQogIGRvbmUKICBlY2hvICJDb25maWd1cmluZyBXaW5lIGZvciBhIG5vLXdpbmRvd3MgaW5zdGFsbCBpbiAkQ1JPT1QuLi4iCiAgZm9yIHRkaXIgaW4gIiRDUk9PVC93aW5kb3dzIiAiJENST09UL3dpbmRvd3Mvc3lzdGVtIiAiJENST09UL3dpbmRvd3MvU3RhcnQgTWVudSIgIiRDUk9PVC93aW5kb3dzL1N0YXJ0IE1lbnUvUHJvZ3JhbXMiCiAgZG8gWyAtZCAiJHRkaXIiIF0gfHwgbWtkaXIgIiR0ZGlyIgogIGRvbmUKICBbIC1mICIkQ1JPT1Qvd2luZG93cy93aW4uaW5pIiBdICAgIHx8IGNwICIkV0lOSU5JIiAgICAiJENST09UL3dpbmRvd3Mvd2luLmluaSIKICBbIC1mICIkQ1JPT1Qvd2luZG93cy9zeXN0ZW0uaW5pIiBdIHx8IGNwICIkU1lTVEVNSU5JIiAiJENST09UL3dpbmRvd3Mvc3lzdGVtLmluaSIKICBpZiBbICIkRE9DT05GIiA9ICd5ZXMnIF0KICB0aGVuIHsKICAgIHNlZCAicy9QYXRoPVwvYyQvUGF0aD0ke0NST09ULy9cLy9cXC99LyIgJFdJTkVJTkkgPiAkQ09ORgogICAgZWNobyAiQ3JlYXRlZCAkQ09ORiB1c2luZyBkZWZhdWx0IFdpbmUgY29uZmlndXJhdGlvbi4iCiAgICBlY2hvICJZb3UgcHJvYmFibHkgd2FudCB0byByZXZpZXcgdGhlIGZpbGUsIHRob3VnaC4iCiAgfQogIGZpCiAgIyBub3cgd2UgcmVhbGx5IG5lZWQgdG8gaW5zdGFsbCB0aGUgcmVnaXN0cnkKICBET1JFRz15ZXMKfQplbGlmIFsgLXogIiRDUk9PVCIgXQp0aGVuIHsKICBlY2hvICJSZWFkaW5nIGN1cnJlbnQgV2luZSBjb25maWd1cmF0aW9uIGZyb20gJENPTkYuLi4iCiAgQ1JPT1Q9YHNlZCAtbiAnL15cW0RyaXZlIENcXSQvLC9eXFsuKlxdJC8gcy9eUGF0aD1cKC4qXCkvXDEvcCcgJENPTkZgCiAgZWNobyAiRHJpdmUgQyBpcyBjb25maWd1cmVkIGF0ICRDUk9PVC4iCn0KZmkKZWNobwoKIyBmaXh1cCBFWFRSQV9MRF9MSUJSQVJZX1BBVEgKaWYgWyAiJERPQ09ORiIgPSAneWVzJyBdCnRoZW4gewogIGVjaG8gIlNldHRpbmcgRVhUUkFfTERfTElCUkFSWV9QQVRIIGluIC53aW5lcmMgdG8gJERMTFBBVEguLi4iCiAgc2VkICJzL0VYVFJBX0xEX0xJQlJBUllfUEFUSD0uKi9FWFRSQV9MRF9MSUJSQVJZX1BBVEg9JHtETExQQVRILy9cLy9cXC99LyIgJENPTkYgPiAkQ09ORi5uZXcKICBtdiAtZiAkQ09ORi5uZXcgJENPTkYKICBlY2hvCn0KZmkKCiMgY2hlY2sgd2hldGhlciB3ZSBuZWVkIHRvIGluc3RhbGwgZGVmYXVsdCByZWdpc3RyeQojIChub3QgdG8gYmUgZG9uZSBpZiB3aW5kb3dzIHJlZ2lzdHJ5IGV4aXN0cykKaWYgWyAiJERPUkVHIiA9ICdhdXRvJyBdCnRoZW4gewogIGVjaG8gIkNoZWNraW5nIGZvciByZWFsIFdpbmRvd3MgcmVnaXN0cnkuLi4iCiAgaWYgWyAtZiAiJENST09UL3dpbmRvd3Mvc3lzdGVtLmRhdCIgXQogIHRoZW4gRE9SRUc9bm8KICBlbGlmIFsgLWYgIiRDUk9PVC93aW5kb3dzL3N5c3RlbTMyL2NvbmZpZy9zeXN0ZW0iIF0KICB0aGVuIERPUkVHPW5vCiAgZWxzZSBET1JFRz15ZXMKICBmaQogIGlmIFsgIiRET1JFRyIgPSAneWVzJyBdCiAgdGhlbiBlY2hvICJOb3QgZm91bmQsIGRlZmF1bHQgV2luZSByZWdpc3RyeSB3aWxsIGJlIGluc3RhbGxlZC4iCiAgZWxzZSBlY2hvICJXaW5kb3dzIHJlZ2lzdHJ5IGZvdW5kLCB3aWxsIG5vdCBpbnN0YWxsIGRlZmF1bHQgV2luZSByZWdpc3RyeS4iCiAgZmkKICBlY2hvCn0KZmkKCiMgaW5zdGFsbCBkZWZhdWx0IHJlZ2lzdHJ5IGVudHJpZXMKaWYgWyAiJERPUkVHIiA9ICd5ZXMnIF0KdGhlbiB7CiAgaWYgWyAiJEJJTkRJU1QiID0gJ25vJyBdCiAgdGhlbiB7CiAgICBlY2hvICJDb21waWxpbmcgcmVnYXBpLi4uIgogICAgZWNobwogICAgKGNkIHByb2dyYW1zL3JlZ2FwaTsgbWFrZSkKICAgIGVjaG8KICB9CiAgZmkKICBlY2hvICJJbnN0YWxsaW5nIGRlZmF1bHQgV2luZSByZWdpc3RyeSBlbnRyaWVzLi4uIgogIGVjaG8KICBpZiAhICRSRUdBUEkgc2V0VmFsdWUgPCAkREVGUkVHID4gL2Rldi9udWxsCiAgdGhlbiB7CiAgICBlY2hvCiAgICBlY2hvICJSZWdpc3RyeSBpbnN0YWxsIGZhaWxlZC4gUGVyaGFwcyB5b3Ugd2VyZW4ndCBydW5uaW5nIFguIgogICAgZXhpdCAxCiAgfQogIGVsc2UgZWNobyAiUmVnaXN0cnkgZW50cmllcyBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkLiIKICBmaQogIGlmIFsgIiRTWVNSRUciID0gJ2F1dG8nIF0KICB0aGVuIFNZU1JFRz15ZXMKICBmaQp9CmZpCgojIG1ha2Ugcm9vdCdzIHJlZ2lzdHJ5IGdsb2JhbCwgaWYgZGVzaXJlZAppZiBbIGB3aG9hbWlgID0gJ3Jvb3QnIF0gJiYgWyAiJFNZU1JFRyIgPSAneWVzJyBdCnRoZW4gewogIGlmICEgWyAtZiAkc3lzY29uZmRpci93aW5lLnVzZXJyZWcgXQogIHRoZW4gewogICAgZWNobyAiTGlua2luZyByb290J3MgdXNlciByZWdpc3RyeSBoaXZlIHRvIHRoZSBnbG9iYWwgcmVnaXN0cnkuLi4iCiAgICBjcCB+Ly53aW5lL3dpbmUudXNlcnJlZyAkc3lzY29uZmRpci93aW5lLnVzZXJyZWcKICAgIGxuIC1zZiAkc3lzY29uZmRpci93aW5lLnVzZXJyZWcgfi8ud2luZS93aW5lLnVzZXJyZWcKICB9CiAgZmkKICBpZiAhIFsgLWYgJHN5c2NvbmZkaXIvd2luZS5zeXN0ZW1yZWcgXQogIHRoZW4gewogICAgZWNobyAiTGlua2luZyByb290J3Mgc3lzdGVtIHJlZ2lzdHJ5IGhpdmUgdG8gdGhlIGdsb2JhbCByZWdpc3RyeS4uLiIKICAgIGNwIH4vLndpbmUvc3lzdGVtLnJlZyAkc3lzY29uZmRpci93aW5lLnN5c3RlbXJlZwogICAgbG4gLXNmICRzeXNjb25mZGlyL3dpbmUuc3lzdGVtcmVnIH4vLndpbmUvc3lzdGVtLnJlZwogIH0KICBmaQp9CmZpCgojIGl0J3MgYSB3cmFwCmVjaG8KZWNobyAiSW5zdGFsbGF0aW9uIGNvbXBsZXRlIGZvciBub3cuIEdvb2QgbHVjayAodGhpcyBpcyBzdGlsbCBhbHBoYSBzb2Z0d2FyZSkuIgplY2hvICJJZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIFdJTkUsIHBsZWFzZSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIGZpcnN0LCIKZWNobyAiYXMgbWFueSBraW5kcyBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgYXJlIGV4cGxhaW5lZCB0aGVyZS4iCg==