LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIKkgMjAxNSBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQoqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQoqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQoqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCiogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCiogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCiogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCiogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KKiBPRiBUSEVTRSBURVJNUy4NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQpWZXJzaW9uIENvbnRyb2wgSW5mb3JtYXRpb24gKFBlcmZvcmNlKQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQokUmV2aXNpb246ICMxICQgDQokRGF0ZVRpbWU6IDIwMTYvMDkvMjIgMDg6MDM6NDkgJCANCiRBdXRob3I6IHByYW1hbnMgJA0KTGFzdCBDaGFuZ2U6CVVwZGF0ZWQgZm9yIHRhYnMNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKiBAZmlsZSBwY3IuaA0KKiBcYnJpZWYgUG93ZXIsIENsb2NrcywgYW5kIFJlc2V0cyBIZWFkZXIgZmlsZQ0KKiBcYXV0aG9yIGp2YXNhbnRoDQoqIA0KKiBUaGlzIGZpbGUgaXMgdGhlIFBDUiBoZWFkZXIgZmlsZSAgDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCi8qKiBAZGVmZ3JvdXAgUENSDQogKiAgQHsNCiAqLw0KDQojaWZuZGVmIF9QQ1JfSA0KI2RlZmluZSBfUENSX0gNCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqICBQQ1IgUmVnaXN0ZXIgSURTIA0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQplbnVtIF9QQ1JfUkVHU0VUX0lEXw0Kew0KCVBDUl9SRUdfU1lTVEVNX1NMRUVQX0NUUkwgPSAwLAkNCiAgUENSX1JFR19QUk9DRVNTT1JfQ0xLX0NUUkwsCQ0KCVBDUl9SRUdfU0xPV19DTEtfQ1RSTCwNCglQQ1JfUkVHX09TQ0lMTEFUT1JfSUQsDQoJUENSX1JFR19QV1JfUkVTRVRfU1RTLA0KCVBDUl9SRUdfUFdSX1JFU0VUX0NUUkwsDQoJUENSX1JFR19TWVNURU1fUkVTRVQsDQoJUENSX1RFU1QwLA0KCVBDUl9URVNUMSwNCglQQ1JfUkVHX0VDX1NMRUVQX0VOQUJMRV8wID0gMTIsDQoJUENSX1JFR19FQ19TTEVFUF9FTkFCTEVfMSwNCglQQ1JfUkVHX0VDX1NMRUVQX0VOQUJMRV8yLA0KCVBDUl9SRUdfRUNfU0xFRVBfRU5BQkxFXzMsCQ0KCVBDUl9SRUdfRUNfU0xFRVBfRU5BQkxFXzQsCQ0KCVBDUl9SRUdfRUNfQ0xLX1JFUURfU1RTXzAgPSAyMCwNCglQQ1JfUkVHX0VDX0NMS19SRVFEX1NUU18xLA0KCVBDUl9SRUdfRUNfQ0xLX1JFUURfU1RTXzIsDQoJUENSX1JFR19FQ19DTEtfUkVRRF9TVFNfMywNCglQQ1JfUkVHX0VDX0NMS19SRVFEX1NUU180LA0KCVBDUl9SRUdfRUNfUkVTRVRfRU5BQkxFXzAgPSAyOCwNCglQQ1JfUkVHX0VDX1JFU0VUX0VOQUJMRV8xLA0KCVBDUl9SRUdfRUNfUkVTRVRfRU5BQkxFXzIsDQoJUENSX1JFR19FQ19SRVNFVF9FTkFCTEVfMywNCglQQ1JfUkVHX0VDX1JFU0VUX0VOQUJMRV80LA0KCQ0KfTsNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCg0KLy8gRW5jb2RlIHRoZSBSZWdpc3RlciBpZHMgZm9yIFNsZWVwIEVuYWJsZSwgQ2xvY2sgUmVxdWlyZWQsIFJlc2V0IEVuYWJsZQ0KLy9QQ1IgcmVnaXN0ZXIgZ3JvdXAgMCAtIEVDIDANCiNkZWZpbmUgUENSMF9SRUdTX0VDCQkoKCh1aW50MzJfdCkoUENSX1JFR19FQ19TTEVFUF9FTkFCTEVfMCkgJiAweEZGKSArIFwNCgkJCQkJCQkoKCh1aW50MzJfdCkoUENSX1JFR19FQ19DTEtfUkVRRF9TVFNfMCkgJiAweEZGKTw8OHUpICsgXA0KCQkJCQkJCSgoKHVpbnQzMl90KShQQ1JfUkVHX0VDX1JFU0VUX0VOQUJMRV8wKSAmIDB4RkYpPDwxNnUpKQ0KDQovL1BDUiByZWdpc3RlciBncm91cCAxIC0gRUMgMQ0KI2RlZmluZSBQQ1IxX1JFR1NfRUMJCSgoKHVpbnQzMl90KShQQ1JfUkVHX0VDX1NMRUVQX0VOQUJMRV8xKSAmIDB4RkYpICsgXA0KCQkJCQkJCSgoKHVpbnQzMl90KShQQ1JfUkVHX0VDX0NMS19SRVFEX1NUU18xKSAmIDB4RkYpPDw4dSkgKyBcDQoJCQkJCQkJKCgodWludDMyX3QpKFBDUl9SRUdfRUNfUkVTRVRfRU5BQkxFXzEpICYgMHhGRik8PDE2dSkpDQoNCi8vUENSIHJlZ2lzdGVyIGdyb3VwIDIgLSBFQyAyDQojZGVmaW5lIFBDUjJfUkVHU19FQwkJKCgodWludDMyX3QpKFBDUl9SRUdfRUNfU0xFRVBfRU5BQkxFXzIpICYgMHhGRikgKyBcDQoJCQkJCQkJKCgodWludDMyX3QpKFBDUl9SRUdfRUNfQ0xLX1JFUURfU1RTXzIpICYgMHhGRik8PDh1KSArIFwNCgkJCQkJCQkoKCh1aW50MzJfdCkoUENSX1JFR19FQ19SRVNFVF9FTkFCTEVfMikgJiAweEZGKTw8MTZ1KSkNCg0KLy9QQ1IgcmVnaXN0ZXIgZ3JvdXAgMyAtIEVDIDMNCiNkZWZpbmUgUENSM19SRUdTX0VDCQkoKCh1aW50MzJfdCkoUENSX1JFR19FQ19TTEVFUF9FTkFCTEVfMykgJiAweEZGKSArIFwNCgkJCQkJCQkoKCh1aW50MzJfdCkoUENSX1JFR19FQ19DTEtfUkVRRF9TVFNfMykgJiAweEZGKTw8OHUpICsgXA0KCQkJCQkJCSgoKHVpbnQzMl90KShQQ1JfUkVHX0VDX1JFU0VUX0VOQUJMRV8zKSAmIDB4RkYpPDwxNnUpKQ0KCQkJCQkJCQ0KLy9QQ1IgcmVnaXN0ZXIgZ3JvdXAgNCAtIEVDIDQNCiNkZWZpbmUgUENSNF9SRUdTX0VDCQkoKCh1aW50MzJfdCkoUENSX1JFR19FQ19TTEVFUF9FTkFCTEVfNCkgJiAweEZGKSArIFwNCgkJCQkJCQkoKCh1aW50MzJfdCkoUENSX1JFR19FQ19DTEtfUkVRRF9TVFNfNCkgJiAweEZGKTw8OHUpICsgXA0KCQkJCQkJCSgoKHVpbnQzMl90KShQQ1JfUkVHX0VDX1JFU0VUX0VOQUJMRV80KSAmIDB4RkYpPDwxNnUpKQ0KCQkJCQkJCQkJCQkJCQ0KLy9QQ1IwX0VDIC0+IFNMRUVQX0VOQUJMRSwgQ0xLIFJFUUQgU1RTLCBSRVNFVF9FTkFCTEUgQml0IFBvc2l0aW9ucw0KI2RlZmluZSBQQ1IwX0VDX0pUQUdfU1RBUF9CSVRQT1MgICAgICgwdSkNCiNkZWZpbmUgUENSMF9FQ19FRlVTRV9CSVRQT1MgICAgICAgICAoMXUpDQojZGVmaW5lIFBDUjBfRUNfSVNQSV9CSVRQT1MgICAgICAgICAgKDJ1KQ0KDQovL1BDUjFfRUMgLT4gU0xFRVBfRU5BQkxFLCBDTEsgUkVRRCBTVFMsIFJFU0VUX0VOQUJMRSBCaXQgUG9zaXRpb25zDQojZGVmaW5lIFBDUjFfRUNfSU5UX0JJVFBPUyAgICAgICAgICAgKDB1KQ0KI2RlZmluZSBQQ1IxX0VDX1BFQ0lfQklUUE9TICAgICAgICAgICgxdSkNCiNkZWZpbmUgUENSMV9FQ19UQUNIMF9CSVRQT1MgICAgICAgICAoMnUpDQojZGVmaW5lIFBDUjFfRUNfUFdNMF9CSVRQT1MgICAgICAgICAgKDR1KQ0KI2RlZmluZSBQQ1IxX0VDX1BNQ19CSVRQT1MgICAgICAgICAgICg1dSkNCiNkZWZpbmUgUENSMV9FQ19ETUFfQklUUE9TICAgICAgICAgICAoNnUpDQojZGVmaW5lIFBDUjFfRUNfVEZEUF9CSVRQT1MgICAgICAgICAgKDd1KQ0KI2RlZmluZSBQQ1IxX0VDX0NQVV9CSVRQT1MgICAgICAgICAgICg4dSkNCiNkZWZpbmUgUENSMV9FQ19XRFRfQklUUE9TICAgICAgICAgICAoOXUpDQojZGVmaW5lIFBDUjFfRUNfU01CMF9CSVRQT1MgICAgICAgICAgKDEwdSkNCiNkZWZpbmUgUENSMV9FQ19UQUNIMV9CSVRQT1MgICAgICAgICAoMTF1KQ0KI2RlZmluZSBQQ1IxX0VDX1RBQ0gyX0JJVFBPUyAgICAgICAgICgxMnUpDQojZGVmaW5lIFBDUjFfRUNfUFdNMV9CSVRQT1MgICAgICAgICAgKDIwdSkNCiNkZWZpbmUgUENSMV9FQ19QV00yX0JJVFBPUyAgICAgICAgICAoMjF1KQ0KI2RlZmluZSBQQ1IxX0VDX1BXTTNfQklUUE9TICAgICAgICAgICgyMnUpDQojZGVmaW5lIFBDUjFfRUNfUFdNNF9CSVRQT1MgICAgICAgICAgKDIzdSkNCiNkZWZpbmUgUENSMV9FQ19QV001X0JJVFBPUyAgICAgICAgICAoMjR1KQ0KI2RlZmluZSBQQ1IxX0VDX1BXTTZfQklUUE9TICAgICAgICAgICgyNXUpDQojZGVmaW5lIFBDUjFfRUNfUFdNN19CSVRQT1MgICAgICAgICAgKDI2dSkNCiNkZWZpbmUgUENSMV9FQ19QV004X0JJVFBPUyAgICAgICAgICAoMjd1KQ0KI2RlZmluZSBQQ1IxX0VDX1JFR19CSVRQT1MgICAgICAgICAgICgyOXUpDQojZGVmaW5lIFBDUjFfRUNfQlRJTUVSMF9CSVRQT1MgICAgICAgKDMwdSkNCiNkZWZpbmUgUENSMV9FQ19CVElNRVIxX0JJVFBPUyAgICAgICAoMzF1KQ0KDQovL1BDUjJfRUMgLT4gU0xFRVBfRU5BQkxFLCBDTEsgUkVRRCBTVFMsIFJFU0VUX0VOQUJMRSBCaXQgUG9zaXRpb25zDQojZGVmaW5lIFBDUjJfRUNfTFBDX0JJVFBPUyAgICAgIAkJICAoMHUpDQojZGVmaW5lIFBDUjJfRUNfVUFSVDBfQklUUE9TICAgIAkJICAoMXUpDQojZGVmaW5lIFBDUjJfRUNfVUFSVDFfQklUUE9TICAgIAkJICAoMnUpDQojZGVmaW5lIFBDUjJfRUNfR0xCTF9DRkdfQklUUE9TIAkJICAoMTJ1KQ0KI2RlZmluZSBQQ1IyX0VDX0FDUElfRUMwX0JJVFBPUyAJCSAgKDEzdSkNCiNkZWZpbmUgUENSMl9FQ19BQ1BJX0VDMV9CSVRQT1MgCQkgICgxNHUpDQojZGVmaW5lIFBDUjJfRUNfQUNQSV9QTTFfQklUUE9TIAkJICAoMTV1KQ0KI2RlZmluZSBQQ1IyX0VDXzgwNDJFTV9CSVRQT1MJICAJCSAgKDE2dSkNCiNkZWZpbmUgUENSMl9FQ19NQk9YX0JJVFBPUyAJICAJCSAgKDE3dSkNCiNkZWZpbmUgUENSMl9FQ19SVENfQklUUE9TICAgICAgCQkgICgxOHUpDQojZGVmaW5lIFBDUjJfRUNfRVNQSV9CSVRQT1MgCSAgCQkgICgxOXUpDQojZGVmaW5lIFBDUjJfRUNfQUNQSV9FQ18yX0JJVFBPUyAJCSAgKDIxdSkNCiNkZWZpbmUgUENSMl9FQ19BQ1BJX0VDXzNfQklUUE9TIAkJICAoMjJ1KQ0KI2RlZmluZSBQQ1IyX0VDX0FDUElfRUNfQklUUE9TIAkJICAgICgyM3UpDQojZGVmaW5lIFBDUjJfRUNfUE9SVDgwXzBfQklUUE9TIAkJICAoMjV1KQ0KI2RlZmluZSBQQ1IyX0VDX1BPUlQ4MF8xX0JJVFBPUyAJCSAgKDI2dSkNCg0KLy9QQ1IzX0VDIC0+IFNMRUVQX0VOQUJMRSwgQ0xLIFJFUUQgU1RTLCBSRVNFVF9FTkFCTEUgQml0IFBvc2l0aW9ucw0KI2RlZmluZSBQQ1IzX0VDX0FEQ19CSVRQT1MgICAgICAJCSAgICgzdSkNCiNkZWZpbmUgUENSM19FQ19QUzJfMF9CSVRQT1MgICAgCQkgICAoNXUpDQojZGVmaW5lIFBDUjNfRUNfUFMyXzFfQklUUE9TICAgIAkJICAgKDZ1KQ0KI2RlZmluZSBQQ1IzX0VDX1BTMl8yX0JJVFBPUyAgICAJCSAgICg3dSkNCiNkZWZpbmUgUENSM19FQ19TUEkwX0JJVFBPUyAgICAgCQkgICAoOXUpDQojZGVmaW5lIFBDUjNfRUNfSFRJTUVSX0JJVFBPUyAgIAkJICAgKDEwdSkNCiNkZWZpbmUgUENSM19FQ19LRVlTQ0FOX0JJVFBPUyAgCQkgICAoMTF1KQ0KI2RlZmluZSBQQ1IzX0VDX1JQTV9QV01fQklUUE9TICAJCSAgICgxMnUpDQojZGVmaW5lIFBDUjNfRUNfU01CMV9CSVRQT1MgICAgIAkJICAgKDEzdSkNCiNkZWZpbmUgUENSM19FQ19TTUIyX0JJVFBPUyAgICAgCQkgICAoMTR1KQ0KI2RlZmluZSBQQ1IzX0VDX1NNQjNfQklUUE9TICAgICAJCSAgICgxNXUpDQojZGVmaW5lIFBDUjNfRUNfTEVEMF9CSVRQT1MgICAgIAkJICAgKDE2dSkNCiNkZWZpbmUgUENSM19FQ19MRUQxX0JJVFBPUyAgICAgCQkgICAoMTd1KQ0KI2RlZmluZSBQQ1IzX0VDX0xFRDJfQklUUE9TICAgICAJCSAgICgxOHUpDQojZGVmaW5lIFBDUjNfRUNfQkNNX0JJVFBPUyAgICAgIAkJICAgKDE5dSkNCiNkZWZpbmUgUENSM19FQ19TUEkxX0JJVFBPUyAgICAgCQkgICAoMjB1KQ0KI2RlZmluZSBQQ1IzX0VDX0JUSU1FUjJfQklUUE9TICAJCSAgICgyMXUpDQojZGVmaW5lIFBDUjNfRUNfQlRJTUVSM19CSVRQT1MgIAkJICAgKDIydSkNCiNkZWZpbmUgUENSM19FQ19CVElNRVI0X0JJVFBPUyAgCQkgICAoMjN1KQ0KI2RlZmluZSBQQ1IzX0VDX0JUSU1FUjVfQklUUE9TICAJCSAgICgyNHUpDQojZGVmaW5lIFBDUjNfRUNfTEVEM19CSVRQT1MgICAgIAkJICAgKDI1dSkNCiNkZWZpbmUgUENSM19FQ19QS0VfQklUUE9TICAgICAJCSAgICAgKDI2dSkNCiNkZWZpbmUgUENSM19FQ19STkdfQklUUE9TICAgICAJCSAgICAgKDI3dSkNCiNkZWZpbmUgUENSM19FQ19BRVNfQklUUE9TICAgICAJCSAgICAgKDI4dSkNCiNkZWZpbmUgUENSM19FQ19IVElNRVJfMV9CSVRQT1MgCQkgICAoMjl1KQ0KI2RlZmluZSBQQ1IzX0VDX0NfQ19USU1FUl9CSVRQT1MJCSAgICgzMHUpDQojZGVmaW5lIFBDUjNfRUNfUFdNOV9CSVRQT1MgICAgICAgICAgICAoMzF1KQ0KDQoNCi8vUENSNF9FQyAtPiBTTEVFUF9FTkFCTEUsIENMSyBSRVFEIFNUUywgUkVTRVRfRU5BQkxFIEJpdCBQb3NpdGlvbnMNCiNkZWZpbmUgUENSNF9FQ19QV00xMF9CSVRQT1MgICAgICAJCSAoMHUpDQojZGVmaW5lIFBDUjRfRUNfUFdNMTFfQklUUE9TICAgICAgCQkgKDF1KQ0KI2RlZmluZSBQQ1I0X0VDX0NUSU1FUjBfQklUUE9TICAgCQkgICAoMnUpDQojZGVmaW5lIFBDUjRfRUNfQ1RJTUVSMV9CSVRQT1MgICAJCSAgICgzdSkNCiNkZWZpbmUgUENSNF9FQ19DVElNRVIyX0JJVFBPUyAgIAkJICAgKDR1KQ0KI2RlZmluZSBQQ1I0X0VDX0NUSU1FUjNfQklUUE9TICAgCQkgICAoNXUpDQojZGVmaW5lIFBDUjRfRUNfUlRPU19USU1FUl9CSVRQT1MgCQkgKDZ1KQ0KI2RlZmluZSBQQ1I0X0VDX1JQTTJfUFdNX0JJVFBPUyAJCSAgICg3dSkNCiNkZWZpbmUgUENSNF9FQ19RTVNQSV9CSVRQT1MgIAkJICAgICAoOHUpDQojZGVmaW5lIFBDUjRfRUNfQkNNXzFfQklUUE9TICAgIAkJICAgKDl1KQ0KI2RlZmluZSBQQ1I0X0VDX1JDX0lEMF9CSVRQT1MgIAkJICAgICAoMTB1KQ0KI2RlZmluZSBQQ1I0X0VDX1JDX0lEMV9CSVRQT1MgIAkJICAgICAoMTF1KQ0KI2RlZmluZSBQQ1I0X0VDX1JDX0lEMl9CSVRQT1MgIAkJICAgICAoMTJ1KQ0KI2RlZmluZSBQQ1I0X0VDX1BST0NIT1RfQklUUE9TICAJCSAgICgxM3UpDQojZGVmaW5lIFBDUjRfRUNfRUVQUk9NX0JJVFBPUyAgCQkgICAgICgxNHUpDQojZGVmaW5lIFBDUjRfRUNfQ1VTVF9MT0dfQklUUE9TICAJCSAgICgxNXUpDQoNCg0KLyoNCiAqICBuID0gYls3OjBdICAgPSBQQ1IgUmVnIEJpdCBQb3NpdGlvbg0KICogIG0gPSBiWzMxOjhdICA9IFBDUnggUmVncyBJRHMNCiAqLw0KLy8jZGVmaW5lIFBDUnhfUkVHU19CSVQobSxuKSAoKCgodWludDMyX3QpKG0pJjB4RkZGRkZGdWwpPDw4dSkgKyAoKHVpbnQzMl90KShuKSYweEZGdWwpKSANCg0KLy9QQ1J4X1JFR1NfQklUIHBvc2l0aW9ucyAJCQkJCQkJCQkJCQkJDQojZGVmaW5lCVBDUnhfUkVHU19QT1NfU0xFRVBfRU5BQkxFCQkJCSg4dSkNCiNkZWZpbmUJUENSeF9SRUdTX1BPU19DTEtfUkVRRF9TVFMJCQkJKDE2dSkNCiNkZWZpbmUJUENSeF9SRUdTX1BPU19SRVNFVF9FTkFCTEUJCQkJKDI0dSkJCQkJCQkJCQkJCQkJDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKiAgUENSIEJsb2NrIElEUy4gDQogKiBUaGVzZSBJRHMgYXJlIHVzZWQgdG8gZGlyZWN0bHkgcmVmZXIgdG8gYSBibG9jayANCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHlwZWRlZiBlbnVtIHsNCglQQ1JfSlRBRwkJCT0gKCgodWludDMyX3QpKFBDUjBfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjBfRUNfSlRBR19TVEFQX0JJVFBPUyAmIDB4RkZ1KSksDQoJUENSX0VGVVNFCQkJPSAoKCh1aW50MzJfdCkoUENSMF9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMF9FQ19FRlVTRV9CSVRQT1MgJiAweEZGdSkpLA0KICBQQ1JfSVNQSQkJCT0gKCgodWludDMyX3QpKFBDUjBfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjBfRUNfSVNQSV9CSVRQT1MgJiAweEZGdSkpLA0KCQ0KCVBDUl9JTlQJCQkJPSAoKCh1aW50MzJfdCkoUENSMV9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMV9FQ19JTlRfQklUUE9TICYgMHhGRnUpKSwgIAkNCglQQ1JfUEVDSQkJCT0gKCgodWludDMyX3QpKFBDUjFfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjFfRUNfUEVDSV9CSVRQT1MgJiAweEZGdSkpLCAJDQoJUENSX1RBQ0gwCQkJPSAoKCh1aW50MzJfdCkoUENSMV9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMV9FQ19UQUNIMF9CSVRQT1MgJiAweEZGdSkpLCAJDQoJUENSX1BXTTAJCQk9ICgoKHVpbnQzMl90KShQQ1IxX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IxX0VDX1BXTTBfQklUUE9TICYgMHhGRnUpKSwgIAkNCglQQ1JfUE1DCQkJCT0gKCgodWludDMyX3QpKFBDUjFfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjFfRUNfUE1DX0JJVFBPUyAmIDB4RkZ1KSksICAgCQ0KCVBDUl9ETUEJCQkJPSAoKCh1aW50MzJfdCkoUENSMV9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMV9FQ19ETUFfQklUUE9TICYgMHhGRnUpKSwgIAkNCglQQ1JfVEZEUAkJCT0gKCgodWludDMyX3QpKFBDUjFfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjFfRUNfVEZEUF9CSVRQT1MgJiAweEZGdSkpLCAgCQ0KCVBDUl9DUFUJCQkJPSAoKCh1aW50MzJfdCkoUENSMV9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMV9FQ19DUFVfQklUUE9TICYgMHhGRnUpKSwgICAJDQoJUENSX1dEVAkJCQk9ICgoKHVpbnQzMl90KShQQ1IxX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IxX0VDX1dEVF9CSVRQT1MgJiAweEZGdSkpLCAgIAkNCglQQ1JfU01CMAkJCT0gKCgodWludDMyX3QpKFBDUjFfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjFfRUNfU01CMF9CSVRQT1MgJiAweEZGdSkpLCAJDQoJUENSX1RBQ0gxCQkJPSAoKCh1aW50MzJfdCkoUENSMV9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMV9FQ19UQUNIMV9CSVRQT1MgJiAweEZGdSkpLA0KCVBDUl9UQUNIMgkJCT0gKCgodWludDMyX3QpKFBDUjFfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjFfRUNfVEFDSDJfQklUUE9TICYgMHhGRnUpKSwgCQ0KCVBDUl9QV00xCQkJPSAoKCh1aW50MzJfdCkoUENSMV9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMV9FQ19QV00xX0JJVFBPUyAmIDB4RkZ1KSksICAJDQoJUENSX1BXTTIJCQk9ICgoKHVpbnQzMl90KShQQ1IxX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IxX0VDX1BXTTJfQklUUE9TICYgMHhGRnUpKSwgIAkNCglQQ1JfUFdNMwkJCT0gKCgodWludDMyX3QpKFBDUjFfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjFfRUNfUFdNM19CSVRQT1MgJiAweEZGdSkpLCAgCQ0KCVBDUl9QV000CQkJPSAoKCh1aW50MzJfdCkoUENSMV9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMV9FQ19QV000X0JJVFBPUyAmIDB4RkZ1KSksICAJDQoJUENSX1BXTTUJCQk9ICgoKHVpbnQzMl90KShQQ1IxX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IxX0VDX1BXTTVfQklUUE9TICYgMHhGRnUpKSwgIAkNCglQQ1JfUFdNNgkJCT0gKCgodWludDMyX3QpKFBDUjFfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjFfRUNfUFdNNl9CSVRQT1MgJiAweEZGdSkpLCAgCQ0KCVBDUl9QV003CQkJPSAoKCh1aW50MzJfdCkoUENSMV9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMV9FQ19QV003X0JJVFBPUyAmIDB4RkZ1KSksICAJDQoJUENSX1BXTTgJCQk9ICgoKHVpbnQzMl90KShQQ1IxX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IxX0VDX1BXTThfQklUUE9TICYgMHhGRnUpKSwgIAkNCglQQ1JfUkVHCQkJCT0gKCgodWludDMyX3QpKFBDUjFfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjFfRUNfUkVHX0JJVFBPUyAmIDB4RkZ1KSksICAgCQ0KCVBDUl9CVElNRVIwCQk9ICgoKHVpbnQzMl90KShQQ1IxX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IxX0VDX0JUSU1FUjBfQklUUE9TICYgMHhGRnUpKSwJDQoJUENSX0JUSU1FUjEJCT0gKCgodWludDMyX3QpKFBDUjFfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjFfRUNfQlRJTUVSMV9CSVRQT1MgJiAweEZGdSkpLAkNCgkNCglQQ1JfTFBDCQkJCT0gKCgodWludDMyX3QpKFBDUjJfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjJfRUNfTFBDX0JJVFBPUyAmIDB4RkZ1KSksDQoJUENSX1VBUlQwCQkJPSAoKCh1aW50MzJfdCkoUENSMl9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMl9FQ19VQVJUMF9CSVRQT1MgJiAweEZGdSkpLA0KCVBDUl9VQVJUMQkJCT0gKCgodWludDMyX3QpKFBDUjJfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjJfRUNfVUFSVDFfQklUUE9TICYgMHhGRnUpKSwNCglQQ1JfR0xCTF9DRkcJPSAoKCh1aW50MzJfdCkoUENSMl9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMl9FQ19HTEJMX0NGR19CSVRQT1MgJiAweEZGdSkpLA0KCVBDUl9BQ1BJX0VDMAk9ICgoKHVpbnQzMl90KShQQ1IyX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IyX0VDX0FDUElfRUMwX0JJVFBPUyAmIDB4RkZ1KSksDQoJUENSX0FDUElfRUMxCT0gKCgodWludDMyX3QpKFBDUjJfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjJfRUNfQUNQSV9FQzFfQklUUE9TICYgMHhGRnUpKSwNCglQQ1JfQUNQSV9QTTEJPSAoKCh1aW50MzJfdCkoUENSMl9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMl9FQ19BQ1BJX1BNMV9CSVRQT1MgJiAweEZGdSkpLA0KCVBDUl84MDQyRU0JCT0gKCgodWludDMyX3QpKFBDUjJfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjJfRUNfODA0MkVNX0JJVFBPUyAmIDB4RkZ1KSksDQoJUENSX01CT1ggIAkJPSAoKCh1aW50MzJfdCkoUENSMl9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMl9FQ19NQk9YX0JJVFBPUyAmIDB4RkZ1KSksDQoJUENSX1JUQwkJCQk9ICgoKHVpbnQzMl90KShQQ1IyX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IyX0VDX1JUQ19CSVRQT1MgJiAweEZGdSkpLA0KCVBDUl9FU1BJCQkJPSAoKCh1aW50MzJfdCkoUENSMl9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSMl9FQ19FU1BJX0JJVFBPUyAmIDB4RkZ1KSksDQoJUENSX0FDUElfRUMyCT0gKCgodWludDMyX3QpKFBDUjJfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjJfRUNfQUNQSV9FQ18yX0JJVFBPUyAmIDB4RkZ1KSksDQoJUENSX0FDUElfRUMzCT0gKCgodWludDMyX3QpKFBDUjJfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjJfRUNfQUNQSV9FQ18zX0JJVFBPUyAmIDB4RkZ1KSksDQoJUENSX0FDUElfRUMJICA9ICgoKHVpbnQzMl90KShQQ1IyX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IyX0VDX0FDUElfRUNfQklUUE9TICYgMHhGRnUpKSwNCglQQ1JfUE9SVDgwXzAgID0gKCgodWludDMyX3QpKFBDUjJfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjJfRUNfUE9SVDgwXzBfQklUUE9TICYgMHhGRnUpKSwNCglQQ1JfUE9SVDgwXzEgID0gKCgodWludDMyX3QpKFBDUjJfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjJfRUNfUE9SVDgwXzFfQklUUE9TICYgMHhGRnUpKSwNCgkJDQoJUENSX0FEQwkJCQk9ICgoKHVpbnQzMl90KShQQ1IzX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IzX0VDX0FEQ19CSVRQT1MgJiAweEZGdSkpLA0KCVBDUl9QUzJfMAkJCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfUFMyXzBfQklUUE9TICYgMHhGRnUpKSwgICAgCQ0KCVBDUl9QUzJfMQkJCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfUFMyXzFfQklUUE9TICYgMHhGRnUpKSwgICAgCQ0KCVBDUl9QUzJfMgkJCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfUFMyXzJfQklUUE9TICYgMHhGRnUpKSwgICAgCQkNCglQQ1JfU1BJMAkJCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfU1BJMF9CSVRQT1MgJiAweEZGdSkpLCAgICAgCQ0KCVBDUl9IVElNRVIJCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfSFRJTUVSX0JJVFBPUyAmIDB4RkZ1KSksICAgICAgCQ0KCVBDUl9LRVlTQ0FOCQk9ICgoKHVpbnQzMl90KShQQ1IzX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IzX0VDX0tFWVNDQU5fQklUUE9TICYgMHhGRnUpKSwgICAgICAJDQoJUENSX1JQTV9QV00JCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfUlBNX1BXTV9CSVRQT1MgJiAweEZGdSkpLCAgICAgIAkNCglQQ1JfU01CMQkJCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfU01CMV9CSVRQT1MgJiAweEZGdSkpLCAgICAgCQ0KCVBDUl9TTUIyCQkJPSAoKCh1aW50MzJfdCkoUENSM19SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSM19FQ19TTUIyX0JJVFBPUyAmIDB4RkZ1KSksICAgIAkNCglQQ1JfU01CMwkJCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfU01CM19CSVRQT1MgJiAweEZGdSkpLCAgICAgCQ0KCVBDUl9MRUQwCQkJPSAoKCh1aW50MzJfdCkoUENSM19SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSM19FQ19MRUQwX0JJVFBPUyAmIDB4RkZ1KSksICAgICAJDQoJUENSX0xFRDEJCQk9ICgoKHVpbnQzMl90KShQQ1IzX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IzX0VDX0xFRDFfQklUUE9TICYgMHhGRnUpKSwgICAgIAkNCglQQ1JfTEVEMgkJCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfTEVEMl9CSVRQT1MgJiAweEZGdSkpLCAgICAgCQ0KCVBDUl9CQ00JCQkJPSAoKCh1aW50MzJfdCkoUENSM19SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSM19FQ19CQ01fQklUUE9TICYgMHhGRnUpKSwgICANCglQQ1JfU1BJMQkJCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfU1BJMV9CSVRQT1MgJiAweEZGdSkpLCAgICAgCQ0KCVBDUl9CVElNRVIyCQk9ICgoKHVpbnQzMl90KShQQ1IzX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IzX0VDX0JUSU1FUjJfQklUUE9TICYgMHhGRnUpKSwgICAJDQoJUENSX0JUSU1FUjMJCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfQlRJTUVSM19CSVRQT1MgJiAweEZGdSkpLCAgIAkNCglQQ1JfQlRJTUVSNAkJPSAoKCh1aW50MzJfdCkoUENSM19SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSM19FQ19CVElNRVI0X0JJVFBPUyAmIDB4RkZ1KSksICAgCQ0KCVBDUl9CVElNRVI1CQk9ICgoKHVpbnQzMl90KShQQ1IzX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IzX0VDX0JUSU1FUjVfQklUUE9TICYgMHhGRnUpKSwgICAJDQoJUENSX0xFRDMJCQk9ICgoKHVpbnQzMl90KShQQ1IzX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IzX0VDX0xFRDNfQklUUE9TICYgMHhGRnUpKSwJDQoJUENSX1BLRSAJCQk9ICgoKHVpbnQzMl90KShQQ1IzX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IzX0VDX1BLRV9CSVRQT1MgJiAweEZGdSkpLAkNCglQQ1JfUk5HIAkJCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfUk5HX0JJVFBPUyAmIDB4RkZ1KSksCQ0KCVBDUl9BRVMgCQkJPSAoKCh1aW50MzJfdCkoUENSM19SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSM19FQ19BRVNfQklUUE9TICYgMHhGRnUpKSwJDQoJUENSX0hUSU1FUl8xCT0gKCgodWludDMyX3QpKFBDUjNfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjNfRUNfSFRJTUVSXzFfQklUUE9TICYgMHhGRnUpKSwgICAgICAJDQoJUENSX0NfQ19USU1FUgk9ICgoKHVpbnQzMl90KShQQ1IzX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IzX0VDX0NfQ19USU1FUl9CSVRQT1MgJiAweEZGdSkpLCAgICAgIAkNCglQQ1JfUFdNOSAgCQk9ICgoKHVpbnQzMl90KShQQ1IzX1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1IzX0VDX1BXTTlfQklUUE9TICYgMHhGRnUpKSwNCgkNCiAgUENSX1BXTTEwICAJCT0gKCgodWludDMyX3QpKFBDUjRfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjRfRUNfUFdNMTBfQklUUE9TICYgMHhGRnUpKSwgICAgICAJCQ0KCVBDUl9QV00xMSAgCQk9ICgoKHVpbnQzMl90KShQQ1I0X1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1I0X0VDX1BXTTExX0JJVFBPUyAmIDB4RkZ1KSksICAgICAgCQkNCglQQ1JfQ1RJTUVSMCAJPSAoKCh1aW50MzJfdCkoUENSNF9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSNF9FQ19DVElNRVIwX0JJVFBPUyAmIDB4RkZ1KSksICAgICAgCQkNCglQQ1JfQ1RJTUVSMSAJPSAoKCh1aW50MzJfdCkoUENSNF9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSNF9FQ19DVElNRVIxX0JJVFBPUyAmIDB4RkZ1KSksIA0KCVBDUl9DVElNRVIyIAk9ICgoKHVpbnQzMl90KShQQ1I0X1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1I0X0VDX0NUSU1FUjJfQklUUE9TICYgMHhGRnUpKSwgDQoJUENSX0NUSU1FUjMgCT0gKCgodWludDMyX3QpKFBDUjRfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjRfRUNfQ1RJTUVSM19CSVRQT1MgJiAweEZGdSkpLCANCglQQ1JfUlRPU19USU1FUiA9ICgoKHVpbnQzMl90KShQQ1I0X1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1I0X0VDX1JUT1NfVElNRVJfQklUUE9TICYgMHhGRnUpKSwgDQoJUENSX1JQTTJfUFdNCT0gKCgodWludDMyX3QpKFBDUjRfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjRfRUNfUlBNMl9QV01fQklUUE9TICYgMHhGRnUpKSwgICAgICAJDQoJUENSX1FNU1BJCSAgICA9ICgoKHVpbnQzMl90KShQQ1I0X1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1I0X0VDX1FNU1BJX0JJVFBPUyAmIDB4RkZ1KSksICAgICAgCQ0KCVBDUl9CQ00xICAgIAk9ICgoKHVpbnQzMl90KShQQ1I0X1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1I0X0VDX0JDTV8xX0JJVFBPUyAmIDB4RkZ1KSksICAgICAgCQ0KCVBDUl9SQ0lEMCAgICAJPSAoKCh1aW50MzJfdCkoUENSNF9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSNF9FQ19SQ19JRDBfQklUUE9TICYgMHhGRnUpKSwgICAgICAJDQoJUENSX1JDSUQxICAgIAk9ICgoKHVpbnQzMl90KShQQ1I0X1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1I0X0VDX1JDX0lEMV9CSVRQT1MgJiAweEZGdSkpLCAgICAgIAkNCglQQ1JfUkNJRDIgICAgCT0gKCgodWludDMyX3QpKFBDUjRfUkVHU19FQykgPDwgOCkgKyAodWludDMyX3QpKFBDUjRfRUNfUkNfSUQyX0JJVFBPUyAmIDB4RkZ1KSksICAgICAgCQ0KCVBDUl9QUk9DSE9UICAJPSAoKCh1aW50MzJfdCkoUENSNF9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSNF9FQ19QUk9DSE9UX0JJVFBPUyAmIDB4RkZ1KSksICAgICAgCQ0KCVBDUl9FRVBST00gICAJPSAoKCh1aW50MzJfdCkoUENSNF9SRUdTX0VDKSA8PCA4KSArICh1aW50MzJfdCkoUENSNF9FQ19FRVBST01fQklUUE9TICYgMHhGRnUpKSwgICAgICAJDQoJUENSX0NVU1RfTE9HIAk9ICgoKHVpbnQzMl90KShQQ1I0X1JFR1NfRUMpIDw8IDgpICsgKHVpbnQzMl90KShQQ1I0X0VDX0NVU1RfTE9HX0JJVFBPUyAmIDB4RkZ1KSksICAgICAgCQ0KfSBQQ1JfQkxLX0lEOw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiogIFBDUiBQcm9jZXNzb3IgQ2xLIERpdmlkZSBWYWx1ZXMgDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmVudW0gUFJPQ0VTU09SX0NMS19ESVZJREVfVkFMVUUNCnsNCglQQ1JfQ1BVX0NMS19ESVZJREVfMSA9IDEsDQoJUENSX0NQVV9DTEtfRElWSURFXzIgPSAyLA0KCVBDUl9DUFVfQ0xLX0RJVklERV8zID0gMywNCglQQ1JfQ1BVX0NMS19ESVZJREVfNCA9IDQsDQoJUENSX0NQVV9DTEtfRElWSURFXzE2ID0gMTYsDQoJUENSX0NQVV9DTEtfRElWSURFXzQ4ID0gNDgJDQp9Ow0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqICBTeXN0ZW0gU2xlZXAgTW9kZXMgDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmVudW0gU1lTVEVNX1NMRUVQX01PREVTDQp7DQoJU1lTVEVNX0xJR0hUX1NMRUVQID0gMCwJDQoJU1lTVEVNX0hFQVZZX1NMRUVQID0gMSwNCglTWVNURU1fU0xFRVBfQUxMID0gNA0KfTsNCg0KLyogQml0bWFzayBmb3IgUG93ZXIgUmVzZXQgU3RhdHVzIFJlZ2lzdGVyICovDQojZGVmaW5lIFBDUl9QV1JfUkVTRVRfU1RTX1ZDQ19QV1JHRF9SRVNFVF9TVFNfQklUTUFTSwkoMVVMPDwyKQ0KI2RlZmluZSBQQ1JfUFdSX1JFU0VUX1NUU19IT1NUX1JFU0VUX1NUU19CSVRNQVNLCQkJKDFVTDw8MykNCiNkZWZpbmUgUENSX1BXUl9SRVNFVF9TVFNfVkJBVF9SRVNFVF9TVFNfQklUTUFTSwkJCSgxVUw8PDUpDQojZGVmaW5lIFBDUl9QV1JfUkVTRVRfU1RTX1ZUUl9SRVNFVF9TVFNfQklUTUFTSwkJCSAgKDFVTDw8NikNCiNkZWZpbmUgUENSX1BXUl9SRVNFVF9TVFNfSlRBR19SRVNFVF9TVFNfQklUTUFTSwkJICAoMVVMPDw3KQ0KI2RlZmluZSBQQ1JfUFdSX1JFU0VUX1NUU18zMktfQUNUSVZFX1NUU19CSVRNQVNLCQkJKDFVTDw8MTApDQojZGVmaW5lIFBDUl9QV1JfUkVTRVRfU1RTX1BDSUNMS19BQ1RJVkVfU1RTX0JJVE1BU0sJCSgxVUw8PDExKQ0KI2RlZmluZSBQQ1JfUFdSX1JFU0VUX1NUU19FU1BJQ0xLX0FDVElWRV9TVFNfQklUTUFTSwkJKDFVTDw8MTIpDQoNCi8qIEJpdG1hc2sgZm9yIFByb2Nlc3NvciBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovDQojZGVmaW5lIFBDUl9PU0NJTExBVE9SX0xPQ0tfU1RBVFVTX0JJVE1BU0sJCQkJCSgxVUw8PDgpDQoNCi8qIEJpdG1hc2sgZm9yIFBvd2VyIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8NCiNkZWZpbmUgUENSX1BXUl9SRVNFVF9DVFJMX1BXUl9JTlZfQklUTUFTSyAgICAgICAgICAgICAgICgxVUw8PDApDQojZGVmaW5lIFBDUl9QV1JfUkVTRVRfQ1RSTF9IT1NUX1JTVF9TRUxFQ1RfQklUTUFTSyAgICAgICAoMVVMPDw4KQ0KDQovKiBCaXRtYXNrIGZvciBPU2NpbGxhdG9yIElEIHJlZ2lzdGVyICovDQojZGVmaW5lIFBDUl9PU0NJTExBVE9SX0lEX0ZPVU5EQVJZX0JJVE1BU0sgICAgICAgICAgKDNVTDw8NSkNCiNkZWZpbmUgUENSX09TQ0lMTEFUT1JfSURfUkVWSVNJT05fQklUTUFTSyAgICAgICAgICAoMHhGVUwpDQoNCiNkZWZpbmUgUENSX09TQ0lMTEFUT1JfSURfRk9VTkRBUllfQ0hBUlRfVFNNQyAgICAgICAgKDBVTCkNCiNkZWZpbmUgUENSX09TQ0lMTEFUT1JfSURfRk9VTkRBUllfVFNNQyAgICAgICAgICAgICAgKDB4MTB1KQ0KI2RlZmluZSBQQ1JfT1NDSUxMQVRPUl9JRF9GT1VOREFSWV9DSEFSVCAgICAgICAgICAgICAoMHgyMHUpDQojZGVmaW5lIFBDUl9PU0NJTExBVE9SX0lEX0ZPVU5EQVJZX0dSQUNFICAgICAgICAgICAgICgweDMwdSkNCg0KLyogQml0bWFzayBmb3IgUEtFIENsb2NrIHJlZ2lzdGVyICovDQojZGVmaW5lIFBDUl9QS0VfQ0xPQ0tfUkVHX1BLRV9DTEtfQklUTUFTSyAgICAgICAgICgxVUw8PDEpDQojZGVmaW5lIFBDUl9QS0VfQ0xPQ0tfUkVHX0FVVE9fU1dJVENIX0JJVE1BU0sgICAgICgxVUw8PDApDQoNCiNkZWZpbmUgUENSX1BLRV9DTE9DS19SRUdfUEtFX0NMS180OE1IWiAgICAgICAgICAgKDFVTDw8MSkNCiNkZWZpbmUgUENSX1BLRV9DTE9DS19SRUdfUEtFX0NMS185Nk1IWiAgICAgICAgICAgKDBVTDw8MCkNCiNkZWZpbmUgUENSX1BLRV9DTE9DS19SRUdfQVVUT19TV0lUQ0hfRU4gICAgICAgICAgKDFVTDw8MCkNCiNkZWZpbmUgUENSX1BLRV9DTE9DS19SRUdfQVVUT19TV0lUQ0hfRElTICAgICAgICAgKDBVTDw8MCkNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyogIEFQSSAtIEZ1bmN0aW9ucyB0byBwcm9ncmFtIFNsZWVwIEVuYWJsZSwgQ0xLIFJlcWQgU3RhdHVzLCAgICAgICAgICAgICAqDQogKiAgUmVzZXQgRW5hYmxlIGZvciBhIGJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCiAvKiogU2V0cyBvciBDbGVhcnMgYmxvY2sgc3BlY2lmaWMgYml0IGluIFBDUiBTbGVlcCBFbmFibGUgUmVnaXN0ZXINCiAqIEBwYXJhbSBwY3JfYmxvY2tfaWQgLSBwY3IgYmxvY2sgaWQgZW5jb2RlZCB1c2luZyBQQ1J4X1JFR1NfQklUIA0KICogQHBhcmFtIHNldF9jbHJfZmxhZyAtIEZsYWcgdG8gc2V0ICgxKSBvciBjbGVhciAoMCkgYml0IGluIHRoZSBQQ1IgU2xlZXAgRW5hYmxlIFJlZ2lzdGVyDQogKi8NCnZvaWQgcGNyX3NsZWVwX2VuYWJsZSh1aW50MzJfdCBwY3JfYmxvY2tfaWQsIHVpbnQ4X3Qgc2V0X2Nscl9mbGFnKTsNCg0KLyoqIEdldCBDbG9jayBSZXF1aXJlZCBTdGF0dXMgZm9yIHRoZSBibG9jaw0KICogQHBhcmFtIHBjcl9ibG9ja19pZCAtIHBjciBibG9jayBpZCBlbmNvZGVkIHVzaW5nIFBDUnhfUkVHU19CSVQgDQogKiBAcmV0dXJuIHVpbnQ4X3QgLSAxIGlmIENsb2NrIFJlcXVpcmVkIFN0YXR1cyBzZXQsIGVsc2UgMA0KICovDQp1aW50OF90IHBjcl9jbG9ja19yZXFkX3N0YXR1c19nZXQodWludDMyX3QgcGNyX2Jsb2NrX2lkKTsNCg0KLyoqIFNldHMgb3IgQ2xlYXJzIFJlc2V0IEVuYWJsZSByZWdpc3RlciBiaXQgZm9yIHRoZSBibG9jaw0KICogQHBhcmFtIHBjcl9ibG9ja19pZCAtIHBjciBibG9jayBpZCBlbmNvZGVkIHVzaW5nIFBDUnhfUkVHU19CSVQgDQogKiBAcGFyYW0gc2V0X2Nscl9mbGFnIC0gRmxhZyB0byBzZXQgKDEpIG9yIGNsZWFyICgwKSBiaXQgaW4gdGhlIFBDUiBSZXNldCBFbmFibGUgUmVnaXN0ZXINCiAqLw0Kdm9pZCBwY3JfcmVzZXRfZW5hYmxlKHVpbnQzMl90IHBjcl9ibG9ja19pZCwgdWludDhfdCBzZXRfY2xyX2ZsYWcpOw0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiAgQVBJIC0gICBGdW5jdGlvbnMgZm9yIGVudGVyaW5nIGxvdyBwb3dlciBtb2RlcyAgICAgICAgICAgICAgICAgICAgICAgICovDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiogSW5zdHJ1Y3RzIGFsbCBibG9ja3MgdG8gc2xlZXAgYnkgc2V0dGluZyB0aGUgU2xlZXAgRW5hYmxlIGJpdHMgKi8NCnZvaWQgcGNyX2FsbF9ibG9ja3Nfc2xlZXAodm9pZCk7DQoNCi8qKiBDbGVhcnMgdGhlIFNsZWVwIEVuYWJsZSBiaXRzIGZvciBhbGwgYmxvY2tzICovDQp2b2lkIHBjcl9hbGxfYmxvY2tzX3dha2Uodm9pZCk7DQoNCi8qKiBQcm9ncmFtcyByZXF1aXJlZCBzbGVlcCBtb2RlIGluIFN5c3RlbSBTbGVlcCBDb250cm9sIFJlZ2lzdGVyDQogKiBAcGFyYW0gc2xlZXBfbW9kZSAtIHNlZSBlbnVtIFNZU1RFTV9TTEVFUF9NT0RFUw0KICovDQp2b2lkIHBjcl9zeXN0ZW1fc2xlZXAodWludDhfdCBzbGVlcF9tb2RlKTsNCg0KLyoqIFJlYWRzIHRoZSB2YWx1ZSBvZiBQb3dlciBSZXNldCBzdGF0dXMgcmVnaXN0ZXINCiAqIEBwYXJhbSBub25lDQogKiBAcmV0dXJuIFBvd2VyIFN0YXR1cyBSZWcgdmFsdWUNCiAqLw0KdWludDE2X3QgcGNyX3Bvd2VyX3Jlc2V0X3N0YXR1c19yZWFkKHZvaWQpOw0KDQovKiogUmVhZHMgdGhlIHZhbHVlIG9mIFBvd2VyIFJlc2V0IGNvbnRyb2wgcmVnaXN0ZXINCiAqIEBwYXJhbSBub25lDQogKiBAcmV0dXJuIFBvd2VyIHJlc2V0IGNvbnRyb2wgUmVnIHZhbHVlDQogKi8NCnVpbnQxNl90IHBjcl9wb3dlcl9yZXNldF9jdHJsX3JlYWQodm9pZCk7DQoNCi8qKiBTZXRzIHRoZSB2YWx1ZSBvZiBQV1JfSU5WIGJpdCB0byAxIG9yIDANCiogQHBhcmFtIHNldF9jbHI6IDEgb3IgMA0KICogQHJldHVybiBub25lDQogKi8NCnZvaWQgcGNyX3B3cl9yZXNldF9jdHJsX3B3cl9pbnZfc2V0X2Nscih1aW50OF90IHNldF9jbHIpOw0KDQovKiogU2V0cyB0aGUgdmFsdWUgb2YgSE9TVF9SRVNFVCBiaXQgdG8gMSBvciAwDQoqIEBwYXJhbSBzZXRfY2xyOiAxIG9yIDANCiAqIEByZXR1cm4gbm9uZQ0KICovDQp2b2lkIHBjcl9wd3JfcmVzZXRfY3RybF9ob3N0X3JzdF9zZXRfY2xyKHVpbnQ4X3Qgc2V0X2Nscik7DQoNCi8qKiBTZXRzIHRoZSBTT0ZUIFNZUyBSRVNFVCBiaXQgdG8gMQ0KKiBAcGFyYW0gbm9uZQ0KICogQHJldHVybiBub25lDQogKi8NCnZvaWQgcGNyX3N5c3RlbV9yZXNldF9zZXQodm9pZCk7DQoNCi8qKiBXcml0ZXMgdG8gdGhlIFBLRSBDbG9jayByZWdpc3Rlcg0KKiBAcGFyYW0gY2xvY2sgdmFsdWUNCiAqIEByZXR1cm4gbm9uZQ0KICovDQp2b2lkIHBjcl9wa2VfY2xvY2tfd3JpdGUodWludDhfdCBwa2VfY2xrX3ZhbCk7DQoNCi8qKiBSZWFkcyB0aGUgUEtFIGNsb2NrIHJlZ2lzdGVyDQoqIEBwYXJhbSBub25lDQogKiBAcmV0dXJuIGNsb2NrIHZhbHVlDQogKi8NCnVpbnQ4X3QgcGNyX3BrZV9jbG9ja19yZWFkKHZvaWQpOw0KDQovKiogV3JpdGVzIHRvIHRoZSBPU0MgY2FsIHJlZ2lzdGVyDQoqIEBwYXJhbSBjYWxpYnJhdGlvbiB2YWx1ZTogMSBvciAwDQogKiBAcmV0dXJuIG5vbmUNCiAqLw0Kdm9pZCBwY3Jfb3NjX2NhbF93cml0ZSh1aW50OF90IHBrZV9jbGtfdmFsKTsNCg0KLyoqIFJlYWRzIHRoZSBvc2MgY2FsIHJlZ2lzdGVyDQoqIEBwYXJhbSBub25lDQogKiBAcmV0dXJuIGNhbCB2YWx1ZQ0KICovDQp1aW50OF90IHBjcl9vc2NfY2FsX3JlYWQodm9pZCk7DQoNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyogUGVyaXBoZXJhbCBGdW5jdGlvbiAtIEZ1bmN0aW9ucyB0byBwcm9ncmFtIGFuZCByZWFkIDMyLWJpdCB2YWx1ZXMgICAgICAqDQogKiBmcm9tIFBDUiBSZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCiAvKiogV3JpdGUgMzItYml0IHZhbHVlIGluIHRoZSBQQ1IgUmVnaXN0ZXINCiAqIEBwYXJhbSBwY3JfcmVnX2lkIC0gcGNyIHJlZ2lzdGVyIGlkIA0KICogQHBhcmFtIHZhbHVlIC0gMzItYml0IHZhbHVlDQogKi8NCnZvaWQgcF9wY3JfcmVnX3dyaXRlKHVpbnQ4X3QgcGNyX3JlZ19pZCwgdWludDMyX3QgdmFsdWUpOw0KDQovKiogUmVhZHMgMzItYml0IHZhbHVlIGZyb20gdGhlIFBDUiBSZWdpc3Rlcg0KICogQHBhcmFtIHBjcl9yZWdfaWQgLSBwY3IgcmVnaXN0ZXIgaWQgDQogKiBAcmV0dXJuIHZhbHVlIC0gMzItYml0IHZhbHVlDQogKi8NCnVpbnQzMl90IHBfcGNyX3JlZ19yZWFkKHVpbnQ4X3QgcGNyX3JlZ19pZCk7DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qIFBlcmlwaGVyYWwgRnVuY3Rpb24gLSBGdW5jdGlvbnMgdG8gc2V0LCBjbHIgYW5kIGdldCBiaXRzIGluICAgICAgICAgICAgKg0KICogUENSIFJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIA0KICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KIC8qKiBTZXRzIGJpdHMgaW4gYSBQQ1IgUmVnaXN0ZXINCiAqIEBwYXJhbSBwY3JfcmVnX2lkIC0gcGNyIHJlZ2lzdGVyIGlkIA0KICogQHBhcmFtIGJpdF9tYXNrIC0gQml0IG1hc2sgb2YgYml0cyB0byBzZXQgDQogKi8NCnZvaWQgcF9wY3JfcmVnX3NldCh1aW50OF90IHBjcl9yZWdfaWQsIHVpbnQzMl90IGJpdF9tYXNrKTsNCg0KLyoqIENsZWFycyBiaXRzIGluIGEgUENSIFJlZ2lzdGVyDQogKiBAcGFyYW0gcGNyX3JlZ19pZCAtIHBjciByZWdpc3RlciBpZCANCiAqIEBwYXJhbSBiaXRfbWFzayAtIEJpdCBtYXNrIG9mIGJpdHMgdG8gY2xlYXIgDQogKi8NCnZvaWQgcF9wY3JfcmVnX2Nscih1aW50OF90IHBjcl9yZWdfaWQsIHVpbnQzMl90IGJpdF9tYXNrKTsNCg0KLyoqIFJlYWQgYml0cyBpbiBhIFBDUiBSZWdpc3Rlcg0KICogQHBhcmFtIHBjcl9yZWdfaWQgLSBwY3IgcmVnaXN0ZXIgaWQgDQogKiBAcGFyYW0gYml0X21hc2sgLSBCaXQgbWFzayBvZiBiaXRzIHRvIHJlYWQgDQogKiBAcmV0dXJuIHZhbHVlIC0gMzItYml0IHZhbHVlDQogKi8NCnVpbnQzMl90IHBfcGNyX3JlZ19nZXQodWludDhfdCBwY3JfcmVnX2lkLCB1aW50MzJfdCBiaXRfbWFzayk7DQoNCi8qKiBTZXRzIG9yIENsZWFycyBiaXRzIGluIGEgUENSIFJlZ2lzdGVyIC0gSGVscGVyIEZ1bmN0aW9uDQogKiBAcGFyYW0gcGNyX3JlZ19pZCAtIHBjciByZWdpc3RlciBpZCANCiAqIEBwYXJhbSBiaXRfbWFzayAtIEJpdCBtYXNrIG9mIGJpdHMgdG8gc2V0IG9yIGNsZWFyDQogKiBAcGFyYW0gc2V0X2Nscl9mbGFnIC0gRmxhZyB0byBzZXQgKDEpIG9yIGNsZWFyICgwKSBiaXRzIGluIHRoZSBQQ1IgUmVnaXN0ZXINCiAqLw0Kdm9pZCBwX3Bjcl9yZWdfdXBkYXRlKHVpbnQ4X3QgcGNyX3JlZ19pZCwgdWludDMyX3QgYml0X21hc2ssIHVpbnQ4X3Qgc2V0X2Nscl9mbGFnKTsNCgkNCi8vRnVuY3Rpb25zIHRvIG9wZXJhdGUgb24gU3lzdGVtIFNsZWVwIENvbnRyb2wgUmVnaXN0ZXIJDQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qIFBlcmlwaGVyYWwgRnVuY3Rpb24gLSBGdW5jdGlvbnMgdG8gb3BlcmF0ZSBvbiBTeXN0ZW0gU2xlZXAgQ29udHJvbCAgICAgKg0KICogUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIA0KICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyoqIFdyaXRlcyByZXF1aXJlZCBzbGVlcCBtb2RlIGluIFN5c3RlbSBTbGVlcCBDb250cm9sIFJlZ2lzdGVyDQogKiBAcGFyYW0gc2xlZXBfdmFsdWUgLSBTeXN0ZW0gU2xlZXAgY29udHJvbCB2YWx1ZSAtIFtEMiwgRDEsIEQwXQ0KICovDQp2b2lkIHBfcGNyX3N5c3RlbV9zbGVlcF9jdHJsX3dyaXRlKHVpbnQ4X3Qgc2xlZXBfdmFsdWUpOw0KDQovKiogUmVhZHMgdGhlIFN5c3RlbSBTbGVlcCBDb250cm9sIFBDUiBSZWdpc3Rlcg0KICogQHJldHVybiB2YWx1ZSAtIGJ5dGUgMCBvZiB0aGUgc3lzdGVtIHNsZWVwIGNvbnRyb2wgUENSIHJlZ2lzdGVyDQogKi8NCnVpbnQ4X3QgcF9wY3Jfc3lzdGVtX3NsZWVwX2N0cmxfcmVhZCh2b2lkKTsNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyogUGVyaXBoZXJhbCBGdW5jdGlvbiAtIEZ1bmN0aW9uIHRvIHByb2dyYW0gdG8gQ0xLIERpdmlkZSBWYWx1ZSAgICAgICAgICAqIA0KICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KIC8qKiBXcml0ZXMgdGhlIGNsb2NrIGRpdmlkZSB2YWx1ZSBpbiB0aGUgUHJvY2Vzc29yIENsb2NrIENvbnRyb2wgUmVnaXN0ZXINCiAqIEBwYXJhbSBjbGtfZGl2aWRlX3ZhbHVlIC0gY2xrIGRpdmlkZSB2YWx1ZXMsIHZhbGlkIHZhbHVlcyBpbiBlbnVtIFBST0NFU1NPUl9DTEtfRElWSURFX1ZBTFVFDQogKi8NCnZvaWQgcF9wY3JfcHJvY2Vzc29yX2Nsa19jdHJsX3dyaXRlKHVpbnQ4X3QgY2xrX2RpdmlkZV92YWx1ZSk7DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qIFBlcmlwaGVyYWwgRnVuY3Rpb24gLSBGdW5jdGlvbiB0byBwcm9ncmFtIHRoZSBTbG93IENsb2NrIENvbnRyb2wgICAgICAgKg0KICogUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQogLyoqIFdyaXRlIHRoZSBzbG93IGNsb2NrIGRpdmlkZSB2YWx1ZSBpbiB0aGUgU2xvdyBDbG9jayBDb250cm9sIFJlZ2lzdGVyDQogKiBAcGFyYW0gc2xvd19jbGtfZGl2aWRlX3ZhbHVlIC0gc2xvdyBjbGsgZGl2aWRlIHZhbHVlDQogKi8NCnZvaWQgcF9wY3Jfc2xvd19jbGtfY3RybF93cml0ZSh1aW50MTZfdCBzbG93X2Nsa19kaXZpZGVfdmFsdWUpOw0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQovKiBQZXJpcGhlcmFsIEZ1bmN0aW9uIC0gRnVuY3Rpb24gdG8gcmVhZCB0aGUgT3NjaWxsYXRvciBMb2NrIFN0YXR1cyAgICAgICovIA0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyoqIFJlYWRzIHRoZSBPc2NpbGxhdG9yIExvY2sgc3RhdHVzIGJpdCBpbiB0aGUgT3NjaWxsYXRvciBJRCBSZWdpc3Rlcg0KICogQHJldHVybiAxIGlmIE9zY2lsbGF0b3IgTG9jayBTdGF0dXMgYml0IGlzIHNldCwgZWxzZSAwDQogKi8NCnVpbnQ4X3QgcF9wY3Jfb3NjaWxsYXRvcl9sb2NrX3N0c19nZXQodm9pZCk7DQoNCi8qKiBSZWFkcyB0aGUgT3NjaWxsYXRvciBJRCBSZWdpc3Rlcg0KICogQHJldHVybiBvc2NpbGxhdG9yIElEIHZhbHVlDQogKi8NCnVpbnQxNl90IHBfcGNyX29zY2lsbGF0b3JfaWRfcmVnX3JlYWQodm9pZCk7DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qIFBlcmlwaGVyYWwgRnVuY3Rpb24gLSBGdW5jdGlvbnMgdG8gcmVhZCB2YXJpb3VzIHBvd2VyIHN0YXR1cyBpbiAgICAgICAgKg0KICogUG93ZXIgUmVzZXQgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCiAvKiogUmVhZHMgdGhlIFZDQyBSZXNldCBTdGF0dXMgYml0IA0KICogICAgICAgIGluIHRoZSBQb3dlciBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCiAqIEByZXR1cm4gMSBpZiBWQ0MgUmVzZXQgU3RhdHVzIGJpdCBpcyBzZXQsIGVsc2UgMA0KICovDQp1aW50OF90IHBfcGNyX3B3cl9yZXNldF92Y2NfcmVzZXRfc3RzX2dldCh2b2lkKTsNCg0KLyoqIFJlYWRzIHRoZSBIb3N0IFJlc2V0IFN0YXR1cyBiaXQgDQogKiAgICAgICAgaW4gdGhlIFBvd2VyIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KICogQHJldHVybiAxIGlmIEhvc3QgUmVzZXQgU3RhdHVzIGJpdCBpcyBzZXQsIGVsc2UgMA0KICovDQp1aW50OF90IHBfcGNyX3B3cl9yZXNldF9ob3N0X3Jlc2V0X3N0c19nZXQodm9pZCk7DQoNCi8qKiBSZWFkcyB0aGUgVkJBVCBSZXNldCBTdGF0dXMgYml0IA0KICogICAgICAgIGluIHRoZSBQb3dlciBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCiAqIEByZXR1cm4gMSBpZiBWQkFUIFJlc2V0IFN0YXR1cyBiaXQgaXMgc2V0LCBlbHNlIDANCiAqLw0KdWludDhfdCBwX3Bjcl9wd3JfcmVzZXRfdmJhdF9yZXNldF9zdHNfZ2V0KHZvaWQpOw0KDQovKiogQ2xlYXJzIHRoZSBWQkFUIFJlc2V0IFN0YXR1cyBiaXQgDQogKiAgICAgICAgaW4gdGhlIFBvd2VyIFJlc2V0IFN0YXR1cyBSZWdpc3RlciANCiAqLw0Kdm9pZCBwX3Bjcl9wd3JfcmVzZXRfdmJhdF9yZXNldF9zdHNfY2xyKHZvaWQpOw0KDQovKiogUmVhZHMgdGhlIFZUUiBSZXNldCBTdGF0dXMgYml0IA0KICogICAgICAgIGluIHRoZSBQb3dlciBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCiAqIEByZXR1cm4gMSBpZiBWQ0MxIFJlc2V0IFN0YXR1cyBiaXQgaXMgc2V0LCBlbHNlIDANCiAqLw0KdWludDhfdCBwX3Bjcl9wd3JfcmVzZXRfdnRyX3Jlc2V0X3N0c19nZXQodm9pZCk7DQoNCi8qKiBDbGVhcnMgdGhlIFZUUiBSZXNldCBTdGF0dXMgYml0IA0KICogICAgICAgIGluIHRoZSBQb3dlciBSZXNldCBTdGF0dXMgUmVnaXN0ZXIgDQogKi8NCnZvaWQgcF9wY3JfY2hpcF9zdWJzeXN0ZW1fdnRyX3Jlc2V0X3N0c19jbHIodm9pZCk7DQoNCi8qKiBSZWFkcyB0aGUgMzJLX0FDVElWRSBzdGF0dXMgYml0IA0KICogICAgICAgIGluIHRoZSBDaGlwIFN1YnN5c3RlbSBQb3dlciBSZXNldCBTdGF0dXMgUmVnaXN0ZXINCiAqIEByZXR1cm4gMSBpZiAzMl9BQ1RJVkUgYml0IGlzIHNldCwgZWxzZSAwDQogKi8NCnVpbnQ4X3QgcF9wY3JfcHdyX3Jlc2V0XzMyS19hY3RpdmVfc3RzX2dldCh2b2lkKTsNCg0KLyoqIFJlYWRzIHRoZSBQQ0lDTEtfQUNUSVZFIHN0YXR1cyBiaXQgDQogKiAgICAgICAgaW4gdGhlIFBvd2VyIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KICogQHJldHVybiAxIGlmIENJQ0xLX0FDVElWRSBiaXQgaXMgc2V0LCBlbHNlIDANCiAqLw0KdWludDhfdCBwX3Bjcl9wd3JfcmVzZXRfcGNpY2xrX2FjdGl2ZV9zdHNfZ2V0KHZvaWQpOw0KDQovKiogUmVhZHMgdGhlIEVTUElDTEtfQUNUSVZFIHN0YXR1cyBiaXQgDQogKiAgICAgICAgaW4gdGhlIFBvd2VyIFJlc2V0IFN0YXR1cyBSZWdpc3Rlcg0KICogQHJldHVybiAxIGlmIEVTUElDTEtfQUNUSVZFIGJpdCBpcyBzZXQsIGVsc2UgMA0KICovDQp1aW50OF90IHBfcGNyX3B3cl9yZXNldF9lc3BpY2xrX2FjdGl2ZV9zdHNfZ2V0KHZvaWQpOw0KDQovKiogUmVhZHMgdGhlIFBvd2VyIHN0YXR1cyByZWcNCiAqIEByZXR1cm4gUG93ZXIgU3RhdHVzIFJlZyB2YWx1ZQ0KICovDQp1aW50MTZfdCBwX3Bjcl9wd3JfcmVzZXRfc3RzX2dldCh2b2lkKTsNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLyogUGVyaXBoZXJhbCBGdW5jdGlvbiAtIEZ1bmN0aW9ucyBmb3IgUG93ZXIgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAgICAgICAqLyANCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCg0KLyoqIFJlYWRzIHRoZSBQb3dlciBSZXNldCBDb250cm9sIFJlZ2lzdGVyDQogKiBAcmV0dXJuIFBvd2VyIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgdmFsdWUNCiAqLw0KdWludDE2X3QgcF9wY3JfcHdyX3Jlc2V0X2N0cmxfcmVhZCh2b2lkKTsNCg0KLyoqIFNldCB0aGUgUFdSX0lOViBiaXQgaW4gdGhlIFBvd2VyIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXINCiAqIEBwYXJhbSBzZXRfY2xyIHZhbHVlIDEgb3IgMA0KICogQHJldHVybiBub25lDQogKi8NCnZvaWQgcF9wY3JfcHdyX3Jlc2V0X2N0cmxfcHdyX2ludl9zZXRfY2xyKHVpbnQ4X3Qgc2V0X2Nscik7DQoNCi8qKiBTZXQgdGhlIEhPU1QgUkVTRVQgU0VMRUNUIGJpdCBpbiB0aGUgUG93ZXIgUmVzZXQgQ29udHJvbCBSZWdpc3Rlcg0KICogQHBhcmFtIHNldF9jbHIgdmFsdWUgMSBvciAwDQogKiBAcmV0dXJuIG5vbmUNCiAqLw0Kdm9pZCBwX3Bjcl9wd3JfcmVzZXRfY3RybF9ob3N0X3JzdF9zZXRfY2xyKHVpbnQ4X3Qgc2V0X2Nscik7DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qIFBlcmlwaGVyYWwgRnVuY3Rpb24gLSBGdW5jdGlvbnMgZm9yIFN5c3RlbSBSZXNldCBSZWdpc3RlciAgICAgICAqLyANCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi8qKiBTZXQgdGhlIFNPRlRfU1lTX1JFU0VUIGJpdCBpbiB0aGUgU3lzdGVtIFJlc2V0IFJlZ2lzdGVyDQogKiBAcGFyYW0gbm9uZQ0KICogQHJldHVybiBub25lDQogKi8NCnZvaWQgcF9wY3Jfc3lzdGVtX3Jlc2V0X3NldCh2b2lkKTsNCg0KDQovKiogU2V0IHRoZSB2YWx1ZSBpbiBQS0UgQ0xPQ0sgUmVnaXN0ZXINCiAqIEBwYXJhbSBQS0UgQ2xvY2sgdmFsdWUgDQogKiBAcmV0dXJuIG5vbmUNCiAqLw0Kdm9pZCBwX3Bjcl9wa2VfY2xvY2tfd3JpdGUodWludDhfdCBwa2VfY2xrX3ZhbCk7DQoNCi8qKiBSZWFkIHRoZSB2YWx1ZSBpbiBQS0UgQ0xPQ0sgUmVnaXN0ZXINCiAqIEBub25lIA0KICogQHJldHVybiBQS0UgQ2xvY2sgdmFsdWUgDQogKi8NCnVpbnQ4X3QgcF9wY3JfcGtlX2Nsb2NrX3JlYWQodm9pZCk7DQoNCi8qKiBTZXQgdGhlIHZhbHVlIGluIE9zY2lsbGF0b3IgY2FsaWJyYXRpb24gUmVnaXN0ZXINCiAqIEBwYXJhbSBPc2NpbGxhdG9yIGNhbGlicmF0aW9uIHZhbHVlIA0KICogQHJldHVybiBub25lDQogKi8NCnZvaWQgcF9wY3Jfb3NjX2NhbF93cml0ZSh1aW50OF90IG9zY19jYWxfdmFsKTsNCg0KLyoqIFJlYWQgdGhlIHZhbHVlIGluIE9zYyBjYWwgUmVnaXN0ZXINCiAqIEBub25lIA0KICogQHJldHVybiBPc2MgY2FsIHZhbHVlIA0KICovDQp1aW50OF90IHBfcGNyX29zY19jYWxfcmVhZCh2b2lkKTsNCg0KI2VuZGlmIC8vICNpZm5kZWYgX1BDUl9IDQovKiBlbmQgcGNyLmggKi8NCi8qKiAgIEB9DQogKi8NCg0KDQoNCg==