Ly8vIENvcHlyaWdodCBieSBTeW50YWNvcmUgTExDIKkgMjAxNi0yMDIxLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscwovLy8gQGZpbGUgICAgICAgPHNjcjFfcGlwZV9oZHUuc3ZoPgovLy8gQGJyaWVmICAgICAgSEFSVCBEZWJ1ZyBVbml0IGRlZmluaXRpb25zIGZpbGUKLy8vCgpgaWZuZGVmIFNDUjFfSU5DTFVERV9IRFVfREVGUwpgZGVmaW5lIFNDUjFfSU5DTFVERV9IRFVfREVGUwoKYGluY2x1ZGUgInNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmgiCmBpbmNsdWRlICJzY3IxX2Nzci5zdmgiCgpgaWZkZWYgU0NSMV9NTVVfRU4KIGBkZWZpbmUgU0NSMV9IRFVfRkVBVFVSRV9NUFJWRU4KYGVuZGlmIC8vIFNDUjFfTU1VX0VOCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBQYXJhbWV0ZXJzCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfREVCVUdDU1JfQkFTRV9BRERSICAgICAgPSAxMidoN0IwOwpsb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1NQQU4gICAgICA9IDQ7IC8vIFlPU1lTIEZJWApsb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRIICAgICA9ICRjbG9nMihTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1NQQU4pOwpsb2NhbHBhcmFtIGJpdCBbMzowXSAgICBTQ1IxX0hEVV9ERUJVR0NTUl9EQ1NSX1hERUJVR1ZFUiA9IDQnaDQ7CmxvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX1BCVUZfQUREUl9TUEFOICAgICAgICAgID0gODsKbG9jYWxwYXJhbSBpbnQgdW5zaWduZWQgU0NSMV9IRFVfUEJVRl9BRERSX1dJRFRIICAgICAgICAgPSAkY2xvZzIoU0NSMV9IRFVfUEJVRl9BRERSX1NQQU4pOwpsb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0hEVV9EQVRBX1JFR19XSURUSCAgICAgICAgICA9IDMyOwpsb2NhbHBhcmFtIGludCB1bnNpZ25lZCBTQ1IxX0hEVV9DT1JFX0lOU1RSX1dJRFRIICAgICAgICA9IDMyOwoKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIFR5cGVzCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgovLyBIQVJUIERlYnVnIFN0YXRlczoKdHlwZWRlZiBlbnVtIGxvZ2ljIFsxOjBdIHsKICAgIFNDUjFfSERVX0RCR1NUQVRFX1JFU0VUICAgICAgICAgPSAyJ2IwMCwKICAgIFNDUjFfSERVX0RCR1NUQVRFX1JVTiAgICAgICAgICAgPSAyJ2IwMSwKICAgIFNDUjFfSERVX0RCR1NUQVRFX0RIQUxURUQgICAgICAgPSAyJ2IxMCwKICAgIFNDUjFfSERVX0RCR1NUQVRFX0RSVU4gICAgICAgICAgPSAyJ2IxMQpgaWZkZWYgU0NSMV9YUFJPUF9FTgogICAgLAogICAgU0NSMV9IRFVfREJHU1RBVEVfWFhYICAgICAgICAgICA9ICdYCmBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCn0gdHlwZV9zY3IxX2hkdV9kYmdzdGF0ZXNfZTsKCnR5cGVkZWYgZW51bSBsb2dpYyBbMTowXSB7CiAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfSURMRSAgICAgICAgICA9IDInYjAwLAogICAgU0NSMV9IRFVfUEJVRlNUQVRFX0ZFVENIICAgICAgICAgPSAyJ2IwMSwKICAgIFNDUjFfSERVX1BCVUZTVEFURV9FWENJTkpFQ1QgICAgID0gMidiMTAsCiAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfV0FJVDRFTkQgICAgICA9IDInYjExCmBpZmRlZiBTQ1IxX1hQUk9QX0VOCiAgICAsCiAgICBTQ1IxX0hEVV9QQlVGU1RBVEVfWFhYICAgICAgICAgICA9ICdYCmBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCn0gdHlwZV9zY3IxX2hkdV9wYnVmc3RhdGVzX2U7Cgp0eXBlZGVmIGVudW0gbG9naWMgewogICAgU0NSMV9IRFVfSEFSVENNRF9SRVNVTUUgICAgICAgICA9IDEnYjAsCiAgICBTQ1IxX0hEVV9IQVJUQ01EX0hBTFQgICAgICAgICAgID0gMSdiMQpgaWZkZWYgU0NSMV9YUFJPUF9FTgogICAgLAogICAgU0NSMV9IRFVfSEFSVENNRF9YWFggICAgICAgICAgICA9IDEnYlgKYGVuZGlmIC8vIFNDUjFfWFBST1BfRU4KfSB0eXBlX3NjcjFfaGR1X2hhcnRfY29tbWFuZF9lOwoKdHlwZWRlZiBlbnVtIGxvZ2ljIHsKICAgIFNDUjFfSERVX0ZFVENIX1NSQ19OT1JNQUwgICAgICAgPSAxJ2IwLAogICAgU0NSMV9IRFVfRkVUQ0hfU1JDX1BCVUYgICAgICAgICA9IDEnYjEKYGlmZGVmIFNDUjFfWFBST1BfRU4KICAgICwKICAgIFNDUjFfSERVX0ZFVENIX1NSQ19YWFggICAgICAgICAgPSAxJ2JYCmBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCn0gdHlwZV9zY3IxX2hkdV9mZXRjaF9zcmNfZTsKCnR5cGVkZWYgc3RydWN0IHBhY2tlZCB7CiAgICAvL2xvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X247CiAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ7CiAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYnJlYWs7CiAgICB0eXBlX3NjcjFfaGR1X2RiZ3N0YXRlc19lICAgICAgICAgICBkYmdfc3RhdGU7Cn0gdHlwZV9zY3IxX2hkdV9oYXJ0c3RhdHVzX3M7CgovLyBEZWJ1ZyBNb2RlIFJlZGlyZWN0aW9uIGNvbnRyb2w6CnR5cGVkZWYgc3RydWN0IHBhY2tlZCB7CiAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc3RlcDsgICAgICAgICAgLy8gU2luZ2xlIFN0ZXAKICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVicmVhazsgICAgICAgICAvLyBSZWRpcmVjdGlvbiBhZnRlciBFQlJFQUsgZXhlY3V0aW9uCn0gdHlwZV9zY3IxX2hkdV9yZWRpcmVjdF9zOwoKdHlwZWRlZiBzdHJ1Y3QgcGFja2VkIHsKICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycV9kc2JsOwogICAgdHlwZV9zY3IxX2hkdV9mZXRjaF9zcmNfZSAgICAgICAgICAgZmV0Y2hfc3JjOwogICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNfYWR2bXRfZHNibDsKICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3YnJrcHRfZHNibDsKICAgIHR5cGVfc2NyMV9oZHVfcmVkaXJlY3RfcyAgICAgICAgICAgIHJlZGlyZWN0Owp9IHR5cGVfc2NyMV9oZHVfcnVuY3RybF9zOwoKLy8gSEFSVCBIYWx0IFN0YXR1czoKdHlwZWRlZiBlbnVtIGxvZ2ljIFsyOjBdIHsKICAgIFNDUjFfSERVX0hBTFRDQVVTRV9OT05FICAgICAgICAgPSAzJ2IwMDAsCiAgICBTQ1IxX0hEVV9IQUxUQ0FVU0VfRUJSRUFLICAgICAgID0gMydiMDAxLAogICAgU0NSMV9IRFVfSEFMVENBVVNFX1RNUkVRICAgICAgICA9IDMnYjAxMCwKICAgIFNDUjFfSERVX0hBTFRDQVVTRV9ETVJFUSAgICAgICAgPSAzJ2IwMTEsCiAgICBTQ1IxX0hEVV9IQUxUQ0FVU0VfU1NURVAgICAgICAgID0gMydiMTAwLAogICAgU0NSMV9IRFVfSEFMVENBVVNFX1JTVEVYSVQgICAgICA9IDMnYjEwMQpgaWZkZWYgU0NSMV9YUFJPUF9FTgogICAgLAogICAgU0NSMV9IRFVfSEFMVENBVVNFX1hYWCAgICAgICAgICA9ICdYCmBlbmRpZiAvLyBTQ1IxX1hQUk9QX0VOCn0gdHlwZV9zY3IxX2hkdV9oYWx0Y2F1c2VfZTsKCnR5cGVkZWYgc3RydWN0IHBhY2tlZCB7CiAgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ7CiAgICB0eXBlX3NjcjFfaGR1X2hhbHRjYXVzZV9lICAgICAgICAgICBjYXVzZTsKfSB0eXBlX3NjcjFfaGR1X2hhbHRzdGF0dXNfczsKCgovLyBEZWJ1ZyBDU1IgbWFwCmxvY2FscGFyYW0gU0NSMV9IRFVfREJHQ1NSX09GRlNfRENTUiAgICAgICA9IFNDUjFfSERVX0RFQlVHQ1NSX0FERFJfV0lEVEgnKCAnZDAgKTsKbG9jYWxwYXJhbSBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EUEMgICAgICAgID0gU0NSMV9IRFVfREVCVUdDU1JfQUREUl9XSURUSCcoICdkMSApOwpsb2NhbHBhcmFtIFNDUjFfSERVX0RCR0NTUl9PRkZTX0RTQ1JBVENIMCAgPSBTQ1IxX0hEVV9ERUJVR0NTUl9BRERSX1dJRFRIJyggJ2QyICk7CmxvY2FscGFyYW0gU0NSMV9IRFVfREJHQ1NSX09GRlNfRFNDUkFUQ0gxICA9IFNDUjFfSERVX0RFQlVHQ1NSX0FERFJfV0lEVEgnKCAnZDMgKTsKCmxvY2FscGFyYW0gYml0IFtTQ1IxX0NTUl9BRERSX1dJRFRILTE6MF0gU0NSMV9IRFVfREJHQ1NSX0FERFJfRENTUiAgICAgID0gU0NSMV9DU1JfQUREUl9IRFVfTUJBU0UgKyBTQ1IxX0hEVV9EQkdDU1JfT0ZGU19EQ1NSOwpsb2NhbHBhcmFtIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfSERVX0RCR0NTUl9BRERSX0RQQyAgICAgICA9IFNDUjFfQ1NSX0FERFJfSERVX01CQVNFICsgU0NSMV9IRFVfREJHQ1NSX09GRlNfRFBDOwpsb2NhbHBhcmFtIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfSERVX0RCR0NTUl9BRERSX0RTQ1JBVENIMCA9IFNDUjFfQ1NSX0FERFJfSERVX01CQVNFICsgU0NSMV9IRFVfREJHQ1NSX09GRlNfRFNDUkFUQ0gwOwpsb2NhbHBhcmFtIGJpdCBbU0NSMV9DU1JfQUREUl9XSURUSC0xOjBdIFNDUjFfSERVX0RCR0NTUl9BRERSX0RTQ1JBVENIMSA9IFNDUjFfQ1NSX0FERFJfSERVX01CQVNFICsgU0NSMV9IRFVfREJHQ1NSX09GRlNfRFNDUkFUQ0gxOwoKLy8gRGVidWcgQ1NScyA6OiBEQ1NSCnR5cGVkZWYgZW51bSBpbnQgewogICAgU0NSMV9IRFVfRENTUl9QUlZfQklUX1IgICAgICAgICA9IDAsCiAgICBTQ1IxX0hEVV9EQ1NSX1BSVl9CSVRfTCAgICAgICAgID0gMSwKICAgIFNDUjFfSERVX0RDU1JfU1RFUF9CSVQgICAgICAgICAgPSAyLAogICAgU0NSMV9IRFVfRENTUl9SU1JWMF9CSVRfUiAgICAgICA9IDMsCiAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYwX0JJVF9MICAgICAgID0gNSwKICAgIFNDUjFfSERVX0RDU1JfQ0FVU0VfQklUX1IgICAgICAgPSA2LAogICAgU0NSMV9IRFVfRENTUl9DQVVTRV9CSVRfTCAgICAgICA9IDgsCiAgICBTQ1IxX0hEVV9EQ1NSX1JTUlYxX0JJVF9SICAgICAgID0gOSwKICAgIFNDUjFfSERVX0RDU1JfUlNSVjFfQklUX0wgICAgICAgPSAxMCwKICAgIFNDUjFfSERVX0RDU1JfU1RFUElFX0JJVCAgICAgICAgPSAxMSwKICAgIFNDUjFfSERVX0RDU1JfUlNSVjJfQklUX1IgICAgICAgPSAxMiwKICAgIFNDUjFfSERVX0RDU1JfUlNSVjJfQklUX0wgICAgICAgPSAxNCwKICAgIFNDUjFfSERVX0RDU1JfRUJSRUFLTV9CSVQgICAgICAgPSAxNSwKICAgIFNDUjFfSERVX0RDU1JfUlNSVjNfQklUX1IgICAgICAgPSAxNiwKICAgIFNDUjFfSERVX0RDU1JfUlNSVjNfQklUX0wgICAgICAgPSAyNywKICAgIFNDUjFfSERVX0RDU1JfWERFQlVHVkVSX0JJVF9SICAgPSAyOCwKICAgIFNDUjFfSERVX0RDU1JfWERFQlVHVkVSX0JJVF9MICAgPSAzMQp9IHR5cGVfc2NyMV9oZHVfZGNzcl9iaXRzX2U7CgovL2xvY2FscGFyYW0gaW50IHVuc2lnbmVkIFNDUjFfSERVX0RFQlVHQ1NSX0RDU1JfUFJWX1dJRFRIID0gU0NSMV9IRFVfRENTUl9QUlZfQklUX0wtU0NSMV9IRFVfRENTUl9QUlZfQklUX1IrMTsKCnR5cGVkZWYgc3RydWN0IHBhY2tlZCB7CiAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9YREVCVUdWRVJfQklUX0wtU0NSMV9IRFVfRENTUl9YREVCVUdWRVJfQklUX1I6MF0gICB4ZGVidWd2ZXI7CiAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9SU1JWM19CSVRfTC1TQ1IxX0hEVV9EQ1NSX1JTUlYzX0JJVF9SOjBdICAgICAgICAgICByc3J2MzsKICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVicmVha207CiAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9SU1JWMl9CSVRfTC1TQ1IxX0hEVV9EQ1NSX1JTUlYyX0JJVF9SOjBdICAgICAgICAgICByc3J2MjsKICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBpZTsKICAgIGxvZ2ljIFtTQ1IxX0hEVV9EQ1NSX1JTUlYxX0JJVF9MLVNDUjFfSERVX0RDU1JfUlNSVjFfQklUX1I6MF0gICAgICAgICAgIHJzcnYxOwogICAgbG9naWMgW1NDUjFfSERVX0RDU1JfQ0FVU0VfQklUX0wtU0NSMV9IRFVfRENTUl9DQVVTRV9CSVRfUjowXSAgICAgICAgICAgY2F1c2U7CiAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9SU1JWMF9CSVRfTC1TQ1IxX0hEVV9EQ1NSX1JTUlYwX0JJVF9SOjBdICAgICAgICAgICByc3J2MDsKICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA7CiAgICBsb2dpYyBbU0NSMV9IRFVfRENTUl9QUlZfQklUX0wtU0NSMV9IRFVfRENTUl9QUlZfQklUX1I6MF0gICAgICAgICAgICAgICBwcnY7Cn0gdHlwZV9zY3IxX2hkdV9kY3NyX3M7CgoKYGVuZGlmIC8vIFNDUjFfSU5DTFVERV9IRFVfREVGUwo=