Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEKLy8gCi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwovLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAovLwovLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgovLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgovLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAovLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwovLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8gQGZpbGUgICAgICAgPHNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmg+Ci8vLyBAYnJpZWYgICAgICBBcmNoaXRlY3R1cmUgZGVzY3JpcHRpb24gZmlsZQovLy8KCmBpZm5kZWYgU0NSMV9BUkNIX0RFU0NSSVBUSU9OX1NWSApgZGVmaW5lIFNDUjFfQVJDSF9ERVNDUklQVElPTl9TVkgKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDT1JFIEZVTkRBTUVOVEFMIFBBUkFNRVRFUlMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFNDUjEgY29yZSBpZGVudGlmaWVycwpgZGVmaW5lIFNDUjFfTUlNUElEICAgICAgICAgICAgIDMyJ2gyMTA1MTQwMApgZGVmaW5lIFNDUjFfTVZFTkRPUklEICAgICAgICAgIDMyJ2gwMDAwMDAwMAoKLy8gV2lkdGggb2YgbWFpbiByZWdpc3RlcnMgYW5kIGJ1c2VzCmBkZWZpbmUgU0NSMV9YTEVOICAgICAgICAgICAgICAgMzIKYGRlZmluZSBTQ1IxX0lNRU1fQVdJRFRIICAgICAgICBgU0NSMV9YTEVOCmBkZWZpbmUgU0NSMV9JTUVNX0RXSURUSCAgICAgICAgYFNDUjFfWExFTgpgZGVmaW5lIFNDUjFfRE1FTV9BV0lEVEggICAgICAgIGBTQ1IxX1hMRU4KYGRlZmluZSBTQ1IxX0RNRU1fRFdJRFRIICAgICAgICBgU0NSMV9YTEVOCgovLyBUQVAgSURDT0RFCmBkZWZpbmUgU0NSMV9UQVBfSURDT0RFICAgICAgICAgJ2hERUIxMTAwMQoKCmBpZmRlZiBTQ1IxX0FSQ0hfQ1VTVE9NCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIElOQ0xVREUgU0NSMV9BUkNIX0NVU1RPTS5TVkgKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFRoZSBleHRlcm5hbCBmaWxlIHNjcjFfYXJjaF9jdXN0b20uc3ZoIGlzIHVzZWQgZm9yIHRoZSBvcGVuIFNDUjEtU0RLIHByb2plY3QsCi8vIGFuZCBjYW4gYWxzbyBiZSB1c2VkIGZvciBhbnkgY3VzdG9tIHByb2plY3RzLgoKLy8gVGhlIGZpbGUgc2V0czoKLy8gLSB0YXJnZXQgcGxhdGZvcm0gKEZQR0EvQVNJQyksIHdoaWNoIGFmZmVjdHMgdGhlIGNob2ljZSBvZiBsb2dpY2FsIGNvbnN0cnVjdHM7Ci8vIC0gZGV2aWNlIGJ1aWxkIElEOwovLyAtIGFkZHJlc3MgY29uc3RhbnRzOwovLyAtIGNvdWxkIGVuYWJsZXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoKLy8gUG9zc2libGUgdGFyZ2V0czoKLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9JTlRFTCAgICAgICAgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBJbnRlbCBGUEdBcwovLyBgZGVmaW5lIFNDUjFfVFJHVF9GUEdBX0lOVEVMX01BWDEwICAgLy8gdGFyZ2V0IHBsYXRmb3JtIGlzIEludGVsIE1BWCAxMCBGUEdBcyAodXNlZCBpbiB0aGUgU0NSMS1TREsgcHJvamVjdCkKLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9JTlRFTF9BUlJJQVYgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBJbnRlbCBBcnJpYSBWIEZQR0FzICh1c2VkIGluIHRoZSBTQ1IxLVNESyBwcm9qZWN0KQovLyBgZGVmaW5lIFNDUjFfVFJHVF9GUEdBX1hJTElOWCAgICAgICAgLy8gdGFyZ2V0IHBsYXRmb3JtIGlzIFhpbGlueCBGUEdBcyAodXNlZCBpbiB0aGUgU0NSMS1TREsgcHJvamVjdCkKLy8gYGRlZmluZSBTQ1IxX1RSR1RfQVNJQyAgICAgICAgICAgICAgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBBU0lDCi8vIGBkZWZpbmUgU0NSMV9UUkdUX1NJTVVMQVRJT04gICAgICAgICAvLyB0YXJnZXQgaXMgc2ltdWxhdGlvbiAoZW5hYmxlIHNpbXVsYXRpb24gY29kZSkKCiBgaW5jbHVkZSAic2NyMV9hcmNoX2N1c3RvbS5zdmgiCgpgZW5kaWYgLy8gU0NSMV9BUkNIX0NVU1RPTQoKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFJFQ09NTUVOREVEIENPUkUgQVJDSElURUNUVVJFIENPTkZJR1VSQVRJT05TCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBVbmNvbW1lbnQgb25lIG9mIHRoZXNlIGRlZmluZXMgdG8gc2V0IHRoZSByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uOgoKYGRlZmluZSBTQ1IxX0NGR19SVjMySU1DX01BWAovL2BkZWZpbmUgU0NSMV9DRkdfUlYzMklDX0JBU0UKLy9gZGVmaW5lIFNDUjFfQ0ZHX1JWMzJFQ19NSU4KCi8vIElmIGFsbCBkZWZpbmVzIGFyZSBjb21tZW50ZWQsIGN1c3RvbSBjb25maWd1cmF0aW9uIHdpbGwgYmUgdXNlZCAoc2VlIGJlbG93KQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gUkVBRC1PTkxZOiBzZXR0aW5ncyBmb3IgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbnMKYGlmZGVmICBTQ1IxX0NGR19SVjMySU1DX01BWAogIGBkZWZpbmUgU0NSMV9SVklfRVhUCiAgYGRlZmluZSBTQ1IxX1JWTV9FWFQKICBgZGVmaW5lIFNDUjFfUlZDX0VYVAogIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPSAyNjsKICBgZGVmaW5lIFNDUjFfTVRWRUNfTU9ERV9FTiAgICAgICAgICAvLyBlbmFibGUgd3JpdGFibGUgTVRWRUMubW9kZSBmaWVsZCB0byBhbGxvdyB2ZWN0b3JlZCBpcnEgbW9kZSwgb3RoZXJ3aXNlIG9ubHkgZGlyZWN0IG1vZGUgaXMgcG9zc2libGUKLy8gIGBkZWZpbmUgU0NSMV9GQVNUX01VTCAgICAgICAgICAgICAgIC8vIGVuYWJsZSBmYXN0IG9uZS1jeWNsZSBtdWx0aXBsaWNhdGlvbiwgb3RoZXJ3aXNlIG11bHRpcGxpY2F0aW9uIHRha2VzIDMyIGN5Y2xlcwovL2BkZWZpbmUgU0NSMV9NUFJGX1JTVF9FTiAtIHlvc3lzIGZpeCwgdHdvIGRpbWVuc2lvbmFsIGFycmF5IGluaXQgbm90IGFsbG93ZWQKICBgZGVmaW5lIFNDUjFfTUNPVU5URU5fRU4gICAgICAgICAgICAvLyBlbmFibGUgY3VzdG9tIE1DT1VOVEVOIENTUiBmb3IgY291bnRlciBjb250cm9sCi8vYGRlZmluZSBTQ1IxX0RCR19FTiAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIERlYnVnIFN1YnN5c3RlbSAoVEFQQywgRE0sIFNDVSwgSERVKQovL2BkZWZpbmUgU0NSMV9URFVfRU4gICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBUcmlnZ2VyIERlYnVnIFVuaXQgKGhhcmR3YXJlIGJyZWFrcG9pbnRzKQovLyAgcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX1REVV9UUklHX05VTSA9IDQ7Ci8vIGBkZWZpbmUgU0NSMV9URFVfSUNPVU5UX0VOICAgICAgICAgIC8vIGVuYWJsZSBoYXJkd2FyZSB0cmlnZ2VycyBvbiBpbnN0cnVjdGlvbiBjb3VudGVyCiAgYGRlZmluZSBTQ1IxX0lQSUNfRU4gICAgICAgICAgICAgICAgLy8gZW5hYmxlIEludGVncmF0ZWQgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyCiAgYGRlZmluZSBTQ1IxX0lQSUNfU1lOQ19FTiAgICAgICAgICAgLy8gZW5hYmxlIElQSUMgc3luY2hyb25pemVyCi8vICBgZGVmaW5lIFNDUjFfVENNX0VOCiAgYGRlZmluZSBTQ1IxX05FV19QQ19SRUcgICAgICAgICAgICAgLy8gZW5hYmxlIHJlZ2lzdGVyIGluIElGVSBmb3IgTmV3X1BDIHZhbHVlCiAgYGRlZmluZSBTQ1JDMV9NUFJGX1NUQUdFICAgICAgICAgICAgLy8gZW5hYmxlZCByZWdpc3RlciBhdCBSZWFkIHBhdGggb2YgTVBSRgpgZWxzaWYgIFNDUjFfQ0ZHX1JWMzJJQ19CQVNFCiAgYGRlZmluZSBTQ1IxX1JWSV9FWFQKICBgZGVmaW5lIFNDUjFfUlZDX0VYVAogIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPSAxNjsKICBgZGVmaW5lIFNDUjFfTVRWRUNfTU9ERV9FTgogIGBkZWZpbmUgU0NSMV9OT19ERUNfU1RBR0UKICBgZGVmaW5lIFNDUjFfTVBSRl9SU1RfRU4KICBgZGVmaW5lIFNDUjFfTUNPVU5URU5fRU4KICBgZGVmaW5lIFNDUjFfREJHX0VOCiAgYGRlZmluZSBTQ1IxX1REVV9FTgogIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9URFVfVFJJR19OVU0gPSAyOwogIGBkZWZpbmUgU0NSMV9URFVfSUNPVU5UX0VOCiAgYGRlZmluZSBTQ1IxX0lQSUNfRU4KICBgZGVmaW5lIFNDUjFfSVBJQ19TWU5DX0VOCiAgYGRlZmluZSBTQ1IxX1RDTV9FTgpgZWxzaWYgIFNDUjFfQ0ZHX1JWMzJFQ19NSU4KICBgZGVmaW5lIFNDUjFfUlZFX0VYVAogIGBkZWZpbmUgU0NSMV9SVkNfRVhUCiAgcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX01UVkVDX0JBU0VfV1JfQklUUyA9IDA7CiAgYGRlZmluZSBTQ1IxX05PX0RFQ19TVEFHRQogIGBkZWZpbmUgU0NSMV9OT19FWEVfU1RBR0UKICBgZGVmaW5lIFNDUjFfVENNX0VOCgpgZWxzZSAvLyBiZWdpbiBjdXN0b20gY29uZmlndXJhdGlvbiBzZWN0aW9uCgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ1VTVE9NIENPUkUgQVJDSElURUNUVVJFIENPTkZJR1VSQVRJT04KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFRvIGZpbmUtdHVuZSBjdXN0b20gY29uZmlndXJhdGlvbiwgeW91IGNhbiBjaGFuZ2UgdGhlIHZhbHVlcyBpbiB0aGlzIHNlY3Rpb24uCi8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZWZpbmVzIG9mIHRoZSByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9ucyBhcmUgY29tbWVudGVkLAovLyBvdGhlcndpc2UgdGhpcyBzZWN0aW9uIHdpbGwgYmUgaW5hY3RpdmUuCgovLyBSSVNDLVYgSVNBIG9wdGlvbnMKLy9gZGVmaW5lIFNDUjFfUlZFX0VYVCAgICAgICAgICAgICAgICAvLyBlbmFibGUgUlYzMkUgYmFzZSBpbnRlZ2VyIGluc3RydWN0aW9uIHNldCwgb3RoZXJ3aXNlIFJWMzJJIHdpbGwgYmUgdXNlZApgZGVmaW5lIFNDUjFfUlZNX0VYVCAgICAgICAgICAgICAgICAvLyBlbmFibGUgc3RhbmRhcmQgZXh0ZW5zaW9uICJNIiBmb3IgaW50ZWdlciBoYXJkd2FyZSBtdWx0aXBsaWVyIGFuZCBkaXZpZGVyCmBkZWZpbmUgU0NSMV9SVkNfRVhUICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBzdGFuZGFyZCBleHRlbnNpb24gIkMiIGZvciBjb21wcmVzc2VkIGluc3RydWN0aW9ucwpwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfTVRWRUNfQkFTRV9XUl9CSVRTID0gMjY7ICAgIC8vIG51bWJlciBvZiB3cml0YWJsZSBoaWdoLW9yZGVyIGJpdHMgaW4gTVRWRUMuYmFzZSBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZWdhbCB2YWx1ZXMgYXJlIDAgdG8gMjYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZC1vbmx5IGJpdHMgYXJlIGhhcmR3aXJlZCB0byByZXNldCB2YWx1ZQpgZGVmaW5lIFNDUjFfTVRWRUNfTU9ERV9FTiAgICAgICAgICAvLyBlbmFibGUgd3JpdGFibGUgTVRWRUMubW9kZSBmaWVsZCB0byBhbGxvdyB2ZWN0b3JlZCBpcnEgbW9kZSwgb3RoZXJ3aXNlIG9ubHkgZGlyZWN0IG1vZGUgaXMgcG9zc2libGUKCmBpZm5kZWYgU0NSMV9SVkVfRVhUCiAgYGRlZmluZSBTQ1IxX1JWSV9FWFQgLy8gUlYzMkUgYmFzZSBpbnRlZ2VyIGluc3RydWN0aW9uIHNldCBpZiBTQ1IxX1JWRV9FWFQgaXMgbm90IGVuYWJsZWQKYGVuZGlmIC8vIH5TQ1IxX1JWRV9FWFQKCi8vIENvcmUgcGlwZWxpbmUgb3B0aW9ucyAocG93ZXItcGVyZm9ybWFuY2UtYXJlYSBvcHRpbWl6YXRpb24pCmBkZWZpbmUgU0NSMV9OT19ERUNfU1RBR0UgICAgICAgICAgIC8vIGRpc2FibGUgcmVnaXN0ZXIgYmV0d2VlbiBJRlUgYW5kIElEVQpgZGVmaW5lIFNDUjFfTk9fRVhFX1NUQUdFICAgICAgICAgICAvLyBkaXNhYmxlIHJlZ2lzdGVyIGJldHdlZW4gSURVIGFuZCBFWFUKYGRlZmluZSBTQ1IxX05FV19QQ19SRUcgICAgICAgICAgICAgLy8gZW5hYmxlIHJlZ2lzdGVyIGluIElGVSBmb3IgTmV3X1BDIHZhbHVlCmBkZWZpbmUgU0NSMV9GQVNUX01VTCAgICAgICAgICAgICAgIC8vIGVuYWJsZSBmYXN0IG9uZS1jeWNsZSBtdWx0aXBsaWNhdGlvbiwgb3RoZXJ3aXNlIG11bHRpcGxpY2F0aW9uIHRha2VzIDMyIGN5Y2xlcwpgZGVmaW5lIFNDUjFfQ0xLQ1RSTF9FTiAgICAgICAgICAgICAvLyBlbmFibGUgZ2xvYmFsIGNsb2NrIGdhdGluZwpgZGVmaW5lIFNDUjFfTVBSRl9SU1RfRU4gICAgICAgICAgICAvLyBlbmFibGUgcmVzZXQgZm9yIE1QUkYKYGRlZmluZSBTQ1IxX01DT1VOVEVOX0VOICAgICAgICAgICAgLy8gZW5hYmxlIGN1c3RvbSBNQ09VTlRFTiBDU1IgZm9yIGNvdW50ZXIgY29udHJvbAoKLy8gVW5jb3JlIG9wdGlvbnMKYGRlZmluZSBTQ1IxX0RCR19FTiAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIERlYnVnIFN1YnN5c3RlbSAoVEFQQywgRE0sIFNDVSwgSERVKQpgZGVmaW5lIFNDUjFfVERVX0VOICAgICAgICAgICAgICAgICAvLyBlbmFibGUgVHJpZ2dlciBEZWJ1ZyBVbml0IChoYXJkd2FyZSBicmVha3BvaW50cykKcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX1REVV9UUklHX05VTSA9IDI7ICAgLy8gbnVtYmVyIG9mIGhhcmR3YXJlIHRyaWdnZXJzCmBkZWZpbmUgU0NSMV9URFVfSUNPVU5UX0VOICAgICAgICAgIC8vIGVuYWJsZSBoYXJkd2FyZSB0cmlnZ2VycyBvbiBpbnN0cnVjdGlvbiBjb3VudGVyCmBkZWZpbmUgU0NSMV9JUElDX0VOICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBJbnRlZ3JhdGVkIFByb2dyYW1tYWJsZSBJbnRlcnJ1cHQgQ29udHJvbGxlcgpgZGVmaW5lIFNDUjFfSVBJQ19TWU5DX0VOICAgICAgICAgICAvLyBlbmFibGUgSVBJQyBzeW5jaHJvbml6ZXIKYGRlZmluZSBTQ1IxX1RDTV9FTiAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIFRpZ2h0bHktQ291cGxlZCBNZW1vcnkKCmBlbmRpZiAvLyBlbmQgY3VzdG9tIGNvbmZpZ3VyYXRpb24gc2VjdGlvbgoKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENPUkUgSU5URUdSQVRJT04gT1BUSU9OUwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gQnlwYXNzZXMgb24gQVhJL0FIQiBicmlkZ2UgSS9PCmBkZWZpbmUgU0NSMV9JTUVNX0FIQl9JTl9CUCAgICAgICAgIC8vIGJ5cGFzcyBpbnN0cnVjdGlvbiBtZW1vcnkgQUhCIGJyaWRnZSBpbnB1dCByZWdpc3RlcgpgZGVmaW5lIFNDUjFfSU1FTV9BSEJfT1VUX0JQICAgICAgICAvLyBieXBhc3MgaW5zdHJ1Y3Rpb24gbWVtb3J5IEFIQiBicmlkZ2Ugb3V0cHV0IHJlZ2lzdGVyCmBkZWZpbmUgU0NSMV9ETUVNX0FIQl9JTl9CUCAgICAgICAgIC8vIGJ5cGFzcyBkYXRhIG1lbW9yeSBBSEIgYnJpZGdlIGlucHV0IHJlZ2lzdGVyCmBkZWZpbmUgU0NSMV9ETUVNX0FIQl9PVVRfQlAgICAgICAgIC8vIGJ5cGFzcyBkYXRhIG1lbW9yeSBBSEIgYnJpZGdlIG91dHB1dCByZWdpc3RlcgpgZGVmaW5lIFNDUjFfSU1FTV9BWElfUkVRX0JQICAgICAgICAvLyBieXBhc3MgaW5zdHJ1Y3Rpb24gbWVtb3J5IEFYSSBicmlkZ2UgcmVxdWVzdCByZWdpc3RlcgpgZGVmaW5lIFNDUjFfSU1FTV9BWElfUkVTUF9CUCAgICAgICAvLyBieXBhc3MgaW5zdHJ1Y3Rpb24gbWVtb3J5IEFYSSBicmlkZ2UgcmVzcG9uc2UgcmVnaXN0ZXIKYGRlZmluZSBTQ1IxX0RNRU1fQVhJX1JFUV9CUCAgICAgICAgLy8gYnlwYXNzIGRhdGEgbWVtb3J5IEFYSSBicmlkZ2UgcmVxdWVzdCByZWdpc3RlcgpgZGVmaW5lIFNDUjFfRE1FTV9BWElfUkVTUF9CUCAgICAgICAvLyBieXBhc3MgZGF0YSBtZW1vcnkgQVhJIGJyaWRnZSByZXNwb25zZSByZWdpc3RlcgoKYGlmbmRlZiBTQ1IxX0FSQ0hfQ1VTVE9NCi8vIERlZmF1bHQgYWRkcmVzcyBjb25zdGFudHMgKGlmIHNjcjFfYXJjaF9jdXN0b20uc3ZoIGlzIG5vdCB1c2VkKQpwYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgU0NSMV9BUkNIX1JTVF9WRUNUT1IgICAgICAgID0gJ2gyMDA7ICAgICAgICAgICAgLy8gUmVzZXQgdmVjdG9yIHZhbHVlIChzdGFydCBhZGRyZXNzIGFmdGVyIHJlc2V0KQpwYXJhbWV0ZXIgYml0IFtgU0NSMV9YTEVOLTE6MF0gICAgICAgICAgU0NSMV9BUkNIX01UVkVDX0JBU0UgICAgICAgID0gJ2gxQzA7ICAgICAgICAgICAgLy8gTVRWRUMuYmFzZSBmaWVsZCByZXNldCB2YWx1ZSwgb3IgY29uc3RhbnQgdmFsdWUgZm9yIE1UVkVDLmJhc2UgYml0cyB0aGF0IGFyZSBoYXJkd2lyZWQKCnBhcmFtZXRlciBiaXQgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBTQ1IxX1RDTV9BRERSX01BU0sgICAgICAgICAgPSAnaEZGRkYwMDAwOyAgICAgICAvLyBUQ00gbWFzayBhbmQgc2l6ZTsgc2l6ZSBpbiBieXRlcyBpcyB0d28ncyBjb21wbGVtZW50IG9mIHRoZSBtYXNrIHZhbHVlCnBhcmFtZXRlciBiaXQgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICBTQ1IxX1RDTV9BRERSX1BBVFRFUk4gICAgICAgPSAnaDAwNDgwMDAwOyAgICAgICAvLyBUQ00gYWRkcmVzcyBtYXRjaCBwYXR0ZXJuCgpwYXJhbWV0ZXIgYml0IFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgU0NSMV9USU1FUl9BRERSX01BU0sgICAgICAgID0gJ2hGRkZGRkZFMDsgICAgICAgLy8gVGltZXIgbWFzawpwYXJhbWV0ZXIgYml0IFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgU0NSMV9USU1FUl9BRERSX1BBVFRFUk4gICAgID0gJ2gwMDQ5MDAwMDsgICAgICAgLy8gVGltZXIgYWRkcmVzcyBtYXRjaCBwYXR0ZXJuCgovLyBEZXZpY2UgYnVpbGQgSUQKIGBkZWZpbmUgU0NSMV9BUkNIX0JVSUxEX0lEICAgICAgICAgICAgIGBTQ1IxX01JTVBJRAoKYGVuZGlmIC8vIFNDUjFfQVJDSF9DVVNUT00KCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBUQVJHRVQtU1BFQ0lGSUMgT1BUSU9OUwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8gUkFNLWJhc2VkIE1QUkYgY2FuIGJlIHVzZWQgZm9yIEludGVsIEZQR0FzIG9ubHkKYGlmZGVmIFNDUjFfVFJHVF9GUEdBX0lOVEVMCiAgYGRlZmluZSBTQ1IxX01QUkZfUkFNICAgICAgICAgICAvLyBpbXBsZW1lbnRzIE1QUkYgd2l0aCBkZWRpY2F0ZWQgUkFNIGJsb2NrcwpgZW5kaWYKCi8vIEVYVV9TVEFHRV9CWVBBU1MgYW5kIE1QUkZfUlNUX0VOIG11c3QgYmUgZGlzYWJsZWQgZm9yIFJBTS1iYXNlZCBNUFJGCmBpZmRlZiBTQ1IxX01QUkZfUkFNCiAgYHVuZGVmICBTQ1IxX05PX0VYRV9TVEFHRQogIGB1bmRlZiAgU0NSMV9NUFJGX1JTVF9FTgpgZW5kaWYKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBTSU1VTEFUSU9OIE9QVElPTlMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vYGRlZmluZSBTQ1IxX1RSR1RfU0lNVUxBVElPTiAgICAgICAgICAgIC8vIGVuYWJsZSBzaW11bGF0aW9uIGNvZGUgKGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBieSByb290IG1ha2VmaWxlKQovL2BkZWZpbmUgU0NSMV9UUkFDRV9MT0dfRU4gICAgICAgICAgICAgICAvLyBlbmFibGUgdHJhY2Vsb2cKLy9gZGVmaW5lIFNDUjFfWFBST1BfRU4gICAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIFgtcHJvcGFnYXRpb24KCi8vIEFkZHJlc3NlcyB1c2VkIGluIHRlc3RiZW5jaApsb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9FWElUX0FERFIgICAgICA9IDMyJ2gwMDAwXzAwRjg7CmxvY2FscGFyYW0gW2BTQ1IxX1hMRU4tMTowXSAgICAgIFNDUjFfU0lNX1BSSU5UX0FERFIgICAgID0gMzInaEYwMDBfMDAwMDsKbG9jYWxwYXJhbSBbYFNDUjFfWExFTi0xOjBdICAgICAgU0NSMV9TSU1fRVhUX0lSUV9BRERSICAgPSAzMidoRjAwMF8wMTAwOwpsb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9TT0ZUX0lSUV9BRERSICA9IDMyJ2hGMDAwXzAyMDA7CgpgZW5kaWYgLy8gU0NSMV9BUkNIX0RFU0NSSVBUSU9OX1NWSAo=